DETROIT -- James Shields was acquired two offseasons ago to pitch in games like this for Kansas City.
With the Royals trying to avoid a sweep in their biggest series in years, the 32-year-old right-hander delivered.
"You don't earn a nickname like `Big Game James' for nothing," manager Ned Yost said. "Games don't come much bigger than this."
Shields allowed two hits over seven innings in another terrific performance, and Kansas City edged Detroit 3-0 on Wednesday night to take a one-game lead over the Tigers atop the AL Central. Detroit had won the first two games of the series to pull into a virtual tie for first in the division.
The teams have a three-game series in Kansas City that starts Sept. 19.
"It's definitely a game that we needed, for sure, but I think every game from here on out is pretty crucial," Shields said. "We took a couple tough losses there, the last couple days, but we're having fun right now and enjoying the moment."
Shields (14-7) gave up a single to Ian Kinsler leading off the first. Then he picked off Kinsler - and retired every other batter he faced until another Detroit single in the seventh. The Tigers put two on that inning, but Shields worked out of the jam.
Alcides Escobar added a sacrifice fly in the ninth.
Shields was acquired in December 2012 in a trade that sent top prospect Wil Myers to Tampa Bay. Myers won Rookie of the Year honors last season, but now Shields has helped put the Royals in contention for their first postseason appearance since 1985.
"The only thing I've been telling guys is just stay relaxed and have fun," said Shields, who pitched in the postseason for Tampa Bay in 2008, 2010 and 2011. "This is why we play the game."
He came within two outs of a shutout in New York on Friday in a 1-0 win over the Yankees, and the Tigers didn't fare any better against him. Shields struck out eight and walked one on Wednesday, throwing 98 pitches. Torii Hunter's comebacker hit Shields in the back of his right leg in the first, but the Kansas City starter was able to continue.
The game was delayed 42 minutes by rain at the start, and in the fourth it was raining hard enough to send fans toward the concourse, but there were no more delays.
"That's pretty typical of him. He goes out and he pitches like that for 200 innings every year. That's what he does," Kinsler said. "Rick threw the ball really well, but we didn't create any offense, and that's the game."
Porcello struck out four of the first five Kansas City batters. He allowed two runs and seven hits in 6 2-3 innings, striking out seven without a walk.
Royals: All-Star closer Greg Holland sat out again, despite the tight score in the late innings. He hasn't pitched since Sept. 3 because of a triceps issue.
"Greg felt fine today," Yost said. "My whole mindset was, I was going to go up to the point where Greg said, `OK, I don't feel anything' - and then give him another day."
Tigers: RHP Joakim Soria (left oblique strain) was activated from the disabled list before the game. He allowed a run in the ninth. ... Left-handed reliever Phil Coke left in the eighth with a muscle spasm in his lower back after being unable to field Hosmer's bunt.