Skip to main content
Glama
GermaniU

ga4-seo-mcp

by GermaniU

English · Español

ga4-seo-mcp — site measurement for AI agents, end to end

Get a site's measurement ready end to end: GA4 + Search Console + PageSpeed, with optional, guarded writes. An open source Model Context Protocol server for Google Analytics 4 & Search Console. Most MCP servers for Google read your data; this one can also set it up: property, web stream, key events, custom dimensions, Search Console DNS verification, sitemap and a PageSpeed baseline — read-only until you say otherwise.

License: MIT MCP Python CI PRs Welcome

Tags: mcp-server · ga4 · google-analytics · search-console · seo · pagespeed · core-web-vitals · keyword-research · claude-code · cursor


💡 Why this one?

Launching a site means the same chores every time: create the GA4 property and its web stream, mark the key events, register custom dimensions, add the domain to Search Console, publish a DNS TXT record, verify it, submit the sitemap, and record a PageSpeed baseline. ga4-seo-mcp turns that into one plan your agent shows you, and one confirmation.

ga4-seo-mcp

Google's official GA4 MCP

search-console-mcp

google-seo-mcp

GA4 reports (Data API)

✅

✅

✅

✅

Search Console

✅

—

✅ (+ Bing)

✅

PageSpeed Insights / CrUX

✅

—

✅

✅

Create GA4 property + web stream

✅

—

—

—

Create key events / custom dimensions

✅

—

—

✅

Search Console DNS verification

✅

—

—

—

One-call site plan → apply (idempotent)

✅ bootstrap_site_measurement

—

—

—

Read-only by default

✅ write tools are not even registered

read-only only

see its docs

✅ read-only mode

Toolsets

✅

—

—

✅

Language

Python

Python

TypeScript

TypeScript

Based on each project's README on 2026-10-19; "—" means we did not find it documented. Corrections welcome. Those projects go wider than this one (Bing, AdSense, WordPress, GEO audits…); this one goes deeper on setting up measurement.

Related MCP server: SEO Analytics MCP Server

🤝 Need this done for you?

This server is built and maintained by Germani Uicab. If you'd rather not run it yourself, ServerStack Solutions can get your GA4 + Search Console measurement ready: a written plan, property and key events configured, the DNS verification and sitemap in place, and a PageSpeed baseline — with a QA pass before handover.


Extras: optional keyword research with DataForSEO (exact long-tail volumes) and Google Ads Keyword Planner (free, bucketed volumes), with es-MX defaults that you can override.


⚡ Quick start

1. Install uv — the client launches the server with uvx; nothing else to install.

2. Log in with the minimum scopes. The CLI prints the exact gcloud command for the toolsets you enable:

uvx ga4-seo-mcp auth-command --client-id-file=oauth-client.json
# gcloud auth application-default login --client-id-file=oauth-client.json --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/analytics.readonly,https://www.googleapis.com/auth/webmasters.readonly

Run the printed command. Google blocks Analytics and Search Console scopes on gcloud's built-in OAuth client, so you need your own (a one-time, few-minute setup) or a service account — both are explained in docs/AUTH.md.

3. Check everything before connecting a client (read-only, changes nothing):

uvx ga4-seo-mcp doctor
# [ok] credentials found: Credentials via Application Default Credentials
# [ok] access token refreshed
# [ok] token has the 2 scope(s) these toolsets need
# [ok] admin: <n> account(s) visible on the first page
# [ok] data: responded (<n> metrics in the schema)
# [ok] gsc: <n> site(s) visible
# [ok] psi: no Google login needed; PAGESPEED_API_KEY set
# all checks passed

4. Add it to your client (Claude Code shown; others below):

claude mcp add ga4-seo -- uvx ga4-seo-mcp

Ask: "List my GA4 properties and show last week's sessions for the first one."

Before the first PyPI release, run it from GitHub instead: uvx --from git+https://github.com/GermaniU/ga4-seo-mcp ga4-seo-mcp.


🧰 Toolsets, scopes and tools

Enable only what you need with --toolsets (or GA4SEO_TOOLSETS). Default: admin,data,gsc,psi. Only the tools of active toolsets are registered, and the OAuth scopes follow.

Toolset

What

Scopes (read-only)

Extra scopes with --enable-writes

Tools (read + write)

admin

GA4 Admin API: accounts, properties, streams, key events, custom dimensions, Ads links, bootstrap_site_measurement

analytics.readonly

analytics.edit

9 + 10

data

GA4 Data API: reports, realtime, top pages, events, traffic sources, portfolio

analytics.readonly

—

8 + 0

gsc

Search Console: queries, pages, sitemaps, domain add + DNS verification

webmasters.readonly

webmasters, siteverification

5 + 3

psi

PageSpeed Insights: Lighthouse lab + CrUX field data

none (PAGESPEED_API_KEY recommended)

—

2 + 0

dataforseo

DataForSEO keyword ideas and exact volumes (paid)

none (DATAFORSEO_LOGIN / DATAFORSEO_PASSWORD)

—

2 + 0

ads

Google Ads Keyword Planner (needs pip install 'ga4-seo-mcp[ads]')

adwords

—

2 + 0

Tool counts from the real registry: 24 with the defaults, 37 with --enable-writes, 8 with --toolsets data, 41 with every toolset and writes. The full list with descriptions is in docs/TOOLS.md (generated from the registry and checked in CI).

Prompts: audit_ga4_setup, seo_360_audit, portfolio_performance_digest and launch_site_measurement (the guided flow: plan → your confirmation → apply → DNS verification → sitemap → PageSpeed baseline).

bootstrap_site_measurement

bootstrap_site_measurement(site_url="https://example.com", account_id="123456789",
                           property_display_name="Example", time_zone="America/Mexico_City",
                           currency_code="USD", key_events=["generate_lead"],
                           custom_dimensions=[{"parameter_name": "plan_type", "display_name": "Plan type"}])
  • apply=False (default): a plan. Read-only and always registered. It finds the existing property and web stream by the site's domain, the key events and custom dimensions already declared, and the Search Console domain property, and lists what would be created.

  • apply=True: executes the plan. Only works when the server runs with --enable-writes; otherwise it fails before touching anything. Idempotent: it skips what exists, so you can re-run it. Returns a step-by-step report with the measurement ID (G-…) and the DNS TXT token.

  • DNS verification (sc_verify_site_dns) and the sitemap (sc_submit_sitemap) stay explicit follow-up steps: you have to publish the TXT record first.


