Google Search Console MCP
This MCP server connects your AI assistant to Google Search Console for SEO analytics and management.
Discover capabilities & auth status:
server.capabilitieslists all tools and whether Google is connected.Manage properties:
sites.list,sites.get,sites.add,sites.deleteto view/add/remove Search Console properties.Query search analytics:
analytics.queryfor impressions, clicks, CTR, position over date ranges with dimensions, filters, pagination, search types (web, image, video, news, Discover, Google News), and data states.Compare periods:
analytics.compareto compare two date ranges by query/page/country/device.Inspect URLs:
urls.inspectandurls.inspect_manyfor index status, last crawl, mobile usability, rich results (up to 10 URLs with concurrency).Manage sitemaps:
sitemaps.list,sitemaps.get,sitemaps.submit,sitemaps.deleteto view and update sitemap submissions.Get SEO insights:
insights.quick_wins(striking-distance queries),insights.cannibalization(multiple pages competing for same query),insights.content_decay(traffic drops),insights.page_queries/insights.query_pages(page↔query drill-down).Indexing tools:
indexing.list_pages(pages with impressions as proxy),indexing.request(submit eligible URLs via Indexing API),indexing.remove(request removal),indexing.status(read notification receipts).Generate reports:
reports.weekly_digestproduces a plain-language weekly SEO summary with movers and a recommended action.Access modes:
readonlymode exposes only read-only tools;readwrite(default) adds write tools for properties, sitemaps, and indexing.
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-gscThe npm launcher starts a loopback-only Streamable HTTP Worker on 127.0.0.1 (port 8080 by default); it is not a stdio MCP process. You can run the npx command from any directory because the launcher resolves its bundled Worker configuration from the installed package. Clients that launch the package should connect to http://127.0.0.1:8080/mcp after supplying the Google OAuth and token-encryption environment variables described in SETUP.md. The launcher exits before starting Wrangler if GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, or TOKEN_ENCRYPTION_KEY is missing or blank, and it also rejects a nonblank TOKEN_ENCRYPTION_KEY unless it is valid base64 that decodes to exactly 32 bytes. Errors identify only the invalid or missing setting, never its secret value, so a broken OAuth session is not started. It keeps secret values in the child process environment and Wrangler loads them through declared local secrets; their values are not copied into Wrangler --var command-line arguments. Before the first OAuth sign-in, authorize the exact callback http://127.0.0.1:8080/google/callback in Google Cloud (or use the same custom PORT you launch with); the launcher prints both URLs at startup.
Local KV and Durable Object state, including the encrypted Google session, is stored in ~/.mcp-gsc/state by default instead of inside the versioned npm cache. That keeps the local connection available across package upgrades and ordinary npm cache cleanup. Set MCP_GSC_STATE_DIR to use another directory; keep the same TOKEN_ENCRYPTION_KEY when reusing existing state because stored refresh tokens are encrypted with that key. The launcher prints the effective state directory at startup. The first release with this stable path may require one Google reconnect because older launcher releases stored local state under the npm package cache.
The local launcher defaults to GSC_ACCESS_MODE=readwrite. For least-privilege analytics/reporting-only use, set GSC_ACCESS_MODE=readonly in the environment before running npx; the launcher forwards that value into the local Worker so OAuth requests only the read-only Search Console scope and the six mutation tools stay unregistered.
For Google OAuth and Cloudflare deployment configuration, follow SETUP.md.
Connect the local launcher
For the current verified quick-connect path, start the npm launcher first after supplying the Google OAuth and token-encryption environment variables described in SETUP.md:
npx -y @digestseo/mcp-gscThen connect your MCP client to the launcher's loopback endpoint:
http://127.0.0.1:8080/mcpSelf-hosted Cloudflare Worker deployments continue to use https://<your-worker>.workers.dev/mcp. The repo does not currently advertise the owner-hosted remote as a quick-connect path because its deployed tool contract is behind the published package.
Claude Code
claude mcp add --transport http gsc http://127.0.0.1:8080/mcpOpenAI Codex CLI / IDE
codex mcp add gsc --url http://127.0.0.1:8080/mcpCodex CLI and the Codex IDE extension share MCP configuration, so registering the server once makes the same local connection available to both clients. Start the npm launcher before using the connection; Codex will open the server's OAuth flow when authentication is required.
Cursor
When this repository is installed as a Cursor plugin, Cursor also auto-discovers three bundled Agent Skills that compose the MCP tools into evidence-safe workflows: gsc-weekly-review, gsc-indexing-triage, and gsc-search-opportunities. The Add to Cursor button above installs the MCP connection only; the bundled skills are part of the repository's Cursor plugin package.
The button and plugin MCP configuration above are for Cursor running on the same machine as the npm launcher. Cursor Cloud Agents run in isolated cloud VMs, so they cannot reach 127.0.0.1 on your computer. For Cloud Agents, deploy your own externally reachable HTTPS Worker and add its /mcp URL from the MCP controls at cursor.com/agents; Cursor supports HTTP MCP servers and OAuth there. Do not reuse the loopback URL for a Cloud Agent.
GitHub Copilot CLI
copilot plugin marketplace add AKzar1el/mcp-gsc
copilot plugin install mcp-gsc@digestseoThe marketplace path makes the plugin discoverable and updateable through Copilot's marketplace workflow. Direct repository install also remains supported with copilot plugin install AKzar1el/mcp-gsc. The Copilot plugin bundles the same three Agent Skills plus the local loopback MCP configuration. Start the npm launcher before using the plugin's MCP server; the plugin does not start or deploy mcp-gsc for you.
Gemini CLI
gemini extensions install https://github.com/AKzar1el/mcp-gscThe Gemini CLI extension bundles the verified local loopback MCP configuration plus the same three Agent Skills: gsc-weekly-review, gsc-indexing-triage, and gsc-search-opportunities. Start the npm launcher before using the extension; the extension does not start or deploy mcp-gsc for you.
Kiro
Start the npm launcher before using either install button or the Copilot plugin. Complete its Google OAuth flow on first use.
ChatGPT — ChatGPT cannot connect directly to this loopback 127.0.0.1 endpoint. For private/local use, create an OpenAI Secure MCP Tunnel, then run tunnel-client on the same machine as the launcher so it can reach http://127.0.0.1:8080/mcp; when creating the ChatGPT app, choose the Tunnel connection and select that tunnel. The tunnel setup requires an OpenAI tunnel_id and runtime API key; see OpenAI's Secure MCP Tunnel guide. The tunnel keeps the MCP server private and is intended for private/developer-mode connectivity, not public plugin distribution.
Alternatively, deploy your own remote Cloudflare Worker and add its HTTPS /mcp URL as a custom MCP app in Developer mode; 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 Google OAuth onboarding: connect the server in your client, review the mcp-gsc consent page that identifies the requesting MCP client and permissions, then sign in with Google and grant the requested Google Search Console permissions. No API keys to copy around and no service-account JSON to manage.
Tools
By default (GSC_ACCESS_MODE=readwrite), this server exposes 23 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 16 tools that do not require either write access or the separate Indexing API scope.
Tool | Access | What it does |
| Read | List every tool this server exposes and report local Google credential state. |
| Read | List the Search Console properties the connected Google account can access ( |
| Read | Retrieve one exact Search Console property and the connected account's permission level for it. |
| Read | Impressions, clicks, CTR, and average position over a date range, with dimensions, filters, safe pagination, and selectable search type. Pass |
| Read | Drill from one exact page to its Search Console queries, or from one exact query to the pages Google surfaced for it, with |
| Read | Google's URL Inspection report for the version of one page currently known in Google's index. It is not a live URL test; mobile-usability output is deprecated. |
| Read | Inspect Google's indexed versions of up to 10 URLs with bounded concurrency of 3 in one call while preserving input-order results. Each URL still consumes one Google URL Inspection request and one unit of the server's shared inspection safety budget; this does not run live URL tests. |
| Read | List submitted sitemaps or retrieve one sitemap's details. |
| Read | Surface average-position opportunity rows, query/page overlap, and evidence-ranked click declines. Quick-win candidates are observed query/page rows selected by aggregate Search Console average position, not proof of a stable current rank, and CTR is context rather than an eligibility filter. Cannibalization candidate totals/shares are scoped to observed query/page rows rather than true query-level property totals; content-decay results compare only pages returned in both periods and do not turn one-sided row absence into zero traffic. |
| Read | Analyze pages receiving Search Console impressions and compare two periods, optionally using the same search type and query/page/country/device/search-appearance filters for both periods. |
| Read | Generate a plain-language seven-day performance report with movers, top pages, and one recommended action. Query movers compare only rows returned in both weekly Search Analytics result sets; a query missing from one bounded response is not treated as zero because Google does not guarantee every data row. |
| Write | Add or remove a property from the connected account's Search Console site set. |
| Write | Submit or remove a sitemap. |
| Read | Read Google's latest successful Indexing API |
| Write | Requests indexing through Google's Indexing API. Google currently restricts this API to pages containing |
| Write | Request a |
Search Analytics calendar dates (start_date, end_date, and comparison-period dates) use Google's Pacific Time calendar (America/Los_Angeles, UTC-8/UTC-7 depending on daylight saving time), not the caller's local timezone or UTC. This also governs the server's generated/default Search Analytics date ranges.
Platform properties. Search Console now supports platform properties for social/video accounts such as Instagram, TikTok, X, and YouTube in its UI. Google's current Search Console API documentation still defines
siteUrlusing URL-prefix andsc-domain:website-property forms and does not publish a platform-property API identifier contract.sites.listtherefore preserves every identifier Google returns and marks whether it matches the documented API grammar; the other tools deliberately reject undocumented forms instead of inventing an identifier. Use the Search Console UI/export for a platform property until Google documents API support.
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 six write tools or the read-only indexing.status lookup, because that lookup still requires Google's separate Indexing API scope. Read-write remains the default so existing deployments retain their current behavior; see SETUP.md to select a mode before connecting users.
Large analytics responses are bounded at the MCP boundary instead of being generated and then discarded by clients with structured-content limits. List-style tools expose start_row / next_start_row where applicable; ranked analytical tools expose limit, start_row, and result_page metadata including has_more, truncated, and byte_limit_reached. Continue paging while has_more is true rather than assuming one response is complete.
Indexing API eligibility and provider approval. 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 with
JobPostingstructured data, and livestream pages withBroadcastEventstructured data nested insideVideoObject. Beforeindexing.request, the server fetches the target URL and checks static JSON-LD, Microdata, and RDFa markup 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. Structured data injected only after client-side JavaScript runs cannot be confirmed by this bounded preflight and therefore fails closed. Beforeindexing.remove, the server instead confirms Google's removal precondition: the URL must already return HTTP 404/410 or expose a robotsnoindexmeta directive. Update and removal notifications share the same publish quota. Google's default 200 publish requests/day/project is for onboarding and submission testing; using the API beyond that onboarding/testing context requires Google's usage/resource-provisioning approval. Google also subjects every submission to spam detection and warns that abuse or attempts to exceed quotas through multiple accounts or other means can revoke access. A successful notification is only an acknowledgment that Google received it — it does not guarantee indexing or removal completed.
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?"
"What does Google's indexed version of
https://example.com/pricingshow for index status and last crawl?""Which high-impression query/page rows have an average position between 5 and 15? Show me those optimization opportunities."
"Give me a weekly digest for
sc-domain:example.comending today.""Do any of my sitemaps have errors or warnings?"
"Using this brand regex I provide, approximate my clicks as brand vs non-brand."
"How is my site doing in Google Discover vs regular web search?"
Query regexes are a manual approximation only. Search Console's native Branded/Non-branded filter uses Google's own AI-assisted classification (including language variants, typos, and associated products/services), and that native classifier is not exposed as a Search Analytics API filter.
Search Console also has dedicated Generative AI performance reports for Search and Discover. The current documented Search Analytics API does not expose a dedicated Generative AI search type or filter selector, so this MCP does not guess one. AI Overviews and AI Mode remain included in overall web Search performance data; use the Search Console UI for the dedicated Generative AI report until Google documents API access.
As of September 24, 2026, Search Console also has a web multimodal performance filter in the UI for searches such as Lens, Circle to Search, image uploads, and Chrome image search. The current Search Analytics API and Discovery document still expose only web, image, video, news, discover, and googleNews search types, so this MCP does not invent search_type: "multimodal" or guess a searchAppearance value. Use the Search Console UI for isolated multimodal reporting until Google documents API access.
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 / Claude Desktop — go to Customize → Connectors, click + → Add custom connector, enter a name and paste the
/mcpURL. Leave the optional advanced OAuth Client ID/Secret fields blank. On Team/Enterprise, an Owner or Primary Owner must first add the custom Web connector from Organization settings → Connectors; members then connect it from Customize → Connectors. On first connection, Claude opens the Google sign-in flow.Cursor — add a remote Streamable HTTP MCP server pointing at the same
/mcpURL; Cursor supports OAuth for remote HTTP MCP servers. The Add to Cursor button above targets the local npm launcher's loopback endpoint instead.ChatGPT — enable Developer mode, then create a custom MCP app from Settings → Apps → Create (admins/owners can also use Workspace settings → Apps → Create). Provide the
/mcpendpoint, select the applicable authentication option, Scan Tools, complete OAuth, then create the app. Full MCP including write/modify tools is currently available to Business and Enterprise/Edu; Pro custom MCP access is read/fetch-only, so useGSC_ACCESS_MODE=readonlyfor that path.
The /mcp endpoint is the same across clients, but each host has its own setup and permission 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 - open-source SEO tooling and search visibility software.
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).
OAuth MCP for Google, Meta, X, LinkedIn, Reddit, TikTok, GSC, GA4, WordPress and GHL.
Ask Google Search Console in plain language. Hosted, free, no Google Cloud project.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for Google Search Console, URL Inspection & Indexing API — search analytics, sitemap management, and batch indexing1383 npm7MIT
- AlicenseAqualityCmaintenanceSEO MCP over Search Console, GA4, PageSpeed, Cloudflare, IndexNow, CrUX, and 7 technical-SEO HTTP tools.70112 PyPI279MIT
- 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.282,854 npm7MIT
- AlicenseAqualityAmaintenanceAI visibility tracker MCP server. Track brand citations across ChatGPT, Claude, Perplexity, Gemini & Google AI Overviews. Self-host on Cloudflare Workers. GEO/AEO.2122,344 npm46MIT