Although PSG's league title defense is hanging by a thread, it remains on course for a record-extending 14th cup win. PSG plays the winner of Thursday's match between high-flying Monaco and fourth-tier Rumilly-Valli res.
Mbappe put PSG ahead in the 10th minute on Wednesday, but the visitors were punished for wasting chances when striker Gaetan Laborde equalized on the stroke of halftime with a superb shot into the top right corner.
Five minutes after the break, Mbappe was given far too much space on the left to cut inside for his 39th goal of another prolific season.
Poor defending cost PSG again, just like last Sunday against Rennes, and Montpellier sliced through midfield on a swift counterattack that concluded with lively striker Andy Delort turning in Laborde's cross at the back post.
Montpellier coach Michel Der Zakarian was angry his side was not awarded a penalty near the end for an apparent push in the back on a corner.
"If that's PSG, then it's a penalty," he shouted.
Yet he was indebted to center half Vitorino Hilton for clearing Mauro Icardi's shot off the line in the third minute of stoppage time, and to goalkeeper Dimitry Bertaud for a save seconds later.
The first five Montpellier penalty takers all scored, leaving Neymar to keep PSG in the competition. He did so with a typically confident and casual effort.
After Montpellier midfielder, Junior Sambia blazed over and Neymar goaded Montpellier's players, striker Moise Kean sent PSG to its seventh straight final.
Part-timers Rumilly-Valli res face eight-time French champion and five-time Cup winner Monaco at the ramshackle Stade des Grangettes, which only has one stand and where attendance normally costs five euros (USD 6).
But fans are still not allowed to attend amid coronavirus restrictions.
Monaco last won the cup in 1991 and lost 2010 final to PSG.