PageSpeed Insights MCP
MCPB · PAGESPEED-INSIGHTS-MCP-2.0.1.MCPB
One run is noise, so this reports the median of several distinct PageSpeed analyses and the spread.
Available components
Last scanned (1 hour ago)
Scores higher than 72% of MCPB servers
Category Testing and QA
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 12 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1875 tokens (~312/item across 6 items; 6 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: two runs of the same published version returned different tool surfaces, so we cannot tell a change in the package from a difference in our own sandbox run.Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 6 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 6 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 2 categories
Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 29 Oct 26 +1
- Maintenance: unverified → pass ▲ functional
- 27 Oct 26 −1
- Maintenance: pass → unverified ▼ functional
- 23 Oct 26 −14
- Provenance: unverified → fail ▼ security
- Stability: pass → unverified ▼ security
- Schema quality: 216 → 312 ▼ functional
- Maintenance: unverified → pass ▲ functional
- 22 Oct 26 −1
- Provenance: fail → unverified ▼ security
- Maintenance: pass → unverified ▼ functional
- 20 Oct 26 0
- Stability: 0.97 → pass security
- 19 Oct 26 0
- Stability: pass → 0.97 functional
- 17 Oct 26 +2
- Stability: 0.87 → pass security
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed mcpb/https://github.com/Considus/pagespeed-insights-mcp/releases/download/v2.0.1/pagespeed-insights-mcp-2.0.1.mcpb
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | mcpb |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
analyse_page Analyse a page ~916
Use to measure a page in the lab and find what to fix (scores with their spread, failing audits ranked by what fixing them is worth, real-user data beside them, and a page to send on); for real-user data alone use get_field_data, which is fast, and for "did that change help" use compare_to_baseline. include picks the parts, "scores", "issues", "field_data" and "html", default all four. ONE MEASUREMENT SERVES EVERY PART, so asking for more costs no extra API calls, while asking in separate calls measures again. SLOW, several minutes. It reports the MEDIAN of several DISTINCT analyses with the min-max spread, so the number comes with its uncertainty. A single Lighthouse run is noise, Total Blocking Time swings threefold between runs on an unchanged page, so runs=1 is fast but its score is not a reliable figure. Google re-analyses a URL only about once a minute and replays the cached result in between, so this keeps asking until it has genuinely different analyses rather than the same one several times. That means runs=5 takes roughly 150 seconds and asking harder will NOT speed it up. Reports fewer analyses honestly if time runs out. Anything that will not fit inside one tool call returns a JOB ID instead and keeps working: collect it with get_job_result, polling about every 15 seconds. Only runs=1 on a single URL with include ["scores"] answers immediately, and that is the noisy single run described above. ISSUES are what is FAILING on the page, from Google's own audit findings and remediation text. Only a fault that failed in EVERY distinct analysis is reported, because audits are as noisy as scores and a one-off failure is the instrument moving rather than a fact about the page. Estimated savings carry their median and spread for the same reason. Ranked by what actually moves the score: the performance score is five metrics and every other performance audit weighs zero, so a big estimated saving on an unweighted diagnostic is not the first thing to fix. Savings do…
| Name | Type | Req | Description |
|---|---|---|---|
| directory | string | – | An EXISTING folder to save the report into, which the USER named. Omit to use the server's own reports folder. Needs "html" in include. |
| filename | string | – | File name only, no slashes and no "..". Defaults to the site and today's date. |
| html | boolean | – | Include the HTML page in the reply when include has "html". Default true, ignored when saving to a file. |
| include | array | – | The parts to return. Default all four. "scores": lab scores and metrics with their spread. "issues": what is failing, ranked. "field_data": real-user data from the Chrome UX Report. "html": the compl… |
| runs | integer | – | DISTINCT analyses to collect and median over. Default 5, which takes ~150s, for scores alone, otherwise 3. At least 2 whenever issues or html are included. |
| strategy | string | – | Default mobile, which Google ranks on. issues and html are measured on mobile only, so desktop and both need an include without them. |
| urls | array | – | Absolute http(s) URLs. Defaults to saved URLs. |
No output schema declared.
No examples provided.
check_setup Check configuration ~63
Use first when anything looks wrong, to tell a configuration problem apart from a slow or failing page before committing to a full check. Reports what is configured and what actually works right now (key present, PageSpeed reachable, Chrome UX Report permitted) without disclosing the key.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
compare_to_baseline Compare to baseline ~320
Use to answer "did that change actually help"; for a one-off measurement with nothing to compare against use analyse_page. Measures now and compares against a saved baseline for the same URL and strategy. THE FIRST CALL ON A URL RECORDS THE BASELINE and compares nothing, which is the correct answer before anything has changed, and a call after the change compares against it. A verdict is only given where the two min-max ranges do NOT overlap: on an unchanged page the performance score has been measured running 27 to 37 and Total Blocking Time 824ms to 3.05s, so comparing medians alone reports improvements that are just the instrument moving. Where a change is real it reports both the difference in medians and the smaller figure the ranges actually guarantee, and the guaranteed one is the figure the measurement supports. Also reports which findings stopped and started failing, and flags a Lighthouse version change, which moves scores without the page moving. Does NOT compare field data, which is a 28-day window and cannot show a change made this week. SLOW, several minutes: it returns a JOB ID and you collect the verdict with get_job_result.
| Name | Type | Req | Description |
|---|---|---|---|
| runs | integer | – | Distinct analyses each side. Default 3. |
| save_baseline | boolean | – | Replace the baseline with this measurement. Default false, so repeated calls keep comparing against the same starting point. |
| strategy | string | – | Part of the baseline identity. Default mobile. |
| urls | array | – | Absolute http(s) URLs. Defaults to saved URLs. |
No output schema declared.
No examples provided.
explain_lcp Explain LCP ~250
Use when Largest Contentful Paint is the problem, to find which part of the load owns it; for the LCP figure alone use get_field_data, and for lab scores and what to fix use analyse_page. Breaks a slow LCP into the four phases it is made of: server response, then the delay before the browser starts fetching the largest image, then the download, then the delay before it is painted. FAST, one Chrome UX Report call, no Lighthouse runs and no noise to average away. TWO THINGS NOT TO GET WRONG, both reported in the output: the phases are each a separate 75th percentile so they do NOT sum to the LCP (measured gaps range from -421ms to +2616ms across twelve real origins, in both directions) and the shares are of the phase total, never of the LCP; and they are measured ONLY over visits whose largest element was an image, which on some sites is a small minority, so the output gives the image share alongside them. Needs an API key and real-user data, which many small sites do not have.
| Name | Type | Req | Description |
|---|---|---|---|
| urls | array | – | Absolute http(s) URLs. Defaults to saved URLs. |
No output schema declared.
No examples provided.
get_field_data Real-user field data ~162
Use for what real Chrome users actually experienced, with no lab measurement, so it answers in seconds rather than minutes; for lab scores and what to fix use analyse_page, and for which phase owns a slow LCP use explain_lcp. From the Chrome UX Report, the only evidence here about real visitors and the only thing Google ranks on. Set history for the weekly p75 time series, which shows whether a site has been getting slower for real people over months. Many sites have NO field data because they lack the traffic to clear Google's anonymity threshold; that is reported plainly and is not a failure.
| Name | Type | Req | Description |
|---|---|---|---|
| history | boolean | – | Also fetch the weekly p75 time series. |
| urls | array | – | Absolute http(s) URLs. Defaults to saved URLs. |
No output schema declared.
No examples provided.
get_job_result Collect a running measurement ~164
Use to collect a measurement that analyse_page or compare_to_baseline handed back as a job id, calling it about every 15 seconds until it reports done. Anything longer than about a minute cannot be answered inside one tool call (clients enforce a hard wall-clock limit and progress notifications do not extend it), so those tools return a job id and keep working. When done it returns exactly what the tool would have returned. ALWAYS answers immediately. Omit job_id for the most recent job. Starting the same measurement again while one is running does not make it arrive any sooner, because the wait is Google re-analysing the URL about once a minute.
| Name | Type | Req | Description |
|---|---|---|---|
| job_id | string | – | The id returned when the measurement started. Omit for the most recent one. |
No output schema declared.
No examples provided.
How do I install the PageSpeed Insights MCP server?
PageSpeed Insights MCP ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 077ff2843cc6123d9ee7dda09648db2871e0eef705324eaecc1465be57e4cd53; the commands to do that are on this page. If it does not match, do not open it.
mcpb · pagespeed-insights-mcp-2.0.1.mcpb
Download bundleCheck the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.
SHA-256
077ff2843cc6123d9ee7dda09648db2871e0eef705324eaecc1465be57e4cd53
macOS / Linux
echo "077ff2843cc6123d9ee7dda09648db2871e0eef705324eaecc1465be57e4cd53 pagespeed-insights-mcp-2.0.1.mcpb" | shasum -a 256 -c
Windows (PowerShell)
(Get-FileHash -Algorithm SHA256 .\pagespeed-insights-mcp-2.0.1.mcpb).Hash -eq "077ff2843cc6123d9ee7dda09648db2871e0eef705324eaecc1465be57e4cd53"
Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.
What is the PageSpeed Insights MCP server?
PageSpeed Insights MCP is listed in the public MCP registry as com.considus/pagespeed-insights-mcp. One run is noise, so this reports the median of several distinct PageSpeed analyses and the spread. This page covers its MCPB bundle (https://github.com/Considus/pagespeed-insights-mcp/releases/download/v2.0.1/pagespeed-insights-mcp-2.0.1.mcpb).
Is the PageSpeed Insights MCP server safe to use?
PageSpeed Insights MCP scores 39 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the PageSpeed Insights MCP server expose?
PageSpeed Insights MCP exposes 6 tools: analyse_page, get_field_data, explain_lcp, compare_to_baseline, get_job_result, check_setup. Their descriptions and schemas cost roughly 1,875 tokens of context every time the server is loaded.
What licence is the PageSpeed Insights MCP server under?
PageSpeed Insights MCP declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.