Castro signed with the Cleveland Indians as an international free agent in July 2013.[1] He made his professional debut in 2014 with the Arizona League Indians and spent the whole season there, batting .239 with two home runs and 11 RBIs in 43 games. He played 2015 with the Mahoning Valley Scrappers, where he batted .264 with one home run, 25 RBIs and twenty stolen bases, and 2016 with the Lake County Captains and Lynchburg Hillcats, posting a combined .258 batting average with seven home runs and 49 RBIs. In 2017, Castro played for Lynchburg where he batted .290 with a career-high 11 home runs along with 58 RBIs, 19 stolen bases and a .761 OPS.[2] The Indians added him to their 40-man roster after the season.[3]
MLB.com ranked Castro as Cleveland's fifth-best prospect going into the 2018 season.[4] He opened the 2018 season with the Akron RubberDucks.
Detroit Tigers
On July 31, 2018, Castro was traded to the Detroit Tigers in exchange for Leonys Martín and Kyle Dowdy.[5] Following the trade, he split the rest of the season between the Erie SeaWolves and the Toledo Mud Hens. He opened the 2019 season back with Toledo.
On August 24, 2019, the Tigers selected Castro's contract and promoted him to the major leagues.[6] He made his major league debut that night versus the Minnesota Twins, going 2-for-4.[7] On September 22, Castro hit his first major league home run off Josh Osich of the Chicago White Sox.[8] He ended the season hitting .230 with 1 home run in 30 games.
Castro began the 2020 season at the Tigers' satellite training camp in Toledo. He was recalled to the major league club on August 13, 2020.[9] In 129 at-bats during the 2020 season, Castro hit .349 with 6 home runs and 24 RBI.
Castro made the 2021 Tigers team out of spring training and played in his first opening-day game at the major league level. After Castro experienced some defensive struggles at shortstop, manager A. J. Hinch began playing him more at second base.[10] On July 16, the Tigers demoted Castro to Triple–A Toledo. Through the All-Star break, Castro had posted a .214 batting average and 6 home runs, with a minus-10 Defensive Runs Saved rating at second base.[11] Castro was recalled to the major league roster on July 22 to replace the injured Isaac Paredes.[12] He finished the 2021 season batting .220/.273/.351 with 9 home runs, 38 RBIs, and 9 stolen bases in 125 games.
On April 6, 2022, the Tigers optioned Castro to Triple–A Toledo to start the 2022 season.[13] He was recalled to the Tigers on April 17 to replace the injured Javier Báez.[14]
On November 18, 2022, Castro was non-tendered by the Tigers and became a free agent.
Minnesota Twins
On December 30, 2022, Castro signed a minor league deal with the Minnesota Twins.[15] On March 29, 2023, the Twins selected Castro's contract, adding him to the team's Opening Day roster.[16]
He appeared in 124 games with the Twins in 2023, slashing .257/.339/.411 and posting a career-high 2.7 WAR. Castro was named to his first All-Star team in 2024.[17]