🔒 Security model

Defaults are safe for a single user on a laptop. Details and threat model: SECURITY.md.

  • Read-only by default. Without --enable-writes (or GA4SEO_ENABLE_WRITES=1), tools that create, update, delete, submit or verify are not registered at all — the model cannot call what does not exist.

  • MCP annotations on every tool: readOnlyHint on reads, destructiveHint on deletes and updates, idempotentHint where repeating is harmless, openWorldHint everywhere. Clients that honor them can auto-approve reads and ask before writes.

  • Minimum scopes: each Google client requests only the scope of the call it makes; auth-command asks only for the scopes of your toolsets.

  • HTTP transport (--transport streamable-http): binds to 127.0.0.1, DNS-rebinding protection on, CORS off unless MCP_CORS_ORIGINS, and an optional bearer token MCP_AUTH_TOKEN (401 without it). Listening on 0.0.0.0 without a token prints a warning, and LAN clients need MCP_ALLOWED_HOSTS or the rebinding protection answers 421.

  • Secrets (DataForSEO, Ads developer token, PageSpeed key) come only from environment variables or a chmod 600 file, and are never logged or returned in errors.


⚙️ Configuration

Variable

Default

Description

GOOGLE_APPLICATION_CREDENTIALS

—

Service account key file. Unset = Application Default Credentials from gcloud.

GA4SEO_TOOLSETS

admin,data,gsc,psi

Same as --toolsets.

GA4SEO_ENABLE_WRITES

0

1 = same as --enable-writes.

PAGESPEED_API_KEY

—

Recommended: the anonymous PageSpeed quota is shared and often exhausted (429).

DATAFORSEO_LOGIN, DATAFORSEO_PASSWORD

—

dataforseo toolset.

GOOGLE_ADS_DEVELOPER_TOKEN

—

ads toolset, or ~/.config/ga4-seo-mcp/dev-token with chmod 600.

GOOGLE_ADS_LOGIN_CUSTOMER_ID

—

Only when operating through a manager (MCC) account.

MCP_TRANSPORT

stdio

stdio, streamable-http or sse.

MCP_HOST / MCP_PORT

127.0.0.1 / 8000

HTTP bind address and port. A specific non-loopback address is added to the allowed Host headers; 0.0.0.0 is not, so set MCP_ALLOWED_HOSTS for LAN clients.

MCP_AUTH_TOKEN

—

Require Authorization: Bearer <token> on every HTTP request.

MCP_CORS_ORIGINS

—

Comma-separated exact origins for a browser client. Never *.

MCP_ALLOWED_HOSTS

—

Comma-separated host/IP values clients use (e.g. 192.168.1.10). Required when binding 0.0.0.0 and connecting over the LAN; DNS-rebinding protection rejects everything else with 421.

Copy .env.example as a starting point.


🔌 Connect your client

Every client launches the server over stdio. Add --enable-writes to args only for the session where you actually want to set up a site.

Claude Code

claude mcp add ga4-seo -- uvx ga4-seo-mcp
# with options:
claude mcp add ga4-seo -e PAGESPEED_API_KEY=your-key -- uvx ga4-seo-mcp --toolsets admin,data,gsc,psi

Claude Desktop (claude_desktop_config.json) and Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "ga4-seo": {
      "command": "uvx",
      "args": ["ga4-seo-mcp"],
      "env": { "PAGESPEED_API_KEY": "your-key" }
    }
  }
}

VS Code (.vscode/mcp.json)

{
  "servers": {
    "ga4-seo": {
      "type": "stdio",
      "command": "uvx",
      "args": ["ga4-seo-mcp"]
    }
  }
}

Docker (stdio). Mount your credentials file read-only — the ADC file from gcloud or a service account key — and run as your own user so the container can read a 0600 file:

docker run -i --rm --user "$(id -u):$(id -g)" \
  -v ~/.config/gcloud/application_default_credentials.json:/creds/credentials.json:ro \
  -e GOOGLE_APPLICATION_CREDENTIALS=/creds/credentials.json \
  ghcr.io/germaniu/ga4-seo-mcp

HTTP (several clients sharing one server):

MCP_AUTH_TOKEN=$(openssl rand -hex 32) uvx ga4-seo-mcp --transport streamable-http
# endpoint: http://127.0.0.1:8000/mcp  (send Authorization: Bearer <token>)

🩹 Troubleshooting

Symptom

Cause and fix

This app is blocked / access_denied during gcloud ... login

gcloud's built-in client cannot request Analytics or Search Console scopes. Use your own OAuth client (--client-id-file) and add yourself as a Test User of its consent screen — docs/AUTH.md.

cloud-platform scope is required but not requested

Use the command printed by ga4-seo-mcp auth-command: gcloud needs cloud-platform in the list. The server itself never requests it.

403 ... API has not been used in project

Enable the Google Analytics Admin API, Google Analytics Data API and Search Console API in your quota project, then gcloud auth application-default set-quota-project my-gcp-project.

403 ... does not have sufficient permissions for this property

Add your user (or the service account email) to the GA4 property or Search Console site.

ga4-seo-mcp doctor says the token is missing scopes

You logged in before enabling a toolset or writes. Re-run the auth-command output.

Write tools do not show up

Start the server with --enable-writes. It is off by default on purpose.

PageSpeed Insights error 429

The anonymous quota is shared by everyone. Create an API key and set PAGESPEED_API_KEY.

Keyword Planner volumes look rounded (10, 30, 170, 210…)

Google Ads reports bucketed volume for accounts without active spend. Use the dataforseo toolset for exact numbers.

A deleted GA4 property still appears

delete_property is a soft delete: Google keeps it in the trash for 35 days (list_properties(include_deleted=True)).

HTTP answers 421 Invalid Host header

DNS-rebinding protection. Connect with the host you bound (127.0.0.1/localhost, or the MCP_HOST address).

HTTP answers 401

Send Authorization: Bearer $MCP_AUTH_TOKEN.


📚 Documentation

🧪 Development

uv sync --all-extras
uv run ruff check . && uv run ruff format --check . && uv run pytest
uv run python scripts/smoke_stdio.py --expect 24   # real stdio initialize + tools/list

📄 License

MIT. Not affiliated with or endorsed by Google. Google Analytics, Search Console and PageSpeed Insights are trademarks of Google LLC.

Available Tools

24 tools
audit_portfolioB
Read-only

Summary metrics for several GA4 properties in one call.

Returns sessions, active users, conversions, bounce rate and average session duration per property, plus the properties that failed and why.

