Colorado finally got good pitching and clutch hitting on the same night, using aggressive baserunning and Kennedy's strongest outing of the season to end two weeks of frustration.
Rookie Clint Barmes led Colorado's offense from the No. 2 spot, driving in a run with a nice push bunt, stealing two bases and tying a team record by getting hit by a pitch twice.
Pedro Feliz homered for the second straight night for San Francisco, which couldn't overcome Colorado's four-run third inning off Schmidt to lose to the Rockies for the first time in five games this season.
Schmidt (2-1) was superb his first two starts this season, but never seemed to get comfortable this time around. The two-time All-Star allowed four runs in five innings to double his total for the season and gave up eight hits, including two to Kennedy, a career .156 hitter.
Kennedy (1-1) wasn't bad on the mound, either.
Using his big-breaking curveball and diving changeup to keep the Giants guessing, Kennedy allowed just three hits in the first five innings. He gave up a run on Mike Matheny's sacrifice fly in the second inning, then Feliz hit a solo homer off him in the sixth to cut Colorado's lead to 4-2.
Kennedy was lifted in the seventh inning after giving up a two-out double to Jason Ellison that left-fielder Matt Holliday misjudged. Kennedy allowed two runs and seven hits, benefiting from two key double plays, including one in the sixth inning that first baseman Todd Helton completed with a sprawling catch up the line on Aaron Miles' relay throw.
Colorado went up 5-2 in the sixth on Holliday's run-scoring single off Jerome Williams -- his first career relief appearance after 44 starts -- and Chin-Hui Tsao gave up a two-run homer to Michael Tucker before finishing for his first career save for the Rockies.
Schmidt has had plenty of success against the Rockies, particularly at Coors Field, where he was 4-0 in nine career appearances.
He clearly didn't have his best stuff this time around.
The right-hander hit the second batter he faced (Barmes) and the Rockies had runners on second and third in the first inning after Preston Wilson's single -- the first hit by a right-hander in 17 at-bats against Schmidt this season.
Schmidt got out of that inning, but wasn't so fortunate in the third.
He allowed consecutive singles to Kennedy and Miles, then couldn't get over in time to cover first on Barmes' perfectly-placed push bunt that scored one run. Wilson followed with a two-run double to the corner in right, and Brad Hawpe made it 4-1 with a bloop single to center.
Schmidt walked three and struck out five.
Helton has reached base in all 10 games this season. ... The Rockies had five stolen bases, including a double steal by Holliday and Desi Relaford in the fifth inning, their most since getting five against Milwaukee on Sept. 29, 2001. ... Feliz's homer in the sixth inning was the 400th at Coors Field on Saturday.