Skip to main content
Glama
acamolese

Google Search Console Audit MCP

Google Search Console MCP

English · Italiano

CI PyPI Python License: MIT

Seventeen read-only tools over the Google Search Console API, plus a deterministic white-label HTML audit report an agency can put its own name on and send to a client, in English or Italian.

The generated audit report

Regenerate that report from committed synthetic data, with no credentials:

python scripts/render_sample_report.py --lang en --open

Install

Claude Code

/plugin marketplace add acamolese/google-search-console-mcp
/plugin install google-search-console@acamolese

The plugin brings the MCP server, five skills (weekly review, cannibalisation check, indexing audit, content opportunities, white-label client audit) and a config prompt for the three credentials.

Claude Desktop

Download google-search-console.mcpb from the latest release and open it. It needs uv installed. Or edit the config file directly:

{
  "mcpServers": {
    "google-search-console": {
      "command": "uvx",
      "args": ["mcp-google-search-console"],
      "env": {
        "GSC_CLIENT_ID": "...",
        "GSC_CLIENT_SECRET": "...",
        "GSC_REFRESH_TOKEN": "..."
      }
    }
  }
}

Cursor, Codex, Gemini CLI, Zed

Any MCP client takes the same three lines: command uvx, argument mcp-google-search-console, and the three GSC_* environment variables.

# Codex
codex mcp add google-search-console -- uvx mcp-google-search-console

# Gemini CLI
gemini mcp add google-search-console uvx mcp-google-search-console

Docker

docker build -t mcp-gsc .
docker run --rm -p 127.0.0.1:8765:8765 \
  -e GSC_CLIENT_ID -e GSC_CLIENT_SECRET -e GSC_REFRESH_TOKEN \
  -v "$PWD/reports:/reports" mcp-gsc

The container speaks streamable HTTP on /mcp. It has no authentication of its own: keep it on loopback or behind a reverse proxy.

Related MCP server: flin-google-search-console-mcp

Authentication

The OAuth scope is webmasters.readonly and nothing else. No tool in this server can modify a property, a sitemap or anything else in Search Console.

Credentials are resolved in this order:

  1. GSC_AUTH_MODE if set (oauth, service_account, adc)

  2. GSC_SERVICE_ACCOUNT_FILE or GSC_SERVICE_ACCOUNT_JSON

  3. GSC_CLIENT_ID + GSC_CLIENT_SECRET + GSC_REFRESH_TOKEN

  4. A token file in ~/.config/mcp-google-search-console/

  5. Application Default Credentials

OAuth, once

  1. In Google Cloud Console, enable the Google Search Console API and create an OAuth client of type Desktop app.

  2. Export the client, or save the downloaded JSON as ~/.config/mcp-google-search-console/oauth_credentials.json:

    export GSC_CLIENT_ID="...apps.googleusercontent.com"
    export GSC_CLIENT_SECRET="..."
    uvx mcp-google-search-console auth
  3. The browser flow prints the three export lines for a stateless setup, and also stores a token at ~/.config/mcp-google-search-console/token.json with 0600 permissions.

On a headless machine, run auth on your laptop and copy the three environment variables across. --no-browser prints the URL instead of opening one, but still needs a local redirect.

Service account

Grant the service account's email read access to the property in Search Console, then point the server at the key:

export GSC_SERVICE_ACCOUNT_FILE=/path/to/key.json
# or, for a container:
export GSC_SERVICE_ACCOUNT_JSON='{"type":"service_account",...}'

Check it works

uvx mcp-google-search-console doctor

Prints the auth mode in use, when the token expires, how many properties the account can read, and the defaults every tool applies. Secrets are masked. Exits 1 when nothing resolves, which is the answer to most "the server won't start" reports.

Tools

Tool

What it answers

gsc_sites

Which properties can this account read, and in what exact format

gsc_site_details

Permission level and type for one property

gsc_query

The Search Analytics report, with filters, dimensions and pagination

gsc_performance_overview

Is the site up or down, against the previous period

gsc_compare_periods

What changed between two periods, ranked by click delta

gsc_quick_wins

Queries close enough to the top that a push would pay off

gsc_ctr_gaps

Pages that rank but are not clicked

gsc_cannibalization

Queries where several pages compete against each other

gsc_traffic_drops

Pages that lost clicks, with a likely cause for each

gsc_content_decay

Pages sliding down month after month

gsc_alerts

What moved sharply enough to be worth a message today

gsc_portfolio

Every property at a glance, worst first

gsc_indexing_issues

Which of these URLs are indexed, and why not

gsc_inspect_url

Full URL Inspection for one page

gsc_sitemaps

Which sitemaps Google knows about, with errors and warnings

gsc_doctor

What is configured, and does the API answer

gsc_audit

The full HTML report

Three prompts wrap the workflows that repeat: gsc_weekly_report, gsc_indexing_audit, gsc_content_opportunities.

Why this server

Here

Typical GSC MCP server

Client-ready report

Self-contained HTML, English or Italian, white-label

none

Analysis

Cannibalisation, CTR gaps, decay, drop diagnosis, run server-side

raw rows, analysed by the model

Thresholds

Adapt to the size of the property

fixed, or none

Dates

period="last_month", days=28, resolved server-side

explicit dates only

Freshness

dataState=all by default, matching the UI

final only

Auth

OAuth, service account, ADC

OAuth only

Output

TSV by default, roughly a third of the tokens of pretty JSON

json.dumps(indent=2)

Errors

Google's reason plus what to do about it

bare HTTP status

Tests

280+, on both mcp majors, three operating systems

usually none

Report customisation

Colours, logo, report name, brand terms and thresholds come from a JSON file. Pass branding_path, or place it at ~/.config/mcp-google-search-console/branding.json to apply it everywhere:

{
  "brand_name": "Your Agency",
  "logo": "logo.png",
  "brand_terms": ["clientbrand", "client brand"],
  "colors": { "primary": "#2b6cb0", "primary_dark": "#1a365d" },
  "thresholds": { "min_impressions": 200 }
}

A local logo is base64-encoded into the document. A remote one is only kept if allow_external_fonts is true, because the report is otherwise guaranteed to contain no external URL at all: no CDN, no font service, nothing that phones home when a client opens it.

brand_terms matters more than it looks. Without it, the first label of the domain is used as the brand, which is wrong for abbreviations, holding companies and invented names, and it silently mislabels the brand/non-brand split. The report says when it had to guess.

Quotas and limits

  • 16 months of daily data. Anything older is not available at any price.

  • Hourly data: the last 10 days only.

  • URL Inspection: 600 per minute and 2,000 per day per property. This is the limit that bites on a large site.

  • Search Analytics: 1,200 queries per minute per site. Responses are cached in memory for 6 hours (1 hour for inspections); no_cache=true bypasses it.

  • Rows: 25,000 per API call. Tools default to 100 and cap at 1,000, with start_row for pagination; the cap is reported in the response, never applied silently.

Environment variables

Variable

Default

Purpose

GSC_CLIENT_ID, GSC_CLIENT_SECRET, GSC_REFRESH_TOKEN

Stateless OAuth

GSC_SERVICE_ACCOUNT_FILE, GSC_SERVICE_ACCOUNT_JSON

Service account

GSC_AUTH_MODE

auto

