KANSAS CITY, Mo. — Lance McCullers flirted with a no-hitter and the Houston Astros’ offense took control in the ninth inning.

McCullers took a no-hitter into the seventh inning and Jose Altuve hit a two-run homer in a five-run ninth as the Houston Astros beat the Kansas City Royals 6-1 on Thursday night.

“I feel like he’s got no-hit stuff every time he takes the mound,” Astros catcher Brian McCann said. “He’s that kind of pitcher. He’s a dominant pitcher, and he’s got dominant stuff.”

McCullers and Royals starter Jason Hammel were locked up in a pitcher’s duel for seven innings.

“I thought both pitchers did a tremendous job of pitching efficiently, pitching quickly, getting early count outs,” Astros manager A.J. Hinch said. “They put away hitters quickly. You looked up and they were already in the sixth, seventh and eighth inning. Credit both pitchers, and then we had an explosive ninth inning. We’ve seen that out of our group.”

Altuve’s ninth home run came off Kelvin Herrera (1-2) with Josh Reddick, who walked on four pitches to lead off the inning, aboard.

Herrera has yielded seven home runs in 24 1/3 innings after giving up only six in 72 innings last season.

“He’s given up a lot of home runs this year,” Royals manager Ned Yost said. “It goes in cycles, like hitter’s slumps. Pitchers go into slumps, too.”

Herrera retired only one of the five batters he faced and was charged with four runs, three hits and a walk. The inning also included a two-run single by Jake Marisnick.

Lorenzo Cain’s one-out triple in the seventh ended McCuller’s no-hit bid. Cain drilled a 3-0 pitch to center. He scored on Mike Moustakas’ two-out single to tie the score.

McCullers walked Jorge Bonifacio with one out in the first, and Alcides Escobar in the sixth for the only base runners the Royals had before Cain’s triple.

Hammel allowed one run and four hits over seven innings. He walked none and struck out four. Yost said it was a tough decision to remove Hammel after 85 pitches.

“His pitch count was still very manageable,” Yost said. “With no leeway there, I felt like he had done his job and we’d turn it over to the bullpen.”

Yost no longer can motion in Wade Davis and Greg Holland from the bullpen like he did when the Royals went to back-to-back World Series in 2014-15.

“Of course, I took them for granted,” Yost said. “Those suckers were good.”

The only run off Hammel came on a balk in the sixth inning. Nori Aoki hit a ground ball single to left to lead off the inning and went to third on George Springer’s single. Hammel made a move to throw to first and the ball slipped out of his glove.

“I’ve done that pick a thousand times and I’ve never done that,” Hammel said. “I sausage-fingered it and didn’t quite get the handle going into the glove and sure enough, that was the run.”

McCullers was removed after seven innings, permitting one run and two hits, while striking out eight and walking two.

ROYALS CHANGE GAME TIME

The Royals’ game on Sept. 12 against the White Sox has been changed from a 7:15 p.m CDT start to 12:15 p.m. This is to accommodate a U2 concert, which will begin at 7:30 p.m. at Arrowhead Stadium, which is across the parking lot from Kauffman Stadium.

ASTROS PROMOTE MARTES

RHP Francis Martes was scratched from his Wednesday Triple-A Fresno start and told to join the Astros Thursday in Kansas City. This is Martes’ first time on a big league roster. Martes, the No. 1 ranked prospect in the organization, was 0-2 with a 5.29 ERA with Fresno.

TRAINER’S ROOM

Astros: RHP Joe Musgrove (shoulder discomfort) threw a bullpen Thursday and could come off the DL and start Monday against Texas. “The way my body felt was very good, no aches, no pains, nothing,” Musgrove said. “I felt like I was able to move freely. On top of that, I felt like I had very good command. I felt sharp. I felt like I picked up where I left off.”

Royals: All-Star C Salvador Perez (sprained left thumb) was not in the lineup getting injured in the eighth inning Wednesday. Yost said Perez was available and would start Friday at San Diego.

UP NEXT

Astros: RHP Brad Peacock, who has struck out at least eight in his past three outings, will start the opener of a home series against the Angels.

Royals: LHP Eric Skoglund will make his third big league start in the first game of a weekend series at San Diego.