Financial terms were not disclosed but the deal is worth $1.5 million, according to multiple reports.
Tejada, 26, was due $3 million by the Mets in 2016 before being released Wednesday after he cleared waivers. The Mets were responsible for only one-sixth of the $3 million salary.
The Cardinals needed another infielder after losing shortstop Jhonny Peralta to a thumb injury in a spring training game. Peralta underwent surgery to repair a torn ligament in his left thumb and will be out for a few months to start the season.
"He adds more flexibility to our club and allows us to not feel like we're forced to push any one person," general manager John Mozeliak said. "Clearly, he's an experienced shortstop that played on a championship-caliber team last year. That's ultimately our goal, and I think he'll fit in nicely with us."
Tejada was batting .278 (5-for-18) with a home run, triple, double and five RBIs in eight spring training games before his release.
Last season, Tejada batted .261 with three home runs, 23 doubles and 28 RBIs in 116 games for the Mets.
The 5-foot-11, 198-pound Panama native made his first career postseason appearance in the 2015 National League Division Series, but he suffered a broken right fibula in a collision on a slide from Chase Utley of the Los Angeles Dodgers during Game 2.
Tejada owns a career .255 batting average with 99 doubles, 10 homers and 148 RBIs in six seasons with the Mets.
Over the course of his major league career, the middle infielder has appeared defensively in 431 games at shortstop, 118 at second base and 19 at third base.
Originally signing with the Mets as a non-drafted free agent in 2006 as a 16-year-old, Tejada made his major league debut on April 8, 2010 when he was 20.
"They're searching for a championship, and that's something that you look for as a player," Tejada said Saturday, speaking through a translator after completing his physical at the Cardinals' spring training complex in Jupiter, Fla. "I'm just here to play and do whatever they need me to do."