The deal, which includes $2 million in possible escalators based on games played at catcher in 2021, brings Castro back to Houston, where he spent his first six major league seasons and was an All-Star in 2013.
Castro finished the 2020 season with the San Diego Padres following a trade by the Los Angeles Angels in August. The 33-year-old appeared in 27 games between the two teams during the shortened season, hitting .188 with two home runs and nine RBIs.
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.