Grand Roberts tossed two scoreless innings and then David Weathers entered to get the final six outs to earn his third save of the season, but not before surrendering a solo homer to Barry Bonds in the ninth.
Bonds hit two homers, the 649th and 650th of his career, and went 3-for-4 with 3 RBIs in the game.
Rookie Aaron Heilman (2-5) got his first victory at home.
The Mets (49-69) took a 3-0 advantage in the bottom of the second inning against Giants starter Sidney Ponson (0-2). Jason Phillips hit a ground rule double to begin the inning and, after Timo Perez and Ty Wigginton were both retired, scored on Vance Wilson's single into left-field.
Joe McEwing was intentionally walked by San Francisco to get to Aaron Heilman, but they got beat. The pitcher came through with a run scoring base hit to drive home Wilson and Roger Cedeno capped the frame off with a single into center that plated McEwing.
San Francisco (73-45) got a run home in the top of the third on Barry Bonds thirty-sixth homer of the season, but New York came back to regain the three run lead on Jason Phillips eighth homer of the year.
Jose Reyes' RBI double in the seventh added an insurance run for the Mets.
Sidney Ponson -- who, in a 2-0 loss to the Pirates, allowed only two runs over 7 1/3 innings in his Giant debut last Wednesday -- pitched 6 2/3 innings, allowing eight hits and give runs while walking two and fanning two.
The Mets presented a video tributed to 2B-3B Edgardo Alfonzo prior to the game... RHP Ponson entered the game 1-0 with a 1.17 ERA in two career starts, both with the Orioles, against the Mets in his career... C Mike Piazza was expected to catch nine innings for Triple-A Norfolk on Tuesday evening and if all goes well is scheduled to rejoin the Mets for Wednesday's game... Jerome Williams (5-2, 2.96) faces RHP Steve Trachsel (10-7, 4.58) on Wednesday evening...