James Shields pushed away his breakfast plate of toast and a halved avocado. He leaned back in his chair, swallowed a gulp of orange juice and waited for a dosage of Claritin to kick in. “I can’t even breathe right now,” he said a few hours before anchoring a 2-1 victory over the Yankees at Kauffman Stadium.

An onset of allergies affects Shields annually, and this summer’s version arrived last week, as he attempted to rebound from his rockiest stretch of this year. Shields spent his afternoon coughing and searching for respiratory relief; his opponents also placed pressure on him.

“Shields had to grind it out again, and navigate through some choppy waters,” manager Ned Yost said. “But he made huge pitches when he needed to.”

Shields struck out eight and limited the Yankees to one run across six innings. The outcome placed the Royals (31-32) within a game of a .500 record. They will chase that benchmark in Monday’s series finale against a creaky Yankees club that has showed its age this weekend. On Sunday they failed to punish a ragged starter and went one-for-17 with runners in scoring position.

Shields scattered six hits as he combated his occasionally wayward command, his shallow lungs and his well-paid opponents. He benefited from the team’s acrobatic defense. The bullpen allowed the tying run to reach third base in the seventh and again in the ninth, but the relievers remained “clutch,” Yost said.

The offense benefited from a bunching of hits in the second. The Royals nabbed a pair of runs when a trio of two-out flares fell. Salvador Perez collected his team’s first hit by dunking a single to right. Lorenzo Cain lifted a sinker into the right-center gap for an RBI double. When Mike Moustakas looped a single to left, Shields had a two-run lead to preserve.