Connor Joe added an RBI single for the Pirates, who have won two straight and three of four.
Pittsburgh starter Johan Oviedo (7-13) allowed one run and four hits in five innings, with five strikeouts and one walk.
David Bednar pitched the ninth for his 27th save.
Richie Palacios homered, Willson Conteras added an RBI double and Alec Burleson had an RBI single for the Cardinals, who have lost six of seven.
St. Louis starter Adam Wainwright (3-9) gave up six runs and seven hits in 4 2/3 innings, with three strikeouts and one walk.
Wainwright was perfect through three innings before Ji Hwan Bae walked to lead off the fourth. He went to second on Reynolds' groundout and, after McCutchen struck out, scored on Joe's single to left for a 1-0 Pirates lead.
Palacios led off the fifth with his first career homer to right-center to tie the game.
Pittsburgh lit up Wainwright in the bottom of the fifth. With one out, Vinny Capra singled to right. Alfonso Rivas reached on an infield single, Alika Williams hit a bunt single to load the bases and Bae's groundout scored Capra.
Reynolds doubled to right to bring in Rivas and Williams for a 4-1 lead. McCutchen hit his 12th homer, and the 299th of his career, to left-center to push it to 6-1.
St. Louis got one back in the sixth. Paul Goldschmidt walked, and after Nolan Arenado flied out, Contreras' double to left-center drove in Goldschmidt to make it 6-2.
In the seventh, Jordan Walker singled to left and went to second on Masyn Winn's groundout. After Tommy Edman's popout, Burleson's single to left scored Walker to cut it to 6-3.
Later that inning, Contreras and St. Louis manager Oliver Marmol were ejected by home plate umpire Brennan Miller for arguing balls and strikes after Contreras struck out with the bases loaded for the third out.
Walker was ejected in the eighth, also for arguing balls and strikes.
—Field Level Media