The Cardinals also received minor league left-hander Corey Littrell and cash considerations from the Red Sox, who parted with Lackey as part of a massive overhaul prior to Thursday's non-waiver trade deadline.
The Red Sox dealt starter Jake Peavy to the Giants last week and made a blockbuster trade earlier Thursday morning, sending All-Star left-hander Jon Lester and outfielder Jonny Gomes to the Athletics for slugger Yoenis Cespedes.
While the Red Sox are rebuilding their roster, the Cardinals are reloading a rotation that has been short-handed due to injuries to Michael Wacha and Jaime Garcia.
One day after acquiring former All-Star right-hander Justin Masterson from the Indians, St. Louis further strengthened its rotation by adding the 35-year-old Lackey, who went 11-7 with a 3.60 ERA in 21 starts this season -- his fourth with the Red Sox.
Lackey will make just $500,000 in 2015 due to a unique clause in his five-year, $82.5 million contract that tacked on an extra season if he underwent Tommy John surgery at any point. Lackey had the procedure in 2011 and missed the entire 2012 season.
The Cardinals entered Thursday just 2 ½ games behind the first-place Milwaukee Brewers in the NL Central.
Craig was an All-Star in 2013 and one of St. Louis' top hitters over the past few seasons. But the 30-year-old Craig struggled mightily this season, batting a career-low .237 with seven home runs and 44 RBIs in 97 games.
The departure of Craig likely means that promising 22-year-old Oscar Taveras likely will see more time in right field for the Cardinals.
Kelly, 26, is 2-2 with a 4.37 ERA in seven starts this season. He missed nearly three months with a hamstring injury and has struggled in four starts since returning from the disabled list.
Kelly figures to join a completely overhauled rotation in Boston, where the Red Sox will be looking for replacements for Lester, Lackey and Peavy.
ESPNBoston.com's Gordon Edes and ESPN Insider Jim Bowden contributed to this report.
Red Sox Deal Lackey
Tim Kurkjian breaks down the deal that sends Red Sox starter John Lackey to the Cardinals.