Skip to main content
Glama
A1-x-Tech

Google CrUX MCP

Google CrUX MCP

English | Русский

npm CI Glama License: MIT

A1 Google CrUX MCP 将真实用户的 Core Web Vitals 数据带入 AI 应用。检查某个公开网站或页面是否通过 LCP、INP 和 CLS,对比移动端与桌面端,并查看指标随时间的变化情况。

它读取的是 Google 的 Chrome UX Report 数据集——从 Chrome 用户收集的现场数据,不是合成速度测试,也无法改变你的网站。

  • 6 个只读工具。 Core Web Vitals 评估、设备对比、来源与页面对比、40 周趋势以及原始最新或历史记录。

  • 真实用户数据。 它与 PageSpeed Insights 和 Google 的 Core Web Vitals 指标使用的 CrUX 现场数据相同。

  • 清晰的可用性边界。 只有拥有足够真实用户流量的公开来源和 URL 才有数据;no_data 是有效结果。

  • 已知配额成本。 CrUX 每个项目每分钟允许 150 次查询。设备对比需要四次 API 调用;来源与页面对比需要两次。

从一个只读问题开始:

https://example.com 在移动端是否通过 Core Web Vitals?

连接服务器 · 探索用例 · 打开技术文档


一分钟体验

你: https://example.com/pricing 在移动端是否通过 Core Web Vitals?

助手: 显示 p75 LCP、INP 和 CLS,它们的良好/需要改进/较差评级以及总体结果。不会改变任何内容。

你: 将此页面与站点平均值进行比较,并展示移动端与桌面端的差异。

助手: 比较来源和 URL,然后比较设备组及其流量占比。所有六个工具都只读取公开的 CrUX 数据集。

Related MCP server: GSC Analyst Connector

目录

快速开始

你需要 Node.js 20+ 和已启用 Chrome UX Report API 的 Google Cloud API 密钥。

  1. 创建受限 API 密钥。

  2. 将服务器添加到你的 AI 应用。

  3. 提出上面的只读问题。

在 设置 → 插件 → MCP 服务器 中,选择 添加服务器,然后使用 CRUX_API_KEY 添加 npx -y mcp-google-crux@latest。

codex mcp add google-crux --env CRUX_API_KEY=your_key -- npx -y mcp-google-crux@latest
codex mcp list

Codex MCP 文档

claude mcp add --env CRUX_API_KEY=your_key --transport stdio --scope user google-crux -- npx -y mcp-google-crux@latest
claude mcp list

Claude Code MCP 文档

打开 设置 → 开发者 → 编辑配置 并添加 {"mcpServers":{"google-crux":{"command":"npx","args":["-y","mcp-google-crux@latest"],"env":{"CRUX_API_KEY":"your_key"}}}}。

如果 编辑配置 不可用,请在 macOS 上编辑 ~/Library/Application Support/Claude/claude_desktop_config.json,或在 Windows 上编辑 %APPDATA%\Claude\claude_desktop_config.json。Claude Desktop MCP 文档

将 {"mcpServers":{"google-crux":{"type":"stdio","command":"npx","args":["-y","mcp-google-crux@latest"],"env":{"CRUX_API_KEY":"your_key"}}}} 添加到 macOS/Linux 上的 ~/.cursor/mcp.json,或 Windows 上的 %USERPROFILE%\.cursor\mcp.json。Cursor MCP 文档

运行 MCP: Open User Configuration 并添加:

{"servers":{"google-crux":{"type":"stdio","command":"npx","args":["-y","mcp-google-crux@latest"],"env":{"CRUX_API_KEY":"${input:crux_api_key}"}}},"inputs":[{"type":"promptString","id":"crux_api_key","description":"Google Cloud API key","password":true}]}

使用 MCP: List Servers 检查。VS Code MCP 文档

