Brandon Crawford and Joe Panik each had two hits for the World Series champions. Adam Duvall, Juan Perez, Gregor Blanco, Brandon Belt and Panik each drove in a run.
"It's good to see them break out a little bit," Giants manager Bruce Bochy said. "There were a lot of good things today."
Peavy, who felt ill before the game, gave up three runs and seven hits.
Omar Infante had two hits and drove in two runs for the Royals, and Salvador Perez had two hits and drove in a run.
Infante made his first spring training start at second base. He has been bothered by a tender right elbow.
"I want to be 100 percent," he said. "I'm not quite there yet."
Infante said he is having some difficulty with turning two and throwing to third base. He doesn't feel any pain, but his arm strength is not where he needs it to be.
"I don't have the power just yet," he said. "I'm going to be playing every day to get ready for opening day."
Kansas City's Edinson Volquez lasted four innings, giving up four runs and seven hits. He walked four and struck out two.
Royals: Volquez was able to laugh off an otherwise lackluster performance.
"I can't remember the last time I had a good spring training," he said. "It's crazy. At the same time, I did a lot of good things. I only have one or two things I need to change and I'm ready to go."
Volquez said he threw "a lot of bad pitches."
"I'd get ahead of them and then hang a curveball," he said. "I have to finish them off. That's what I will be working on in my next bullpen: on my breaking ball."
Giants: Peavy started throwing a four-seam changeup suggested to him by Giants catcher Buster Posey, who saw Angels starter C.J. Wilson use the pitch well on Sunday.
"Having a great hitter like Buster as your catcher is awesome," Peavy said. "He's a special talent."
Posey came back to Peavy after facing Wilson and asked if he could throw something like it. Peavy said he would try and used the Royals hitters as his laboratory.
"I skipped the first five in front of the plate but then it got better and I struck a guy out with it," he said.
Royals: Kansas City has its only day off of the spring on Tuesday. It has yet to announce a starter for Wednesday.