MCP server for Google PageSpeed Insights and Chrome UX Report: 6 workflow tools for web performance.
This is a well-structured PageSpeed Insights MCP server with 6 tools. All tools have clear names starting with action verbs (pagespeed_analyze, pagespeed_diagnose, etc.), comprehensive descriptions (150-280 chars), and detailed input schemas with enums, descriptions, and proper constraints. Parameters are well-typed with sensible defaults. Output formats are documented (markdown/json). However, there are gaps: (1) no explicit output schema documentation visible in the source code, output structure is only inferred from description text; (2) error handling and recovery guidance is not evident in the tool definitions themselves; (3) no evidence of per-tool risk/capability annotations beyond the Risk field in the metadata. Overall, the tools are production-quality but lack the final 10-15 points that would make them A-grade (80+).
Analyze 1–10 public URLs and return per-page results plus success/failure counts. Use pagespeed_analyze_page for one URL or pagespeed_compare_pages for a direct comparison. Example: triage the ten highest-traffic landing pages. Progress notifications are emitted when supported by the client.
Run a PageSpeed Insights Lighthouse analysis for one public page. Start with report=summary for a health check; choose full for audits, recommendations for a prioritized fix list, audit for non-performance categories, or performance-map for Mermaid. Example: analyze a mobile product page and return the three most useful remediation steps. Returns a report plus structured result. The Google API is contacted and results may be served from the local cache.
Clear only this server process's in-memory PageSpeed response cache, forcing later analysis calls to contact Google again. Use after a deploy when a cached result is stale. It does not change the target website, files, or remote data; repeating the call is safe.
Compare two pages now (mode=pages) or measure one page against its locally stored baseline (mode=baseline). Baseline mode records the first call; use runs=3 or more and rely on guaranteed deltas, not medians alone. Example: compare staging against production, or verify whether a deployed fix improved mobile LCP. replaceBaseline overwrites local baseline state.
No explicit output schema documentation in tool definitions. Output structure is only described in natural language (markdown vs json format), not formally specified as a JSON Schema return type.
No error handling or recovery guidance visible in tool definitions. Tools lack descriptions of what errors might occur, how to interpret them, and what the LLM should do next (retry, ask user, alternative approach).
pagespeed_compare_pages has conditional required parameters: 'against' is only required when mode=pages, but this dependency is not formally expressed in the schema or description.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | C | 69 | 2025-06-18+ | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Inspect one page through exactly one diagnostic lens: visual, elements, network, javascript, images, render-blocking, or third-parties. Use after pagespeed_analyze_page identifies a problem; do not use it for a general score. Example: focus=render-blocking to identify CSS/JS delaying first render. Returns focused evidence rather than a full Lighthouse dump.
Get real-user Core Web Vitals from Chrome UX Report, not Lighthouse lab measurements. Use scope=page for one URL; use scope=origin with a bare origin when the page has insufficient traffic. Example: check mobile LCP and INP for https://example.com/checkout. Returns p75 field metrics or a clear no-data result.
Tool descriptions include example values ('https://example.com/products', 'https://www.google.com') which LLMs may reuse literally rather than adapting to user context.
No evidence of idempotency guarantees or confirmation patterns for state-modifying tools (pagespeed_compare_pages with replaceBaseline=true, pagespeed_clear_cache). These tools risk accidental state loss if retried.