Kansas City took a 2-0 lead against Guardians rookie left-hander Logan Allen in the top of the second inning
Cleveland third baseman Jose Ramirez booted Matt Duffy's grounder, and Duffy advanced to third on Kyle Isbel's single to right. Edward Olivares followed with a double to the gap in left-center, driving in both runners.
Allen recovered to retire the next 12 Guardians in order until Bobby Witt Jr. singled to open the sixth inning. Perez followed that up by turning on an 87 mph cutter and smashing his 17th homer of the season, a 420-blast over fence in the left-center, for a 4-0 lead
Meanwhile, the Cleveland offense had scuffled against Yarbrough.
In the bottom of the sixth, Amed Rosario hit a leadoff double and scored on Josh Bell's two-out single, cutting the gap to 4-1.
Garcia restored the Royals' four-run cushion in the top of the seventh by drilling a line-drive, opposite-field homer, his fourth long ball of the season, over the short porch in right
The Guardians struck back in the bottom of the inning against reliever Jose Cuas, who hadn't given up a run in his past eight outings. David Fry walked, Will Brennan doubled, and Myles Straw singled to center to score both runners, pulling Cleveland within 5-3
Carlos Hernandez pitched a scoreless eighth for the Royals, but the Guardians brought the winning run to the plate against Scott Barlow in the ninth. Barlow got Steven Kwan to ground out to first with two runners on to record his 12th save
Yarbrough (3-5) scattered six hits over six innings, allowing just one run and no walks while striking out one.
Allen (4-3) gave up seven hits in his seven innings without a walk and struck out five, but he was charged with five runs (four earned).
Witt and Isbel each had two hits for the Royals. Amed Rosario had three of Cleveland's 10 hits, while Brennan and Straw had two hits apiece
--Field Level Media