The contract is worth $7 million, sources confirmed to ESPN on Thursday.
The deal, which includes $2 million in possible escalators based on games played at catcher in 2021, brings Castro back to Houston, where he was drafted in the first round of the 2008 amateur draft, spent his first six major league seasons and was an All-Star in 2013.
The 33-year-old gives Houston another veteran catcher to play behind starter Martin Maldonado. Castro hit hit .232 with 62 home runs and 212 RBIs over 617 games during his first stint in Houston.
Castro finished the 2020 season with the San Diego Padres following a trade by the Los Angeles Angels in August. He appeared in 27 games between the two teams during the shortened season, hitting .188 with two home runs and nine RBIs. He spent the previous three seasons with the Minnesota Twins, where he played 208 games and hit .229.
He has been a below-average hitter throughout his career, with a .230 batting average, but has been lauded for his pitch-framing and blocking skills.
The Athletic first reported on the agreement, while USA Today first reported the terms of the deal.
Information from The Associated Press was used in this report.