Matt LaPorta supplied a two-run double and Shin-Soo Choo chipped in a two-run single as the Indians won for the fourth time in five games.
Jack Hannahan had three hits, including an RBI double, for Cleveland.
Zach McAllister (6-8) went 6 2/3 innings to earn his first win since Aug. 11, yielding three runs on five hits and two walks.
Royals starter Luke Hochevar (8-16) was rocked for nine runs on nine hits, lasting just 4 2/3 innings.
Alex Gordon belted a two-run home run for Kansas City.