Force oauth, service_account or adc

GSC_REPORT_LANGUAGE

en

Report language: en or it

GSC_DATA_STATE

all

all includes today's partial data, final does not

GSC_CACHE_TTL_SECONDS

21600

Response cache TTL; 0 disables it

GSC_INSPECT_CONCURRENCY

5

Parallel URL inspections

GSC_LOG_LEVEL

WARNING

Logging, always to stderr

MCP_TRANSPORT, MCP_HOST, MCP_PORT

stdio

Transport

Troubleshooting

spawn uvx ENOENT — the client cannot find uvx on its PATH. GUI apps do not inherit a shell PATH. Use the absolute path: which uvx gives it, typically /Users/you/.local/bin/uvx.

403 forbidden on every call — almost always the property format. A domain property is sc-domain:example.com; a URL-prefix property is https://example.com/, trailing slash included. gsc_sites returns the exact strings.

401 invalid_grant — the refresh token was revoked or expired. Google expires refresh tokens for OAuth apps still in "testing" after seven days; publish the app, or re-run auth.

403 quotaExceeded — the daily URL Inspection quota is gone. It resets tomorrow; nothing retries past it.

Empty report on a small site — check the thresholds in the response meta. They adapt to the property, but the floors (50 impressions, 10 clicks) still apply. Pass thresholds to lower them.

Anything else — run doctor and include its output in the issue.

Security

  • Read-only scope, requested and never widened.

  • Token files are written atomically with 0600 permissions. Credentials supplied through the environment are never written to disk.

  • gsc_doctor masks the client ID and never returns a token.

  • No telemetry, no analytics, no request to any host other than Google's API.

See SECURITY.md for the reporting policy.

Development

uv venv && uv pip install -e ".[dev]"
ruff check src tests scripts && ruff format --check src tests scripts
pytest -q --cov=google_search_console_mcp
python scripts/sync_versions.py
python scripts/render_sample_report.py --lang it --open

Tests never hit the network. Live tests exist behind -m live and require GSC_LIVE_TESTS=1 plus credentials; they never run in CI.

Releases: see docs/RELEASING.md. Decisions not covered by the code are logged in docs/DECISIONS.md.

License

MIT. Chart.js 4.5.1 is vendored under src/google_search_console_mcp/static/, also MIT, with its licence alongside.

Available Tools

17 tools
gsc_alertsA
Read-onlyIdempotent

What changed sharply enough to be worth a message today.

Compares the last window_days against the window before it across both queries and pages, and returns only movements past the alerting rules: lost positions, collapsed CTR, dropped or vanished pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNo
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
row_limitNoRows returned. Default 100, capped at 1000.
thresholdsNoOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
window_daysNoLength of the window to compare.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

With annotations already declaring readOnlyHint, idempotentHint, and destructiveHint, the description adds valuable detail about the comparison logic and the types of movements detected (lost positions, collapsed CTR, dropped/vanished pages). It explains that only movements past alerting rules are returned, which is behavior beyond the schema. No contradiction with annotations.

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

Conciseness4/5

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

The description is two sentences long and front-loads the purpose with a question-like hook. The second sentence explains mechanics efficiently. The first sentence is a bit vague, but overall it is compact and free of fluff.

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?

The description covers the core algorithm and output filtering, and an output schema exists so return format is not required here. It does not mention usage context or alternatives, which is a minor completeness gap for a complex alerting tool, but it is sufficient for basic invocation.

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

Parameters3/5

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

Schema description coverage is 86%, so most parameters are already documented in the schema. The description adds no new meaning about parameter format or semantics; it only mentions window_days implicitly via the comparison logic. This meets the baseline for high schema coverage.

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 clearly states the tool compares two windows and returns only movements that pass alerting rules, which is a specific and concrete purpose. It mentions both queries and pages, distinguishing it from tools focused only on one. However, it does not explicitly differentiate itself from siblings like gsc_traffic_drops or gsc_compare_periods, leaving some ambiguity.

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 provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or recommended contexts beyond a vague 'today' cue. This is a gap, especially given the large set of sibling tools.

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

gsc_auditA
Read-onlyIdempotent

Build a complete, self-contained HTML SEO audit for one property.

Collects the period and its baseline, top queries and pages, devices, countries, the daily trend, six months of history, sitemaps and an indexing check, then detects issues and builds a prioritised strategy and roadmap. Thresholds adapt to the size of the property, so small sites get a report too. Available in English and Italian.

Ask the user for the period if they have not named one: the 28-day default is rarely what a client report wants.

Returns a compact JSON summary first (KPIs with deltas, issue counts, top quick wins, roadmap), so the findings can be discussed without reading the HTML, followed by the report path or the document itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
outputNo`file` writes the report and returns its path, `inline` returns the HTML as an embedded resource, `both` does both, `auto` picks by transport.auto
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
languageNoReport language: en, it. Defaults to en.
sectionsNoSubset of sections to render: overview, issues, top_queries, top_pages, countries, sitemaps, indexing, strategy, roadmap.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
output_dirNoWhere to write the report. Defaults to ~/gsc-reports/.
thresholdsNoOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
brand_termsNoWords that mark a query as branded. Without them the first label of the domain is used, which is often wrong.
branding_pathNoPath to a branding.json overriding colours, logo, name and thresholds.
inspect_top_pagesNoHow many top pages to run through URL Inspection. 0 disables it.

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already establish read-only, idempotent behavior. The description adds meaningful context beyond that: adaptive thresholds for small sites, English/Italian availability, the instruction to ask for a period, and the two-stage return of a compact JSON summary followed by the report path/document. This gives the agent a clear picture of what to expect without contradicting the annotations.

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

Conciseness5/5

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

Every sentence earns its place: scope, contents, adaptive behavior, language, user-interaction guidance, and return format. The description is dense but not bloated, and the most important identifying sentence is first. No filler or repetition of schema details.

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 a complex 13-parameter tool with no output schema, the description is remarkably complete. It explains the report scope, the adaptive thresholds, the language options, the critical 'ask about period' behavior, and the JSON-first return strategy. Combined with the fully described schema and safety annotations, an agent has enough context to invoke it correctly.

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 description coverage is 100%, so the schema carries the parameter definitions. The description adds value beyond the schema by explaining why the default period is often wrong, that thresholds adapt to property size, and that output can be a summary plus report. This helps the agent make better parameter choices, especially around `period` and `language`.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Build a complete, self-contained HTML SEO audit for one property.' It then enumerates the major components (top queries, pages, devices, countries, sitemaps, indexing, strategy, roadmap), making the tool's scope unmistakable and clearly broader than the focused sibling tools like gsc_query or gsc_sitemaps.

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

Usage Guidelines4/5

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

It provides explicit operational guidance: 'Ask the user for the period if they have not named one,' including why the 28-day default is inadequate for client reports. It does not directly name alternatives or state when not to use this tool, but the comprehensive scope makes its role as the full-audit tool clear.

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

gsc_cannibalizationA
Read-onlyIdempotent

Queries where several pages of the site compete for the same result.

