Matt Holliday had three hits and the NL Central leaders took full advantage of a crucial error by new Mets first baseman Daniel Murphy, who was shifted over from second after slumping Ike Davis got demoted to the minors Sunday.
David Freese extended his career-high hitting streak to 20 games, longest in the National League this season, and Wacha (1-0) even knocked in a run with a groundout for his first RBI.
Omar Quintanilla homered for the Mets, who gave up seven unearned runs and lost for the seventh time in eight games since a season-best five-game winning streak that included a four-game sweep of the Subway Series against the New York Yankees.
Jeremy Hefner (1-6) had a 2-1 lead until St. Louis scored five unearned runs in the fifth inning, capped by Craig's fifth homer. The outburst began when Jon Jay reached on a leadoff grounder to Murphy, who knocked it down on his backhand but rushed a high, off-balance throw to Hefner covering first.
Pete Kozma doubled and Hefner slammed down the rosin bag at the back of the mound after Wacha's grounder to shortstop tied the score. Matt Carpenter walked, Yadier Molina put the Cardinals ahead with an RBI groundout and Holliday reached on an infield single before Craig drove an 0-1 pitch to left-center for a 6-2 advantage.
At his best in clutch situations, Craig came in batting .400 with runners in scoring position -- the same average he had last year.
St. Louis, which owns baseball's best record at 42-22, added two in the seventh after Kirk Nieuwenhuis misplayed a deep fly to right for an error. Holliday had an RBI single and reliever Josh Edgin, just recalled from Triple-A Las Vegas, walked Jay with the bases loaded to force in another run.
Shane Robinson, who replaced Craig in right field for defense, homered in the ninth off David Aardsma to make it 9-2. Craig made a painful-looking catch in the third when he fell at the base of the wall in front of the 375-foot sign, where his neck and the back of his head snapped back and hit the fence.
Wacha, drafted 19th overall a year ago out of Texas A&M, was making his third major league start after an impressive outing against Kansas City and a shaky one against Arizona.
Pitching on the road for the first time, he gave up a home run to his second batter and walked three in a 37-pitch first inning. Marlon Byrd had a sacrifice fly and the bases were loaded when Nieuwenhuis hit a grounder up the middle that appeared headed for center field and a two-run single that would have given New York a 4-0 lead.
Kozma, however, was positioned perfectly at shortstop and made a nice play to end the inning.
It was the sort of play that often goes unnoticed, but it stopped the Mets in their tracks. The 21-year-old Wacha did not walk another batter and yielded five hits over six solid innings before Randy Choate and Keith Butler finished up.
New York did not manage a hit after Jordany Valdespin's leadoff single in the fifth. With Davis sent down, Valdespin is getting an opportunity to play regularly at second base, his natural position.
NOTES: Cardinals RF Carlos Beltran, a former Mets star, was rested to give him consecutive days off. The team was off Monday and Beltran traveled home to attend commencement ceremonies for the first graduating class of his Carlos Beltran Baseball Academy in Puerto Rico. "We're happy that he was able to make that happen, and the Cardinals really tried to help out," manager Mike Matheny said. "It was a lot of travel. What he's doing down there is good for the game, good for the community." ... Matheny said RHP Jake Westbrook (elbow inflammation) is scheduled to come off the disabled list and start Friday night in Miami. ... Mets RHP Matt Harvey (5-0, 2.10 ERA) threw his bullpen session and is on target to make his next scheduled start in the series finale Thursday afternoon against RHP Adam Wainwright (9-3, 2.34). Harvey left Saturday's start after seven effective innings with tightness in his lower back.