Get in touch
AI Lab — eCommerce SEO

We Built a CrUX MCP Server — Real Core Web Vitals Field Data, Directly in Claude Code

What Google actually measures for ranking isn’t in your Lighthouse report. It’s in the Chrome User Experience Report — 28 days of real user data, p75 percentile, split by device. This MCP server makes that field data queryable in seconds.

AR
Axel Rübenhagen
The Seventy 2 Digital
8 min read Chrome UX Report · Core Web Vitals · MCP
CrUX at a glance
28 daysRolling window — always real user data
p75The percentile Google uses to assess CWV
3 of 3All CWV metrics must be “good” — one NI = fail
Figure 1 — Why CrUX and PSI give different answers. The lab measures a moment; CrUX measures four weeks of real users.

01The PSI Paradox

Every SEO team knows the situation: PageSpeed Insights shows 94 on Mobile — all green. Two weeks later, Search Console flags a Core Web Vitals warning for the same page.

No bug. No error. That’s the difference between lab data and field data.

PageSpeed Insights (Lab)CrUX (Field)
Data sourceSimulated test machineReal Chrome users
Device profileFixed (Mobile 4G, throttled)All real devices and connections
Form factorSingle viewMobile / Desktop / Tablet separate
Refresh rateEvery test run28-day rolling window
What Google uses✗ Not for CWV ranking✓ Direct ranking input
Feedback latencyInstant28 days to full visibility

PageSpeed Insights is indispensable for diagnosis and optimisation — but it is not what Google uses for its ranking algorithm. For that, you need CrUX.

02What CrUX Actually Measures

CrUX (Chrome User Experience Report) is Google’s collection of field data from real Chrome users (Real-User Monitoring, RUM) — aggregated over 28 days — used to assess Core Web Vitals at URL or origin level. Users who have opted into performance reporting contribute automatically, without any personally identifiable data being collected.

Three properties make CrUX relevant for SEO:

  • 28-day rolling window. The current dataset always covers the last 28 days. No cut-off date, no monthly report — rolling, continuous.
  • p75 — not the average. Google assesses the 75th percentile, not the median: 75% of users experience this metric at least as well, 25% experience it worse. Ignoring that bottom quartile produces false-positive assessments.
  • Form factor split. CrUX can be queried separately for Mobile, Desktop, and Tablet. The aggregated “ALL” view often hides completely different problems for mobile and desktop users.

The five CrUX metrics:

MetricCodeGoodNIPoor
Largest Contentful PaintLCP≤ 2,500 ms2,500–4,000 ms> 4,000 ms
Cumulative Layout ShiftCLS≤ 0.100.10–0.25> 0.25
Interaction to Next PaintINP≤ 200 ms200–500 ms> 500 ms
First Contentful PaintFCP≤ 1,800 ms1,800–3,000 ms> 3,000 ms
Time to First ByteTTFB≤ 800 ms800–1,800 ms> 1,800 ms

LCP, CLS, and INP are the three Core Web Vitals — all three must be “good” for an origin to pass CWV.

03The Stack

The MCP server is written in Python, runs locally, and is wired into Claude Code. The core framework is FastMCP — the same foundation as our Keyword and GSC servers.

The CrUX stack
Source
Google Chrome Users
Anonymised field measurement via opt-in performance reporting.
API
CrUX API (Google)
Free · same API key as PageSpeed Insights · Chrome UX Report API must be enabled in GCP project.
Connector
Python FastMCP — seo_crux_query
Origin or URL · form factor filter (PHONE / DESKTOP / TABLET / ALL) · returns p75, histogram buckets, and cwv_pass flag.
Session
Claude Code MCP
Enable the server once — CrUX field data is then available directly in any analysis session.
Figure 2 — The CrUX stack. Four components; the only requirement is a Google API key with the Chrome UX Report API enabled — no separate contract, no additional cost.

A typical call:

seo_crux_query("https://example.com", form_factor="PHONE")

Returns: p75 values for all available metrics, good/NI/poor rating, histogram buckets (share of users in each bucket), and a cwv_pass flag. If the origin lacks sufficient traffic, the API returns 404 — the most honest answer CrUX can give.

04Two Brands, One Pattern

Two eCommerce brands, both mobile-heavy. Both failing CWV. And both with completely different problems — depending on the device.

Brand A (Snapshot · 2026-05-30 → 2026-06-26)

MetricMobile (84%)Desktop (13%)Note
LCP2,903 ms ⚠️ NI2,403 ms ✅ GoodMobile problem
CLS0.02 ✅ Good0.17 ⚠️ NIDesktop problem
INP194 ms ✅ Good114 ms ✅ GoodBoth fine
TTFB1,601 ms ⚠️ NI1,456 ms ⚠️ NIServer-side
CWV❌ Fail❌ Fail

The aggregated “ALL” shows LCP at 2,891 ms — Needs Improvement. Unremarkable. Only the form factor split reveals: mobile fails on LCP, desktop fails on CLS — two different root causes, two different optimisation tracks.

Brand B (Snapshot · 2026-05-30 → 2026-06-26)

MetricMobile (86%)Desktop (13%)Note
LCP4,270 ms ❌ Poor2,797 ms ⚠️ NICritical on mobile
CLS0.08 ✅ Good0.39 ❌ PoorDesktop problem
INP537 ms ❌ Poor344 ms ⚠️ NICritical on mobile
TTFB3,129 ms ❌ Poor2,318 ms ❌ PoorInfrastructure issue
CWV❌ Fail❌ Fail