Reads one page of up to 25,000 query/page pairs; on a very large property the tail is cut off, and the meta says how many pairs were analysed. Each row lists the competing pages with their own clicks and positions.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNo
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
min_pagesNoMinimum competing pages per query.
min_shareNoA page must hold this share of the query's impressions to count.
row_limitNoRows returned. Default 100, capped at 1000.
thresholdsNoOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses a real operational limitation: only one page of up to 25,000 query/page pairs is read, the tail is cut off on large properties, and a meta field reports how many pairs were analyzed. This is valuable context that an agent cannot derive from annotations or the 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?

The description is three short sentences with the core purpose front-loaded, followed by the scale caveat and output layout. There is no filler or repetition.

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

Completeness5/5

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

Given the read-only annotations, high schema coverage, and an output schema, the description covers the key operational caveats: page limit, tail cutoff, and meta reporting. It is complete enough for an agent to call and interpret this tool correctly.

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

Parameters3/5

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

Schema description coverage is 91%, so the schema already documents nearly all parameters. The description adds no parameter-specific detail beyond saying rows list competing pages with clicks and positions, which is more about the output than the parameters; the baseline 3 applies.

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 clearly identifies the subject: queries where several pages compete for the same result, and the title reinforces the concept of keyword cannibalisation. It is specific enough to know what the tool returns, though it lacks an explicit verb and does not name a sibling to distinguish itself.

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 guidance is given on when to use this tool versus siblings such as gsc_query, gsc_quick_wins, or gsc_content_decay. The topic is implied but there are no conditions, exclusions, or alternatives stated.

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

gsc_compare_periodsA
Read-onlyIdempotent

Join two periods on one dimension and rank the rows by click delta.

Answers "what changed" without the model diffing two tables by hand. Rows present in only one period are kept, with zeros on the missing side; the biggest movers in both directions are returned, worst first. The meta counts how many rows gained and how many lost clicks.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNoBypass the response cache for this call.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
dimensionNoOne of query, page, country, device, searchAppearance.query
row_limitNoRows returned. Default 100, capped at 1000.
prev_date_toNoBaseline end YYYY-MM-DD.
prev_date_fromNoBaseline start YYYY-MM-DD. Defaults to the equally long period ending the day before date_from.
min_impressionsNoDrop rows below this impression count in both periods.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds valuable behavioral detail: rows missing from one period are kept with zeros, movers are returned worst-first, and meta reports gained versus lost click counts. This goes well beyond the annotation hints.

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

Conciseness5/5

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

The description is compact and front-loaded: the first sentence states the core operation, and each subsequent sentence adds a distinct, necessary behavioral detail. There is no filler and no repetition of schema content.

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

Completeness5/5

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

Given the rich input schema, output schema, and annotations, the description still covers the non-obvious behaviors an agent needs: one-sided rows are retained with zeros, ordering is worst-first, and meta counts gains versus losses. Nothing essential for correct invocation is 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 100% and every parameter already has its own useful description, so the baseline of 3 applies. The description reinforces the period-comparison concept but does not add parameter syntax or date semantics beyond the schema.

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

Purpose5/5

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

The opening sentence names a specific operation: joining two periods on a dimension and ranking rows by click delta. Framing it as the 'what changed' comparison tool distinguishes it from more specific sibling trend tools like gsc_traffic_drops and gsc_content_decay.

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

Usage Guidelines4/5

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

The description gives a clear use case: answer 'what changed' between periods without manually diffing tables. It does not explicitly name sibling alternatives or exclusion criteria, but the context is clear and not misleading.

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

gsc_content_decayA
Read-onlyIdempotent

Pages sliding down month after month.

A period comparison hides this: a page that halves over six months never shows a sharp drop in any single month-on-month check. One query per month runs in parallel.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthsNoHow many months of history to read (2-16).
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNo
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
row_limitNoRows returned. Default 100, capped at 1000.
thresholdsNoOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
min_peak_clicksNoIgnore pages that never reached this many clicks in a month.
response_formatNo`tsv` (default, compact) or `json`.tsv
consecutive_monthsNoMonths of uninterrupted decline required.

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 establish read-only, idempotent, non-destructive behavior, so the bar is lower. The description adds useful operational context: 'One query per month runs in parallel,' which tells an agent the call may be partitioned and slower, and explains why it catches decay that period comparisons miss.

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 cover the problem statement, the reason a dedicated tool is needed, and the parallel-query behavior with no filler. The rationale is front-loaded before the operational note.

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 9-parameter tool with an output schema and safety annotations, the description explains the key conceptual model and runtime behavior without needing to repeat parameter documentation. It could be more complete by explicitly naming the type of result returned, but the output schema fills that gap.

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 89%, so parameters like months, date_to, row_limit, and site_url already carry meaning. The description adds no direct parameter syntax or examples beyond the schema, which is acceptable at this coverage level.

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 phrase 'Pages sliding down month after month' communicates the tool's focus on gradual multi-month decay, and the note that period comparison misses it differentiates this from a generic month-over-month diff. It lacks an explicit verb like 'detect' or 'return,' so it stops short of a crisp statement.

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 description implies when to use the tool: for slow declines that a period comparison would hide. It does not name sibling tools or state an explicit when-not-to-use, so the routing guidance is implied rather than explicit.

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

gsc_ctr_gapsA
Read-onlyIdempotent

Rows that rank well but are clicked far less than their position implies.

The snippet, not the ranking, is the problem, which makes these the cheapest fixes available. expected_ctr is what a result at that position normally earns.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
entityNoAnalyse by `page` (default) or by `query`.page
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNo
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
gap_ratioNoFlag rows whose CTR is below this fraction of the expected CTR.
row_limitNoRows returned. Default 100, capped at 1000.
thresholdsNoOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
max_positionNoOnly consider rows at or above this position.
response_formatNo`tsv` (default, compact) or `json`.tsv

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 read-only, idempotent, and non-destructive behavior, so the description is free to add conceptual depth. It explains that the snippet, not ranking, is the problem, and defines expected_ctr as the position-based benchmark, which is valuable beyond the structured annotations.

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

Conciseness5/5

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

The description is three short sentences with no filler. The opening sentence states the core concept, the second adds strategic value, and the third defines the key benchmark term.

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?

Given rich parameter schemas, safety annotations, and an output schema, the description provides enough conceptual context for an agent to understand what the tool offers. The only clear gap is explicit routing among sibling tools, which is already penalized under usage guidelines.

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 92%, so the schema itself documents nearly every parameter. The description only adds context for the expected_ctr field, which is an output concept rather than a parameter, so it does not materially enhance parameter understanding.

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 clearly identifies Search Console rows that rank well but earn fewer clicks than their position implies, which defines the CTR-gap analysis concept. It lacks an explicit verb like 'list' or 'find', but the resource and analytical angle are unambiguous.

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 'cheapest fixes available' implies a prioritization use case, but the description never explicitly states when to use this tool instead of siblings such as gsc_quick_wins or gsc_query. This is implied context rather than actionable routing guidance.

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

gsc_doctorA
Read-onlyIdempotent

Report the server's configuration and whether Search Console answers.

Call this first when something fails: it names the auth mode in use, when the token expires, how many properties the account can read, the cache state and the defaults every other tool applies. Secrets are masked.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
authYes
cacheYes
pathsYes
defaultsYes
platformYes
mcp_majorYes
transportYes
propertiesYes
mcp_versionYes
python_versionYes
package_versionYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already mark it read-only and idempotent; the description adds what the report contains (auth mode, token expiry, property count, cache state, defaults) and promises secrets are masked. This gives the agent confidence about side effects and output contents. No contradiction with annotations.

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

