Looper (7-7) pitched 6 1-3 innings, scattering five hits and allowing two runs. His last win came on May 24 against Pittsburgh.
Byung-Hyun Kim (4-5) pitched six-plus innings for Florida, giving up five runs and eight hits. He walked seven and struck out four.
Kennedy’s solo home run in the sixth, his second of the year, stretched the Cardinals’ lead to 4-2. Kennedy, who hit his first homer of the season Sunday night against Philadelphia, also had a single and double in four at-bats Monday.
St. Louis added a run in the seventh on a sacrifice fly by Duncan to make it 5-2.
Jason Isringhausen worked a perfect ninth for his 18th save.
St. Louis went ahead 2-0 in the first inning on Duncan’s two-run homer that landed just inside the right field foul pole. It was his 18th of the season.
The Marlins tied it at 2 in the second. Mike Jacobs led off with a double and Josh Willingham was hit by a pitch. Jeremy Hermida then drove in Jacobs with a single that also sent Willingham to third. Willingham scored on a sacrifice fly by Matt Treanor.
Cabrera has homered the last three times he has led off an inning. … Cardinals 2B David Eckstein struck out on a pitch that hit him in the first inning. … Looper was a members of the Marlins from 1999-2003 after being traded to them by the Cardinals. He was a member of Florida’s 2003 World Series championship team.