你可以让它做什么

  • 这个公开来源或 URL 是否通过 Core Web Vitals?

  • 比较手机、桌面、平板和所有设备的结果。

  • 这个页面比站点平均值更快还是更慢?

  • 过去 25 周里 LCP、INP 和 CLS 如何变化?

  • 显示原始 CrUX 直方图和百分位数,供技术审查使用。

如何阅读 CrUX 数据

CrUX 报告一个滚动 28 天窗口,每日更新。历史数据按周提供,每周一更新。关键值是 p75:75% 的观测访问量等于或低于该值。get_core_web_vitals 会为你解读指标阈值;原始记录工具则暴露完整的直方图和密度分数。

没有数据并不意味着网站有问题。它意味着 Google 没有针对该来源、URL 或设备组的足够大的公开 Chrome 用户样本。平板设备和单个 URL 通常没有数据。

获取访问权限

  1. 在 Google Cloud Console 中创建或选择一个项目;CrUX 不需要结算账户。

  2. 启用 Chrome UX Report API。

  3. 在 API 和服务 → 凭据 中创建 API 密钥。

  4. 将密钥限制为 Chrome UX Report API,并将其作为 CRUX_API_KEY 传递。

该密钥存储在 MCP 客户端配置中,会通过 API 请求 URL 发送,因此请将其视为密码。

配置

变量

必需

描述

CRUX_API_KEY

是

已启用 Chrome UX Report API 的 Google Cloud 密钥。

CRUX_API_BASE

否

API 基础 URL 覆盖。

CRUX_TIMEOUT_MS

否

每次请求超时;默认 30000 毫秒。

CRUX_MAX_RETRIES

否

429、5xx 和网络故障的重试次数;默认 3。

数据、限制和后台工作

  • 只读公共数据集。 服务器不能更改网站、Search Console、CrUX 记录或 Google 排名。

  • 感知配额的重试。 它会退避重试 429、5xx 和网络错误。在规划每分钟 150 次查询的项目配额时,请将组合比较考虑在内。

  • 无后台监控。 服务器只在被调用时工作。如果你的 AI 应用支持计划任务,它就可以创建定期性能报告。

  • 匿名遥测。 它发送安装和版本数据以及工具名称,绝不发送 API 密钥、查询的 URL、结果、参数或提示。设置 ASKADS_TELEMETRY=0 即可选择退出。

技术文档

支持

发现 bug 或需要某个场景?创建 issue 或在 Telegram 中留言。

Available Tools

6 tools
compare_form_factorsPhone vs desktop vs tabletA
Read-onlyIdempotent

Compares real-user performance across device classes for an origin or URL: one aggregated all-devices record plus phone, desktop and tablet records (4 API requests = 4 quota units of the 150/min budget). Per device: p75 + rating per metric; traffic_share gives each device's fraction of page loads (from the unfiltered form_factors metric). Devices without enough data come back as {no_data: true} — expected for tablet almost always. Default metrics: the three Core Web Vitals. Provide exactly one of origin or url.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA specific page URL, e.g. https://example.com/pricing/. Mutually exclusive with `origin`. Pass the final post-redirect URL (the API does not follow redirects); fragments and query params are stripped by the dataset. Single pages have fewer samples and often have no data — fall back to `origin` on a no_data result.
originNoSite origin — scheme + host only, e.g. https://example.com (no path, no trailing slash). Aggregates real-user data across ALL pages of the site. Mutually exclusive with `url`. http/https and www/non-www are distinct keys; use the canonical variant.
metricsNoMetric names to return; omit for all available metrics. Timings are integer milliseconds; cumulative_layout_shift is a string-encoded double. form_factors is only returned when form_factor is NOT set.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses quota cost (4 API requests = 4 quota units of 150/min), the exact number and type of records returned (all-devices + phone/desktop/tablet), per-metric p75/rating, traffic_share semantics, and no_data behavior for insufficient data. This is rich behavioral context with no contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences long, front-loaded with the core purpose, then packing quota, output structure, no_data semantics, and defaults without waste. Every sentence contributes essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden of explaining return values. It does so clearly: aggregated record plus per-device records, p75+rating per metric, traffic_share, and {no_data: true} for sparse devices. The behavior is fully specified for practical use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage with detailed parameter descriptions, so the baseline is 3. The description adds value by specifying the default metrics ('Default metrics: the three Core Web Vitals') and reinforcing the mutual exclusivity of origin/url. It does not need to repeat schema details, but the added default behavior justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Compares real-user performance across device classes for an origin or URL', with a specific verb ('compares') and resource ('device classes'). It distinguishes itself from siblings by focusing on phone/desktop/tablet breakdown, reinforced by the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context on what the tool does and explicitly states 'Provide exactly one of `origin` or `url`', which is a key usage constraint. It also notes that tablet often returns no_data, guiding user expectations. However, it does not explicitly name alternative tools or state when to prefer this over them, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_origin_vs_urlOrigin vs specific pageA
Read-onlyIdempotent