Args: property_ids: e.g. ['123456789', '987654321'].

ParametersJSON Schema
NameRequiredDescriptionDefault
date_endNotoday
date_startNo7daysAgo
property_idsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint, openWorldHint), so the bar is lower, and the description adds real behavioral value beyond them: it promises partial-failure reporting ('plus the properties that failed and why'), which tells the agent to expect per-property error entries rather than an all-or-nothing failure. It does not mention rate limits or cost of fanning out across many properties.

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?

Front-loads the purpose in the first line and keeps the returns list tight. The 'Args:' block is minimal and not wasteful, though it slightly duplicates the one parameter already named in prose.

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?

An output schema exists, so explaining return fields is arguably redundant, and the description wisely focuses its extra words on failure reporting. However, with 0% schema coverage the undocumented date range parameters leave the agent guessing about the time window, which is material for a metrics tool.

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 description coverage is 0%, so the description must carry the parameter burden, but it only addresses property_ids (giving an example ID format). The date_start and date_end parameters — including their defaults of '7daysAgo'/'today' and accepted date syntax — are never mentioned, leaving a real gap.

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

Purpose4/5

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

States a specific capability: batched summary metrics across multiple GA4 properties, enumerating the metrics returned (sessions, active users, conversions, bounce rate, avg session duration). This implicitly differentiates it from single-property siblings like run_report or get_property, though it never names those alternatives explicitly.

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

Usage Guidelines3/5

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

The phrase 'in one call' and the plural 'several GA4 properties' imply this is the batch option, but there is no explicit when-to-use/when-not statement or comparison to run_report/conversions_summary. Usage must be inferred from the metric list and plural framing.

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

bootstrap_site_measurementA
Read-only

Plan, and optionally apply, the full measurement setup of a website.

