Google Search Console MCP
This server connects your AI assistant to Google Search Console, letting you analyze organic search performance, inspect indexing, and manage properties and sitemaps.
Discover what's available:
server.capabilitieslists all tools and tells you if your Google account is connected.List sites:
sites.listshows which Search Console properties you can access.Query search analytics:
analytics.queryreturns clicks, impressions, CTR, and position by query, page, country, device, date, or search appearance, with filters, pagination, and search-type selection.Compare periods:
analytics.comparecompares performance between two date ranges.Inspect URLs:
urls.inspectchecks index status, last crawl, mobile usability, and rich-results eligibility.Manage sitemaps:
sitemaps.list,sitemaps.get,sitemaps.submit, andsitemaps.deletelet you audit, submit, and remove sitemaps.Manage properties:
sites.addandsites.deleteadd or remove Search Console properties.Get SEO insights:
insights.quick_wins,insights.cannibalization, andinsights.content_decaysurface ranking opportunities, competing pages, and declining content.List indexed pages:
indexing.list_pagesretrieves pages receiving search impressions as a proxy for indexed pages.Request indexing:
indexing.requestsubmits URLs to Google's Indexing API (limited to JobPosting or livestream pages).Generate reports:
reports.weekly_digestcreates a plain-language weekly SEO performance digest.
Provides tools for interacting with Google Search Console, enabling AI agents to query search analytics (impressions, clicks, CTR, position), inspect URLs, manage sitemaps, list sites, and identify SEO opportunities such as quick wins, content decay, and keyword cannibalization.
mcp-gsc
Part of the DigestSEO suite of open-source SEO tools.
Product: digestseo.com/gsc-mcp
Engineering case study: DigestSEO MCP Suite — AI visibility, Search Console, web validation, and trend intelligence
Support: digestseo.com/support
Privacy: digestseo.com/privacy
The self-hosting launcher is available as @digestseo/mcp-gsc:
npx -y @digestseo/mcp-gscFor Google OAuth and Cloudflare deployment configuration, follow SETUP.md.
Connect in 30 seconds
Every deployed instance exposes the same endpoint shape:
https://<your-worker>.workers.dev/mcpThe DigestSEO-hosted instance is available at:
https://mcp-gsc.digestseo.com/mcpClaude Code
claude mcp add --transport http gsc https://<your-worker>.workers.dev/mcpCursor
Kiro
Uses the hosted endpoint above; complete its Google OAuth flow on first use.
ChatGPT — add it as a custom connector; see Connect in your AI client below.
A self-hostable Model Context Protocol (MCP) server for Google Search Console. Connect it to Claude.ai, Cursor, ChatGPT, or any MCP-compatible client and ask your AI assistant about your site's organic search performance — impressions, clicks, top queries, index status, and sitemap health — straight from your own Google account.
It runs on Cloudflare Workers and ships with one-click Google OAuth onboarding: connect the server in your client, sign in with Google once, grant the requested Google Search Console permissions, and you're done. No API keys to copy around and no service-account JSON to manage.
Prefer zero setup? The hosted version — with automatic weekly email digests delivered to your inbox — is at digestseo.com. This repository is the open-source core you can run yourself.
Tools
By default (GSC_ACCESS_MODE=readwrite), this server exposes 17 tools. Read-only analytics and reporting tools are marked with MCP's readOnlyHint; the write tools below can change Search Console properties, sitemaps, or indexing state. Set GSC_ACCESS_MODE=readonly to request only the Search Console read-only scope and expose the 12 read-only tools.
Tool | Access | What it does |
| Read | List every tool this server exposes and report whether your Google connection is currently authenticated ( |
| Read | List the Search Console properties the connected Google account can access ( |
| Read | Impressions, clicks, CTR, and average position over a date range, with dimensions, filters, pagination, and selectable search type. |
| Read | Google's URL Inspection report for a single page. |
| Read | List submitted sitemaps or retrieve one sitemap's details. |
| Read | Surface optimization opportunities, competing pages, and declining content. |
| Read | Analyze pages receiving impressions and compare two periods. |
| Read | Generate a plain-language seven-day performance report with movers, top pages, and one recommended action. |
| Write | Add or remove a Search Console property. |
| Write | Submit or remove a sitemap. |
| Write | Requests indexing through Google's Indexing API. Google currently restricts this API to pages containing |
Read-write mode requests the Google Search Console read-write and Indexing API scopes. Read-only mode requests only https://www.googleapis.com/auth/webmasters.readonly (plus openid and email) and does not register the five write tools. Read-write remains the default so existing deployments retain their current behavior; see SETUP.md to select a mode before connecting users.
indexing.requesteligibility. Google's Indexing API is not a general-purpose page submission tool — as of this writing, Google's own documentation limits it to two content types: pages withJobPostingstructured data, and livestream pages withBroadcastEventstructured data nested insideVideoObject. Before submitting, the server fetches the target URL and checks its JSON-LD for one of those two types; if neither is present (or the page can't be fetched), it returns an error explaining why the URL is ineligible instead of calling the Indexing API. A successful submission is only an acknowledgment that Google received the notification — it does not guarantee the URL will be indexed.
Related MCP server: SEOMonster
What you can ask
Once connected, ask your assistant things like:
"What are my top 20 queries by clicks in the last 28 days?"
"Compare impressions for example.com this month vs last month — which pages dropped?"
"Is
https://example.com/pricingindexed? When was it last crawled?""Which queries does my blog rank position 5–15 for? Those are my quick wins."
"Give me a weekly digest for
sc-domain:example.comending today.""Do any of my sitemaps have errors or warnings?"
"Split my clicks into brand vs non-brand using a regex on the query."
"How is my site doing in Google Discover vs regular web search?"
Connect in your AI client
Once you've deployed the server (see SETUP.md), connect it by pasting your Worker's /mcp URL into your client:
https://<your-worker>.workers.dev/mcpClaude.ai — Settings → Connectors → Add custom connector → paste the
/mcpURL. Leave Client ID and Client Secret blank. On first use, Claude opens a Google sign-in flow; grant the access requested by the deployment and the connector turns green.Cursor — add it as a custom MCP server pointing at the same
/mcpURL.ChatGPT (with connector/MCP support) — add a custom connector with the
/mcpURL.
Any MCP-compatible client works — they all point at the same /mcp endpoint and share the same OAuth flow.
Setup
Self-hosting means bringing your own Google OAuth credentials and Cloudflare account. The full, copy-pasteable walkthrough is in SETUP.md — including an important note about Google's OAuth verification and the 7-day refresh-token limit while your app is unverified.
Quick shape:
git clone https://github.com/<you>/mcp-gsc.git
cd mcp-gsc
npm install
cp wrangler.example.jsonc wrangler.jsonc # then paste in your KV ids
# set GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET / TOKEN_ENCRYPTION_KEY as secrets
# choose GSC_ACCESS_MODE=readonly in wrangler.jsonc for a read-only deployment
npm run deploySee SETUP.md for every step in detail.
Development
npm install
npm test # typecheck + offline unit tests (what CI runs)
npm run dev # wrangler dev (local)
npm run test:smoke # structural smoke tests against a deploymentContributions welcome — see CONTRIBUTING.md.
License
MIT © 2026 DigestSEO.
Built and maintained by Tomi Šeregi, the builder behind digestseo.com — weekly SEO digests for non-technical site owners.
Available Tools
17 toolsanalytics.compareCompare Performance Between PeriodsARead-only
Compare Search Console performance metrics (clicks, impressions, CTR, average position) between two distinct date ranges (Period A vs Period B) for a selected dimension (query, page, country, device). Pagination metadata flags when either period reached the local 100,000-row safety ceiling; Search Console itself may still return only top data.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. | |
| dimension | No | The dimension to compare performance for. Defaults to query. | query |
| end_date_a | Yes | End date of Period A (recent, YYYY-MM-DD) | |
| end_date_b | Yes | End date of Period B (previous, YYYY-MM-DD) | |
| start_date_a | Yes | Start date of Period A (recent, YYYY-MM-DD) | |
| start_date_b | Yes | Start date of Period B (previous, YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| pagination | Yes | |
| comparisons | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds valuable behavioral details about pagination metadata and the 100,000-row safety ceiling, plus the caveat that Search Console may still return only top data. This discloses limitations and external behavior without contradicting any annotations.
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?
Two sentences with no filler: the first delivers the main purpose, metrics, and dimension options; the second front-loads the pagination caveat. Every sentence earns its place and the most important behavior is highlighted early.
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?
The description covers purpose, supported dimensions, and a key behavioral limitation. An output schema exists for return format, annotations cover read-only safety, and the schema documents parameter details, so nothing essential an agent needs to call this 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 input schema already describes all 6 parameters with coverage at 100%, including date formats, dimension enum, and site_url format details. The description only restates the dimension list and period comparison, adding no new parameter-level meaning beyond the schema 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?
The description uses a specific verb ('Compare') and names the exact resource ('Search Console performance metrics') with concrete metrics and dimensions. It clearly distinguishes this from the sibling 'analytics.query' by emphasizing comparison across two distinct date ranges rather than a single period.
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?
The description clearly states the context for use: comparing performance between two date ranges for a selected dimension. It does not explicitly name alternatives or provide when-not-to-use guidance, but the comparison purpose is unambiguous enough to imply selection over a single-period query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analytics.queryQuery search analyticsARead-only
Query Google Search Console search analytics data. Returns { row_count, start_row, rows } where each row has keys (dimension values), clicks, impressions, ctr, and position. When row_count equals row_limit, the response includes next_start_row — pass it back as start_row to fetch the next page. When Google provides them, response_aggregation_type and metadata are also included; metadata may identify the first incomplete date or hour.
IMPORTANT BEHAVIORS — read before calling:
For SITE TOTALS (total impressions, total clicks, overall CTR, overall average position), call with dimensions: []. This returns a single row containing the true site-level totals. Do NOT call with dimensions: ["query"] and sum the rows — Google omits anonymized low-volume queries from per-dimension responses, so summing per-query rows will undercount.
For TOP QUERIES / PAGES / COUNTRIES / DEVICES, call with the matching dimension. Expect the returned rows to cover only a subset of total impressions; this is normal Google behavior, not a data error.
DATA FRESHNESS: Search Console data lags about 2-3 days behind real time. If the user asks about "today" or "yesterday", expect empty or partial rows for the most recent days; the latest reliably-complete date is usually 3 days ago.
AVERAGE POSITION is impression-weighted. To compute an overall position across multiple rows, use sum(position * impressions) / sum(impressions). Never plain-average the position column across rows.
CTR in the response is a 0–1 fraction. Multiply by 100 for percent.
Use search_type to query image/video/news/discover indexes separately from web.
Use dimension_filter_groups to filter by country, device, query content, page URL, or search feature. includingRegex and excludingRegex use RE2 syntax. For brand vs non-brand splits, pass a single regex filter on the 'query' dimension.
data_state defaults to 'all' which matches the GSC dashboard. Pass 'final' only when the user explicitly asks for stable, non-preliminary data.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date (inclusive) in YYYY-MM-DD format. Note the 2-3 day data lag: the most recent complete date is usually 3 days ago. | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. | |
| row_limit | No | Maximum rows to return (1-25000). Defaults to 100, which is plenty for most questions; raise it only for bulk exports and page through with start_row. | |
| start_row | No | Zero-based row offset for pagination. When a response contains next_start_row, pass it here to fetch the next page. | |
| data_state | No | 'all' includes fresh (preliminary) data and matches the GSC dashboard; 'final' returns only finalized data. | all |
| dimensions | No | Dimensions to group rows by. Pass [] (empty array) to get a single row of true site-level totals. | |
| start_date | Yes | Start date (inclusive) in YYYY-MM-DD format. | |
| search_type | No | Which search index to query. Defaults to web. | web |
| aggregation_type | No | How Google aggregates metrics. Leave as 'auto' unless you specifically need byPage or byProperty semantics. | auto |
| dimension_filter_groups | No | Optional filters ANDed together, e.g. [{ groupType: 'and', filters: [{ dimension: 'country', operator: 'equals', expression: 'usa' }] }]. Countries use ISO 3166-1 alpha-3 codes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| metadata | No | Google data-completeness metadata, included only when returned by Google. |
| row_count | Yes | |
| start_row | Yes | |
| next_start_row | No | |
| response_aggregation_type | No | Google response aggregation type, included only when returned by Google. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and open-world behavior, and the description adds substantial context: 2-3 day data lag, anonymized low-volume queries being omitted, impression-weighted average position, CTR as a 0-1 fraction, and pagination via next_start_row. This is unusually transparent and leaves little to guess about response behavior.
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?
Although long, the description is front-loaded with purpose and return shape, then organized into a clearly labeled 'IMPORTANT BEHAVIORS' section with focused bullets. Every sentence carries operational meaning, and the length is justified by the tool's 10-parameter complexity.
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 complex tool with 10 parameters, the description covers return structure, pagination, data freshness, aggregation semantics, filter usage, and data_state behavior. This is sufficient for an agent to select correct parameter values and interpret results reliably; no significant operational gap remains.
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%, so the parameters are already well documented and the baseline is 3. The description adds valuable interpretation beyond the schema, such as RE2 syntax for regex filters, brand vs non-brand filter strategy, and the warning that summing per-query rows undercounts totals, which raises it to 4.
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 opening sentence names a specific verb and resource: querying Google Search Console search analytics data, then defines the return envelope and row fields. This makes the tool's function unmistakable and enough to distinguish it from sibling analytics tools even without an explicit contrast.
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?
The 'IMPORTANT BEHAVIORS' section gives explicit when-to/when-not guidance: use dimensions: [] for site totals, do not sum per-query rows, use matching dimensions for top queries, and pass 'final' only when stable data is requested. It does not explicitly route the agent to sibling tools such as analytics.compare, so it stops short of a full alternative-selection explanation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
indexing.list_pagesList Indexed PagesARead-only
Retrieve a list of site pages that have received search impressions, serving as a proxy list of indexed pages on the site. When one date boundary is omitted, the server derives the other to target an inclusive 30-day range; generated end dates are capped at the latest complete date.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date (inclusive) in YYYY-MM-DD format. If start_date is omitted, the generated start date is 29 days earlier. Defaults to 3 days ago. Note the 2-3 day data lag. | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. | |
| row_limit | No | Maximum pages to retrieve (1-25000). Default is 1000. | |
| start_date | No | Start date (inclusive) in YYYY-MM-DD format. If end_date is omitted, the generated end date is 29 days later, capped at the latest complete date. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pages | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint, so the safety profile is covered. The description adds meaningful behavioral context by explaining date-range derivation logic: if one boundary is omitted, the server derives the other to form an inclusive 30-day range, and generated end dates are capped at the latest complete date. This goes beyond the annotations and helps agents set expectations correctly.
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?
The description is two sentences with no redundant filler. The primary purpose is front-loaded, and the second sentence efficiently communicates key behavioral nuance. Every clause earns its place, making it easy for an agent to parse quickly.
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?
The tool has a moderate complexity with four parameters and a full output schema, and the description covers its core purpose and date behavior. The schema handles parameter details and return values, so the description doesn't need to restate them. The main gap is the lack of explicit usage alternatives, but this is not critical for executing the tool correctly given the rich schema and annotations.
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% for all four parameters, so the baseline is 3. The description's date-derivation explanation partially overlaps with schema text, but it adds the phrase 'inclusive 30-day range,' which clarifies the interaction between start_date and end_date. Overall, the description does not need to compensate for missing schema info, so a 3 is appropriate.
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 clearly states a specific action and resource: 'Retrieve a list of site pages that have received search impressions.' It also adds the important nuance of serving as a 'proxy list of indexed pages,' which distinguishes it from sibling tools like sitemaps.list or urls.inspect. Even without naming siblings, the purpose is explicit and unambiguous.
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?
The usage context is implied through the description of what the tool returns (pages with impressions as a proxy for indexed pages), but there is no explicit guidance on when to choose this tool over alternatives such as sitemaps.list or analytics.query. No when-not-to-use conditions or sibling comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
indexing.requestRequest IndexingA
Requests indexing through Google's Indexing API for a URL within an owner-level Search Console property accessible to the connected Google account. Google currently restricts this API to pages containing JobPosting structured data or livestream pages containing BroadcastEvent inside VideoObject. It is not available for general webpage submission.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The fully qualified HTTP/HTTPS URL to submit. It must fall within site_url and contain JobPosting structured data, or be a livestream page with BroadcastEvent inside VideoObject. | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. The connected Google account must be an owner of this property. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read/write, idempotency, and destructive hints. The description adds meaningful behavioral context beyond annotations: Google's API restriction, the owner-level permission requirement, and the fact that submission is a request rather than a guaranteed immediate index. This is valuable transparency for an agent deciding whether the call will succeed.
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?
The description is two sentences with no filler. The primary action is front-loaded, followed immediately by the critical eligibility restriction. 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?
The description is largely complete for this tool's complexity: it covers purpose, eligibility, auth ownership requirement, and the non-general nature of the API. The output schema exists, so return values need no explanation. A minor gap is the lack of an explicit pointer to sitemaps.submit for general pages, but this does not prevent correct invocation.
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 input schema covers 100% of parameters and already provides rich descriptions for both 'url' and 'site_url', including format examples and permission failure modes. The tool description adds no additional parameter-level detail, so the baseline score of 3 applies.
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 clearly states a specific action ('Requests indexing through Google's Indexing API'), the resource ('a URL within an owner-level Search Console property'), and the critical scope restriction (only JobPosting or livestream BroadcastEvent pages). This distinguishes it from siblings like indexing.list_pages, urls.inspect, and sitemaps.submit.
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 provides an explicit when-not-to-use: 'It is not available for general webpage submission.' It also gives the eligibility criteria for valid submissions. However, it does not explicitly name an alternative tool for general webpage submission, such as sitemaps.submit, which would make the guidance fully complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights.cannibalizationDetect Keyword CannibalizationARead-only
Analyze search analytics to detect instances of keyword cannibalization, where multiple pages on your site compete for the same query. Pagination metadata flags when the local 100,000-row safety ceiling stopped fetching; a false flag does not guarantee Search Console returned every underlying row.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date (inclusive) in YYYY-MM-DD format. Note the 2-3 day GSC data lag. | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. | |
| start_date | Yes | Start date (inclusive) in YYYY-MM-DD format. | |
| min_impressions | No | Minimum impressions for a page-query pair to be considered. Must be at least 0. Default is 50. | |
| min_page_percentage | No | Minimum percentage of total query impressions a page must have to count as a cannibalizing page (0-100). Default is 10%. |
Output Schema
| Name | Required | Description |
|---|---|---|
| candidates | Yes | |
| pagination | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations readOnlyHint=true and openWorldHint=true, the safety profile is already declared. The description adds valuable behavioral context about the pagination metadata flag and the 100,000-row safety ceiling, warning that a false flag does not guarantee full data return. This is exactly the kind of limitation disclosure that helps an agent interpret results correctly and goes beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: purpose, definition, and a critical data-completeness caveat. Every sentence earns its place, and the caveat is placed at the end after the main purpose. No fluff or repetition of the schema.
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?
The tool has an output schema, so return values need not be explained. The description covers what the tool does, the key limitation (pagination ceiling), and the site_url precondition is covered in the schema. It could add more context about typical use cases or how results should be interpreted, but with the output schema and rich parameter schemas, it is sufficiently complete.
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. The description adds conceptual meaning around the parameters by framing the analysis: 'min_impressions' and 'min_page_percentage' relate to how a page qualifies as cannibalizing. However, most parameter-level detail lives in the schema; the description itself doesn't explain defaults or constraints. A 4 is warranted because the description enriches the semantic model of the parameters even though it doesn't restate them.
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 uses a specific verb ('Analyze', 'detect') and resource ('search analytics', 'keyword cannibalization') and clearly explains the concept ('multiple pages compete for the same query'). This distinguishes it from sibling analytics tools like analytics.query (generic querying) and insights.quick_wins/content_decay (other insight types).
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?
The description implies this is the tool for detecting cannibalization specifically, which differentiates it from siblings, but it does not explicitly state when not to use it or name alternatives. It does include a practical precondition ('call sites.list first if unsure') about site_url format, which helps agents use it correctly. Missing explicit exclusion guidance, but the domain-specific wording is enough for most selection cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights.content_decayDetect Content DecayARead-only
Identify content decay by comparing search clicks for your site pages between two contiguous periods and finding the pages with the largest traffic drops. Pagination metadata flags when either source period reached the local 100,000-row safety ceiling; Search Console itself may still return only top data.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. | |
| compare_days | No | Number of days to compare (recent period vs previous period). Must be at least 1. Default is 30. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pagination | Yes | |
| decay_count | Yes | |
| decay_results | Yes | |
| comparison_periods | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real behavioral context by disclosing that pagination metadata flags when a source period hits the 100,000-row safety ceiling and that Search Console may still return only top data. This is useful beyond the annotations and schema.
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?
Two sentences with no redundancy. The first sentence front-loads the core purpose and mechanism; the second adds an important data-limitation caveat. 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?
Given the rich input schema, full parameter descriptions, output schema, and annotations, the description is complete. It covers the central comparison method and the key safety-ceiling caveat. Nothing critical for an agent to select or call the tool correctly appears 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?
Schema description coverage is 100%, and both parameters are already well documented: site_url explains formats and permission pitfalls, while compare_days explains default, range, and tradeoffs. The description reinforces the comparison logic but does not add significant parameter meaning beyond the schema.
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 opens with a specific verb ('Identify content decay') and names the resource and method: comparing search clicks for site pages across two contiguous periods and finding pages with the largest traffic drops. This clearly differentiates the tool from siblings like insights.cannibalization and analytics.compare by signal and scope.
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?
The usage context is implied by the phrase 'Identify content decay' but there is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. Siblings such as insights.cannibalization and analytics.compare exist, but the description does not explain how to choose among them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insights.quick_winsIdentify SEO Quick WinsARead-only
Find search queries with at least the requested impressions that rank in a configurable striking-distance position range (8-20 by default). Returns clicks, impressions, CTR, and average position; CTR is context, not an eligibility filter. Pagination metadata flags when the local 100,000-row safety ceiling stopped fetching; a false flag does not guarantee Search Console returned every underlying row.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date (inclusive) in YYYY-MM-DD format. Note the 2-3 day GSC data lag. | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. | |
| start_date | Yes | Start date (inclusive) in YYYY-MM-DD format. | |
| max_position | No | Maximum average position to target (inclusive). Must be greater than 0. Default is 20. | |
| min_position | No | Minimum average position to target (inclusive). Must be greater than 0. Default is 8. | |
| min_impressions | No | Minimum impressions required to consider a query. Must be at least 0. Default is 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pagination | Yes | |
| quick_wins | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavior beyond the readOnlyHint and openWorldHint annotations: it clarifies that CTR is reporting context, not a filter, and discloses the 100,000-row safety ceiling with pagination metadata. The caveat that a false flag does not guarantee full Search Console data is especially transparent and prevents over-trust in the result set.
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 sentences, each earning its place: the first defines the core query filter, the second lists return metrics and clarifies CTR's role, the third discloses pagination limitations. It is front-loaded and free of filler.
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?
Given the output schema, annotations, and 100% parameter coverage, the description is complete for safe invocation. It covers defaults, return columns, the non-filter semantics of CTR, and the pagination ceiling. No critical operational detail 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?
Schema description coverage is 100%, so each parameter already carries meaning. The description adds some framing around the defaults (8-20 striking-distance range) and confirms min_impressions is an eligibility threshold, but it does not need to compensate for missing parameter documentation.
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 a specific resource ('search queries') and a precise eligibility shape: impressions threshold plus a striking-distance position range. It clearly differentiates this from sibling tools like insights.cannibalization or insights.content_decay by framing the output as quick wins based on position and impressions.
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?
The description gives a clear usage context: call this when the agent needs to surface queries just outside the top results that are worth optimizing. It does not explicitly name alternative tools or when-not-to-use conditions, but the eligibility criteria are specific enough to steer selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reports.weekly_digestWeekly GSC Performance DigestARead-only
Generate a plain-language weekly SEO report for one Google Search Console property. Returns a markdown digest covering the 7 days ending on end_date, with week-over-week comparison, top pages, queries gaining or losing traction, and one specific action item. Defaults end_date to today if omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | End date (inclusive) in YYYY-MM-DD format. Defaults to today. | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint and openWorldHint annotations by disclosing the output format (markdown), the time window (7 days ending on end_date), the comparative nature (week-over-week), included sections, and the default behavior for end_date. There is no contradiction with annotations; the read-only nature is consistent.
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?
Two sentences with no filler. The core purpose is first, followed by the specific output contents and a default behavior note. Every sentence carries information an agent needs.
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 tool with only 2 parameters, 1 required, an output schema, and read-only annotations, the description is sufficiently complete. It explains what the report contains, the date window, the target property scope, and the default end_date behavior. No critical calling context 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?
With schema description coverage at 100%, the input schema already fully documents both parameters, including the site_url format variants and the default for end_date. The tool description adds no meaning beyond what the schema provides, so baseline 3 is appropriate.
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 clearly identifies a specific verb ('Generate'), a resource ('weekly SEO report for one Google Search Console property'), and the exact output scope (7 days ending on end_date, week-over-week comparison, top pages, query trends, action item). This makes it easy to distinguish from siblings like analytics.query or individual insights tools.
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?
The description makes the intended use clear: produce a plain-language weekly digest for a single GSC property. It does not explicitly mention when to use a sibling like analytics.query instead, but the context of a scheduled/plain-language weekly report is enough to guide selection. It lacks explicit exclusions or alternative-routing guidance, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server.capabilitiesGet server capabilities and auth statusARead-only
List every tool this server exposes, its configured access mode, and whether the user's Google Search Console connection is currently authenticated. Call this first if you're unsure what tools are available, whether the deployment is read-only, or whether the user is connected. Returns the tool catalog plus an access mode and auth status. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | Yes | |
| tools | Yes | |
| server | Yes | |
| version | Yes | |
| access_mode | Yes | |
| auth_status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, and the description adds that the tool returns a catalog, access mode, and auth status while taking no arguments. It frames the tool as a safe first step, but does not describe potential edge cases or staleness of auth status; still, the extras are useful.
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 sentences each serve a distinct purpose: describing the output, giving usage guidance, and noting the return payload plus lack of arguments. There is no fluff and the most important information is front-loaded.
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 parameters, an output schema, and safety annotations, the description supplies all needed behavioral context. It even names the return elements, so an agent can decide to call it without opening the schema.
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 zero parameters, the schema is trivially complete and the description explicitly reinforces 'Takes no arguments.' This matches the baseline for parameter-free tools and leaves nothing ambiguous.
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 states a specific verb and resource: it lists every tool, the configured access mode, and auth status. This clearly differentiates it from data-oriented siblings like sites.list or analytics.query, marking it as a discovery 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?
It explicitly says to call this first when unsure about available tools, whether the deployment is read-only, or whether the user is connected. This provides concrete triggers for use and implies it precedes other operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemaps.deleteDelete sitemapADestructiveIdempotent
Remove/delete a submitted sitemap from your Google Search Console account.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | The full URL of the sitemap file to delete, e.g. https://example.com/sitemap.xml | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the description doesn't repeat those. The description confirms the destructive nature with 'Remove/delete'. It adds the behavior that site_url format errors can cause permission errors even for legitimate owners, which is useful context. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is a single concise sentence, but the site_url guidance in the schema is lengthy and highly informative. The description text itself is appropriately short, though it could have front-loaded a warning about the destructive nature.
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 destructive operation with clear annotations (destructiveHint=true), the safety profile is conveyed. The site_url format explanation covers the main usage pitfall. An output schema exists so return value documentation isn't needed. The description could mention idempotence implications, but idempotentHint already covers that.
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 parameter semantics are already well-documented in the schema. The description additionally clarifies the site_url format pitfall and instructs calling sites.list first, which adds real value beyond the schema. The feedpath parameter is documented with an example in the schema itself.
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 clearly states the specific action ('Remove/delete a submitted sitemap') and the resource ('sitemap from your Google Search Console account'). It differentiates from siblings like sitemaps.list and sitemaps.submit by focusing on the delete operation, though it doesn't explicitly name alternatives.
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?
The context implies deletion of an already-submitted sitemap. The site_url parameter description gives important guidance about property formats and calls out that sites.list should be called first if unsure. However, it doesn't explicitly state when not to use this tool or contrast it with sitemaps.submit or sitemaps.get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemaps.getGet sitemap detailsARead-only
Get status and details of a single sitemap submitted to Google Search Console.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | The full URL of the sitemap file, e.g. https://example.com/sitemap.xml | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sitemap | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only nature is established. The description adds that the operation returns status and details of a submitted sitemap, but it does not disclose additional behavioral context such as error conditions, rate limits, or special case handling. This is acceptable but not richly transparent.
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?
The description is a single, focused sentence with no filler or redundancy. It is appropriately sized for a simple read-only getter and front-loads the core purpose immediately.
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 two-parameter read-only tool with full schema coverage and an output schema, the description is complete enough to support correct invocation. It clarifies that the tool targets a single submitted sitemap, while the schema covers the required parameter semantics and the annotations cover safety.
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%, and both parameters already have detailed descriptions, including site_url format guidance and a note about permission errors. The tool description does not add parameter-level meaning, but the schema carries the full burden, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('status and details of a single sitemap submitted to Google Search Console'). It clearly identifies what the tool does and, by saying 'single sitemap,' implicitly distinguishes it from sitemaps.list, which deals with multiple sitemaps.
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?
The description provides no explicit guidance about when to use this tool versus the sibling sitemaps.list, sitemaps.submit, or sitemaps.delete. It implies use for an individual sitemap's details but gives no alternative selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemaps.listList submitted sitemapsARead-only
List all sitemaps submitted for a Search Console property. Returns sitemap URLs, last submitted/downloaded dates, submitted URL counts, warning and error counts, and sitemap status. Google's deprecated sitemap indexed count is intentionally omitted. Use this when the user asks about sitemap health, submission status, or wants to audit which sitemaps are working.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| sitemaps | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds valuable behavioral context by enumerating the returned fields and explicitly noting that Google's deprecated sitemap indexed count is intentionally omitted, which prevents an agent from assuming that field will exist. This is useful beyond the annotations without overreaching.
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 sentences with no filler: action and scope first, return values second, and usage guidance last. The mention of the intentional omission is relevant and concise, and 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?
For a one-parameter read-only listing tool with an output schema and annotations, the description covers purpose, return values, an important omission, and use cases. Nothing an agent needs to decide whether to call this tool 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?
Schema description coverage is 100%, and the site_url parameter already has a detailed description including format examples and a permission-error warning. The tool description itself adds no extra parameter information, so the baseline of 3 is appropriate; the schema carries the semantic weight.
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?
Names a specific verb ('List') and resource ('all sitemaps submitted for a Search Console property'), and clarifies scope with 'all'. The description also distinguishes itself from sibling sitemap tools by focusing on listing existing submissions, and it specifies the key returned data fields. This makes the tool's purpose unmistakable even without opening the 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?
Provides explicit usage context: 'Use this when the user asks about sitemap health, submission status, or wants to audit which sitemaps are working.' It does not explicitly state when not to use it or mention alternatives, but for a list operation the positive use cases are clear enough to guide an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sitemaps.submitSubmit sitemapAIdempotent
Submit a new sitemap to your Google Search Console account.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | The full URL of the sitemap file to submit, e.g. https://example.com/sitemap.xml | |
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey that the operation is mutating, open-world, idempotent, and non-destructive. The description adds no behavioral context beyond stating the action, such as retry safety, external side effects, or error behavior. It does not contradict 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word earns its place, and the action and target are immediately clear.
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 simple two-parameter submit operation, the description is largely complete when combined with the rich input schema, output schema, and annotations. The only notable gap is lack of explicit usage guidance relative to sibling tools, but the structured context covers invocation needs well.
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%, and the schema provides rich parameter details, especially for site_url with format examples and error guidance. The tool description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.
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 uses a specific verb ('Submit') with a clear resource ('a new sitemap') and destination ('Google Search Console account'). This clearly distinguishes the tool from sibling sitemap operations like sitemaps.list, sitemaps.get, and sitemaps.delete.
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?
The description gives no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of related calls like sites.list or sitemaps.list. The schema's site_url description hints at calling sites.list first, but the tool description itself provides no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sites.addAdd Search Console propertyAIdempotent
Add a new website property to your Google Search Console account. Note: Domain properties require sc-domain prefix (e.g., sc-domain:example.com), URL-prefix properties require full URL (e.g., https://example.com/).
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutating but non-destructive operation, and the description adds no side-effect or error behavior beyond the obvious 'Add' semantics. The format note is useful but is parameter constraint rather than behavioral disclosure.
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?
Two tight sentences with the core action front-loaded and the critical format caveat isolated in a short Note. No filler words or redundant elaboration.
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 one-parameter mutating tool with a detailed schema, an output schema, and annotations, the definition covers the essentials. It lacks a brief statement of prerequisites or expected results, but the schema compensates for the main risk of using the wrong identifier format.
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 input schema already provides 100% coverage of site_url, including both formats and a warning about permission errors. The description's note largely repeats that schema guidance and adds no new parameter semantics.
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 ('Add') and resource ('new website property') against a Google Search Console account. The operation is unique among sibling tools like sites.list and sites.delete, so an agent can distinguish it without opening the 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?
The phrase 'Add a new website property' implies when the tool should be used, but the description does not explicitly compare it with alternatives or say when not to use it. The format note is a prerequisite for the parameter, not a usage-routing guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sites.deleteDelete Search Console propertyADestructiveIdempotent
Remove an existing website property from your Google Search Console account.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| message | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false; the description aligns with 'Remove'. It adds context that the property must be 'existing' and scoped to the user's account. The parameter description further warns that an incorrect format returns a permission error even for an owner, which is extra behavioral nuance 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It conveys the action and object immediately without wasting tokens.
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 simple destructive operation with one well-documented parameter, annotations conveying destructive behavior, and an output schema present, the description is sufficient. It does not need to explain return values or side effects beyond what annotations and the schema already cover.
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 single parameter site_url has 100% schema description coverage, including exact format, examples, and a warning about wrong formats. The tool-level description adds no parameter information, but the schema fully compensates, so the baseline of 3 applies.
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 states a specific verb ('Remove') and a clear resource ('existing website property from your Google Search Console account'). This distinguishes it from sibling tools like sitemaps.delete (which targets sitemaps) and sites.add (which adds a property).
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?
The description makes the intended use clear: deleting a Search Console property. It does not explicitly name alternatives or exclusions, but the resource distinction is obvious from the title and sibling list. The schema's note to 'call sites.list first if unsure' is parameter guidance rather than tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sites.listList Search Console propertiesARead-only
List the Google Search Console properties (sites) the connected Google account has access to. Returns an array of { siteUrl, permissionLevel }. Call this when the user asks 'what sites do I have?' or 'what properties are connected?', or when the user asks about SEO for a site and hasn't specified which property. Also useful as a discovery step before calling other tools that require a site_url argument.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| sites | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and openWorldHint=true. The description adds meaningful context by stating the exact output format and clarifying that it only lists properties the connected account can access, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states what the tool does and returns, the second gives natural-language triggers, and the third explains the discovery role. No fluff or repetition.
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 tool with an output schema and clear annotations, this description is complete. It covers purpose, output structure, triggering user intents, and integration with other tools.
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 has zero parameters and an empty input schema, so the baseline is 4. No parameter explanations are needed, and the description appropriately focuses on behavior and usage rather than 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?
The description states a specific verb ('List') and resource ('Google Search Console properties'), and scopes it to the connected account's accessible sites. It also specifies the return shape ({ siteUrl, permissionLevel }), making it clearly distinct from sibling tools like sites.add and sites.delete.
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?
The description gives explicit trigger phrases ('what sites do I have?', 'what properties are connected?') and an explicit discovery-use case before tools requiring site_url. It lacks an explicit 'do not use when...' clause, so it's strong but not a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
urls.inspectInspect URL index statusARead-only
Inspect a single URL's index status in Google. Returns: whether the URL is indexed, last crawl date, indexing state, mobile usability, rich-results eligibility, and any AMP results. Use this when the user asks 'is X indexed?', 'why isn't X showing in Google?', or wants a deep look at one specific page. For bulk checks across many URLs, call this tool repeatedly — there is no batch endpoint — but note Google caps URL inspection at roughly 2,000 calls per property per day.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property identifier, exactly as returned by sites.list. Two formats exist: domain properties use 'sc-domain:example.com'; URL-prefix properties use the full URL including protocol and trailing slash, e.g. 'https://www.example.com/'. Passing the wrong format returns a permission error even when the user owns the site — call sites.list first if unsure. | |
| language_code | No | BCP-47 language code for translatable strings in the result, e.g. 'en-US' or 'de-DE'. | en-US |
| inspection_url | Yes | The fully-qualified URL to inspect. Must belong to the site_url property: same domain for sc-domain properties, same URL prefix for URL-prefix properties. |
Output Schema
| Name | Required | Description |
|---|---|---|
| inspection_result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, but the description adds meaningful behavioral context beyond that: there is no batch endpoint, repeated calls are needed for multiple URLs, and Google caps URL inspections at roughly 2,000 per property per day. It also details the return content, which helps the agent predict what the tool will produce. No contradiction with annotations exists.
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?
The description is compact and well-structured: the first sentence states purpose and outputs, the second gives usage triggers, and the third covers bulk behavior and rate limits. Every sentence contributes useful information without redundancy or filler.
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?
Given the tool's complexity, the description is complete: it covers purpose, outputs, when to use, bulk limitations, rate caps, and the parameter caveats are in the schema. An output schema exists, so the description does not need to enumerate return types. Nothing an agent would need to decide whether and how to call this tool 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?
Schema description coverage is 100%, so the baseline is 3; the parameter meanings, formats, and constraints are already fully described in the input schema. The tool description itself does not add new parameter-level detail beyond what the schema provides, though it reinforces the single-URL scope.
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 opens with a specific verb and resource: 'Inspect a single URL's index status in Google.' It enumerates the returned dimensions (indexed status, last crawl date, mobile usability, rich-results eligibility, AMP results), making the tool's purpose concrete and unambiguous. It also distinguishes this from bulk operations by emphasizing the single-URL scope.
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?
The description gives explicit trigger conditions: use when the user asks 'is X indexed?', 'why isn't X showing in Google?', or wants a deep look at one page. It also gives clear guidance for bulk checks ('call this tool repeatedly — there is no batch endpoint') and discloses the 2,000-calls-per-day cap, so an agent knows the operational boundaries.
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.
17 tool updates
v0.1.0- First observed
analytics.compare - First observed
analytics.query - First observed
indexing.list_pages - First observed
indexing.request - First observed
insights.cannibalization - First observed
insights.content_decay - First observed
insights.quick_wins - First observed
reports.weekly_digest - First observed
server.capabilities - First observed
sitemaps.delete - First observed
sitemaps.get - First observed
sitemaps.list - First observed
sitemaps.submit - First observed
sites.add - First observed
sites.delete - First observed
sites.list - First observed
urls.inspect
TDQS
Scored across 17 tools
Most tools are scoped to a distinct resource or analysis, and the descriptions clearly separate analytics.query from analytics.compare and the insights.* helpers. Minor overlap remains between indexing.list_pages and analytics.query with page dimensions, and the three insights tools may look interchangeable until read closely, but an agent can generally select correctly.
Tool names follow a consistent dot-namespaced pattern (sites.list, sitemaps.submit, analytics.compare) with snake_case for multi-word operations. The set is readable and predictable, though insights.cannibalization and reports.weekly_digest use noun-phrase operations rather than the verb-first style used by most names.
Seventeen tools is slightly above the ideal 3-15 range, but the count reflects the server's broad scope: property management, sitemaps, URL inspection, analytics, insights, indexing, and reporting. Each tool covers a distinct GSC workflow, so the size feels justified rather than bloated.
The server covers the core Google Search Console lifecycle comprehensively: site add/list/delete, sitemap submit/get/list/delete, URL inspection, analytics querying, comparison, insights, indexing, and reporting. There are no critical dead ends, and the few absences such as batch URL inspection are limitations of the underlying API rather than gaps in the tool surface.
Maintenance
Related MCP Connectors
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Open-source AI SEO over MCP: audits, ranks, keywords, backlinks + AI visibility (GEO).
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
OAuth MCP for Google, Meta, X and LinkedIn Ads, Search Console, GA4 and GoHighLevel.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Google Search Console, URL Inspection & Indexing API — search analytics, sitemap management, and batch indexing1376 npm7MIT
- AlicenseAqualityCmaintenanceSEO MCP over Search Console, GA4, PageSpeed, Cloudflare, IndexNow, CrUX, and 7 technical-SEO HTTP tools.7069 PyPI156MIT
- AlicenseAqualityAmaintenanceEnables AI coding assistants to validate HTML/CSS markup using W3C APIs, perform technical SEO audits, check broken links, and validate JSON-LD schemas directly in local workspaces.2816 npm7MIT
- AlicenseAqualityAmaintenanceAI visibility tracker MCP server. Track brand citations across ChatGPT, Claude, Perplexity, Gemini & Google AI Overviews. Self-host on Cloudflare Workers. GEO/AEO.29163 npm44MIT