Compares the site-wide origin record against one specific page (2 API requests): p75 + rating per metric for each, so you can tell whether a page is faster or slower than the site average. Either side can come back {no_data: true} (single pages often lack data; redirecting homepages can lack origin data while pages have it). Default metrics: the three Core Web Vitals. Both origin AND url are required here (unlike the other tools).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe page URL to compare against the origin, e.g. https://example.com/pricing/. Required.
originYesSite origin — scheme + host only, e.g. https://example.com. Required.
metricsNoMetric names to return; omit for all available metrics. Timings are integer milliseconds; cumulative_layout_shift is a string-encoded double. form_factors is only returned when form_factor is NOT set.
form_factorNoDevice class filter. Omit for the aggregated record across all devices. tablet traffic is tiny and usually has no data.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds meaningful behavioral details beyond those: it makes 2 API requests, returns p75 + rating per metric, and discloses that either side can return no_data. This gives the agent practical expectations without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at three sentences, with each sentence delivering useful information (purpose, API-request count, no_data behavior, default metrics, required params). It is front-loaded with the core comparison purpose. The only slight issue is the potentially misleading 'default metrics' phrase, but structurally it is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining return value semantics. It does state 'p75 + rating per metric' and covers the no_data edge cases, which is good. However, it omits details about how metrics and form_factor interact, and the contradictory default-metrics comment creates ambiguity. For a moderately complex comparison tool, this is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds emphasis that both origin and url are required (unlike other tools), which is helpful. However, it also states 'Default metrics: the three Core Web Vitals,' which directly contradicts the schema's instruction that omitting metrics returns all available metrics. This inconsistency confuses the parameter semantics and reduces the score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('compares') and clearly identifies the two resources ('site-wide origin record' vs 'one specific page'). It also distinguishes from sibling tools by noting that both origin and url are required here, unlike the other tools. This makes the tool's unique purpose immediately evident.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining the comparison goal ('tell whether a page is faster or slower than the site average') and useful caveats around no_data. However, it does not explicitly name alternative tools or state when not to use this tool, though the 'unlike the other tools' hint partially addresses this. This is strong but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_core_web_vitalsCore Web Vitals assessmentA
Read-onlyIdempotent

