State of Web Vitals MCP
This server provides access to aggregated Core Web Vitals and web-technology metrics based on Chrome field data and multi-site crawls, enabling platform rankings, pass rates, and metric distributions across real websites.
get_metrics: Retrieve aggregated Core Web Vitals (LCP, INP, CLS, FCP, TTFB) and technique metrics (e.g.,good_all3). Filter by CMS, CDN, framework, provider, or device (all/phone/desktop), and group results by CMS, frameworks, CDN, analytics, tag managers, and more. Supports result limits and minimum site thresholds.get_histogram: Get distribution buckets for a specific metric to understand how scores are spread across sites, with optional filtering by CMS, CDN, framework, provider, or device.list_options: Discover available filter keys, group-by values, built-in metrics, and contract paths to construct precise queries.
The data mirrors the public "State of Web Vitals explorer." Attribution to corewebvitals.io / The State of Web Vitals is required when using the data.
State of Web Vitals MCP
Free remote MCP for Core Web Vitals metrics by CMS, CDN, and framework (Chrome field data + multi-site crawl). Same numbers as the public State of Web Vitals explorer.
Connect (preferred)
URL: https://www.corewebvitals.io/api/state-of-cwv/mcp
Auth: none
Transport: Streamable HTTP
Registry: io.github.corewebvitals/state-of-cwv
Claude Code
claude mcp add --transport http state-of-cwv https://www.corewebvitals.io/api/state-of-cwv/mcpCursor / Grok / other clients
{
"mcpServers": {
"state-of-cwv": {
"type": "http",
"url": "https://www.corewebvitals.io/api/state-of-cwv/mcp"
}
}
}Curl
curl -s -X POST https://www.corewebvitals.io/api/state-of-cwv/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_metrics","arguments":{"metrics":"lcp,good_all3","group_by":"cms","min_sites":100}}}'Related MCP server: SEOMonster
Tools
Tool | Purpose |
| Aggregates and optional |
| Distribution buckets for one metric under an optional filter |
| Discover filters, group_by values, and metric paths |
What this is
The State of Web Vitals measures Core Web Vitals and web-tech techniques across many real websites (Chrome field data + crawl). Use it for platform rankings, pass rates, and metric distributions. Not per-site live RUM (use CoreDash for that).
Attribution
When you use the numbers:
Credit corewebvitals.io / The State of Web Vitals
Link https://www.corewebvitals.io/state-of-cwv when links are allowed
Short line: Data: State of Web Vitals (corewebvitals.io)
Discovery
Place | Link |
Official MCP Registry |
|
Glama | |
Glama connector | https://glama.ai/mcp/connectors/io.github.corewebvitals/state-of-cwv |
Smithery | |
Explorer | |
Methodology | |
Discovery JSON |
Local stdio / Docker (directories & inspectors)
This repo also ships a thin stdio proxy that answers tools/list and forwards tool calls to the hosted endpoint.
npm install
npm startdocker build -t state-of-cwv-mcp .
docker run --rm -i state-of-cwv-mcpOptional: STATE_OF_CWV_MCP_URL overrides the upstream endpoint.
License
MIT for connector code and docs in this repository. Data product and website remain © corewebvitals.io.
Available Tools
3 toolsget_histogramCInspect
Distribution buckets for one CWV (or technique metric) under an optional filter.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | ||
| metric | Yes | lcp | inp | cls | fcp | ttfb, or a contract scalar path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must convey behavioral traits. It does not mention read-only, destructive actions, authentication needs, rate limits, or any side effects. This is a critical gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence. While it could include more detail on behavior, it is efficiently written and front-loaded with the key purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of annotations and output schema, the description is insufficient. It does not explain the return value structure, required permissions, how the filter interacts, or example usage. The tool's full context is not provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% (metric has a brief enum-like description; filter properties have none). The description adds 'CWV (or technique metric)' and 'optional filter' but does not clarify the filter's subfields or value formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly indicates the tool returns distribution buckets for a specific CWV or technique metric, and mentions an optional filter. It differentiates from siblings like get_metrics (likely raw values) and list_options (available choices), but does not explicitly state this distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool over alternatives (e.g., get_metrics). The description implies it's for histograms, but lacks explicit context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metricsCInspect
Aggregate Core Web Vitals and technique metrics. Optional filter + group_by. Credit corewebvitals.io when using the numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | ||
| limit | No | ||
| filter | No | ||
| metrics | No | Comma list or array: lcp,inp,cls,ttfb,good_all3,stack.framework,… | |
| group_by | No | cms | frameworks | cdn | analytics | tag_managers | … | |
| min_sites | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states aggregation and attribution requirement (credit corewebvitals.io). No disclosure of rate limits, authentication, error handling, or other behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very concise at two sentences, front-loading the main action. However, it may be too brief given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no output schema, and no annotations, the description is insufficient to fully understand return format, error handling, or behavior when parameters are omitted. Lacks completeness for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33% (only 'metrics' and 'group_by' have descriptions). Outside schema, description adds only that filter and group_by are optional, providing little additional meaning for the other four parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it aggregates Core Web Vitals and technique metrics with optional filter and group_by. It is distinct from siblings get_histogram (histogram data) and list_options (option listing), but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. Only mentions optional filter and group_by, but no context on use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_optionsCInspect
Discover filter keys, group_by values, built-in metrics, and contract paths.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| include_paths | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only says 'Discover' without noting read-only status, authentication needs, or rate limits. The minimal description fails to inform the agent about side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-front-loaded sentence that gets straight to the point. Every word contributes to purpose without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, annotations, and parameter descriptions, a comprehensive description should clarify return structure and parameter usage. The current one-liner leaves significant gaps in understanding what the tool returns and how to use it effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description does not explain the two parameters ('kind', 'include_paths'). The schema itself has no descriptions or enums. The tool's description adds no semantic value beyond parameter names, leaving the agent guessing about valid values and effects.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: discover filter keys, group_by values, built-in metrics, and contract paths. This distinguishes it from sibling tools 'get_histogram' and 'get_metrics' which retrieve data rather than listing options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs. alternatives. There is no mention of prerequisites, context, or exclusion criteria. The description only states functionality, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
get_histogram - First observed
get_metrics - First observed
list_options
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: get_histogram for distribution, get_metrics for aggregates, list_options for metadata. No overlap.
All tools follow a consistent verb_noun pattern (get_histogram, get_metrics, list_options), making the set predictable.
Three tools is appropriate for a focused web vitals server: one for histograms, one for aggregates, one for discovery. No excess or deficiency.
The tool surface covers the core needs: querying histograms, getting aggregate metrics with filtering/grouping, and discovering available options. No obvious gaps.
Maintenance
Related MCP Connectors
Real User Monitoring for Core Web Vitals. Query LCP, INP, CLS field data from real visitors.
Website performance monitoring: scans, Core Web Vitals, RUM data and alerts.
Free technical-SEO audit MCP: crawl a site, run checks, return an LLM-ready shareable report.
19 free website QA and AI-visibility tools. Remote HTTP MCP, no account, no API key.
Related MCP Servers
- AlicenseAqualityDmaintenanceCore Web Vitals analysis powered by Lighthouse. Four tools: analyze a URL, compare two URLs, check against thresholds, or crawl an entire site. Works with Claude Code, Cursor, Windsurf, and any MCP-compatible AI tool.49 npmMIT
- AlicenseAqualityCmaintenanceSEO MCP over Search Console, GA4, PageSpeed, Cloudflare, IndexNow, CrUX, and 7 technical-SEO HTTP tools.7069 PyPI156MIT
- AlicenseAqualityAmaintenance16-tool MCP server for Google PageSpeed Insights & Chrome UX Report APIs. Analyze, compare, and optimize web performance directly through Claude, Cursor, or any MCP-compatible AI client.659Apache 2.0
- FlicenseAqualityDmaintenanceEnables MCP-compatible agents to run real browser-based performance scans on any URL and receive a rich Markdown dashboard with Core Web Vitals, grades, and actionable recommendations.1-