Brand B is significantly more critical: LCP, INP, and TTFB are Poor on Mobile. Desktop fails on CLS at 0.39. A TTFB of over 3 seconds on Mobile points to a fundamental server speed or CDN issue — all other metrics suffer as a consequence.

The form factor signal
  • 01The aggregated “ALL” averages across all device types. With 84–86% mobile share, mobile dominates — desktop problems disappear statistically.
  • 02Brand A: mobile fails on LCP (image load time), desktop fails on CLS (layout shift). Both problems require different fixes.
  • 03Brand B: TTFB > 3 sec on mobile is an infrastructure problem. No frontend fix resolves it — the root cause sits before the first byte.

05The History Behind the Numbers

A snapshot shows the current state. CrUX history shows why the current state exists.

Brand A — Recovery with Silent Regression

DateLCP p75StatusWhat happened
2025-12-074,026 ms❌ PoorBaseline — critical
2025-12-213,614 ms❌ PoorSlight improvement
2026-01-253,643 ms❌ PoorNew year effect
2026-02-223,142 ms❌ PoorPerformance push visible
2026-04-122,686 ms⚠️ NIBest result — close to “good”
2026-05-242,895 ms⚠️ NISilent regression since April

Between December and April, LCP improved by 33% — from Poor to nearly Good. Since April the value has been drifting back with no visible triggering event. The classic silent regression: no deployment, no obvious change — but something shifted.

Brand B — No Recovery in Sight

DateLCP p75StatusWhat happened
2025-12-072,752 ms⚠️ NIStill acceptable
2026-01-043,508 ms❌ PoorCrosses into Poor territory
2026-01-184,058 ms❌ PoorWorst point so far
2026-02-223,514 ms❌ PoorNo real recovery
2026-04-123,709 ms❌ PoorStagnation at high level
2026-05-244,073 ms❌ PoorNew all-time low

Brand B was still in the NI range in December — 25 weeks later LCP is Poor and getting worse. The TTFB history shows the same pattern: from 2,259 ms in December to 3,052 ms in May. No corrective action visible.

A single PSI run would have shown neither of these trajectories — neither the recovery nor the uninterrupted decline.

06What Google Actually Measures for Ranking

The CWV report in Google Search Console is not an approximation of CrUX data — it is CrUX data. Core Web Vitals aren’t the only ranking factor. But they are a measurable part of Page Experience — and the only one Google backs with real user data.

Three practical implications:

  • The 28-day lag is real. An optimisation that goes live today takes 28 days to be fully visible in the CrUX window. A PSI improvement is measurable immediately; a CWV improvement in Search Console only appears fully after a month.
  • CWV is binary. Either all three metrics (LCP, CLS, INP) are “good” — or the origin fails. NI on one metric = fail. There is no “close enough”.
  • Form factor matters. Google’s mobile-first indexing means mobile CrUX data carries the most weight. Brand A and Brand B fail primarily because of their mobile scores — even where desktop partially fares better.
CWV arithmetic
  • 01LCP ≤ 2,500 ms AND CLS ≤ 0.10 AND INP ≤ 200 ms = ✅ CWV passed. All three. Simultaneously.
  • 02Brand A mobile: LCP 2,903 ms = NI → CWV fail. One metric is enough to fail.
  • 03TTFB is not a CWV metric, but it directly drives LCP: a slow first byte means a slow LCP element load. For Brand B (TTFB 3,129 ms on mobile), LCP optimisation is impossible without fixing TTFB first.

07In Client Work

The CrUX server is the ninth module in our MCP stack. When it comes before PSI, when PSI comes first:

  1. Search Console flags a CWV warning → CrUX first: what does Google see right now? Which metric, which device?
  2. Split CrUX by form factor → Query mobile and desktop separately. The aggregated view isn’t wrong, it just hides the detail.
  3. Query CrUX history → When did this problem develop? Was it a deployment event or a silent regression?
  4. PSI for root cause analysis → What exactly is causing the LCP problem? Which element? Which resource type? PSI answers this instantly; CrUX doesn’t.
  5. Deploy the fix, verify via PSI → Immediate lab-based feedback.
  6. Wait 28 days, re-query CrUX → Has the ranking signal improved?

The module set

ModuleFunction
KeywordsSearch volume, competition, CPC, trends
SERPLive top-10 for any keyword
AuthorityDomain authority (Open PageRank)
GSCImpressions, clicks, position
TrendsTime series + rising queries
GeoLocal visibility by region
LighthouseCore Web Vitals & technical audit (lab)
SchemaStructured data validation
CrUX ← NEWCore Web Vitals field data — what Google actually sees

08Why It Matters

Key takeaways
  • 01CrUX is the data source for Google’s CWV ranking signal — not PSI, not Lighthouse. Optimising only lab data means optimising around the ranking signal, not for it.
  • 02The form factor split is not optional. Brand A fails mobile on LCP and desktop on CLS — two completely different root causes. The aggregated “ALL” hides both.
  • 03CrUX history shows what one-off measurements never reveal: the silent post-April regression (Brand A) and the uninterrupted decline with no recovery (Brand B).
  • 04The 28-day lag is not a bug — it’s the system. PSI and CrUX are complementary: PSI for instant feedback, CrUX for what actually counts in ranking.
  • 05One of nine MCP modules — Keywords, SERP, Authority, GSC, Trends, Geo, Lighthouse, Schema, and now CrUX. All in-session, no tool switching.

Let’s
talk.

Got a CTR problem, a migration coming up, or a gap between impressions and revenue? A 30-minute call to talk through what your data shows.

Book a call