With apply=False (default) nothing is changed: it detects what already exists for the site (GA4 property and web stream matched by the site's domain, key events, custom dimensions, Search Console domain property) and returns the steps that would run. Show this plan to the user and get explicit confirmation before calling apply=True.

With apply=True (requires the server to run with --enable-writes) it creates only the missing pieces, skipping what exists, so it is safe to re-run. It returns a step-by-step report with the GA4 measurement ID (G-...) and the DNS TXT token for Search Console. DNS verification and sitemap submission stay manual follow-up steps (sc_verify_site_dns, sc_submit_sitemap) because the TXT record must be published first.

Args: site_url: the site, e.g. 'https://example.com'. account_id: GA4 account that owns (or will own) the property; see list_account_summaries. property_display_name: name for a new property; also used to find an existing one. time_zone: IANA time zone for a new property, e.g. 'America/Mexico_City'. currency_code: ISO 4217 currency for a new property, e.g. 'USD'. key_events: event names to mark as key events, e.g. ['generate_lead']. custom_dimensions: parameters to register as custom dimensions. apply: False = plan only (default); True = execute the plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
applyNo
site_urlYes
time_zoneYes
account_idYes
key_eventsNo
currency_codeYes
custom_dimensionsNo
property_display_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior1/5

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

The description states that with apply=True the tool 'creates only the missing pieces' (GA4 property, stream, key events, dimensions), which is a write operation, while annotations declare readOnlyHint=true. An agent trusting the annotation could invoke apply=True believing the call is non-mutating. The description's own behavioral content is rich, but it directly contradicts the structured safety hint.

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?

Front-loads the plan-vs-apply distinction, which is the single most important fact, then covers safety, returns, and follow-ups before a clean Args list. It is longer than average, but the length is justified by an 8-parameter dual-mode tool; a little tightening around the repeated 'missing pieces / skipping what exists' phrasing is possible.

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?

For an open-world, potentially-mutating bootstrap tool this covers the mode switch, confirmation requirement, server prerequisite (--enable-writes), idempotency, and manual follow-up steps. An output schema exists, so it correctly does not need to narrate return structure beyond mentioning the G- measurement ID and TXT token.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must carry the parameter burden, and it does: every one of the eight args is documented with meaning, format, or example (site_url URL form, account_id cross-reference to list_account_summaries, IANA time_zone, ISO 4217 currency_code, key_events example, custom_dimensions, and apply's default semantics).

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?

States a specific verb and resource ('Plan, and optionally apply, the full measurement setup of a website') and immediately scopes its domain (GA4 property/stream, key events, custom dimensions, Search Console property). This is clearly distinguishable from sibling read-only lookups like list_properties or list_data_streams.

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?

Gives explicit when-to-use guidance: default apply=False produces a plan that must be shown to the user for confirmation before apply=True. It also names the alternatives for the parts it does not handle (sc_verify_site_dns, sc_submit_sitemap) and explains why they stay manual, so the agent knows exactly where this tool's job ends.

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

conversions_summaryC
Read-only

Conversions and total users per event name: a summary of the active key events.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_endNotoday
date_startNo7daysAgo
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description contributes one real behavioral detail, that results are restricted to active key events, but says nothing about aggregation semantics, row limits, or how zero-conversion events are handled.

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?

A single short sentence with no filler, and the key information (metrics plus grouping dimension) is front-loaded. It is terse to the point of under-specification, but not padded.

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

Completeness2/5

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

An output schema exists, so return values need no explanation, but with three undocumented parameters at 0% coverage and no usage routing against six closely related siblings, the definition is not complete enough to invoke confidently.

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 description coverage is 0% and the description never mentions property_id, date_start, or date_end. The date defaults ('7daysAgo' to 'today') and required property scope are left entirely for the agent to infer, so the description fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific resource (conversions and total users per event name) and scopes it to active key events, which is more informative than a bare restatement of the name. It does not, however, differentiate itself from the sibling events_summary, so an agent cannot tell the two apart from the text alone.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus run_report, events_summary, or top_pages, and no exclusions or prerequisites are given. The only implicit cue is 'active key events', which is a scope statement rather than usage direction.

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

events_summaryA
Read-only

Count of every event that fired, to audit what is actually being measured.

Compare it with list_key_events to find key events that never fire.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
date_endNotoday
date_startNo7daysAgo
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered by structured fields. The description adds the audit framing as context but discloses nothing about result shape, ordering, pagination, or how the limit interacts with counts. Adequate but thin against an already-covered safety profile.

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?

Two short sentences, front-loaded with the core action ('count of every event that fired') followed by the practical follow-up step. No filler or redundancy.

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?

An output schema exists, so return values need not be explained, and the alternative-tool routing is helpful. However, with 0% parameter coverage and no mention of the date window or limit semantics, the definition leaves meaningful operational gaps for calling the tool correctly.

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 description coverage is 0% and the description never mentions any of the four parameters. It is silent on property_id, limit (default 50), and the date_start/date_end defaults ('7daysAgo'/'today'), leaving the agent to infer date-window semantics and whether limit truncates results — a real gap for a counting tool.

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

Purpose4/5

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

The description states a specific action and resource: counting every event that fired, framed as an audit of measurement coverage. It distinguishes itself from the query/report siblings by being a summary-count rather than a detailed breakdown, though it does not explicitly disambiguate against conversions_summary or web_vitals_summary.

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 gives explicit usage context: compare with list_key_events to find key events that never fire. That names a concrete alternative and the condition that motivates it. It stops short of saying when NOT to use this tool or what other siblings to prefer for deeper analysis.

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

get_data_streamB
Read-only

Get one data stream, including the measurement ID of a web stream.

ParametersJSON Schema
NameRequiredDescriptionDefault
stream_idYes
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that the response includes the measurement ID for web streams, which is useful read-shape context, but says nothing about auth, errors, or scoping. With annotations carrying the load, a 3 is appropriate.

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?

A single tight sentence with the core action front-loaded and no filler. It is efficient, though it errs toward under-specification rather than being a model of concise completeness.

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?

An output schema exists, so return-value details are not required, and the safety annotations cover the read profile. However, with two undocumented required parameters at 0% coverage and no usage context, the definition is only barely sufficient for an agent to call it correctly.

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 description coverage is 0% for both required parameters, so the description must compensate and largely does not. 'One data stream' vaguely gestures at stream_id, but property_id is entirely unexplained and no format or ID-source guidance is offered for either.

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

Purpose4/5

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

States a specific verb+resource ('Get one data stream') and adds a useful detail about the measurement ID of a web stream. The singular 'one' implicitly contrasts with the sibling list_data_streams, but it does not explicitly name an alternative, so it falls just short of a 5.

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

Usage Guidelines2/5

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

The description gives no when-to-use context, no prerequisites, and no explicit alternative. An agent could infer 'retrieve a single stream by ID' vs. list_data_streams, but nothing in the text states the selection condition.

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

get_propertyB
Read-only

Get the full settings of a GA4 property (time zone, currency, industry, type).

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety and reach profile is covered. The description adds the returned field set, which is mild extra context, but says nothing about auth requirements, error behavior, or what happens with an invalid/foreign property_id.

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?

A single front-loaded sentence naming the verb, resource, and output fields. No filler and nothing buried.

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

Completeness4/5

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

An output schema exists, so return-value detail is unnecessary, and annotations cover the read-only/open-world profile. For a single-param read, the description is nearly complete, with only the property_id sourcing detail missing.

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 0%, so the description would normally need to compensate, but there is only one self-evident parameter (property_id) and its purpose is clear from the name. Still, the description supplies no format, source, or example for the identifier, so it adds nothing beyond the schema.

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

Purpose4/5

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

States a specific verb (Get) and resource (GA4 property) and enumerates the settings returned (time zone, currency, industry, type). The word 'full settings' implicitly contrasts with the sibling list_properties, but it never names that sibling, so differentiation is left to inference.

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

Usage Guidelines2/5

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

No indication of when to call this versus list_properties or get_data_stream, no prerequisites, and no exclusions. The agent must infer usage purely from the tool name and the surrounding sibling list.

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

list_account_summariesA
Read-only

List every GA4 account you can access, with a summary of its properties.

Start here to find the account_id and property_id the other tools need.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that results are scoped to accessible accounts and include property summaries, but says nothing about volume, pagination, or ordering of a potentially large account list.

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?

Two short sentences, zero filler, with the action and scope front-loaded and the usage hint second. Every sentence earns its place.

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

Completeness4/5

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

With an output schema present, return-value detail is not required, and annotations cover the read-only nature. The description supplies the entry-point role and the IDs it yields, which is what an agent needs; only edge cases like empty access or result size are unaddressed.

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 tool takes zero parameters, so there is nothing for the description to clarify; baseline for a no-parameter tool applies. The description correctly implies a full unfiltered enumeration of accessible accounts.

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?

States a specific verb and resource ('List every GA4 account') plus the payload ('with a summary of its properties'), scoping it to accounts the caller can access. This distinguishes it from list_properties/get_property siblings, which operate on properties rather than the account roll-up.

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?

'Start here to find the account_id and property_id the other tools need' gives explicit entry-point guidance and states why an agent would call it before other tools. It does not name a specific alternative to avoid, but the routing intent is unambiguous.

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

list_custom_dimensionsB
Read-only

List the custom dimensions declared on a GA4 property, with their scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered without the description. The description adds the useful detail that each dimension's scope is returned, but no pagination, auth, or rate-limit behavior. With annotations carrying the safety burden, a 3 is appropriate.

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?

A single front-loaded sentence that names the resource and the extra detail (scope) with zero wasted words.

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?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. However, the required property_id is left completely undefined and there is no usage context, leaving gaps for an agent to call it correctly.

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 description coverage is 0% and the single property_id parameter is undocumented in the schema. The description only implies a GA4 property is targeted, giving no format, source, or example for the required property_id, so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific verb (list) and resource (custom dimensions declared on a GA4 property), plus the notable detail that scope is included. It is clearly distinguishable from siblings like list_properties or list_data_streams, though it does not explicitly name them.

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

Usage Guidelines2/5

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

There is no indication of when to reach for this tool versus the many other list_* siblings, nor any prerequisites (e.g., that a property_id must come from list_properties first). Usage must be inferred from the name alone.

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

list_data_streamsB
Read-only

List the data streams (web, iOS, Android) of a GA4 property.

Web streams include their measurement ID (G-XXXXXXX) and default URI.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful content about what web streams contain (measurement ID, default URI), but says nothing about pagination, ordering, or what happens for a property with no streams.

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?

Two short sentences, front-loaded with the core action and scope; the second sentence adds non-redundant detail about web stream contents. No filler.

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?

The output schema carries the return-value burden, and annotations cover the read-only/no-side-effect profile, so the description is nearly sufficient for a simple one-param list tool. The remaining gap is the undocumented property_id format, which neither schema nor description resolves.

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 schema provides no description for property_id (0% coverage), and the description only implies it through 'of a GA4 property'. It does not state the expected ID format (numeric vs. 'properties/123'), which is the main thing an agent needs for this single required parameter.

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

Purpose4/5

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

States a specific verb and resource ('List the data streams') scoped to a GA4 property, and enumerates the stream types (web, iOS, Android). It is distinguishable from the singular sibling get_data_stream, though it never names that sibling explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. It never tells the agent to prefer get_data_stream for a single stream, nor when this list should be called versus list_properties or get_property to discover a property.

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

list_key_eventsC
Read-only

List the key events (formerly conversions) declared on a GA4 property.

ParametersJSON Schema
NameRequiredDescriptionDefault
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds no behavioral context beyond that – no pagination behavior, no mention that property_id is required, no scoping or auth notes. It is essentially a one-line restatement of the resource being read.

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?

A single tight sentence, front-loaded with the verb and resource, that also carries the useful rename note. No filler.

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?

An output schema exists, so return values needn't be described, and this is a simple one-parameter read tool. Still, with annotations covering only safety and the parameter undocumented, the definition is merely adequate rather than 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 description coverage is 0% for the single required parameter. The phrase 'on a GA4 property' weakly indicates what property_id refers to, but gives no format or example (e.g. 'properties/123456'), so it fails to compensate for the schema gap.

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

Purpose4/5

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

Specific verb+resource ('List the key events ... declared on a GA4 property') and it clarifies the renamed concept ('formerly conversions'), which helps an agent disambiguate from the conversions_summary sibling. It stops short of explicitly naming which sibling it is not, so it doesn't reach a 5.

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

Usage Guidelines2/5

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

There is no when-to-use / when-not-to-use guidance and no alternatives named, despite siblings like conversions_summary and events_summary that an agent could plausibly confuse with this configuration-listing tool. Usage is only weakly implied by the word 'declared'.

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

list_propertiesA
Read-only

List the GA4 properties under an account.

Args: account_id: numeric account ID or 'accounts/123456789'. include_deleted: also return properties in the trash (soft-deleted, kept 35 days).

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYes
include_deletedNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuine behavioral context beyond annotations by explaining include_deleted returns soft-deleted (trashed) properties with a 35-day retention window, which materially affects how an agent interprets results.

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?

Front-loaded one-line summary followed by a compact Args block. No wasted sentences, and the format is standard and easy to parse, though the docstring-style Args section is slightly heavier than prose for two simple parameters.

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

Completeness4/5

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

An output schema exists, so return-value details are not required in the description. Purpose, both parameters, and the trashed-property semantics are covered. The only gap is routing guidance relative to sibling tools, which is minor given the clear verb+resource.

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?

Schema coverage is 0%, so the description carries the burden and does so adequately: it documents the accepted account_id formats ('123456789' or 'accounts/123456789') and the meaning of include_deleted. Both parameters are covered, though no default value is restated (schema already provides it).

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

Purpose4/5

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

The description states a specific verb and resource ('List the GA4 properties under an account'), which is clear and actionable. It doesn't explicitly differentiate from siblings like get_property (single property) or list_account_summaries (different resource), but the 'under an account' scope distinguishes it reasonably well.

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

Usage Guidelines3/5

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

Usage is implied: enumerate properties for a given account. There is no explicit when-to-use guidance or named alternative (e.g., get_property for a single property, list_account_summaries to find account IDs). An agent must infer the routing from context.

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

psi_auditA
Read-only

Run a PageSpeed Insights audit (Lighthouse lab test + CrUX field data) on a public URL.

Takes 30-90 seconds. Without PAGESPEED_API_KEY the anonymous quota is small and Google may answer 429; set the key for regular use.

Args: url: absolute public URL, e.g. 'https://example.com/'. strategy: 'mobile' (default) or 'desktop'. categories: subset of ['performance', 'accessibility', 'best-practices', 'seo']. Default: all four.

Returns 0-100 category scores, lab Core Web Vitals (LCP, FCP, CLS, TBT, SI, TTFB) and, when Chrome has enough real-user traffic, CrUX p75 field data for the URL and its origin.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
strategyNomobile
categoriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/openWorldHint annotations by disclosing the 30-90s latency, the anonymous-quota rate-limit behavior (HTTP 429), the required PAGESPEED_API_KEY, and the conditional nature of CrUX data (only returned when Chrome has sufficient real-user traffic). These are exactly the operational facts an agent needs before scheduling a call.

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?

Front-loaded with the one-line purpose, then budget/auth caveats, then Args and Returns in tight blocks – no filler sentences. The Returns block partially duplicates the declared output schema, but it earns some of its space by noting the CrUX field data is conditional on real-user traffic.

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?

Covers everything needed to call this correctly: the target resource, latency, auth/quota caveat, all three parameter semantics with defaults and enums, and a summary of what comes back. With an output schema present it need not spell out the return shape, and it still gives a useful high-level view.

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

Parameters5/5

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

Schema coverage is 0%, so the description must carry the parameters, and it does: url as an absolute public URL with a concrete example, strategy with its 'mobile' default and 'desktop' option, and categories as a subset of four named values defaulting to all four. This supplies the enum values, defaults, and format constraints that the bare schema omits.

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?

States a specific verb (Run audit) and resource (PageSpeed Insights on a public URL) and unpacks what the audit composes: 'Lighthouse lab test + CrUX field data.' The lab+field composition implicitly distinguishes it from the sibling psi_field_data_only without the agent needing to open either schema.

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?

Gives clear context for use: a public URL, a 30-90 second runtime, and the prerequisite that a PAGESPEED_API_KEY is needed for regular use because the anonymous quota returns 429s. It stops short of explicitly naming psi_field_data_only as the lighter alternative when the agent only wants field data, so the when-not case is left to inference.

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

psi_field_data_onlyA
Read-only

Only the CrUX field data (real Chrome users, p75 over 28 days) for a URL and its origin.

PageSpeed Insights still runs a performance-only Lighthouse pass, so expect 15-40 seconds. overall_category is FAST, AVERAGE or SLOW; it is null when the page has too little traffic.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
strategyNomobile

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

Beyond the readOnly/openWorld annotations, the description adds real behavioral context: the 15-40 second latency expectation, the fact that a Lighthouse pass is still run server-side even though only field data is returned, and the semantics of overall_category including its null case when traffic is too low. Auth and rate limits are not covered, but this is strong added value.

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 sentences, front-loaded with the core purpose, with each following sentence adding non-redundant information (latency, category semantics). No filler.

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?

An output schema exists, so return values needn't be explained, and safety is covered by annotations. However, the strategy parameter is entirely unaddressed despite 0% schema coverage, and there is no guidance on the relationship to psi_audit, leaving a notable gap for a two-parameter tool with an unenumerated strategy field.

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 description coverage is 0%, so the description must carry parameter meaning. It clarifies that data covers 'a URL and its origin', which adds some scope context, but it never explains the strategy parameter (mobile vs desktop, default mobile) nor the expected url format. The key behavioral parameter is left undocumented.

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

Purpose4/5

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

The description names a specific resource (CrUX field data) and scope (a URL and its origin), and the lead-in 'Only the CrUX field data' implicitly distinguishes it from sibling psi_audit, which presumably returns full Lighthouse results too. It could be sharper by explicitly contrasting with psi_audit, but an agent can tell what this returns.

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

Usage Guidelines3/5

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

Usage is only implied: 'Only the CrUX field data' suggests picking this when you don't want lab/Lighthouse output, but it never states when to choose this over psi_audit or names that sibling. No explicit when/when-not guidance is given.

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

run_realtime_reportA
Read-only

Realtime report for the last 30 minutes.

Useful to confirm that a new event fires in production right after a deploy.

Args: metrics: default ['activeUsers']; 'eventCount' also works. dimensions: default ['eventName']; also 'unifiedScreenName', 'country', 'deviceCategory'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
metricsNo
dimensionsNo
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

readOnlyHint and openWorldHint already cover the safety profile, and the description usefully adds the 30-minute freshness window as a behavioral constraint. It says nothing about the realtime API's tighter quotas, auth requirements, or the non-final/unsampled nature of realtime data, so the added context is modest against the lower annotated baseline.

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 scope statement is front-loaded in a single clean sentence, followed by the use case and a compact Args block. No filler, though the Args section is raw list formatting rather than tight prose.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and annotations handle safety. Combined with the explicit time window, defaults, and use case, the definition is nearly sufficient — the only gaps are the undiscussed property_id and limit parameters.

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 0%, so the description must carry parameter meaning, and it does supply real value for metrics and dimensions — defaults ('activeUsers', 'eventName') and valid alternatives that the bare schema (default null) does not reveal. However, the required property_id and the limit parameter receive no explanation at all, leaving half the parameters undocumented.

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

Purpose4/5

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

States a specific verb and resource with a hard scope boundary: a realtime report covering the last 30 minutes. The 'realtime' framing implicitly separates it from the historical run_report sibling, but it never names that contrast explicitly, so the differentiation is left to inference.

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?

Gives a concrete triggering scenario ('confirm that a new event fires in production right after a deploy'), which tells an agent when this tool is the right call. It stops short of stating when-not to use it or naming run_report as the alternative for historical data.

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

run_reportA
Read-only

Run a flexible GA4 report.

Args: property_id: numeric ID or 'properties/123456789'. metrics: e.g. ['sessions', 'activeUsers', 'keyEvents']. Catalog: https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#metrics dimensions: optional, e.g. ['date', 'sessionSource', 'pagePath']. Catalog: https://developers.google.com/analytics/devguides/reporting/data/v1/api-schema#dimensions date_start: 'YYYY-MM-DD', 'today', 'yesterday' or 'NdaysAgo' (e.g. '28daysAgo'). date_end: same formats as date_start. limit: maximum rows (default 25). order_by_metric: sort by this metric, e.g. 'sessions'. order_desc: sort descending (default True).

Returns the dimension and metric names, the date range, row_count and the rows.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
metricsYes
date_endNotoday
date_startNo7daysAgo
dimensionsNo
order_descNo
property_idYes
order_by_metricNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds practical defaults (limit 25, order_desc True) and date-format flexibility, but says nothing about GA4 quota/rate limits or auth requirements, which is the kind of behavioral context that would add real value here.

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 one-line purpose is front-loaded and the args block is organized per parameter with examples, so it is easy to scan. The two documentation URLs are useful rather than filler, though the block is slightly long.

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

Completeness4/5

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

For a flexible 8-parameter report tool with an output schema, the description covers inputs well and even names the return shape (dimensions, metrics, date range, row_count, rows), which the output schema already carries. The main gap is the absence of routing guidance against its many specialized siblings.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden, and it does so thoroughly: property_id format ('properties/123456789'), metrics/dimensions examples plus schema catalog links, accepted date_start/date_end formats ('YYYY-MM-DD', 'today', 'NdaysAgo'), limit default, and ordering semantics. All eight parameters are meaningfully documented.

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

Purpose4/5

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

States a clear verb+resource ('Run a flexible GA4 report') and the word 'flexible' implies a general-purpose query tool, which distinguishes it in spirit from the preset siblings (top_pages, events_summary, traffic_sources). However, it never names or contrasts any sibling, so the differentiation is left to inference.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance. It does not tell the agent when to reach for run_report versus the many specialized siblings (run_realtime_report, conversions_summary, web_vitals_summary) or versus list_properties/get_property. The reader must infer usage entirely.

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

sc_list_sitemapsA
Read-only

List the sitemaps submitted for a Search Console site, with errors and warnings.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that results include errors and warnings, which is mild behavioral context, but says nothing about pagination, sitemap-index expansion, or permission requirements.

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?

One front-loaded sentence with the verb and resource first and the result contents trailing; nothing redundant or padded.

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

Completeness4/5

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

An output schema exists, so return values need not be spelled out, and annotations cover the read-only/open-world profile. For a single-parameter list tool this is nearly complete, with only the site_url format left unaddressed in both description and 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?

Schema description coverage is 0% and there is only one parameter, site_url, which the schema leaves entirely undocumented. The description implies the parameter is the Search Console property ('for a Search Console site') but does not give the expected format (e.g., https:// prefix vs sc-domain:), so it only partially compensates.

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

Purpose4/5

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

Clear specific verb+resource: 'List the sitemaps submitted for a Search Console site,' augmented with what the results contain ('errors and warnings'). It is distinguishable from sc_list_sites and the GA4 list_* tools by resource, though it never explicitly contrasts itself with any sibling.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is the tool for enumerating sitemaps of a given Search Console property. There is no statement of when to prefer it over sc_list_sites or other sc_* tools, and no prerequisites or exclusions.

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

sc_list_sitesA
Read-only

List the Search Console sites you can access.

Each entry has siteUrl ('sc-domain:example.com' for domain properties or a URL prefix like 'https://example.com/') and permissionLevel ('siteOwner', 'siteFullUser', 'siteRestrictedUser' or 'siteUnverifiedUser').

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds useful return-shape context (siteUrl conventions and the four permissionLevel values), but since an output schema exists this is partly redundant and no pagination or scoping behavior is disclosed.

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?

Two tightly written sentences, front-loaded with the purpose before the field detail. Every sentence carries information and nothing is padded.

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

Completeness4/5

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

For a zero-parameter list tool with an output schema and annotations covering the safety profile, the description is essentially complete. Only the relationship to the sibling list tools is left unaddressed.

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 tool takes zero parameters, which is the baseline-4 case. There is no parameter surface for the description to clarify or omit.

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

Purpose4/5

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

States a specific verb (List) and resource (Search Console sites you can access), so the agent knows it enumerates accessible properties. It does not, however, explicitly differentiate from the sibling 'list_properties', which could plausibly be confused with this tool.

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

Usage Guidelines2/5

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

No when-to-use guidance and no named alternatives. Usage is only weakly implied by 'sites you can access', and the agent is left to infer whether list_properties or list_account_summaries is the correct entry point.

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

sc_page_performanceC
Read-only

Top pages in Google Search by clicks, with impressions, CTR (%) and average position.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
date_endYes
site_urlYes
date_startYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. Beyond that, the description adds no behavioral context: it does not state that a site_url and date window are mandatory, whether dates are constrained, or how the limit behaves. It mostly restates the metric list, which the output schema already carries.

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?

A single front-loaded sentence with no filler, and the key resource is named first. It is efficient, though its brevity contributes to the gaps elsewhere rather than being a virtue of careful editing.

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

Completeness2/5

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

With an output schema present, the metric list need not be restated, yet the description still omits required-parameter expectations, date-range semantics, and sibling differentiation for a crowded Search Console toolset. For a tool with three required inputs, this is too thin.

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 description coverage is 0% for all four parameters, so the description carries the full burden and adds essentially nothing about site_url, date_start, date_end, or limit. The only implicit hint is that 'Top pages' implies ordering/truncation, which loosely relates to limit.

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

Purpose4/5

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

States a specific resource (top pages in Google Search) and the metrics returned (clicks, impressions, CTR, average position), so an agent understands it is a page-level Search Console performance report. However, it never contrasts itself with close siblings like sc_top_queries, top_pages, or sc_query_breakdown_by_page, leaving the agent to infer the distinction from the name alone.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternative tools. The agent must guess that this is the page-dimension counterpart to sc_top_queries and how to choose between them.

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

sc_query_breakdown_by_pageB
Read-only

Which search queries bring traffic to one specific page.

Useful to decide which keywords to strengthen in that page's content.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
date_endYes
page_urlYes
site_urlYes
date_startYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds no extra behavioral context – nothing about the Search Console data source, date-range expectations, or result ordering – so it neither contradicts nor enriches 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?

Two short sentences, front-loaded with the core question, no filler. The second sentence earns its place as usage context, though the description is arguably under-specified rather than maximally efficient.

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?

An output schema exists so return values need not be described, and the read-only annotations cover safety. However, with four required parameters and 0% schema coverage, an agent lacks format guidance for dates and URLs, leaving a real gap for a data-query tool.

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?

Five parameters with 0% schema description coverage, and the description names none of them beyond implying a page. Formats for date_start/date_end, page_url, and the meaning of limit (default 25, per-page query cap) are left entirely undocumented in both schema and prose.

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

Purpose4/5

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

States a specific verb and resource ('which search queries bring traffic to one specific page') and scopes it to a single page, which naturally separates it from site-wide siblings like sc_top_queries. It never explicitly names an alternative, so it stops short of a 5 but is unambiguous about what it returns.

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

Usage Guidelines3/5

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

'Useful to decide which keywords to strengthen in that page's content' gives a downstream purpose but no when-to-use trigger, prerequisites, or comparison to sibling tools such as sc_page_performance or sc_top_queries. Usage is implied rather than stated.

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

sc_top_queriesA
Read-only

Top search queries with clicks, impressions, CTR (%) and average position.

Args: site_url: 'sc-domain:example.com' or 'https://example.com/', exactly as in sc_list_sites. date_start: 'YYYY-MM-DD'. date_end: 'YYYY-MM-DD'. Search Console data lags 2-3 days. limit: rows to return (max 25000). country: optional ISO 3166-1 alpha-3 code to filter by, e.g. 'mex' or 'usa'.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
countryNo
date_endYes
site_urlYes
date_startYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so safety is covered. The description adds genuinely useful operational context: Search Console data lags 2-3 days and limit caps at 25000 rows. Return format is left to the output schema.

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?

Purpose sentence and per-argument list are front-loaded and waste-free; each line earns its place by encoding a format constraint. The dict-style 'Args:' layout is readable but slightly verbose for a 5-parameter tool.

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

Completeness4/5

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

With an output schema present, the description need not explain return values, and it covers all parameters plus the data-freshness caveat. The only real gap is guidance on choosing this tool over its query/page-oriented siblings.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden and does so well: site_url format with the 'sc-domain:' vs URL forms and a pointer to sc_list_sites, date format 'YYYY-MM-DD', limit max 25000, and country as an ISO 3166-1 alpha-3 code with examples ('mex'/'usa'). Every parameter gets concrete format guidance the schema lacks.

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

Purpose4/5

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

Opens with a specific verb+resource pair ('Top search queries') and enumerates the returned metrics (clicks, impressions, CTR, average position). This clearly distinguishes it from siblings like sc_page_performance and sc_query_breakdown_by_page, though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the resource ('queries' vs 'pages') and the required date range, but the description gives no explicit when-to-use/when-not or pointer to an alternative tool. An agent must infer selection from sibling names alone.

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

top_pagesC
Read-only

Top pages by sessions, with active users, bounce rate and average session duration.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
date_endNotoday
date_startNo7daysAgo
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only a metric inventory, which an existing output schema already conveys, and says nothing about auth requirements, quotas, or whether results are sorted/truncated by limit.

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?

A single tight sentence with the resource front-loaded and zero filler. It is efficient, though it spends its one clause on metrics rather than on the parameters or usage context that are actually missing.

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

Completeness4/5

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

An output schema exists, so return-value explanations are rightly omitted, and the annotations cover the read-only nature. However, for a four-parameter analytics report with 0% schema coverage, the absence of any date-range or scope guidance leaves an agent guessing how to call it correctly — this is a moderate gap rather than a fatal one.

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 description coverage is 0% — none of the four parameters (limit, date_start, date_end, property_id) is documented anywhere. The description mentions sessions and metrics but adds no meaning to any parameter, not even the '7daysAgo'/'today' date defaults or what property_id must reference.

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

Purpose4/5

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

States a specific resource (top pages) and the ranking dimension (sessions), plus the metric set returned. This is clearly distinguishable from siblings like traffic_sources or sc_page_performance, but the description never explicitly contrasts itself with those alternatives.

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

Usage Guidelines2/5

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

No when-to-use guidance at all: nothing indicates whether this is the right tool for a page-level traffic breakdown versus run_report or traffic_sources, and no prerequisites (e.g., needing a valid property_id) are mentioned.

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

traffic_sourcesC
Read-only

Top traffic sources (source / medium) with sessions, active users and conversions.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
date_endNotoday
date_startNo7daysAgo
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations cover the safety profile (readOnlyHint=true, openWorldHint=true), so the bar is lower. Still, the description says nothing about default behavior beyond what the schema shows, no row-limit behavior, no note that it queries live GA4 data, and the listed metrics duplicate information available in the output schema.

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?

A single front-loaded sentence with the resource first and the returned metrics last. No filler, no redundancy.

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?

An output schema exists, so return values needn't be explained, and the safety annotations are adequate. However, with zero parameter documentation and no usage guidance, an agent still lacks enough to invoke this correctly for a 4-parameter reporting tool.

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 description coverage is 0% across four parameters, so the description carries the full burden and fails: it never mentions property_id, the date range, the 7-day default, or what limit controls. The phrase 'top' only loosely implies a limit parameter.

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

Purpose4/5

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

States a specific resource and scope: top traffic sources broken down by source/medium, with the metrics returned (sessions, active users, conversions). This is clearly distinguishable from siblings like top_pages or conversions_summary, though it never explicitly names those alternatives.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no exclusions, and no mention of how it relates to run_report or the other summary tools. The agent must infer that this is a pre-built report from the name alone.

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

web_vitals_summaryA
Read-only

Core Web Vitals reported by your own site as GA4 events.

Requires the site to send web-vitals events with the parameters web_vital_metric and web_vital_rating, both registered as event-scoped custom dimensions. For Google's field data use psi_field_data_only instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_endNotoday
date_startNo7daysAgo
property_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds a genuinely useful behavioral precondition — the required custom dimensions and event parameters — implying results are empty or unavailable if the site isn't instrumented. It stops short of saying what happens when the prerequisite is unmet or what auth scope is needed.

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 short sentences, front-loaded with what the tool returns, then prerequisites, then the alternative. No filler and no repetition of the schema.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the prerequisite and alternative-tool information is present. The remainder of the gap is the undocumented date-range and property parameters, which the description leaves entirely to the schema.

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 description coverage is 0% and the description says nothing about `property_id`, `date_start` or `date_end` semantics (formats, defaults, timezone). The two parameters it does name, `web_vital_metric` and `web_vital_rating`, are GA4 event dimensions, not inputs to this tool, so they add no invocation guidance and risk being mistaken for arguments.

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?

States a specific resource (Core Web Vitals) and its exact data source (GA4 events sent by the user's own site), which separates it from the other GA4 report tools and from the PSI siblings. Naming psi_field_data_only as the contrasting tool makes the distinction unambiguous.

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?

Gives an explicit prerequisite (site must send web-vitals events with `web_vital_metric` and `web_vital_rating` registered as event-scoped custom dimensions) and an explicit routing rule: 'For Google's field data use psi_field_data_only instead.' An agent can decide when this tool applies without guessing.

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. 24 tool updatesv0.1.0
    • First observedaudit_portfolio
    • First observedbootstrap_site_measurement
    • First observedconversions_summary
    • First observedevents_summary
    • First observedget_data_stream
    • First observedget_property
    • First observedlist_account_summaries
    • First observedlist_custom_dimensions
    • First observedlist_data_streams
    • First observedlist_google_ads_links
    • First observedlist_key_events
    • First observedlist_properties
    • First observedpsi_audit
    • First observedpsi_field_data_only
    • First observedrun_realtime_report
    • First observedrun_report
    • First observedsc_list_sitemaps
    • First observedsc_list_sites
    • First observedsc_page_performance
    • First observedsc_query_breakdown_by_page
    • First observedsc_top_queries
    • First observedtop_pages
    • First observedtraffic_sources
    • First observedweb_vitals_summary

TDQS

B3.4/5.0

Scored across 24 tools

Disambiguation4/5

Most tools have distinct resource+action targets, and the descriptions clearly separate similar pairs (psi_audit vs psi_field_data_only, web_vitals_summary vs psi_field_data_only). However, top_pages, events_summary, traffic_sources and conversions_summary are all essentially preset versions of run_report, creating mild overlap an agent must reason about.

Naming Consistency4/5

Names use consistent snake_case verb_noun within each domain (list_properties, get_property, run_report; sc_list_sites, sc_top_queries; psi_audit). The sc_/psi_ prefixes are meaningful namespacing, though GA4 tools carry no prefix, leaving a minor stylistic inconsistency across domains.

Tool Count3/5

24 tools is on the heavy side for the stated scope and exceeds the comfortable 3-15 range. Several reporting tools (top_pages, events_summary, traffic_sources, conversions_summary) are convenience wrappers around run_report, so the surface is somewhat inflated.

Completeness4/5

Reporting, GA4 admin reads, Search Console analytics and PageSpeed are well covered, and bootstrap_site_measurement handles provisioning. Gaps exist: no GA4 config write/update tools and no sc_verify_site_dns/sc_submit_sitemap tools despite bootstrap referencing them as follow-up steps.

Maintenance

ActivityNo data
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to manage Google Tag Manager, Google Search Console, and Google Analytics (GA4) through unified access to tags, search performance data, URL inspection, sitemaps, and analytics reporting.
    12 npm
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying Google Analytics 4 traffic, engagement, and conversions, as well as Google Search Console performance, index status, and sitemap management.
    9 npm
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Provides AI agents with hands-on control of Google SEO and analytics tools including Search Console, GA4, Tag Manager, Indexing API, and PageSpeed Insights, with self-configuring OAuth2.
    33
    12 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to read and write Google Analytics 4, Search Console, and Tag Manager data through MCP tools, with write operations gated behind an explicit flag for safety.
    20
    8 npm
    Apache 2.0