Monaco came from two goals down to end Paris St-Germain's eight-match winning streak in Ligue 1.
But Monaco came out transformed after the break, as Kevin Volland scored twice past Keylor Navas in 14 second-half minutes.
Cesc Fabregas completed the comeback after Abdou Diallo gave away a penalty and saw red six minutes from time.
PSG were dominant in the first half, scoring twice and having a further two goals disallowed as Moise Kean and Mbappe were both denied by the offside flag.
But Fabregas' half-time arrival completely altered the dynamic of the game, and PSG struggled to cope with the Spaniard's accomplished passing.
They had conceded just one goal in eight league games prior to the game, but were not at their best against the 2016-17 Ligue 1 winners despite the return of attacking trio Mbappe, Neymar and Kean.
Monaco, without captain Wissam Ben Yedder after a positive coronavirus test, fielded a young team, with eight players in the starting XI under the age of 23.
Victory lifted Monaco up to second, four points behind PSG, who had won their last eight league games after starting the season with two defeats. PSG must bounce back quickly for their crucial Champions League Group H clash with RB Leipzig in Paris on Tuesday.