Yadier Molina finished with two hits, including a two-run homer, and drove in a season-high four runs as St. Louis emerged with a 6-3 decision over Kansas City in the opener of a two-game interleague series.
Allen Craig added three hits and knocked in a run, with Matt Carpenter contributing an RBI double for the Cardinals, winners in six of their last eight.
"We're playing good right now. We've got some good offense," Molina said. "Right now we're seeing the ball pretty good and finding some holes. We're showing the people that we've got a pretty good team."
Adam Wainwright (7-3) lasted eight innings, giving up 12 hits and three runs, fanning five without a walk. Edward Mujica then tossed a scoreless ninth to earn his 15th save.
Alex Gordon and Eric Hosmer each plated a run, while David Lough added four hits and scored once for the Royals, whose season-long losing skid reached six games.
"They don't call him the best in the business for nothing. I was just trying to get into big counts and help my team win," Lough said of his season-best performance, including three of his four hits against Wainwright.
James Shields (2-6) surrendered nine hits and six runs over six full frames, walking five with four strikeouts. The right-hander has dropped each of his last four starts.
In the fourth, Pete Kozma singled with one down, then Daniel Descalso and Carpenter walked ahead of a Molina sac fly which made it 5-3 for the Cards.
That lead was extended two innings later as Descalso beat out a grounder to second and then narrowly avoided a tag at the plate while coming in on Carpenter's double.
St. Louis failed to add to its advantage in the seventh when Kozma grounded out with runners on first and second, then came up empty in the next frame when Craig flied out with runners on the corners.
Wainwright remained in control, giving up hits in the sixth and eighth without trouble and retiring the side in order in the seventh.
Mujica worked around a two-out Lough single in the ninth, inducing a game- ending fly out from Alcides Escobar.
Both clubs scored in the opening frame. Carpenter began the game with a single and Molina followed with a two-run homer, but a Gordon single to plate Lough made it 2-1 in the Royals' first turn at the plate.
The trend continued two innings later, as St. Louis led 4-1 thanks to Molina's double and a Craig single, yet the hosts countered on a Wainwright wild pitch that scored Gordon and Hosmer's run-scoring base hit.
St. Louis upped its MLB-best road record to 19-9 ... Kansas City collected 13 hits, but 12 of those were singles ... The 12 hits were the most Wainwright gave up in one start since Sept. 14, 2010 against the Cubs ... Molina knocked in three in a 10-9 loss to Arizona on April 3 ... Prior to the contest, the Cards recalled pitcher Victor Marte from Triple-A Memphis and optioned pitcher Carlos Martinez to Memphis ... The game was delayed for 63 minutes at the outset due to rain.