One-call Core Web Vitals assessment for an origin or URL over the latest 28-day window. Per metric (LCP, INP, CLS + diagnostic FCP and TTFB): p75, rating (good | needs-improvement | poor, web.dev thresholds: LCP ≤2500ms/>4000ms, INP ≤200ms/>500ms, CLS ≤0.10/>0.25) and the good/needs_improvement/poor user-experience densities (~sum 1.0). passes_core_web_vitals is true when all three CWV rate good. Timings are ms; CLS is unitless. Returns {no_data: true} when the origin/URL has insufficient traffic in CrUX. Provide exactly one of origin or url.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA specific page URL, e.g. https://example.com/pricing/. Mutually exclusive with `origin`. Pass the final post-redirect URL (the API does not follow redirects); fragments and query params are stripped by the dataset. Single pages have fewer samples and often have no data — fall back to `origin` on a no_data result.
originNoSite origin — scheme + host only, e.g. https://example.com (no path, no trailing slash). Aggregates real-user data across ALL pages of the site. Mutually exclusive with `url`. http/https and www/non-www are distinct keys; use the canonical variant.
form_factorNoDevice class filter. Omit for the aggregated record across all devices. tablet traffic is tiny and usually has no data.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a safe read operation (readOnlyHint, idempotentHint, non-destructive), but the description goes far beyond by disclosing exact output format (p75, ratings, densities summing to ~1.0), thresholds, passes_core_web_vitals definition, failure mode ({no_data: true}), and data quirks (redirects, key normalization, sparse tablet/single-page data). This is rich behavioral context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: a one-line purpose, then metric/threshold details, then edge cases and input constraints. It is front-loaded and free of filler, achieving high information density without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, but the description fully defines what the agent will receive: which metrics, thresholds, ratings, densities, pass criteria, and the no_data response. It also covers input selection and data caveats, making it self-sufficient for correct invocation despite the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with detailed field descriptions for url, origin, and form_factor, including mutual exclusivity and canonical key guidance. The description adds minimal parameter-specific value beyond reinforcing these points; extra details like timing units and CLS unitless concern the output, not the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific one-call Core Web Vitals assessment for an origin or URL over the latest 28-day window, clearly identifying the resource and scope. It further distinguishes itself from siblings by detailing the snapshot metrics (p75, ratings, densities) and pass/fail logic, which differs from trend or comparison tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear operational context: exactly one of origin or url, when to fall back from url to origin, and optional form_factor usage. It does not explicitly name alternative sibling tools or state when not to use this tool, but the 28-day snapshot framing implies its use case, and the origin/url guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cwv_trendCore Web Vitals trendA
Read-onlyIdempotent

Weekly p75 trend for an origin or URL from the CrUX History API (1 request). Per metric: points — array of {period_end, p75, rating}, one per week (each week is a 28-day rolling window ending on period_end; ineligible weeks are skipped), and delta — first vs last p75 with direction improved | regressed | stable (lower is always better). Default metrics: the three Core Web Vitals; weeks caps the history depth (1..40, default 25). History data updates on Mondays. Returns {no_data: true} when CrUX has no data. Provide exactly one of origin or url.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA specific page URL, e.g. https://example.com/pricing/. Mutually exclusive with `origin`. Pass the final post-redirect URL (the API does not follow redirects); fragments and query params are stripped by the dataset. Single pages have fewer samples and often have no data — fall back to `origin` on a no_data result.
weeksNoHow many weekly periods of history to analyze (1..40; default 25).
originNoSite origin — scheme + host only, e.g. https://example.com (no path, no trailing slash). Aggregates real-user data across ALL pages of the site. Mutually exclusive with `url`. http/https and www/non-www are distinct keys; use the canonical variant.
metricsNoMetrics to trend (only p75-bearing metrics); default: the three Core Web Vitals (largest_contentful_paint, interaction_to_next_paint, cumulative_layout_shift).
form_factorNoDevice class filter. Omit for the aggregated record across all devices. tablet traffic is tiny and usually has no data.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool safe (readOnly, idempotent, non-destructive). The description adds substantial behavioral detail: exactly 1 API request, 28-day rolling window semantics, ineligible week skipping, Monday data updates, and a {no_data: true} response payload. This is high-value context beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a dense but well-organized paragraph. It front-loads the core purpose, then packs essential details about response shape, defaults, data freshness, and constraints. No word is wasted; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 optional parameters and no output schema, the description fully compensates by specifying the response structure ('points' array, 'delta' with direction), the no-data payload, update cycle, and per-parameter guidance embedded in the schema. The tool is complex, and the description makes it self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter already fully described in the input schema (mutual exclusion, defaults, enum restrictions, formatting rules). The description mostly adds output interpretation ('lower is always better', 'ineligible weeks are skipped') rather than parameter-level meaning, so it does not raise above the high-coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific, action-oriented statement: 'Weekly p75 trend for an origin or URL from the CrUX History API (1 request).' This clearly names the resource (CrUX History API), the scope (origin or URL), and the granularity (weekly p75), which distinguishes it from siblings like get_core_web_vitals or compare_form_factors.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear usage context: 'Provide exactly one of origin or url', fallback guidance for no_data, a note on update cadence, and parameter caps. It does not explicitly name alternative sibling tools or state 'use this instead of X', so it misses the top tier for alternative differentiation, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_history_recordCrUX weekly timeseries (raw)A
Read-onlyIdempotent

