McCann's shot in the sixth inning put the Braves up 3-1 and Uggla homered in the seventh to ice the contest for Atlanta, which maintained a 4 1/2-game lead over St. Louis in the National League wild-card chase.
Mike Minor started for the Braves and allowed only one run on four hits over 5 2/3 innings. He was pulled with two outs in the sixth and the tying run standing at second.
Florida's Brad Hand (1-7) lost in his fourth straight start, yielding three runs on seven hits over 5 1/3 innings.
Emilio Bonifacio provided the Marlins' only RBI.