Conciseness5/5

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

Two short sentences with the core purpose first, followed by valuable specifics. Every word earns its place; the 'Secrets are masked' note is important but not over-explained.

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 a zero-parameter diagnostic tool with an output schema, the description explains when to call it and what information it will surface. It covers purpose, usage timing, and behavior without omitting anything the agent needs to invoke it correctly.

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 the schema carries no burden and the description doesn't need to explain parameter meanings. Per the baseline for zero-parameter tools, this is a 4.

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

Purpose5/5

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

States a specific verb ('Report') and resource (server configuration and Search Console connectivity). Clearly distinguishes from sibling tools that query search data. The 'Call this first' line reinforces its role as a diagnostic entry point.

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?

Explicitly instructs 'Call this first when something fails', which is a clear trigger condition. Also explains that it reveals defaults every other tool applies, so it is meant as a pre-flight check for subsequent calls. No exclusions are needed because it's unambiguously the diagnostic tool.

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

gsc_indexing_issuesA
Read-onlyIdempotent

Check whether a batch of URLs is indexed, and why not when they are not.

Runs the inspections concurrently and returns one row per input URL, in input order. A URL that fails gets an error column instead of a verdict; the rest of the batch still comes back. For the full payload of a single page (mobile usability, rich results, AMP) use gsc_inspect_url.

Quota: 600 inspections per minute and 2,000 per day, per property.

Columns: url, verdict (PASS / PARTIAL / FAIL / NEUTRAL), coverage_state, robots_txt_state, indexing_state, page_fetch_state, crawled_as, last_crawl_time, google_canonical, user_canonical, error. The meta carries a verdict summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesYesFully qualified URLs under site_url. At most 100 per call.
no_cacheNoBypass the response cache for this call.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses concurrency, one row per input URL in input order, per-URL error columns, partial batch results, quota limits, and the exact result columns. This is rich behavioral context an agent cannot infer from annotations alone.

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

Conciseness5/5

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

The description is well-structured and front-loaded: the core purpose appears in the first sentence, followed by behavioral details, alternative routing, quota, and output columns. Every sentence adds usable information without padding.

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?

The description covers purpose, behavior, error handling, quotas, output columns, and the relevant sibling tool. Combined with the thorough input schema and output schema, an agent has everything needed to select and invoke this tool correctly.

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

Parameters3/5

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

The input schema already documents all four parameters with 100% coverage, so the baseline is 3. The description does not add parameter-level detail, but it does provide output-column context and quota constraints that indirectly help the agent understand what the parameters produce.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Check whether a batch of URLs is indexed, and why not when they are not.' It clearly distinguishes this batch tool from the single-page alternative by naming gsc_inspect_url and contrasting batch rows versus full payload.

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?

The description explicitly tells an agent when to use this tool versus gsc_inspect_url: for batch indexing checks versus full single-page payloads. This gives clear selection guidance without ambiguity.

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

gsc_inspect_urlA
Read-onlyIdempotent

Full URL Inspection for one page: index, mobile, rich results and AMP.

Use this when one page needs a diagnosis. For an indexed-or-not sweep across many URLs use gsc_indexing_issues.

Quota: 600 inspections per minute and 2,000 per day, per property.

ParametersJSON Schema
NameRequiredDescriptionDefault
no_cacheNoBypass the response cache for this call.
page_urlYesFully qualified URL under site_url.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.

Output Schema

ParametersJSON Schema
NameRequiredDescription
ampNo
verdictNo
page_urlYes
site_urlYes
index_statusNo
rich_resultsNo
coverage_stateNo
mobile_usabilityNo
inspection_result_linkNo

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable rate-limit context (600/min and 2,000/day per property) and signals that a single URL is being inspected, extending beyond what annotations say without contradicting them.

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

Conciseness5/5

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

The description is three short, purposeful sentences: what it does, when to use it, and its quota. It is front-loaded with the core action and contains no filler. Every sentence earns its place.

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

Completeness5/5

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

For a single-URL inspection tool with a complete input schema, rich annotations, and an output schema, the description covers the essential behavioral, quota, and sibling-selection context. Nothing needed to select or call the tool correctly is 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 100%, so the schema already explains all parameters, including the site_url format and the no_cache option. The description does not add parameter-level detail beyond what is in the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description opens with 'Full URL Inspection for one page' and enumerates the inspected dimensions: index, mobile, rich results, and AMP. It also names the sibling tool gsc_indexing_issues for the multi-URL sweep, making the tool's scope unambiguous. This clearly differentiates it from its siblings.

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

Usage Guidelines5/5

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

The description states 'Use this when one page needs a diagnosis' and contrasts this with 'an indexed-or-not sweep across many URLs' pointing to gsc_indexing_issues. This gives the agent an explicit decision rule between the tool and its closest alternative.

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

gsc_performance_overviewA
Read-onlyIdempotent

Site totals for a period, compared with the preceding one by default.