Returns the weekly CrUX timeseries for an origin or URL (raw API response, updated Mondays ~04:00 UTC): up to 40 collection periods, each a 28-day rolling window. Per metric: histogramTimeseries (bins with densities arrays), percentilesTimeseries.p75s and fractionTimeseries; all series align with record.collectionPeriods. Ineligible periods appear as null p75s and "NaN" densities — tolerate non-numeric entries. A no-data answer (HTTP 404) is returned as {no_data: true}. Prefer get_cwv_trend for a cleaned p75 trend.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA specific page URL, e.g. https://example.com/pricing/. Mutually exclusive with `origin`. Pass the final post-redirect URL (the API does not follow redirects); fragments and query params are stripped by the dataset. Single pages have fewer samples and often have no data — fall back to `origin` on a no_data result.
originNoSite origin — scheme + host only, e.g. https://example.com (no path, no trailing slash). Aggregates real-user data across ALL pages of the site. Mutually exclusive with `url`. http/https and www/non-www are distinct keys; use the canonical variant.
metricsNoMetric names to return; omit for all available metrics. Timings are integer milliseconds; cumulative_layout_shift is a string-encoded double. form_factors is only returned when form_factor is NOT set.
form_factorNoDevice class filter. Omit for the aggregated record across all devices. tablet traffic is tiny and usually has no data.
collection_period_countNoHow many weekly collection periods to return (1..40; API default 25).

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent behaviors. The description adds substantial context beyond annotations: update schedule (Mondays ~04:00 UTC), 28-day rolling windows, data structure (histogramTimeseries, percentilesTimeseries), null/NaN handling, and 404→{no_data:true}. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences front-load the purpose. Every clause adds value: raw format, cadence, period count, data shape, edge cases, and sibling pointer. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex raw-timeseries tool with 5 parameters and no output schema. The description covers output structure, series alignment, non-numeric values, no-data response, and alternative tool, making it complete enough for correct selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline 3 applies. The description mentions 'origin or URL' and 'collection periods' but does not add parameter-specific semantics beyond the schema's already thorough descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Returns the weekly CrUX timeseries for an origin or URL'. It clearly identifies the raw API nature and distinguishes from siblings by explicitly recommending get_cwv_trend for a cleaned p75 trend.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

An explicit alternative is provided: 'Prefer get_cwv_trend for a cleaned p75 trend', implying this tool for raw timeseries. It also gives practical usage caveats like no-data fallback to origin and update cadence, clarifying when to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_recordLatest CrUX record (raw)A
Read-onlyIdempotent

