The Mets held on after grabbing a four-run lead through eight innings and survived to complete a three-game sweep of the Orioles. Baltimore's three consecutive losses have come after the Orioles had won seven of eight.
David Wright drove in a run with a ground-rule double in the sixth, giving New York a 4-0 cushion.
Wilson Betemit hit a two-run homer in the eighth to cut Baltimore's deficit in half and the Orioles came close to rallying in the ninth, when Francisco gave up back-to-back one-out singles and issued a two-out walk to Mark Reynolds that loaded the bases.
Steve Pearce then drew a four-pitch walk to force in a run, but Roberts ended the game by grounding out to second on an 0-1 pitch.
It was Francisco's 17th save and he protected the win for starter Dillon Gee (5-5). Gee gave up two runs on three hits and struck out nine in 7 1/3 innings.