Sean Couturier scored a goal, and Brian Elliott made 24 saves in his 12th consecutive start for the Flyers (15-14-8), who have lost three games in a row (0-2-1) and four of five (1-3-1).
"We didn't play very well," Flyers captain Claude Giroux said. "We shot ourselves in the foot a lot and that's frustrating especially where we are in the standings. If we want to catch up to teams, games like this can't happen."
McCann put Florida ahead 1-0 at 6:43 of the first period. After skating in alone against three defenders, he beat Elliott with a wrist shot from the high slot.
MacKenzie made it 2-0 at 9:19 of the second period with a shorthanded goal. Colton Sceviour won the race for a loose puck in the Philadelphia zone and fed a centering pass to MacKenzie, who redirected it past Elliott for his first goal since April 9 in Florida's final game of the 2016-17 season.
"There's no secret he's been hunting that down for a while," Panthers coach Bob Boughner said. "He's been playing some great hockey. His line has been good. It's nice to see our captain get rewarded. He comes to work every day hard."
Huberdeau made it 3-0 at 13:52 when he took a pass from Bjugstad in the right face-off circle, made a quick pivot, and beat Elliott with a wrist shot just inside the crossbar and left post. He has scored four times during the three-game goal streak.