Returns the latest 28-day rolling CrUX record for an origin or URL (raw API response, updated daily ~04:00 UTC). Per metric: histogram (3 bins good/needs-improvement/poor with density), percentiles.p75, and for enum metrics fractions. Timings are integer ms; cumulative_layout_shift p75 is a string-encoded double (e.g. "0.05"). collectionPeriod always spans 28 days. urlNormalizationDetails appears if the URL was normalized (e.g. fragment stripped). A no-data answer (HTTP 404) is returned as {no_data: true} — not an error. Prefer get_core_web_vitals for a ready-made assessment; use this for full histograms/fractions.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoA specific page URL, e.g. https://example.com/pricing/. Mutually exclusive with `origin`. Pass the final post-redirect URL (the API does not follow redirects); fragments and query params are stripped by the dataset. Single pages have fewer samples and often have no data — fall back to `origin` on a no_data result.
originNoSite origin — scheme + host only, e.g. https://example.com (no path, no trailing slash). Aggregates real-user data across ALL pages of the site. Mutually exclusive with `url`. http/https and www/non-www are distinct keys; use the canonical variant.
metricsNoMetric names to return; omit for all available metrics. Timings are integer milliseconds; cumulative_layout_shift is a string-encoded double. form_factors is only returned when form_factor is NOT set.
form_factorNoDevice class filter. Omit for the aggregated record across all devices. tablet traffic is tiny and usually has no data.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, but the description goes well beyond that by detailing the response structure (histogram bins, percentiles, fractions), data types (integer ms, string-encoded double for CLS), invariants (collectionPeriod always 28 days), normalization behavior, and the surprising '404 as {no_data:true}' convention. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Seven sentences, each earning its place: purpose, response structure, type details, invariants, normalization, no-data handling, and alternative tool guidance. Front-loaded with the core purpose, no fluff or repetition, and logically organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must compensate, and it does thoroughly: it covers the response object's shape (histogram, percentiles, fractions), field types, edge cases (urlNormalizationDetails, no_data), and usage context (origin vs URL, fallback). This is more than sufficient for an agent to invoke the tool and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%—each parameter (url, origin, metrics, form_factor) already has detailed descriptions covering mutual exclusivity, redirect behavior, fragment stripping, and device-class caveats. The tool description itself adds no parameter-specific meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Returns the latest 28-day rolling CrUX record'), clarifies it is the raw API response, and explicitly contrasts it with get_core_web_vitals ('ready-made assessment' vs 'full histograms/fractions'), making it clearly distinct from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It directly names the alternative tool get_core_web_vitals and states when to prefer one over the other. It also adds practical guidance about no-data answers (404 as {no_data: true}) and the daily update cadence, helping agents decide when to use this tool and how to handle expected outcomes.

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.

  1. 6 tool updatesv0.1.0
    • First observedcompare_form_factors
    • First observedcompare_origin_vs_url
    • First observedget_core_web_vitals
    • First observedget_cwv_trend
    • First observedquery_history_record
    • First observedquery_record

TDQS

A4.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: processed current assessment (get_core_web_vitals), device comparison (compare_form_factors), origin vs URL comparison (compare_origin_vs_url), historical trend (get_cwv_trend), and raw current/historical API queries (query_record, query_history_record). The processed/raw pairs are explicitly differentiated by use cases, leaving no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, with get_ for processed views, compare_ for comparisons, and query_ for raw API access. The naming clearly signals the action and domain, and while 'get_cwv_trend' uses an acronym, it remains consistent with the pattern.

Tool Count5/5

Six tools is a well-scoped count for a specialized CrUX server. Each tool fills a distinct niche—current, historical, comparisons, and raw access—without redundancy or bloat. The count is neither too thin nor excessive for the domain.

Completeness5/5

The tool set covers the core CrUX workflows comprehensively: single-point assessment, trend analysis, cross-device comparison, origin vs page comparison, and raw data access for custom analysis. There are no obvious dead ends or missing operations for the stated purpose of accessing CrUX data.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Core 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.
    4
    11 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying Google Search Console data, including search analytics with advanced filtering, quick wins detection, and rich dimensions, through natural language.
    5,508 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Chrome UX Report, providing real-user Core Web Vitals (LCP, INP, CLS) and historical trends for any origin or URL via natural language queries.
    3
    2
    MIT