Google Search Console MCP
Provides tools for interacting with Google Search Console, including search analytics queries, question-shaped query detection, ranking opportunity analyses, URL inspection, and sitemap status. Supports server-side date handling, comparisons, and pagination.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Search Console MCPWhich queries gained the most clicks on example.com this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Search Console MCP
An MCP server that gives Claude, Cursor, Codex and any other MCP client clean access to Google Search Console: search analytics, question-shaped queries, ranking opportunities, URL inspection and sitemaps.
It runs on your machine, talks to Google with your own credentials, and sends nothing anywhere else. No telemetry.
Why this one
Every GSC MCP server wraps the same API. The differences are in the details that decide whether the model gets numbers it can trust:
Dates are resolved on the server. Ask for
last_28_daysand the server computes the range in the property's timezone (America/Los_Angeles, the one Search Console itself uses). That removes both the UTC off-by-one and the dates models make up when asked about "last month".Windows end where the data ends. Search Console reports lag 2-3 days. Preset ranges snap to the newest date that has rows, so trends are not biased by trailing empty days. Opt out with
anchor=today.Fresh data by default. Requests use
dataState=all, matching the numbers you see in the Search Console UI. Usedata_state=finalfor stable reporting.Comparisons are computed server-side.
compare=previous_periodorsame_period_last_year(shifted 364 days so weekdays align) returns one merged table withclicks_change,position_changeandis_newper row. The model never has to join two tables, a task LLMs are unreliable at.Compact responses. One text block of minified JSON per call, paginated with
limit/offset/has_more, nothing sent twice. Long sessions keep their context for rows.Question-shaped queries in 10 languages. A dedicated tool finds searches phrased as questions (what/how/why/compare/…) via regex filters that run inside Search Console itself: English, Spanish, French, Portuguese, Russian, Arabic, Hindi, Bengali, Indonesian and Chinese.
Read-only by default. Sitemap submit/delete exist but only work when you start the server with
--enable-writes.Errors that name the fix. Every failure message says what to do next, and
gsc-mcp doctorchecks the whole chain end to end.
Related MCP server: GSC MCP Server
Quick start
Requires Node.js 20+ and a one-time Google sign-in:
npx -y @eduardmur/gsc-mcp login # guided setup, ~2 minutes
npx -y @eduardmur/gsc-mcp doctor # verify everything workslogin walks you through creating your own free Google OAuth client (you control the credentials; nothing is shared with anyone) and signs you in via your browser. Details and alternatives in docs/auth-oauth.md, docs/auth-service-account.md and docs/auth-adc.md.
Then add the server to your client:
Claude Code
claude mcp add gsc -- npx -y @eduardmur/gsc-mcpClaude Desktop: add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"gsc": {
"command": "npx",
"args": ["-y", "@eduardmur/gsc-mcp"]
}
}
}Cursor: add to .cursor/mcp.json:
{
"mcpServers": {
"gsc": {
"command": "npx",
"args": ["-y", "@eduardmur/gsc-mcp"]
}
}
}Codex CLI
codex mcp add gsc -- npx -y @eduardmur/gsc-mcpNow ask things like:
Which queries gained and lost the most clicks this week on example.com?
What questions do people ask that we rank for but never answer on a dedicated page?
Find cannibalization on sc-domain:example.com and tell me which page should win each query.
Tools
Tool | What it returns |
| Properties the account can read, with permission levels. Start here. |
| Search analytics rows: dimensions (query, page, country, device, date, searchAppearance), Search-Console-side filters (contains/regex/country/device), metric filters, sorting, pagination up to 25k rows, optional compare with ready-made deltas. |
| Searches phrased as questions, detected inside Search Console in 10 languages. The raw material for FAQ content, and the same questions people ask AI assistants. |
| Four analyses over the top 5000 rows: |
| Index status per URL: verdict, coverage, canonical chosen by Google vs declared (mismatches flagged), robots state, last crawl, rich results. Single URL or batches up to 20. |
| Submitted sitemaps with status, errors and counts. Submit/delete only with |
Full parameter reference: docs/tools.md.
Prompts
Six ready-made recipes ship with the server and appear as slash commands in clients that support MCP prompts (in Claude Code: /gsc:weekly-report etc.):
weekly-report · content-decay · striking-distance · cannibalization-check · questions-to-content · indexing-triage
Each one is a step-by-step plan: which tools to call with which arguments, and what to deliver.
CLI
gsc-mcp # serve MCP on stdio (what your client runs)
gsc-mcp login # connect a Google account (guided)
gsc-mcp logout # remove saved tokens
gsc-mcp doctor # 6 end-to-end checks: node, credentials, token, properties, query, freshnessFlags: --enable-writes, --key-file <path>, --client <path>, --no-open.
Tokens are stored in ~/.config/gsc-mcp/tokens.json (0600). The only Google scope requested is webmasters.readonly.
Prefer a hosted setup?
If you'd rather skip local setup, or want AI-visibility data next to your Search Console numbers (how ChatGPT, Perplexity, Gemini and AI Overviews talk about your brand), Searcherries runs a hosted MCP with one-click OAuth: GSC, Bing Webmaster Tools, GA4 AI traffic and tracked AI answers in one server. The two are independent: neither needs the other. See docs/hosted.md.
Troubleshooting
Run gsc-mcp doctor first; it pinpoints the failing step. Common cases (7-day token expiry in Testing mode, service-account access, quotas, Windows and WSL notes): docs/troubleshooting.md.
Development
npm install
npm run typecheck && npm run lint && npm test # no network needed
npm run build # single-file dist via tsupTests fake the Search Console REST layer; nothing in CI talks to Google. See CONTRIBUTING.md.
License
MIT. Built by the maker of Searcherries.
Available Tools
6 toolsinspect-urlURL inspectionARead-onlyIdempotent
Index status of specific URLs via the URL Inspection API: verdict, coverage, robots.txt and indexing state, last crawl, canonical chosen by Google vs declared by the site (mismatches flagged), mobile usability and detected rich results. Pass url for one page or urls for a batch (max 20; requests run 2 at a time). Quota is roughly 600 requests/minute and 2000/day per property — keep batches small. URLs must belong to the property.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | One URL to inspect. | |
| urls | No | Several URLs to inspect (max 20). | |
| property | Yes | Search Console property: a URL-prefix like https://example.com/ or a domain property like sc-domain:example.com. Use list-properties first if unsure. | |
| language_code | No | BCP-47 result language (default en-US). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent, but the description adds substantive operational context the annotations cannot convey: server-side concurrency (2 requests at a time), batch cap of 20, and quota of roughly 600/min and 2000/day per property with an explicit 'keep batches small' instruction. That is exactly the value-add expected beyond structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Output fields are front-loaded, then invocation modes, then limits. No filler sentences; even the quota sentence carries actionable guidance ('keep batches small'). It is dense but every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the return payload (verdict, coverage, canonical chosen vs declared, mobile usability, rich results). Combined with the quotas, batch behavior and property constraint, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds the cross-parameter constraint that every inspected URL must belong to the named property — a semantic rule absent from the individual parameter docs. It also restates the batch size limit, which the schema already caps via maxItems, so the added value is real but partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (inspect) plus resource (URLs) with an explicit enumeration of what is returned: verdict, coverage, robots.txt state, last crawl, canonical mismatch, mobile usability, rich results. An agent can immediately distinguish this from the sibling aggregate tools (query, opportunities) without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states how to choose between single (url) and batch (urls) invocation and the constraint that URLs must belong to the property; the schema even points to list-properties for property discovery. It never explicitly names a sibling as the alternative for aggregate/index-wide questions, so it falls short of full when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list-propertiesList Search Console propertiesARead-onlyIdempotent
Search Console properties the authenticated account can read, with the permission level. Property identifiers come in two forms: sc-domain:example.com (a domain property covering every subdomain and protocol) and URL-prefix like https://example.com/ (exactly that prefix). Call this first and pass the identifier verbatim as property to every other tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and closed-world behavior, so the safe-read profile is covered. The description adds real value beyond that: it explains the two identifier forms, clarifies that sc-domain: spans all subdomains and protocols while URL-prefix matches exactly, and notes the permission level is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose, identifier semantics, and the call-first instruction. The most actionable advice (call this first, pass the identifier) is front-loaded alongside the purpose, and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool with no output schema, the description covers what is returned (properties plus permission level) and the identifier formats an agent must understand to use the rest of the suite correctly. Nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document and the baseline is 4. The description's discussion of identifier forms concerns how the output is consumed by other tools, not this tool's inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list Search Console properties) scoped to what the authenticated account can read, and adds the returned detail (permission level). The contrast with siblings is implicit but clear: this is the enumeration tool that feeds property identifiers to every other tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing guidance ('Call this first') and tells the agent what to do with the result ('pass the identifier verbatim as property to every other tool'). No exclusions are given, but there is no competing alternative for enumerating properties, so the guidance is effectively complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
opportunitiesSEO opportunitiesARead-onlyIdempotent
Ready-made opportunity analyses over the top-5000 rows of a window. low_ctr: rows earning impressions but converting far below the site's own average CTR (threshold = min(5%, max(1%, avg*0.75))). striking_distance: queries ranking positions 4-15 — the cheapest wins. long_tail: conversational queries of 4+ words. cannibalization: queries where two or more of the site's pages compete against each other, with the leading URL. Web search type only.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | low_ctr: high impressions, CTR far below the site's own average; striking_distance: ranking just below the top results; long_tail: conversational multi-word queries; cannibalization: several pages competing for one query. | |
| limit | No | Rows per page, 1-100 (default 25). | |
| words | No | long_tail minimum word count (default 4). | |
| anchor | No | Where preset ranges end: last_data_date (default) snaps to the newest date that has rows, avoiding the 2-3 day reporting lag; today uses the calendar date. | |
| offset | No | Rows to skip; page while has_more is true. | |
| period | No | Date range resolved server-side in the property's timezone (default last_28_days). Use custom together with start_date and end_date. | |
| end_date | No | End date YYYY-MM-DD, only with period=custom. | |
| property | Yes | Search Console property: a URL-prefix like https://example.com/ or a domain property like sc-domain:example.com. Use list-properties first if unsure. | |
| dimension | No | Analyze queries or pages (low_ctr and striking_distance only, default query). | |
| data_state | No | all (default) includes fresh data Google may still revise; final returns only stabilized rows. | |
| start_date | No | Start date YYYY-MM-DD, only with period=custom. | |
| max_position | No | striking_distance upper bound (default 15). | |
| min_position | No | striking_distance lower bound (default 4). | |
| min_impressions | No | Impression floor (default 10; long_tail and cannibalization default 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so the safety profile is covered. The description adds genuinely valuable behavior: the 5000-row processing cap, the exact low_ctr threshold formula min(5%, max(1%, avg*0.75)), and the web-search-type-only restriction. It does not mention pagination or return shape, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the general capability, then spends exactly one clause per kind, then closes with the applicability constraint. No filler, no repetition of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter, no-output-schema tool the description covers purpose, kind semantics, scoping, and constraints well. It omits any hint of the return shape or the has_more pagination contract (only implied in the schema), which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions are already rich, so baseline is 3. The description still adds meaning beyond the schema, notably the low_ctr threshold formula and the "cheapest wins" framing for striking_distance that help the agent choose a kind and interpret bounds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Ready-made opportunity analyses") and immediately enumerates the four analysis kinds with concrete definitions, so an agent can tell exactly what it produces versus the sibling query/question-queries tools. The "top-5000 rows of a window" scope further pins down the output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each kind carries implicit routing guidance (e.g. striking_distance noted as "the cheapest wins"), and the "Web search type only" constraint is an explicit applicability rule. It never names a sibling alternative or an explicit when-not-to-use, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
querySearch analyticsARead-onlyIdempotent
Search Analytics rows for one property: clicks, impressions, CTR and position grouped by up to three of query, page, country, device, date, searchAppearance. Dates are resolved server-side (presets like last_28_days, anchored to the last date with data). Value filters (contains/regex/equals) run inside Search Console; min/max metric filters and non-click sorts run on a top-5000 sample. compare=previous_period or same_period_last_year returns one merged table with server-computed deltas (position_change positive = improved) — never join two windows yourself. Rows are a paginated sample, not an exhaustive export.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Row order (default clicks desc; position sorts ascending; clicks_change requires compare). | |
| type | No | Search surface (default web). discover and googleNews have no query dimension. | |
| limit | No | Rows per page, 1-100 (default 25). | |
| anchor | No | Where preset ranges end: last_data_date (default) snaps to the newest date that has rows, avoiding the 2-3 day reporting lag; today uses the calendar date. | |
| device | No | ||
| offset | No | Rows to skip; page while has_more is true. | |
| period | No | Date range resolved server-side in the property's timezone (default last_28_days). Use custom together with start_date and end_date. | |
| compare | No | Merge a second window and return per-row deltas (default none). | |
| country | No | ISO alpha-3 country code, e.g. usa, deu. | |
| end_date | No | End date YYYY-MM-DD, only with period=custom. | |
| property | Yes | Search Console property: a URL-prefix like https://example.com/ or a domain property like sc-domain:example.com. Use list-properties first if unsure. | |
| data_state | No | all (default) includes fresh data Google may still revise; final returns only stabilized rows. | |
| dimensions | No | Row grouping, in order (default [query]). | |
| min_clicks | No | ||
| page_regex | No | Only pages matching this RE2 regex. | |
| start_date | No | Start date YYYY-MM-DD, only with period=custom. | |
| query_regex | No | Only queries matching this RE2 regex. | |
| max_position | No | ||
| min_position | No | ||
| page_contains | No | Only pages containing this text. | |
| query_contains | No | Only queries containing this text. | |
| min_impressions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover the safety profile (readOnly, idempotent, closed-world), and the description adds substantial operational context: server-side date resolution with anchor behavior, where each filter class executes, the top-5000 sampling caveat, compare's merged-table-with-deltas contract, and the sign convention for position_change. The 'paginated sample, not an exhaustive export' warning is exactly the kind of caveat annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose before moving into caveats, and each sentence carries non-redundant information (date resolution, filter execution, compare semantics, sampling). It is dense and packs several distinct rules into a single compact block, which slightly taxes parsing but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 22-parameter read tool with no output schema, the description supplies the operational context an agent needs: what a row contains, how dates resolve, which filters are exact versus sampled, how compare changes the result shape, and that pagination yields a sample. Return-shape detail is minimal, but the sampling and delta semantics are the parts most likely to cause misuse and they are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 77% schema coverage the baseline is 3, but the description meaningfully extends the schema: 'grouped by up to three of' dimensions, preset examples (last_28_days) with server-side resolution anchored to the last date with data, and the note that position_change requires compare and that positive means improved. It does not explain the undocumented min_clicks/min_impressions/min_position/max_position parameters, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search Analytics rows for one property') and enumerates the metrics (clicks, impressions, CTR, position) and grouping dimensions, so the agent knows exactly what comes back. It never names or contrasts the sibling tools (question-queries, opportunities) that also surface Search Console data, so the boundary is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete routing guidance: use compare instead of joining two windows ('never join two windows yourself'), and explains that value filters execute in Search Console while min/max and non-click sorts run on a top-5000 sample, which tells the agent when results are approximate. It stops short of explicit when-not-to-use-this-tool exclusions against siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
question-queriesQuestion-shaped queriesARead-onlyIdempotent
Google searches phrased as questions that showed this site — the raw material for FAQ pages and content that answers what people actually ask (including the questions AI features answer). Detection runs inside Search Console via regex filters built from question-prefix lists in 10 languages plus a minimum length. Search Console does not label AI traffic; these are question-shaped candidates. Sorted by impressions by default, since question queries are often shown without a click.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | Rows per page, 1-100 (default 25). | |
| anchor | No | Where preset ranges end: last_data_date (default) snaps to the newest date that has rows, avoiding the 2-3 day reporting lag; today uses the calendar date. | |
| offset | No | Rows to skip; page while has_more is true. | |
| period | No | Date range resolved server-side in the property's timezone (default last_28_days). Use custom together with start_date and end_date. | |
| country | No | ISO alpha-3 country code, e.g. usa, deu. | |
| end_date | No | End date YYYY-MM-DD, only with period=custom. | |
| language | No | Language of the question-prefix list (default en). | |
| property | Yes | Search Console property: a URL-prefix like https://example.com/ or a domain property like sc-domain:example.com. Use list-properties first if unsure. | |
| data_state | No | all (default) includes fresh data Google may still revise; final returns only stabilized rows. | |
| start_date | No | Start date YYYY-MM-DD, only with period=custom. | |
| page_contains | No | Only questions that showed pages containing this text. | |
| min_impressions | No | Drop rows below this (default 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, not open-world), and the description adds genuinely useful behavior: detection runs server-side inside Search Console, AI traffic is not labeled, these are only candidates, and results default to impressions sorting because question queries often get no click. Return format/pagination behavior is left to the schema, which is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences with the core definition front-loaded, followed by mechanism, caveat, and default-sort rationale. No filler, though the parenthetical about AI features is slightly more than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 13 parameters, no output schema, and one required param, the description supplies the conceptual model (question-shaped candidates, server-side detection, AI-traffic caveat) that structured fields cannot convey. What is missing is explicit routing against the generic 'query' and 'opportunities' siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92%, so the schema already documents nearly every parameter. The description only adds context for two of them (language relates to the question-prefix list, sort defaults to impressions), so it does not meaningfully exceed the structured baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (Google searches phrased as questions that showed this site) and explains how it is produced (Search Console regex filters built from question-prefix lists in 10 languages plus a minimum length). It implicitly separates itself from the generic 'query' sibling by describing a specialized subset, but never names the generic query tool, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Use is implied through the framing 'raw material for FAQ pages and content that answers what people actually ask' and the note about AI features, so an agent can guess the intent. However, no explicit when-to-use / when-not guidance and no alternative sibling (query, opportunities) is named as the comparison point.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemapsSitemapsBRead-onlyIdempotent
Sitemaps of a property: submitted files with their status, errors, warnings and submitted/indexed counts. action=status returns one sitemap (sitemap_url required). submit and delete change the property and only work when the server was started with --enable-writes.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | Default list. | |
| property | Yes | Search Console property: a URL-prefix like https://example.com/ or a domain property like sc-domain:example.com. Use list-properties first if unsure. | |
| sitemap_url | No | Full sitemap URL, required for status, submit and delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true and destructiveHint=false, but the description explicitly says 'submit and delete change the property' and describes a delete action. The description asserts mutation and deletion while the annotations assert a non-mutating, non-destructive tool — a direct conflict. Despite the useful --enable-writes gating detail, the contradiction with the safety annotations caps this at 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact clause-sentences: resource definition, then the status action, then the write actions with their precondition. Information is front-loaded and no sentence is filler, though the fragment opening ('Sitemaps of a property:') is slightly terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-action tool with no output schema, the description covers what the resource is, the per-action requirements, and the server-side write gate. It could say more about what the default list action returns, but the annotations and schema carry most of the remaining structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but the description adds actionable constraint the schema cannot express: submit and delete only function when the server was started with --enable-writes, and status is scoped to a single sitemap URL. That gating information meaningfully conditions how the action parameter can be invoked.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (sitemaps of a Search Console property) and enumerates what it exposes: submitted files with status, errors, warnings and submitted/indexed counts. It also clarifies the multi-action surface (list, status, submit, delete). It is clear without needing sibling differentiation, since none of the listed siblings (query, inspect-url, opportunities, etc.) overlap with sitemap management.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the operational conditions for the destructive/non-default actions ('action=status returns one sitemap (sitemap_url required)' and 'submit and delete ... only work when the server was started with --enable-writes'), which is useful when-to-use context for the sub-actions. It does not, however, say when to prefer this tool over siblings or when to prefer list vs status, leaving tool-selection to inference.
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.
6 tool updates
v0.1.0- First observed
inspect-url - First observed
list-properties - First observed
opportunities - First observed
query - First observed
question-queries - First observed
sitemaps
TDQS
Scored across 6 tools
Each tool has a clearly stated distinct purpose, but query, question-queries, and opportunities all operate over the same Search Analytics data. The descriptions differentiate them well (raw rows vs question-shaped candidates vs pre-built analyses), so an agent can mostly tell them apart, though there is latent overlap since query could partially replicate the other two.
All names are lowercase kebab-case, but the pattern is mixed: list-properties, question-queries, and inspect-url follow a verb_noun shape while query, opportunities, and sitemaps are bare nouns. Readable but not a predictable convention.
Six tools is well-scoped for Search Console's surface, with each tool earning its place and none appearing redundant or trivial. No bloat or thinness.
Covers the core GSC lifecycle: property listing, Search Analytics (with comparison and filtering), question mining, opportunity detection, URL inspection, and sitemap status/submit/delete. Minor gaps like property-level administration or authentication/verification ops exist but are typically handled in the UI, so agents can work around them.
Maintenance
Related MCP Connectors
Read Search Console performance, keyword opportunities and annotations for your sites.
Read-only Search Console analytics, URL inspection, indexing diagnostics, and sitemaps.
Ask Google Search Console in plain language. Hosted, free, no Google Cloud project.
SEO MCP server for keyword research, SERP analysis, audits, and Search Console workflows.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Google Search Console via MCP, offering search analytics, performance summaries, URL inspection, sitemap management, and property listing for SEO workflows.159 npm1MIT
- AlicenseAqualityAmaintenanceConnects MCP clients to the Google Search Console API, enabling search analytics queries, URL inspection, sitemap management, and performance comparison across time periods.2035 PyPIMIT
- AlicenseAqualityAmaintenanceSecure MCP server for Google Search Console. Query search analytics (clicks, impressions, CTR, position), manage sitemaps, inspect URL indexing status, and manage site properties.10AGPL 3.0
- AlicenseBqualityBmaintenanceEnables Google Search Console data queries via MCP, including search analytics, performance comparisons, URL inspection, and sitemap management.121MIT