The Royals (29-31) chipped away for all three runs off Michael Wacha in the sixth inning.
Alcides Escobar doubled and scored on a Nori Aoki double. Aoki came in on an Eric Hosmer single, and Salvador Perez drove the first baseman in for the go-ahead run.
The sixth inning push put Yordano Ventura in line for his first win since April 25th. The rookie pitcher is now 3-5 on the season after limiting St. Louis (31-30) to two earned runs on seven hits and one strikeout.
Wacha matched Ventura in nearly every category: six innings of work, three earned runs on seven hits and one strikeout.
The Cardinals first crossed the plate on a Peter Bourjos triple in the second, and made it a two run lead on a Matt Carpenter RBI single.
Greg Holland locked up his 17th save of the season for Kansas City striking out the side to close the game.
The Royals homestand continues with the Yankees in Kansas City this weekend.
The Cardinals head north of the border for a series against the Toronto Blue Jays.