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クエリを許可します。デバイス比較は4回の API 呼び出しを行い、オリジンとページの比較は2回行います。

読み取り専用の質問から始めましょう:

https://example.com はモバイルで Core Web Vitals を満たしていますか?

サーバーに接続 · ユースケースを見る · 技術ドキュメントを開く


1分で動作を確認する

あなた: https://example.com/pricing はモバイルで Core Web Vitals を満たしていますか?

アシスタント: p75 の LCP、INP、CLS と、それらの良好/改善が必要/不良の評価、および総合結果を表示します。何も変更されません。

あなた: このページをサイト平均と比較し、モバイルとデスクトップの違いを表示してください。

アシスタント: オリジンと URL を比較し、次にデバイスグループとそのトラフィックシェアを比較します。6つのツールはすべて公開 CrUX データセットのみを読み取ります。

Related MCP server: GSC Analyst Connector

目次

クイックスタート

Node.js 20 以上と、Chrome UX Report API を有効にした Google Cloud API キーが必要です。

  1. 制限付き API キーを作成します。

  2. サーバーを AI アプリに追加します。

  3. 上記の読み取り専用の質問をします。

Settings → Plugins → MCP servers で Add server を選択し、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 ドキュメント

Settings → Developer → Edit Config を開き、{"mcpServers":{"google-crux":{"command":"npx","args":["-y","mcp-google-crux@latest"],"env":{"CRUX_API_KEY":"your_key"}}}} を追加します。

Edit Config が利用できない場合は、macOS では ~/Library/Application Support/Claude/claude_desktop_config.json を、Windows では %APPDATA%\Claude\claude_desktop_config.json を編集します。Claude Desktop MCP ドキュメント

macOS/Linux では ~/.cursor/mcp.json、Windows では %USERPROFILE%\.cursor\mcp.json に {"mcpServers":{"google-crux":{"type":"stdio","command":"npx","args":["-y","mcp-google-crux@latest"],"env":{"CRUX_API_KEY":"your_key"}}}} を追加します。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 を満たしていますか?

  • スマートフォン、デスクトップ、タブレット、全デバイスの結果を比較できます。

  • このページはサイト平均より速いですか、遅いですか?

  • LCP、INP、CLS は過去25週間でどのように変化しましたか?

  • 技術レビューのために、生の CrUX ヒストグラムとパーセンタイルを表示できます。

CrUX データの読み方

CrUX は、毎日更新される28日間のローリングウィンドウを報告します。履歴データは週次で、月曜日に更新されます。重要な値は p75 です。観測された訪問の75%がこの値以下です。get_core_web_vitals はメトリクスのしきい値を解釈します。生レコードツールは完全なヒストグラムと密度割合を公開します。

データがないことはサイトが壊れていることを意味しません。そのオリジン、URL、またはデバイスグループに対して、Google が十分に大きな公開 Chrome ユーザーサンプルを持っていないことを意味します。タブレットや個別の URL にはデータがないことがよくあります。

アクセス権の取得

  1. Google Cloud Console でプロジェクトを作成または選択します。CrUX には課金アカウントは不要です。

  2. Chrome UX Report API を有効にします。

  3. APIs & Services → Credentials で 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 を設定します。

技術ドキュメント

サポート

バグを見つけた場合やシナリオが必要な場合は、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