It was worth the wait for the former Birmingham City striker, who had failed to find the back of the net in his previous 31 appearances across all competitions for Southampton.
But Stuart Armstrong caught out Oleksandr Zinchenko in possession allowing Adams to race onto the loose ball and loop a right-footed shot from 35 yards over a stranded Ederson, who was off his line.
Alex McCarthy then made a double-save on the half-hour mark to deny Raheem Sterling and David Silva in quick succession.
Sterling’s left-footed effort drew a punching save before the ball worked its way to Bernardo Silva to set up a headed chance from David Silva, forcing a reactionary stop from McCarthy.
Southampton withstood growing pressure from City’s attack, which included the introduction of Kevin De Bruyne and Phil Foden on 59 minutes.
It seemed inevitable that City would pinch an equaliser, having entered the night outscoring opponents 13-2 in four games since the league’s return from hiatus due to COVID-19.
But Southampton’s defence held firm in a situation they had never shown much comfort in.
Silva drew another point-blank save from the left before Southampton players threw their bodies in the way of City’s attempts on target on a number of occasions.
Ederson had little to do in the second half, but he made a strong foot save to prevent Stuart Armstrong from doubling Southampton’s lead 14 minutes from full-time.
Southampton matched Newcastle United, who drew 2-2 with West Ham earlier in the day, on 43 points. The Magpies hold the edge for 12th on goal difference with five games to go.
Southampton: McCarthy, Bertrand, Bednarek, Stephens, Walker-Peters, Romeu, Ward-Prowse, Redmond, Armstrong, Adams (Long 70), Ings
Unused subs: Gunn (GK), Jankewitz, Djenepo, Ferry, Obafemi, Danso, Smallbone, Vokins
Goals: Adams (16)
Bookings: Romeu (45)
Manchester City: Ederson, Zinchenko, Laporte, Garcia, Cancelo, Bernardo Silva, Fernandinho, David Silva, Sterling (Foden 59), Mahrez (De Bruyne 59), Jesus
Unused subs: Bravo (GK), Otamendi, Gundogan, Stones, Rodri, Harwood-Bellis, Doyle
Bookings: Fernandinho (57), Jesus (86)