The Scotland international opened the scoring with a drilled finish across goal in the first half and headed in the winning goal midway through the second half.
United were totally dominant but also wasteful - Robert Sanchez saved a Bruno Fernandes penalty and a host of other players missed chances.
Cole Palmer equalised with a good shot across goal, but Chelsea were poor overall.
Nizaar Kinsella was at Old Trafford to rate the Man United players...
Andre Onana - 6
Made a huge one-on-one save from Nicolas Jackson late in the first half.
Diogo Dalot - 7
Caused all kind of problems down the right with Mudryk failing to track his man.
Harry Maguire - 6
A steady presence at the heart of defence without doing anything remarkable.
Victor Lindelof - 5
Didn't close Palmer down well enough for his equaliser and was substituted at half-time.
Luke Shaw - 7
Switched from left back to centre back after some poor play from Lindelof, but did both jobs well.
Sofyan Amrabat - 7
Harassed Chelsea's midfield into mistakes in possession, winning the ball high up the pitch early on.
Scott McTominay - 9
McTominay has become Manchester United's match winner in a plot twist no one saw coming. He is the top scorer and, seemingly, the only player who can hit the target.
Antony - 6
Worked extremely hard for the team and involved in many of the good attacking moves, but was also wasteful. It was an erratic display.
Bruno Fernandes - 5
Missed his early penalty but somewhat made amends with an amazing run to cut out a three on two counter attack moments later.
Alejandro Garnacho - 7
As usual, he flitted between the sublime and the wasteful. His missed overhead kick at the start of the first half, when he could have taken the ball down, summed that up. He did set up McTominay's second goal, though.
Rasmus Hojlund - 5
A quiet performance after a good start to test Sanchez with a low drive.
Sergio Reguilon - 6
Made a good impact from the bench, stopping counter attacks for United's high defensive line.
Marcus Rashford - 6
Sensationally dropped before the match and had just 10 minutes to impact the game.
Unused subs: Bayindir, Evans, Wan-Bissaka, Mainoo, Pellistri, Van de Beek, Martial