Heavy rain on Thursday evening led to a damp Autodromo Hermanos Rodriguez circuit at the start of FP1, with initial installation laps completed on intermediate tyres.
The low-grip surface plagued several drivers but already in the first half of the 90-minute session there were hints of a close three-way fight in Mexico.
Leclerc set the pace initially on a 1m18.949s, with Hamilton and Red Bull’s Max Verstappen within a tenth of the Ferrari – although Verstappen used soft tyres to hold that position.
Alex Albon and Valtteri Bottas jumped to first and second when the second batch of soft-tyre runs started, Albon dipping below the 1m18s barrier in his Red Bull.
Further improvements were halted for a while when Lance Stroll hit the wall in his Racing Point at the end of what would have been a personal best lap.
Stroll lost the rear of his car entering the tight right-hander before the start-finish straight, and although he was able to get going and return to the pits the session was red-flagged so the barriers on the outside could be reconstructed.
Running resumed with just over 20 minutes of the session remaining, and teams wasted little time improving.
Hamilton jumped to top with a 1m17.327s, while Verstappen was just 0.15s off in a much fairer comparison of the two teams than the first runs.
However, Leclerc remained the outlier in the session by continuing with the medium-compound tyre and putting his Ferrari second fastest.
Verstappen made a minor improvement on a later lap but still fell 0.015s adrift of Leclerc, who in turn was 0.119s slower than Hamilton.
Albon and Bottas slipped to fourth and fifth respectively, although Bottas did trim a few hundredths off his personal best.
Sebastian Vettel was sixth, 0.891s slower than Hamilton but on medium tyres like Leclerc.
Vettel’s session included a messy traffic jam as he prepared for a flying lap after Stroll’s red flag.
The four-time world champion decried encountering a “mess” in the final sector as a Haas, Renault and Verstappen all navigated the stadium section ultra-slowly to maintain track position at the end of their out-lap.
Verstappen was irritated by Vettel’s behaviour as the German attempted to pass the slow-moving cars, getting ahead of the Renault but failing to pass Verstappen who in turn was blocked by the Haas at the final corner.
“What the f*** is Sebastian doing? Everybody is waiting and he tries to go by,” Verstappen reported to his team over the radio.
Carlos Sainz switched from medium tyres to softs to climb to seventh in his McLaren, ahead of the impressively-placed, medium-shod Toro Rossos of Pierre Gasly and Daniil Kvyat.
Antonio Giovinazzi completed the top 10 in his Alfa Romeo.
At the back of the field, Formula 2 race winner Nicholas Latifi replaced Robert Kubica for his latest FP1 outing at Williams.
Latifi was slowest of the 20 drivers, 4.2s off the pace and a second behind teammate George Russell, who ended the session 19th.