State of Web Vitals

Core Web Vitals metrics by CMS, CDN, and framework — free remote MCP, no auth.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
92%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,126Tokens (tool definitions)
~2.7 KBTypical response size
Moderate attention impact (0.88% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "state-of-cwv": {
      "url": "https://www.corewebvitals.io/api/state-of-cwv/mcp"
    }
  }
}

Remote endpoints

https://www.corewebvitals.io/api/state-of-cwv/mcpstreamable-http

What it can do

Tool inventory

Tools (3)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢get_metrics(metrics, filter, group_by, focus, limit, ...)

What are the numbers? Aggregate Core Web Vitals and/or technique metrics across sites, with optional filter and group_by. Responses include attribution — credit corewebvitals.io when you use the numbers. Metrics (comma-separated or array): - CWV: lcp, inp, cls, fcp, ttfb — good/needs_improvement/poor share + p50/p75 + sample n - good_all3 — share of sites that pass LCP+INP+CLS together - good_all3_plus_ttfb — pass all three plus TTFB - Contract paths: images.loading, stack.framework, scripts.origin, headers.has_etag, synthetic.tbt_ms, … Filter (optional AND): device, cms, framework, cdn, provider. Omit = all sites in the snapshot. Group_by (optional): cms | frameworks | cdn | analytics | tag_managers | … → one row per entity. Without group_by: one aggregate; set metrics return top categories.

Input Schema

{
  "type": "object",
  "properties": {
    "metrics": {
      "description": "Metrics to return. Default: lcp,inp,cls,ttfb,good_all3. String (comma-separated) or array of strings."
    },
    "filter": {
      "type": "object",
      "description": "AND filters. Omit for all sites in the dataset. Keys: device (all|phone|desktop), cms, framework, cdn, provider (key), provider_category (e.g. analytics — use with provider or alone is not enough; prefer group_by for rankings).",
      "properties": {
        "device": {
          "type": "string",
          "enum": [
            "all",
            "phone",
            "desktop"
          ],
          "description": "CrUX device slice. Default: all."
        },
        "cms": {
          "type": "string",
          "description": "Only sites on this CMS key (wordpress, shopify, wix, …)."
        },
        "framework": {
          "type": "string",
          "description": "Only sites that include this JS framework key (react, vue, jquery, …)."
        },
        "cdn": {
          "type": "string",
          "description": "Only sites on this CDN key (cloudflare, origin, …)."
        },
        "provider": {
          "type": "string",
          "description": "Only sites that load this third-party provider key (google_analytics_4, …)."
        }
      },
      "additionalProperties": false
    },
    "group_by": {
      "type": "string",
      "description": "Break results down by this dimension: cms, frameworks, cdn, or a provider category (analytics, tag_managers, …). Omit for a single aggregate."
    },
    "focus": {
      "type": "string",
      "enum": [
        "lcp",
        "inp",
        "cls",
        "fcp",
        "ttfb"
      ],
      "description": "CWV used when correlating technique metrics. Default: lcp."
    },
    "limit": {
      "type": "integer",
      "description": "Max groups or top categories. Default: 25, max: 100."
    },
    "min_sites": {
      "type": "integer",
      "description": "When group_by is set, drop groups with fewer sites. Default: 50."
    }
  }
}
🟢get_histogram(metric, filter)

What is the shape of one metric? Returns histogram buckets (count + share) plus summary stats. Metric: one of lcp, inp, cls, fcp, ttfb (field CWV), or a scalar technique path when available. Filter: same as get_metrics (device, cms, framework, cdn, provider). No group_by — call get_metrics with group_by to compare segments, then get_histogram per segment if needed.

Input Schema

{
  "type": "object",
  "properties": {
    "metric": {
      "type": "string",
      "description": "lcp | inp | cls | fcp | ttfb, or a contract scalar path."
    },
    "filter": {
      "type": "object",
      "description": "AND filters. Omit for all sites in the dataset. Keys: device (all|phone|desktop), cms, framework, cdn, provider (key), provider_category (e.g. analytics — use with provider or alone is not enough; prefer group_by for rankings).",
      "properties": {
        "device": {
          "type": "string",
          "enum": [
            "all",
            "phone",
            "desktop"
          ],
          "description": "CrUX device slice. Default: all."
        },
        "cms": {
          "type": "string",
          "description": "Only sites on this CMS key (wordpress, shopify, wix, …)."
        },
        "framework": {
          "type": "string",
          "description": "Only sites that include this JS framework key (react, vue, jquery, …)."
        },
        "cdn": {
          "type": "string",
          "description": "Only sites on this CDN key (cloudflare, origin, …)."
        },
        "provider": {
          "type": "string",
          "description": "Only sites that load this third-party provider key (google_analytics_4, …)."
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "metric"
  ]
}
🟢list_options(kind, include_paths)

Discover what you can pass to get_metrics / get_histogram: filter keys, group_by values, built-in metrics, and contract metric paths (optional kind filter). Call this when unsure of a key or path.

Input Schema

{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "description": "Optional contract kind: scalar, boolean, categorical, set, weighted_set, measures."
    },
    "include_paths": {
      "type": "boolean",
      "description": "Include full contract path list. Default true."
    }
  }
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded3 tools
verifiedversion not recorded3 tools
verifiedversion not recorded3 tools