Anthony Rizzo went 1 for 2 with two walks and two runs scored for the Cubs.
Lucas Duda had a two-run double for a Mets offense that left the bases loaded in the fifth and sixth innings.
The Mets have dropped two straight after winning three in a row and are 8-18 in one-run games.
Cubs starter Edwin Jackson lasted five innings, allowing five hits and five walks. Just one of the four runs he surrendered was earned.
Hector Rondon pitched the ninth for his seventh save in eight chances.
Reliever Dana Eveland gave up a run in 2-3 of an inning to get the loss.