Castro was the first pick in the 2005 Rule 5 draft by the Kansas City Royals on December 8, 2005. He was then traded to the Texas Rangers for second basemanEsteban Germán. Castro made his major league debut on April 6, 2006, for the Rangers against the Detroit Tigers, pitching 3+2⁄3 innings and allowing one earned run. He appeared in 4 games for the Rangers, and had an ERA of 4.32 in 8+1⁄3 innings pitched.
Philadelphia Phillies
Castro was traded to the Philadelphia Phillies on June 29, 2006, in exchange for Daniel Haigwood. He pitched in 16 games for the Phillies during the remainder of the season, recording a 1.54 ERA.
In 2007, Castro made 10 appearances for the Phillies, including making his first career Major League start, on August 23 against the Los Angeles Dodgers. He had a 6.00 ERA that season for the club, while also pitching in 11 games for the Double-A Reading Phillies and 21 games for the Triple-A Ottawa Lynx.
Toronto Blue Jays
Castro was traded to the Toronto Blue Jays on September 29, 2008, to complete a trade for Matt Stairs. With the Blue Jays organization, he spent the season with the Triple-A Las Vegas 51s, compiling a 7–6 record and 4.49 ERA in 25 starts.
Boston Red Sox
Castro signed a minor league contract with the Boston Red Sox on December 7, 2009.[1] He spent the season with the Triple-A Pawtucket Red Sox, where he was 7–9 with a 4.93 ERA in 31 appearances (15 starts).
On November 22, 2010, Castro signed a minor league contract with the Seattle Mariners organization.[3][4] He spent that season with the Tacoma Rainiers, where he was 5–4 with a 3.63 ER in 24 appearances (12 starts).
On November 23, 2012, Castro was reported to sign a minor league contract with the San Francisco Giants.[5] However, that report was in error, as he was subsequently signed by the Los Angeles Dodgers to a minor league contract on December 19.[6] The Dodgers released him in March 2013.