Miles Mikolas pitched a four-hitter for his first career shutout and Tyler O'Neill homered for the third straight game and drove in four runs, leading the St. Louis Cardinals to a 6-0 victory over the Kansas City Royals on Monday night.

Mikolas needed just 109 pitches to remain unbeaten and struck out a career-high nine. The Cardinals won for the third time in four games and beat the Royals for the fifth straight time.

Mikolas (6-0) retired 13 of the final 14 batters he faced. The only trouble he faced came after he allowed back-to-back singles to start the third, but got out of it with the help of a double play.

O'Neill's three-run homer, his first career to the opposite field, capped a four-run third in which the Cardinals strung together five two-out hits. O'Neill's double in the fifth scored Marcell Ozuna, giving the Cardinals a 5-0 lead.

Ozuna proceeded O'Neill's blast with an RBI single, breaking a 0-for-22 slump. Ozuna reached three times and had a pair of hits.

Matt Carpenter homered in the seventh as part of a three-hit night. Carpenter is hitting .542 (13 for 24) in his last six games, including seven doubles, to raise his average to .210. It is the first time since April 7 that Carpenter's average rose north of .200.

Royals starter Ian Kennedy (1-5) gave up five runs, all with two outs, in 5 2/3 innings. He has lost his last five decisions and hasn't gotten a win since April 7.

The Royals have lost eight of their last nine.

TRAINING ROOM

Royals: RHP Justin Grimm (lower back stiffness) is on a rehab assignment at Triple-A Omaha.

Cardinals: SS Greg Garcia left the game in the sixth with lower back tightness and RHP Carlos Martinez (right lat strain) threw long toss for the first time.

UP NEXT

Cardinals RHP Luke Weaver (3-3, 4.37 ERA) will look to build on his strongest outing of the season when he takes the mound against the Royals and Jason Hammel (0-5, 6.28 ERA) in the second game of the three-game series. Weaver allowed one run in a season-high seven innings in a 6-2 loss to Philadelphia on Thursday. Hammel, winless in his last 13 starts, is seeking his first victory since Sept. 6, 2017.