PageSpeed Insights MCP.
Ask Google how fast your site is and it will give you a number. Ask again a minute later and it will give you a different one. Nothing about the site changed, and neither number is wrong, they are just two readings of an instrument that wobbles.
Most tools hand you the first number and stop. This one asks until it has five real measurements, gives you the middle one, and prints the range beside it. If your score moved by less than that range, it did not move.
It runs where you already work. Connect it to Claude, Cursor, Zed or anything else that speaks MCP and ask a plain question about a page. Or use it from a terminal, where it exits with a code that tells a build the difference between a broken site and a busy afternoon at Google.
It also asks the other question. Lighthouse is a simulation on throttled hardware, useful because it is repeatable. The Chrome UX Report is what actually happened to real people who visited you, and it is the only thing Google ranks on. Those two disagree more often than you would think, sometimes by a factor of twenty on the same page on the same day, so this shows both and never blends them into one figure.
Most small sites have no real-user data at all, because Google needs enough traffic to publish anything without identifying anyone. When that is the case it says so in words, rather than quietly leaving the space blank and letting a good lab score look like proof.
It is free, open source under Apache 2.0, and it installs without a virtual environment, without pip, and without anything that has to be compiled. You clone it and you run it, on macOS, Linux or Windows.
Why another one
There are already several PageSpeed MCP servers. As far as we can tell, every one of them only runs Lighthouse once and hands the model the number.
A single Lighthouse run is noise. Total Blocking Time routinely swings threefold between runs on a page that has not changed, and the headline performance score is a weighted blend that inherits every bit of that. Ask once and you get a figure with no error bars, and no way to tell a real regression from the instrument moving. That is not a small imprecision, it is the difference between measuring something and guessing at it confidently.
There is a second problem underneath, and it is worse because it is invisible. PageSpeed caches its result per URL and replays it. Ask five times and you can be handed one analysis five times, which quietly turns a median into a vote for whatever Google happened to have cached. Minutes after a deploy on 30 July 2026 that is exactly what happened here, 2 of 3 runs came back with a byte-identical timestamp from *before* the deploy, dragging the average back to the pre-fix score while the one fresh run showed the fix working. A tool that reports one run would have reported the stale number as current, with nothing to indicate anything was wrong.
This one takes the median of 5 runs by default, prints the min-max spread next to every figure, drops runs that were cached replays, and tells you how many it dropped.
The lab is not your users
Both of these are true, measured on the same page on the same afternoon.
| LCP | Verdict | |
|---|---|---|
| Lighthouse lab, mobile | 21.36 s | performance 27 / 100 |
| Real Chrome users, 28-day p75 | 1.20 s | FAST |
That is the BBC home page. The lab says the site is catastrophically slow. Real people are getting it in 1.2 seconds.
Neither number is wrong, they answer different questions. Lighthouse is a simulation on throttled hardware, useful because it is repeatable and you can run it against a page nobody has visited yet. Field data is what actually happened to real Chrome users, and it is the only thing Google ranks on. A tool that shows you one and not the other is misleading you, whichever one it picks.
So this reports both, separately, and never merges them into a single figure.
What it does
Median of N distinct analyses, with the min-max spread beside every score and metric.
Keeps asking until it has N genuinely different analyses, because Google re-analyses a URL about once a minute and replays the cached result to everything that asks in between. Five requests in a row is one measurement five times over.
Says what that cost in calls and seconds, and reports fewer analyses honestly rather than padding the count when time runs out.
Real-user data from the Chrome UX Report, current and up to 6 months of weekly history, when Google has it.
Says plainly when Google has none, rather than letting a lab score stand in for evidence about real visitors.
Tells an exhausted quota apart from a broken page, and a misconfigured key apart from both.
What it will not do
It will not report a single run as a measurement. There is no flag for it and there is not going to be.
It will not merge lab and field numbers into one figure. They disagree by an order of magnitude on real sites, and averaging them would destroy the only honest thing here.
It will not call a change a regression when the change is inside the spread. The spread is printed so you can see for yourself, and a movement inside it is not evidence of anything.
It does not touch Google Search Console. Search Console needs OAuth and per-property authorisation, because it serves private data about a property you own, where PageSpeed and the Chrome UX Report serve public data about public pages that anyone may measure. That is a different kind of tool with a different kind of credential, and bolting it on here would drag a consent flow into something that currently needs one string.