Jaime Garcia pitched eight innings of four-hit ball and helped himself with an RBI single for the St. Louis Cardinals, who ended the Kansas City Royals' four-game winning streak with a 4-0 victory in the opener of a high-profile weekend interleague series on Friday night.

Jon Jay snapped a 2-for-24 slump this month with a two-out RBI triple in the second off Yordano Ventura (3-6), and Garcia followed with his 12th career RBI on an opposite-field single to left.

The Cardinals are 40-21 overall and 23-7 at home, both major league bests. They got a huge outing from Garcia (2-3), so far a success story off thoracic outlet surgery.

Ventura lasted just three innings for the second straight start, removed as a precaution due to weakness in his pitching hand. In those two starts, he's allowed six earned runs.

Garcia struck out six with no walks, fanning Omar Infante to open the eighth for the 500th strikeout of his career, and retired the side in order five times. The lefty lowered his ERA to 2.06 and hasn't issued a walk in 30 innings.

Garcia has made five starts — the Cardinals have been shut out in three of them — after totaling 16 starts from 2013-14. He'd been 0 for 8 with four strikeouts before the hit.

The Cardinals added two runs in the eighth on an RBI triple by Randal Grichuk, a ball that right fielder Alex Rios whiffed on, and Jay's sacrifice fly.

The Royals got two infield hits with two outs in the sixth but Garcia struck out cleanup man Eric Hosmer on an off-speed pitch that ended up at shoe-top level.