Start here: it answers "is the site up or down" in one call, with the percentage change on every metric. position_delta is negative when the average position improves.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
typeNoweb, image, video, news, discover or googleNews.web
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNoBypass the response cache for this call.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
data_stateNo`all` (default, includes today's partial data) or `final`.
compare_previousNoAlso fetch the equally long preceding period.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deltaNo
currentYes
date_toYes
previousNo
site_urlYes
date_fromYes
data_stateNo
previous_rangeNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate a safe read-only operation. The description adds useful behavioral context beyond that: comparison with the previous period is the default, and position_delta semantics ('negative when the average position improves') are explained. This helps the agent interpret results correctly.

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 tight sentences, each earning its place: the first states function, the second gives the primary use case, and the third clarifies an important metric interpretation. Information is front-loaded with no redundancy.

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

Completeness5/5

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

For a read-only overview tool with a full input schema and an output schema present, the description provides all the behavioral guidance an agent needs: what it returns, the default comparison behavior, and the key metric nuance. Nothing important is 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 100%, so the parameters are already fully documented. The description adds no new parameter-level meaning; it mainly reinforces compare_previous default behavior implicitly. This is the expected baseline when the schema carries the load.

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 clearly states the tool's function: 'Site totals for a period' with comparison to the preceding period and 'percentage change on every metric.' The 'Start here' framing and 'is the site up or down' metaphor make the purpose immediately understandable, though no sibling tool is explicitly named for differentiation.

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

Usage Guidelines4/5

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

The description explicitly tells the agent when to use this tool: 'Start here: it answers "is the site up or down" in one call.' This provides clear context for choosing this tool first, but it does not explicitly state when to prefer alternatives or when not to use it.

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

gsc_portfolioA
Read-onlyIdempotent

Every accessible property at a glance, ranked worst first.

One row per property with the current period, the previous one and a health flag: critical below -30% clicks, warning below -15%. Use it to decide which property to look at before running anything else.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
limitNoHow many properties to check.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNo
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare the tool read-only, idempotent, and non-destructive, so the description only needs to add context beyond that. It adds meaningful behavioral details: results are ranked worst first, each row compares current vs. previous period, and health thresholds are explicitly defined (critical below -30% clicks, warning below -15%). This is useful behavior that the annotations do not convey.

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

Conciseness5/5

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

The description is compact, front-loaded with the tool's core purpose, and every sentence adds useful information. It avoids restating schema fields or repeating annotation hints, containing only the essential decision-making context an agent needs.

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 portfolio overview tool with an output schema and strong annotations, the description covers the key context: scope (all accessible properties), ranking, period comparison, health thresholds, and when to use it. It does not explain every parameter in prose, but the schema already covers most of those. Minor gaps like the meaning of 'accessible' or the effect of no_cache are understandable given the availability of schema and output schema.

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

Parameters3/5

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

Schema description coverage is 80%, and the parameter descriptions already handle days, limit, date_to, and response_format. The description does not add parameter-specific semantics beyond what the schema provides. The health-flag thresholds describe output behavior, not parameter meaning, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states that the tool returns every accessible property at a glance, ranked worst first, with one row per property and a health flag. This distinguishes it from sibling tools like gsc_site_details or gsc_query, which operate on individual properties or specific metrics, by establishing its role as a portfolio-level overview.

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

Usage Guidelines4/5

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

The description gives clear usage context: 'Use it to decide which property to look at before running anything else.' This tells the agent that this should be the first triage step. It does not explicitly name alternatives or exclusions, but the 'before running anything else' guidance makes the intended placement in a workflow clear.

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

gsc_queryA
Read-onlyIdempotent

Query the Search Analytics report: clicks, impressions, CTR, position.

This is the general-purpose tool. With no dates it covers the last 28 days ending today (UTC), with data_state=all so today's partial data is included, matching what the Search Console UI shows.

Example: site_url="sc-domain:example.com", dimensions="query,page", period="last_28_days", row_limit=100.

Returns a # meta ... line then a TSV table, or JSON with meta and rows. The meta names the exact range, the row count, whether more rows exist and the start_row to pass next.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
typeNoweb, image, video, news, discover or googleNews.web
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
filtersNoList of {dimension, operator, expression}. Operators: equals, notEquals, contains, notContains, includingRegex, excludingRegex.
no_cacheNoBypass the response cache for this call.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
row_limitNoRows returned. Default 100, capped at 1000.
start_rowNoZero-based pagination offset.
data_stateNo`all` (default, includes today's partial data) or `final`.
dimensionsNoComma-separated dimensions: query, page, country, device, date, searchAppearance, hour. `hour` covers only the last 10 days.query
response_formatNo`tsv` (default, compact) or `json`.tsv
aggregation_typeNoauto, byPage or byProperty.auto
filter_group_typeNoOnly `and` is supported by the API within one group.and

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds meaningful behavioral context beyond the schema and annotations: the default 28-day end-to-today window, inclusion of today's partial data via data_state=all, the TSV or JSON output shape, and the meta fields needed for pagination such as start_row and whether more rows exist.

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

Conciseness5/5

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

The description is compact and front-loaded: purpose first, then key defaults, then an example, then the return envelope. Every sentence earns its place, and the example is a high-signal compact illustration of how the parameters combine.

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

Completeness5/5

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

Given the large 15-parameter schema with 100% coverage, plus an output schema and strong annotations, the description supplies exactly the missing context: default period semantics, UI parity, API-style pagination, and a representative call. An agent has enough to both select and invoke the tool correctly.

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 description coverage is 100%, so the baseline is 3, and the schema already documents every parameter clearly. The description adds value with a concrete example tying site_url, dimensions, period, and row_limit together, and it clarifies default date behavior and the pagination contract. That moves it above baseline without duplicating the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Query the Search Analytics report: clicks, impressions, CTR, position.' It then labels the tool as 'the general-purpose tool,' which distinguishes it from specialized sibling tools like gsc_quick_wins or gsc_ctr_gaps. This gives an agent a clear and immediate sense of scope.

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

Usage Guidelines4/5

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

The description provides clear context: it covers defaults, date behavior, and the UI-matching data_state, and it demonstrates usage with an explicit example. It identifies the tool as the general-purpose option, implicitly routing agents away from specialized siblings, though it does not name those alternatives or state explicit when-not-to-use conditions.

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

gsc_quick_winsA
Read-onlyIdempotent

Queries close enough to the top that a push would pay off.

Ranked by the clicks each query would gain at target_position, not by impressions: a big query already near its ceiling is not an opportunity. The meta reports the thresholds that were applied.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNo
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
row_limitNoRows returned. Default 100, capped at 1000.
thresholdsNoOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
max_positionNoIgnore queries below this position.
min_positionNoIgnore queries above this position.
response_formatNo`tsv` (default, compact) or `json`.tsv
target_positionNoPosition to size the opportunity against.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, covering safety. The description adds valuable behavioral details: ranking by potential clicks rather than impressions, and the existence of adaptive thresholds reported in the meta. This goes beyond what the annotations provide.

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

Conciseness5/5

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

The description is two concise sentences. The first sentence clearly states the core function, and the second adds the critical ranking nuance. Every word earns its place; no fluff or redundancy.

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?

Given the output schema exists, return values need not be explained. The description covers the key behavioral aspects, but it does not mention how conditions like threshold overrides interact with defaults, or any caveats about caching. Still, for a read-only analysis tool, it is sufficiently complete.

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 92%, so most parameters are already documented. The description adds meaning by explaining the role of target_position in the ranking logic, which is not obvious from the schema alone. This supplements the parameter semantics usefully without needing to repeat schema details.

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

Purpose5/5

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

The description states a specific purpose: finding queries close enough to the top that a push would pay off. It clearly differentiates from other GSC tools by explaining the ranking logic (based on potential clicks at target_position, not impressions), which distinguishes it from similar tools like gsc_ctr_gaps or gsc_query.

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 description implies the use case (identifying quick-win queries worth pushing) but does not explicitly state when to use this tool versus alternatives, nor does it mention any exclusions. The context is clear enough, but explicit routing to a sibling tool like gsc_query for general query analysis would improve it.

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

gsc_site_detailsB
Read-onlyIdempotent

Permission level and property type for one property.

ParametersJSON Schema
NameRequiredDescriptionDefault
no_cacheNoBypass the response cache for this call.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds that the tool exposes permission level and property type, but it does not disclose additional behavioral traits such as caching behavior or response details. There is no contradiction with annotations.

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

Conciseness5/5

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

The description is a single short declarative sentence with no filler. It front-loads the essential output information and earns its place entirely.

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?

The tool is simple, has an output schema, full parameter descriptions, and strong safety annotations, so the structured fields carry most of the context. The main description is minimal but adequate for invoking the tool; some additional context about interpreting 'permission level' would have been useful, but it is not critical given the output schema.

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

Parameters3/5

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

Schema description coverage is 100%, and every parameter already has a meaningful description, including the site_url format, response_format options, and no_cache behavior. The tool description itself adds no parameter-level detail beyond the schema, so the baseline score of 3 is appropriate.

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 clearly identifies the resource scope ('for one property') and states the output focus: 'Permission level and property type.' It lacks an explicit retrieval verb such as 'Get' or 'Return', but it is still distinguishable from the sibling gsc_sites tool, which lists properties.

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 main description provides no when-to-use guidance and does not mention alternatives. The only routing hint, 'Call gsc_sites if unsure,' appears inside the site_url parameter description and concerns resolving a parameter value, not deciding whether this tool is the right choice.

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

gsc_sitemapsA
Read-onlyIdempotent

List the sitemaps Google knows about for a property, with errors and warnings.

Read-only: submitting or deleting a sitemap needs the read-write scope, which this server never requests.

Returns one row per sitemap: path, last submitted and downloaded timestamps, pending flag, index flag, warning and error counts, and the submitted / indexed URL counts when Google reports them.

ParametersJSON Schema
NameRequiredDescriptionDefault
no_cacheNoBypass the response cache for this call.
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already mark the operation as readOnly, idempotent, and non-destructive. The description adds meaningful context beyond this by explaining the server never requests read-write scope, which is why submitting or deleting is impossible. It also discloses that returned data reflects what Google knows, with error and warning counts, adding value beyond 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.

Conciseness5/5

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

The description is concise and front-loaded: the first sentence states the main purpose, the second adds the key read-only constraint, and the third summarizes the row shape. Every sentence earns its place with no fluff or repetition.

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?

Combined with the detailed input schema, annotations, and output schema, the description is complete enough for an agent to call this tool correctly. It explains scope, read-only policy, and the row contents, while the schema covers parameter formats. Nothing essential for selecting or invoking this tool is 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?

The input schema description coverage is 100%, so the schema already documents site_url, no_cache, and response_format clearly. The main tool description adds little to parameter meaning. The baseline of 3 applies because the schema does the heavy lifting and the description does not need to compensate.

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 verb and resource: 'List the sitemaps Google knows about for a property, with errors and warnings.' It clearly identifies a listing operation on sitemaps with diagnostic data, which distinguishes it from sibling tools like gsc_query or gsc_sites. However, it does not explicitly compare itself to siblings or state what it is not, so it misses full differentiation.

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

Usage Guidelines4/5

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

The description gives clear context: this is a read-only listing tool and cannot submit or delete sitemaps because the server never requests read-write scope. This is a useful exclusion. It does not explicitly name an alternative tool to use for mutation or for site discovery, though the site_url schema description suggests gsc_sites when unsure.

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

gsc_sitesA
Read-onlyIdempotent

List every property the authenticated account can read.

Call this first when a property string fails: it returns the exact site_url values the other tools expect, and whether each one is a domain property (sc-domain:example.com) or a URL-prefix property.

ParametersJSON Schema
NameRequiredDescriptionDefault
no_cacheNoBypass the response cache for this call.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond those hints: it returns exact site_url strings other tools expect and distinguishes domain properties from URL-prefix properties.

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 tight sentences with no filler. The core purpose is stated first, and the practical usage instruction is directly after, making it easy for an agent to scan and act on.

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

Completeness5/5

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

Given the output schema exists, annotations cover safety and idempotency, and parameters are fully documented, the description adds exactly the missing context: when to call this tool and what value it provides. Nothing an agent needs to invoke it correctly is 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 coverage is 100%, so the parameters no_cache and response_format are already fully documented in the schema. The description does not need to add parameter details, and it does not, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb and resource: 'List every property the authenticated account can read.' It clearly defines the tool's scope and distinguishes it from siblings like gsc_site_details or gsc_query by positioning it as the property-listing/discovery tool.

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

Usage Guidelines4/5

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

The description gives an explicit trigger condition: 'Call this first when a property string fails.' It also explains what the tool returns and how that helps with other tools, which gives an agent clear context for when to use it. It does not explicitly name alternative tools, but the unique listing purpose makes the usage boundary clear.

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

gsc_traffic_dropsA
Read-onlyIdempotent

Pages that lost clicks against the baseline, each with a likely cause.

diagnosis separates a ranking loss from falling demand, a collapsed CTR and a page that disappeared: the four need different fixes, and the raw numbers for both periods are in the row so the call can be checked.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoRolling window length ending today.
periodNoNamed range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.
date_toNoEnd date YYYY-MM-DD. Defaults to today.
no_cacheNo
site_urlYes`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure.
date_fromNoStart date YYYY-MM-DD. Overrides period and days.
row_limitNoRows returned. Default 100, capped at 1000.
thresholdsNoOverride the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.
min_drop_pctNoMinimum click loss, in percent.
response_formatNo`tsv` (default, compact) or `json`.tsv

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already state readOnlyHint, idempotentHint, and destructiveHint, so the baseline is lower. The description adds meaningful behavior: it explains that each row includes a diagnosis and raw numbers for both periods, making the results auditable. This is useful context beyond the annotations, with no contradiction.

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

Conciseness5/5

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

The description is compact and front-loaded, stating the core purpose in the first sentence. The second paragraph adds genuinely useful diagnostic context without filler. Every sentence earns its place.

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?

Given the tool has 10 parameters, an output schema, and detailed annotations, the description provides useful interpretive context but leaves gaps. It does not define what 'baseline' means, how thresholds are calculated, or how this tool relates to the many sibling diagnostics. Adequate, but not fully complete for a tool of this complexity.

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 90%, so the parameters are already well documented. The description does not add parameter-level detail, but it does contextualize the output by mentioning 'baseline' and 'both periods.' This is adequate given the schema already carries most of the burden.

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 clearly identifies the output as pages that lost clicks against a baseline, each with a likely cause. It also adds diagnostic categories, making the purpose tangible. However, it lacks an explicit verb like 'returns' or 'identifies' and does not distinguish itself from sibling tools by name.

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 tool versus closely related siblings such as gsc_content_decay or gsc_ctr_gaps. The statement that the four diagnoses need different fixes is interpretive guidance for acting on results, not guidance for tool selection.

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. 17 tool updatesv3.0.1
    • Addedgsc_alerts
    • Changedgsc_audit17 fields changed
      • addedInput schema / properties / brand_terms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Words that mark a query as branded. Without them the first label of the domain is used, which is often wrong.",
        +  "title": "Brand Terms"
        +}
      • addedInput schema / properties / branding_path / description
        Added value: +"Path to a branding.json overriding colours, logo, name and thresholds."
      • addedInput schema / properties / date_from / default
        Added value: +""
      • addedInput schema / properties / date_from / description
        Added value: +"Start date YYYY-MM-DD. Overrides period and days."
      • addedInput schema / properties / date_to / default
        Added value: +""
      • addedInput schema / properties / date_to / description
        Added value: +"End date YYYY-MM-DD. Defaults to today."
      • addedInput schema / properties / days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Rolling window length ending today.",
        +  "title": "Days"
        +}
      • addedInput schema / properties / inspect_top_pages
        Added value: +{
        +  "default": 10,
        +  "description": "How many top pages to run through URL Inspection. 0 disables it.",
        +  "title": "Inspect Top Pages",
        +  "type": "integer"
        +}
      • addedInput schema / properties / language
        Added value: +{
        +  "default": "",
        +  "description": "Report language: en, it. Defaults to en.",
        +  "title": "Language",
        +  "type": "string"
        +}
      • addedInput schema / properties / output
        Added value: +{
        +  "default": "auto",
        +  "description": "`file` writes the report and returns its path, `inline` returns the HTML as an embedded resource, `both` does both, `auto` picks by transport.",
        +  "title": "Output",
        +  "type": "string"
        +}
      • addedInput schema / properties / output_dir / description
        Added value: +"Where to write the report. Defaults to ~/gsc-reports/."
      • addedInput schema / properties / period
        Added value: +{
        +  "default": "",
        +  "description": "Named range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.",
        +  "title": "Period",
        +  "type": "string"
        +}
      • addedInput schema / properties / sections
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Subset of sections to render: overview, issues, top_queries, top_pages, countries, sitemaps, indexing, strategy, roadmap.",
        +  "title": "Sections"
        +}
      • addedInput schema / properties / site_url / description
        Added value: +"`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure."
      • addedInput schema / properties / thresholds
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Override the adaptive thresholds: min_impressions, min_clicks, high_visibility_impressions, ctr_curve.",
        +  "title": "Thresholds"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "site_url",
        -  "date_from",
        -  "date_to"
        -]New value: +[
        +  "site_url"
        +]
      • changedOutput schema / (root)
        Previous value: -{
        -  "properties": {
        -    "result": {
        -      "title": "Result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "result"
        -  ],
        -  "title": "gsc_auditOutput",
        -  "type": "object"
        -}New value: +null
    • Addedgsc_cannibalization
    • Addedgsc_compare_periods
    • Addedgsc_content_decay
    • Addedgsc_ctr_gaps
    • Addedgsc_doctor
    • Changedgsc_indexing_issues4 fields changed
      • addedInput schema / properties / no_cache
        Added value: +{
        +  "default": false,
        +  "description": "Bypass the response cache for this call.",
        +  "title": "No Cache",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / pages / description
        Added value: +"Fully qualified URLs under site_url. At most 100 per call."
      • addedInput schema / properties / response_format
        Added value: +{
        +  "default": "tsv",
        +  "description": "`tsv` (default, compact) or `json`.",
        +  "title": "Response Format",
        +  "type": "string"
        +}
      • addedInput schema / properties / site_url / description
        Added value: +"`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure."
    • Changedgsc_inspect_url16 fields changed
      • addedInput schema / properties / no_cache
        Added value: +{
        +  "default": false,
        +  "description": "Bypass the response cache for this call.",
        +  "title": "No Cache",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / page_url / description
        Added value: +"Fully qualified URL under site_url."
      • addedInput schema / properties / site_url / description
        Added value: +"`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure."
      • addedOutput schema / description
        Added value: +"The URL Inspection payload for one page, with the sub-objects left as-is."
      • addedOutput schema / properties / amp
        Added value: +{
        +  "additionalProperties": true,
        +  "title": "Amp",
        +  "type": "object"
        +}
      • addedOutput schema / properties / coverage_state
        Added value: +{
        +  "default": "",
        +  "title": "Coverage State",
        +  "type": "string"
        +}
      • addedOutput schema / properties / index_status
        Added value: +{
        +  "additionalProperties": true,
        +  "title": "Index Status",
        +  "type": "object"
        +}
      • addedOutput schema / properties / inspection_result_link
        Added value: +{
        +  "default": "",
        +  "title": "Inspection Result Link",
        +  "type": "string"
        +}
      • addedOutput schema / properties / mobile_usability
        Added value: +{
        +  "additionalProperties": true,
        +  "title": "Mobile Usability",
        +  "type": "object"
        +}
      • addedOutput schema / properties / page_url
        Added value: +{
        +  "title": "Page Url",
        +  "type": "string"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • addedOutput schema / properties / rich_results
        Added value: +{
        +  "additionalProperties": true,
        +  "title": "Rich Results",
        +  "type": "object"
        +}
      • addedOutput schema / properties / site_url
        Added value: +{
        +  "title": "Site Url",
        +  "type": "string"
        +}
      • addedOutput schema / properties / verdict
        Added value: +{
        +  "default": "",
        +  "title": "Verdict",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "site_url",
        +  "page_url"
        +]
      • changedOutput schema / title
        Previous value: -"gsc_inspect_urlOutput"New value: +"InspectionResult"
    • Changedgsc_performance_overview25 fields changed
      • addedInput schema / properties / compare_previous
        Added value: +{
        +  "default": true,
        +  "description": "Also fetch the equally long preceding period.",
        +  "title": "Compare Previous",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / data_state
        Added value: +{
        +  "default": "",
        +  "description": "`all` (default, includes today's partial data) or `final`.",
        +  "title": "Data State",
        +  "type": "string"
        +}
      • addedInput schema / properties / date_from / default
        Added value: +""
      • addedInput schema / properties / date_from / description
        Added value: +"Start date YYYY-MM-DD. Overrides period and days."
      • addedInput schema / properties / date_to / default
        Added value: +""
      • addedInput schema / properties / date_to / description
        Added value: +"End date YYYY-MM-DD. Defaults to today."
      • addedInput schema / properties / days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Rolling window length ending today.",
        +  "title": "Days"
        +}
      • addedInput schema / properties / no_cache
        Added value: +{
        +  "default": false,
        +  "description": "Bypass the response cache for this call.",
        +  "title": "No Cache",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "default": "",
        +  "description": "Named range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.",
        +  "title": "Period",
        +  "type": "string"
        +}
      • addedInput schema / properties / site_url / description
        Added value: +"`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure."
      • addedInput schema / properties / type
        Added value: +{
        +  "default": "web",
        +  "description": "web, image, video, news, discover or googleNews.",
        +  "title": "Type",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "site_url",
        -  "date_from",
        -  "date_to"
        -]New value: +[
        +  "site_url"
        +]
      • addedOutput schema / $defs
        Added value: +{
        +  "Delta": {
        +    "description": "Percentage change between two periods. Position improves when it goes down.",
        +    "properties": {
        +      "clicks_pct": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Clicks Pct"
        +      },
        +      "ctr_pct": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Ctr Pct"
        +      },
        +      "impressions_pct": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "title": "Impressions Pct"
        +      },
        +      "position_delta": {
        +        "anyOf": [
        +          {
        +            "type": "number"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Absolute change in average position; negative means an improvement",
        +        "title": "Position Delta"
        +      }
        +    },
        +    "title": "Delta",
        +    "type": "object"
        +  },
        +  "Totals": {
        +    "description": "Aggregate metrics for one period.",
        +    "properties": {
        +      "clicks": {
        +        "default": 0,
        +        "title": "Clicks",
        +        "type": "integer"
        +      },
        +      "ctr": {
        +        "default": 0,
        +        "description": "Click-through rate as a fraction, 4 decimals",
        +        "title": "Ctr",
        +        "type": "number"
        +      },
        +      "impressions": {
        +        "default": 0,
        +        "title": "Impressions",
        +        "type": "integer"
        +      },
        +      "position": {
        +        "default": 0,
        +        "description": "Average position, 1 decimal",
        +        "title": "Position",
        +        "type": "number"
        +      }
        +    },
        +    "title": "Totals",
        +    "type": "object"
        +  }
        +}
      • addedOutput schema / description
        Added value: +"Site totals for a period, optionally compared with the preceding one."
      • addedOutput schema / properties / current
        Added value: +{
        +  "$ref": "#/$defs/Totals"
        +}
      • addedOutput schema / properties / data_state
        Added value: +{
        +  "default": "all",
        +  "title": "Data State",
        +  "type": "string"
        +}
      • addedOutput schema / properties / date_from
        Added value: +{
        +  "title": "Date From",
        +  "type": "string"
        +}
      • addedOutput schema / properties / date_to
        Added value: +{
        +  "title": "Date To",
        +  "type": "string"
        +}
      • addedOutput schema / properties / delta
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Delta"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / previous
        Added value: +{
        +  "anyOf": [
        +    {
        +      "$ref": "#/$defs/Totals"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null
        +}
      • addedOutput schema / properties / previous_range
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Previous Range"
        +}
      • removedOutput schema / properties / result
        Removed value: -{
        -  "title": "Result",
        -  "type": "string"
        -}
      • addedOutput schema / properties / site_url
        Added value: +{
        +  "title": "Site Url",
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "result"
        -]New value: +[
        +  "site_url",
        +  "date_from",
        +  "date_to",
        +  "current"
        +]
      • changedOutput schema / title
        Previous value: -"gsc_performance_overviewOutput"New value: +"Overview"
    • Addedgsc_portfolio
    • Changedgsc_query18 fields changed
      • addedInput schema / properties / aggregation_type
        Added value: +{
        +  "default": "auto",
        +  "description": "auto, byPage or byProperty.",
        +  "title": "Aggregation Type",
        +  "type": "string"
        +}
      • addedInput schema / properties / data_state
        Added value: +{
        +  "default": "",
        +  "description": "`all` (default, includes today's partial data) or `final`.",
        +  "title": "Data State",
        +  "type": "string"
        +}
      • addedInput schema / properties / date_from / default
        Added value: +""
      • addedInput schema / properties / date_from / description
        Added value: +"Start date YYYY-MM-DD. Overrides period and days."
      • addedInput schema / properties / date_to / default
        Added value: +""
      • addedInput schema / properties / date_to / description
        Added value: +"End date YYYY-MM-DD. Defaults to today."
      • addedInput schema / properties / days
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Rolling window length ending today.",
        +  "title": "Days"
        +}
      • addedInput schema / properties / dimensions / description
        Added value: +"Comma-separated dimensions: query, page, country, device, date, searchAppearance, hour. `hour` covers only the last 10 days."
      • addedInput schema / properties / filter_group_type
        Added value: +{
        +  "default": "and",
        +  "description": "Only `and` is supported by the API within one group.",
        +  "title": "Filter Group Type",
        +  "type": "string"
        +}
      • addedInput schema / properties / filters
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "additionalProperties": true,
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "List of {dimension, operator, expression}. Operators: equals, notEquals, contains, notContains, includingRegex, excludingRegex.",
        +  "title": "Filters"
        +}
      • addedInput schema / properties / no_cache
        Added value: +{
        +  "default": false,
        +  "description": "Bypass the response cache for this call.",
        +  "title": "No Cache",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / period
        Added value: +{
        +  "default": "",
        +  "description": "Named range: last_7_days, last_28_days, last_3_months, last_month, this_month, last_16_months.",
        +  "title": "Period",
        +  "type": "string"
        +}
      • addedInput schema / properties / response_format
        Added value: +{
        +  "default": "tsv",
        +  "description": "`tsv` (default, compact) or `json`.",
        +  "title": "Response Format",
        +  "type": "string"
        +}
      • addedInput schema / properties / row_limit / description
        Added value: +"Rows returned. Default 100, capped at 1000."
      • addedInput schema / properties / site_url / description
        Added value: +"`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure."
      • addedInput schema / properties / start_row
        Added value: +{
        +  "default": 0,
        +  "description": "Zero-based pagination offset.",
        +  "title": "Start Row",
        +  "type": "integer"
        +}
      • addedInput schema / properties / type
        Added value: +{
        +  "default": "web",
        +  "description": "web, image, video, news, discover or googleNews.",
        +  "title": "Type",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "site_url",
        -  "date_from",
        -  "date_to"
        -]New value: +[
        +  "site_url"
        +]
    • Addedgsc_quick_wins
    • Changedgsc_site_details3 fields changed
      • addedInput schema / properties / no_cache
        Added value: +{
        +  "default": false,
        +  "description": "Bypass the response cache for this call.",
        +  "title": "No Cache",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / response_format
        Added value: +{
        +  "default": "tsv",
        +  "description": "`tsv` (default, compact) or `json`.",
        +  "title": "Response Format",
        +  "type": "string"
        +}
      • addedInput schema / properties / site_url / description
        Added value: +"`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure."
    • Changedgsc_sitemaps3 fields changed
      • addedInput schema / properties / no_cache
        Added value: +{
        +  "default": false,
        +  "description": "Bypass the response cache for this call.",
        +  "title": "No Cache",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / response_format
        Added value: +{
        +  "default": "tsv",
        +  "description": "`tsv` (default, compact) or `json`.",
        +  "title": "Response Format",
        +  "type": "string"
        +}
      • addedInput schema / properties / site_url / description
        Added value: +"`sc-domain:example.com` for a domain property, or `https://example.com/` with the trailing slash for a URL-prefix property. Call gsc_sites if unsure."
    • Changedgsc_sites2 fields changed
      • addedInput schema / properties / no_cache
        Added value: +{
        +  "default": false,
        +  "description": "Bypass the response cache for this call.",
        +  "title": "No Cache",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / response_format
        Added value: +{
        +  "default": "tsv",
        +  "description": "`tsv` (default, compact) or `json`.",
        +  "title": "Response Format",
        +  "type": "string"
        +}
    • Addedgsc_traffic_drops
  2. 8 tool updatesv2.0.2
    • First observedgsc_audit
    • First observedgsc_indexing_issues
    • First observedgsc_inspect_url
    • First observedgsc_performance_overview
    • First observedgsc_query
    • First observedgsc_site_details
    • First observedgsc_sitemaps
    • First observedgsc_sites

TDQS

A3.9/5.0

Scored across 17 tools

Disambiguation4/5

Most tools are clearly distinct (query, inspection, sitemaps, audit), but gsc_sites, gsc_site_details, and gsc_portfolio all operate at the property level and could be confused at first glance. Overall, careful descriptions separate them well.

Naming Consistency4/5

All tool names share the gsc_ prefix and snake_case, but the pattern mixes noun phrases (gsc_performance_overview, gsc_cannibalization) with verb-like names (gsc_query, gsc_compare_periods). Predictable enough, though not a strict verb_noun schema.

Tool Count4/5

17 tools is slightly above the ideal range but appropriate for a broad Search Console audit workflow. Each tool represents a meaningful capability rather than redundant variants.

Completeness4/5

The set covers property discovery, analytics reporting, common SEO analysis patterns, indexing checks, and report generation. Minor gaps exist — e.g., no direct URL-specific analytics slicing or sitemap submission — but these are consistent with a read-only audit-oriented server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server for querying Google Search Console data — search analytics, URL inspection, sitemap monitoring, and more — read-only tools for any MCP-compatible AI client.
    7
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    Read-only MCP server for Google Search Console, with browser-based OAuth flow and local token storage, enabling querying search analytics, site lists, and URL inspection.
    8
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only MCP server that gives AI clients access to Google Search Console data, enabling natural language queries about traffic, rankings, and SEO opportunities.
    154
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Read-only MCP server for Google Search Console data, enabling search analytics, URL inspection, indexing diagnostics, and sitemap management through MCP clients.
    19
    MIT