Google Search Console (GSC) MCP
This server provides an MCP interface to Google Search Console, allowing AI agents to read search performance data, identify striking-distance keywords, manage sitemaps, and inspect URL indexes.
List Search Console Properties: Retrieve verified sites and permission levels (
gsc_list_sites).Query Search Analytics: Fetch clicks, impressions, CTR, and average position by query, page, country, device, or date, with optional filters (
gsc_search_analytics).Striking-Distance Keywords: Identify queries ranking just off page one (positions 8–25) with sufficient impressions for SEO optimization (
gsc_striking_distance).Sitemap Management:
List submitted sitemaps with status, processing times, and error/warning counts (
gsc_list_sitemaps).Submit or re-submit sitemaps to trigger crawling (
gsc_submit_sitemap, write).Delete/deregister sitemaps (
gsc_delete_sitemap, destructive write).
URL Inspection: Check index status, coverage, last crawl, canonical, and mobile/rich-results summary (
gsc_inspect_url).
All tools are annotated with readOnlyHint or destructiveHint for safe client-side enforcement. Authentication uses OAuth installed-app credentials with configurable read-only or full scopes.
Provides tools for interacting with Google Search Console, enabling AI agents to access search performance data (clicks, impressions, CTR, position), identify striking-distance keywords, manage sitemaps, and inspect URL indexing status.
gsc-mcp
Google Search Console for AI agents: search performance, striking-distance keywords, sitemaps, and URL inspection. SEO automation you can hand to an assistant.
An MCP server for Google Search Console. It gives an AI assistant the data and the levers behind organic search: how queries and pages perform, which keywords are one nudge away from page one, the state of your sitemaps, and whether a specific URL is indexed — plus the ability to submit or remove sitemaps.
Why this exists. Search Console is where SEO actually happens, but its UI is click-heavy and its data is hard to act on at a glance. The single most useful view — queries ranking in striking distance of page one — is not even a built-in report; you have to filter and eyeball it. This server puts that view, and the rest of the funnel, in front of an agent so the boring parts of SEO (find the near-miss keywords, check index status, keep sitemaps healthy) can be automated.
It was built to run SEO for two sites — a podcast and a personal site — but nothing here is specific to them. Point it at any property you have verified.
Tools
Tool | Access | What it returns | API |
| read | Verified properties + permission level |
|
| read | Clicks/impressions/CTR/position by query, page, country, device, or date |
|
| read | Queries at avg position 8–25 with enough impressions — the optimization list | computed from search analytics |
| read | Submitted sitemaps with status, last download, warning/error counts |
|
| write | Submits/pings a sitemap to Google |
|
| write, destructive | Deregisters a sitemap from Search Console |
|
| read | Index status, last crawl, canonical, mobile/rich-results verdicts |
|
Every tool carries MCP read/write annotations, so a client can tell the two write tools apart from the five read-only ones before calling them. Read tools are readOnlyHint: true; gsc_submit_sitemap is a non-destructive write; gsc_delete_sitemap is destructiveHint: true.
List tools default row_limit / limit low (25) to keep responses small — agents pay tokens per response.
Related MCP server: google-search-console-mcp
Authentication
This server uses an OAuth installed-app credential (a saved refresh token), not a service account or an API key. It reads the credential from:
~/.config/gws/searchconsole_credentials.jsonThe file is google-auth's Credentials.to_json() shape: it contains client_id, client_secret, refresh_token, and scopes. The server refreshes short-lived access tokens against Google's token endpoint directly with fetch — no heavy googleapis dependency.
To create the file yourself if you do not already have it:
In Google Cloud Console, create an OAuth client of type Desktop app and download its
client_secret.json.Enable the Search Console API on that project.
Run an installed-app OAuth flow requesting the scope you need (see below) and save the resulting credentials to
~/.config/gws/searchconsole_credentials.json. Any standardgoogle-auth-oauthlibinstalled-app snippet works — about ten lines, and it opens a browser for a single consent click.
The path is shared on purpose: if you already hold a Search Console credential in that location for other tooling, this server reuses it rather than asking you to mint a second one.
Scopes: read-only vs. full
Read tools work with
https://www.googleapis.com/auth/webmasters.readonly.Write tools (
gsc_submit_sitemap,gsc_delete_sitemap) and URL inspection need the fullhttps://www.googleapis.com/auth/webmastersscope.
If your saved credential only has the read-only scope, the read tools work and the write tools return a clear "re-mint with the full scope" error rather than a cryptic 403. Re-running the mint with the full scope upgrades the same file in place; read tools keep working throughout.
Set GSC_CREDENTIALS_PATH to point at a different credential file if you do not use the default location.
Starts without a credential
The server boots and answers tools/list even when no credential is present, so MCP inspectors can introspect it. Tool calls then return a setup pointer (to stderr at startup, and as the tool result). stdout is reserved for the MCP transport and stays clean.
Setup
1. Verify your property in Search Console
Add your site at search.google.com/search-console. A Domain property (verified with a DNS TXT record) covers http/https and all subdomains and is the recommended choice. Note the exact property string — gsc_list_sites will show it as sc-domain:example.com (Domain) or https://example.com/ (URL-prefix).
2. Mint the credential
Create ~/.config/gws/searchconsole_credentials.json as described under Authentication, requesting the full webmasters scope if you want the write and URL-inspection tools.
3. Configure your MCP client
Claude Code
Add to your .mcp.json:
{
"mcpServers": {
"gsc": {
"command": "npx",
"args": ["-y", "@conorbronsdon/gsc-mcp"]
}
}
}Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"gsc": {
"command": "npx",
"args": ["-y", "@conorbronsdon/gsc-mcp"]
}
}
}No env block is needed when the credential is at the default path. Set GSC_CREDENTIALS_PATH if it lives elsewhere.
4. Verify
Ask your assistant: "List my Search Console properties," then "Show me striking-distance keywords for it over the last 28 days."
Limitations
Read these so you know what the numbers mean and what this can and cannot do.
No request-indexing tool — by design. Search Console's "Request indexing" button has no public API. Google's Indexing API only supports
JobPostingandBroadcastEventpages, not normal content, and using it for normal pages violates its terms. So there is deliberately no "ask Google to index this page" tool here; for normal pages, requesting indexing is a manual click in the Search Console UI.gsc_submit_sitemapis the supported, API-backed way to nudge crawling.Data lags ~2–3 days. Search Analytics is not real-time. End your date ranges a few days before today or the last days come back empty.
searchAnalyticsis capped per call.row_limitcaps at 1000 here (the API allows 25,000 with pagination); for very large pulls, page withstart_date/dimension filters rather than asking for everything at once.Striking distance is computed client-side. It pulls up to 1000 query rows and filters to the position band. On a site with thousands of ranking queries, the band view reflects the top 1000 by clicks, not the entire long tail.
URL inspection is rate-limited and slow. Google enforces a low daily quota on the URL Inspection API and each call can take a second or two. Inspect specific URLs you care about; do not loop it over a whole sitemap.
No property add/remove tools. Verifying a property is a stateful, error-prone flow (DNS TXT, meta tag, file upload) that does not fit a single tool call. Add and verify properties in the Search Console UI; this server operates on properties you have already verified.
General API quotas apply. The server surfaces a clear error on HTTP 429. Keep
row_limitand inspection volume modest.
Development
git clone https://github.com/conorbronsdon/gsc-mcp.git
cd gsc-mcp
npm install
npm run build
npm testRun locally:
npm startTests mock fetch and make no network calls.
Contributing
Issues and pull requests are welcome. If a Search Console endpoint is worth wrapping as a tool, open an issue describing what it should return and the endpoint it maps to. Keep the contract honest: read tools stay read-only, write tools carry the right annotations, and responses stay compact.
The rest of the suite
Search Console is one credential family in a wider Google data stack. The siblings, each with its own auth:
Data | Server |
Google Workspace (Gmail, Calendar, Drive, Sheets, Docs, Tasks) | gws-mcp-server — same curated approach: narrow surface, side effects declared on every tool |
YouTube Analytics | yt-analytics-mcp — owner-side watch time, retention, traffic sources, and playlist metrics; read-only |
Google Analytics 4 | googleanalytics/google-analytics-mcp — Google's own, read-only |
BigQuery | googleapis/mcp-toolbox — Google's own |
Nothing here shares a token: this server uses a webmasters OAuth credential, Workspace uses gws auth login, YouTube Analytics uses a yt-analytics.readonly OAuth credential, GA4 uses Application Default Credentials scoped analytics.readonly.
About
Built and maintained by Conor Bronsdon. I host the Chain of Thought podcast, which covers AI infrastructure, developer tools, and how practitioners actually use this stuff. I built this to pull SEO work into the agent workflows that run the show and my site.
Companion tools:
op3-mcp: podcast analytics through OP3 — downloads, geography, apps, per-episode breakdowns.
podcast-benchmark: benchmark your show against peers on public signals.
Transistor-MCP: the Transistor.fm MCP server — episodes, transcripts, download counts.
substack-mcp: read posts and manage drafts on Substack, safe for agent workflows.
ai-tools-for-creators: a curated list of AI skills and MCP servers for people who ship ideas for a living.
More at chainofthought.show and on X.
Disclaimer
This is an independent personal project, not affiliated with, sponsored by, or endorsed by Google LLC. All views expressed are my own.
License
MIT
Available Tools
7 toolsgsc_delete_sitemapDelete a sitemapADestructiveIdempotent
Remove a sitemap from a property in Search Console. This is a DESTRUCTIVE write action: it deregisters the sitemap (it does not delete the file from your server, but Google stops tracking it). Requires the full webmasters OAuth scope.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap to remove, e.g. https://example.com/sitemap.xml. | |
| site_url | Yes | The Search Console property. Use the exact form shown by gsc_list_sites: a Domain property is 'sc-domain:example.com'; a URL-prefix property is the full origin with a trailing slash, e.g. 'https://example.com/'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations: it explains the exact effect (deregisters, does not delete the file, stops tracking) and the required OAuth scope. The annotations already indicate destructive/write behavior, but the description adds meaningful nuance that changes how an agent should expect the operation to behave.
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 wasted words. The first sentence states the action; the second provides crucial behavioral nuance and a prerequisite. The most important information is front-loaded and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter tool with no output schema, the description covers the action, the destructive nuance, the effect on the server and Google, and the required permission. There are no obvious gaps given the tool's complexity and the existing 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 coverage is 100% with each parameter having a clear description (e.g., 'Full URL of the sitemap to remove' and exact form for site_url). The tool description itself does not elaborate on parameters further, so it does not add value beyond the schema. Baseline 3 is correct.
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 ('Remove') and resource ('a sitemap from a property in Search Console'), clearly distinguishing it from sibling tools like gsc_submit_sitemap and gsc_list_sitemaps. The clarifying phrase 'it deregisters the sitemap... but Google stops tracking it' further sharpens the purpose.
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 sets clear context for when to use this tool (removing a sitemap from tracking) and notes the destructive consequence, but it does not explicitly name alternatives or state when not to use it. It also mentions the required OAuth scope, which is a usage prerequisite. This falls short of explicit exclusion guidance, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_inspect_urlInspect a URL's index statusARead-onlyIdempotent
Inspect a single URL with the URL Inspection API: whether Google has it indexed, its coverage state, last crawl time, Google's chosen canonical, and a one-line mobile/rich-results summary. Returns a compact projection, not the full raw blob. Use this to debug 'why isn't this page indexed'.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property. Use the exact form shown by gsc_list_sites: a Domain property is 'sc-domain:example.com'; a URL-prefix property is the full origin with a trailing slash, e.g. 'https://example.com/'. | |
| language_code | No | Optional BCP-47 language code for issue messages, e.g. 'en-US'. | |
| inspection_url | Yes | The fully-qualified URL to inspect. Must be within the property. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and safe behavior. The description adds useful behavioral details beyond annotations, such as 'Returns a compact projection, not the full raw blob' and a 'one-line mobile/rich-results summary', setting expectations for response format.
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, front-loaded with core functionality and followed by a practical use case. No wasted words or redundancy.
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?
Even without an output schema, the description mentions key returned fields and the compact nature of the response. It is complete for a simple read-only inspection tool, though it doesn't cover edge cases like invalid URLs, which are minor.
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 already documents all parameters thoroughly. The description adds minimal parameter-specific information beyond implying the inspection_url, 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 states a specific verb ('Inspect') applied to a single URL, with a clear outcome ('index status') and detailed data points (coverage state, crawl time, canonical). It distinguishes itself from sibling tools by focusing on single-URL inspection versus site-wide analytics or 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 a clear use case: 'debug why isn't this page indexed'. It does not explicitly mention when to avoid this tool or compare with alternatives, but the context is strong enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitemapsList sitemapsARead-onlyIdempotent
List the sitemaps submitted for a property, with each one's submit/download times, pending state, and warning/error counts. Use this to check whether a sitemap was processed and is error-free.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property. Use the exact form shown by gsc_list_sites: a Domain property is 'sc-domain:example.com'; a URL-prefix property is the full origin with a trailing slash, e.g. 'https://example.com/'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds behavioral context by revealing what data is returned (timestamps, states, counts), which goes beyond annotations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and details, followed by a practical use case. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with one parameter and no output schema, the description adequately describes the returned fields and the purpose. It covers all necessary context without requiring output schema documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the site_url parameter has a detailed description explaining exact formats (sc-domain vs URL-prefix). The tool description itself adds no extra parameter information, 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 clearly states that it lists sitemaps for a property and includes specific details (submit/download times, pending state, error/warning counts). This distinguishes it from sibling tools like gsc_list_sites (lists properties) and gsc_submit_sitemap (submits).
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 explicitly says 'Use this to check whether a sitemap was processed and is error-free', providing a clear use case. It does not name alternatives or explicitly state when not to use it, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitesList Search Console propertiesARead-onlyIdempotent
List the Search Console properties (sites) the signed-in Google account can access, with each one's permission level. This is the entry point: every other tool needs a property string in the exact form returned here.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/non-destructive/idempotent. The description adds context about permission levels and the exact property string format, which is useful for downstream tool use, though it doesn't disclose rate limits or pagination.
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 sentence states the primary function, and the second immediately provides usage context. Every word 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 parameterless list tool with strong annotations, the description supplies essential purpose and the critical dependency of all sibling tools. It gives enough output hints (permission level, exact form) despite no output 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?
The tool has zero parameters, so parameter semantics are not applicable; the baseline of 4 is appropriate. The description doesn't need to explain parameters.
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 the verb (List), the resource (Search Console properties/sites), and the scope (accessible to the signed-in account). It also distinguishes itself from siblings by positioning as the entry point needing property strings in the exact form returned.
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?
Explicit guidance is provided: 'This is the entry point: every other tool needs a property string in the exact form returned here.' This tells the agent to use this tool first to discover property strings before invoking siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_search_analyticsQuery search performanceARead-onlyIdempotent
Query Search Console search analytics for a property over a date range: clicks, impressions, CTR, and average position, grouped by the dimensions you pass (query, page, country, device, date). Returns compact rows. Use this for 'what are my top queries / pages' and trend questions. GSC data lags ~2-3 days, so end your range a few days before today.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Search type filter. Defaults to web when omitted. | |
| end_date | Yes | End date, YYYY-MM-DD (Pacific Time, inclusive). | |
| site_url | Yes | The Search Console property. Use the exact form shown by gsc_list_sites: a Domain property is 'sc-domain:example.com'; a URL-prefix property is the full origin with a trailing slash, e.g. 'https://example.com/'. | |
| row_limit | No | Max rows to return (default 25, cap 1000). Keep low; rows cost tokens. | |
| dimensions | No | How to group rows. Default ['query']. Combine for breakdowns, e.g. ['page','query']. | |
| start_date | Yes | Start date, YYYY-MM-DD (Pacific Time, inclusive). | |
| dimension_filter_groups | No | Optional filters, e.g. only rows where page contains '/blog/'. Each group's filters are AND-ed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, openWorld, idempotent, and destructiveHint. The description adds valuable non-obvious behavior: GSC data lags ~2-3 days and results are compact rows, which informs end-date selection and token expectations.
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: the first states the function and outputs, the second provides usage guidance and a caveat. No filler or repetition of schema content.
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?
Covers purpose, metrics, dimensions, date-range behavior, and data freshness in just two sentences. Combined with rich schema and annotations, this is fully sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed parameter docs (site_url examples, row_limit cap, dimensions enum, filter groups). The description's mention of dimensions and date range adds no new semantic information beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'Query Search Console search analytics' with explicit metrics (clicks, impressions, CTR, average position) and dimensions. This clearly distinguishes it from siblings like gsc_list_sites and gsc_submit_sitemap.
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?
States explicit use cases ('what are my top queries / pages' and trend questions) and provides a temporal caution about data lag. No explicit exclusions or alternatives, but the sibling tools are quite different.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_striking_distanceStriking-distance keywordsARead-onlyIdempotent
The SEO goldmine view: queries ranking just off page one (average position 8-25) with enough impressions to be worth optimizing. These are the keywords where a small content tweak can win real clicks. Computed client-side from search analytics; returns queries sorted by impressions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max queries to return, ranked by impressions (default 25). | |
| end_date | Yes | End date, YYYY-MM-DD (lag ~2-3 days behind today). | |
| site_url | Yes | The Search Console property. Use the exact form shown by gsc_list_sites: a Domain property is 'sc-domain:example.com'; a URL-prefix property is the full origin with a trailing slash, e.g. 'https://example.com/'. | |
| start_date | Yes | Start date, YYYY-MM-DD (default: 28 days before end_date if omitted in your call). | |
| position_max | No | Upper bound of the striking-distance band (default 25). | |
| position_min | No | Lower bound of the striking-distance band (default 8). | |
| min_impressions | No | Only include queries with at least this many impressions (default 10). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe, read-only operation. The description adds valuable behavioral context beyond annotations: it explains that the computation is 'client-side from search analytics' (which may affect freshness or performance expectations) and that results are sorted by impressions. 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 description is concise and front-loaded with the 'SEO goldmine view' hook, then quickly moves to specific criteria and behavior. All three sentences contribute meaning: the first introduces the purpose, the second elaborates on its value, the third explains the computation and order. It could be slightly tighter, but it is appropriately sized and well-structured.
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 read-only analytics tool with 7 parameters (3 required) and no output schema, the description provides a complete picture: it states what the tool returns (queries in a position band, sorted by impressions), the client-side computation, and the optimization use case. Combined with rich schema descriptions and safe-read annotations, the agent has enough context to invoke the tool correctly. Minor gaps like pagination behavior are not critical for this tool.
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 parameters are already well-documented in the input schema. The description adds marginal semantic value by explaining the concept of 'striking distance' (position 8-25) and 'enough impressions', which maps to min_impressions, but it does not introduce any new parameter-level detail 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 clearly identifies the tool's purpose: returning queries in a specific 'striking-distance' position range (8-25) that are worth optimizing. It uses specific framing ('SEO goldmine view') and distinguishes this from the broader sibling gsc_search_analytics by focusing on a narrow, actionable subset. The verb is implied but unambiguous ('returns queries sorted by 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 implies when to use this tool (when looking for quick wins near page one, where a small content tweak could improve rankings). It provides clear context but does not explicitly exclude alternatives or mention sibling tools like gsc_search_analytics. However, the specialized angle is clear enough for an AI to select it for striking-distance optimization use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_submit_sitemapSubmit a sitemapAIdempotent
Submit (or re-submit) a sitemap to Google Search Console for a property. This is a WRITE action: it registers the sitemap and pings Google to crawl it. Requires the full webmasters OAuth scope — if the saved credential is read-only, re-mint with scripts/seo-auth-setup.py. Idempotent: re-submitting the same sitemap URL just refreshes it.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap to submit, e.g. https://example.com/sitemap.xml. Must be within the property. | |
| site_url | Yes | The Search Console property. Use the exact form shown by gsc_list_sites: a Domain property is 'sc-domain:example.com'; a URL-prefix property is the full origin with a trailing slash, e.g. 'https://example.com/'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true), the description discloses the concrete side effects: 'it registers the sitemap and pings Google to crawl it,' plus the auth prerequisite and the idempotent behavior ('re-submitting the same sitemap URL just refreshes it'). This adds substantial operational context without contradicting any annotation.
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 serving a distinct purpose: action, side-effect/auth, and idempotency. Front-loaded with the core verb+object, then essential caveats. No wasted words or redundancy.
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 action with no output schema, the description covers everything an agent needs: what it does, side effects, auth requirements, and idempotency. The sibling context and annotations complete the picture, making the tool safe and correctly invocable.
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 full descriptions for both parameters (site_url, feedpath) with examples, achieving 100% schema_description_coverage. The description does not add further parameter-specific meaning, 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 starts with a specific verb+resource: 'Submit (or re-submit) a sitemap to Google Search Console for a property.' It clearly distinguishes from sibling tools like gsc_list_sitemaps (list) and gsc_delete_sitemap (delete), and the explicit 'WRITE action' framing reinforces the tool's unique role.
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 clear context: it's for submitting or re-submitting sitemaps, and it explicitly warns about the OAuth scope requirement ('Requires the full webmasters OAuth scope') with a remediation path. It doesn't explicitly contrast with alternatives (e.g., 'use gsc_list_sitemaps to view existing'), but the purpose and sibling differentiation make the when-to-use clear.
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.
7 tool updates
v0.1.0- First observed
gsc_delete_sitemap - First observed
gsc_inspect_url - First observed
gsc_list_sitemaps - First observed
gsc_list_sites - First observed
gsc_search_analytics - First observed
gsc_striking_distance - First observed
gsc_submit_sitemap
TDQS
Scored across 7 tools
Most tools target distinct resources and actions, but gsc_search_analytics and gsc_striking_distance both expose query performance data, with striking_distance being a derived view that could cause confusion. The clear descriptions mitigate this, but an agent might select the wrong one for a generic analytics request.
The gsc_ prefix and verb_noun pattern are used consistently across most tools, but gsc_striking_distance deviates from the verb-first convention, being an adjective/noun phrase. This minor inconsistency does not impede readability.
Seven tools cover the GSC domain without bloat or thinness. Each tool has a clear purpose and fits within the ideal 3-15 range.
The server covers the core GSC lifecycle: site listing, search analytics, sitemap management (list/submit/delete), and URL inspection. No major workflow appears missing for practical SEO use cases.
Maintenance
Related MCP Connectors
Search Console SEO analytics: rankings, clicks, CTR, striking-distance insights, charts, sitemaps.
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
Turn Search Console data into SEO actions, content, publishing, indexing, and AI insights.
- MotiBlogOAuthai.motiblog
Agent-first SEO research and publishing: competitors, SERPs, internal links, and Search Console.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceProvides AI agents with read-only access to Google Search Console data, including search analytics, index coverage, and sitemap status. It enables users to query clicks, impressions, and ranking performance or check URL indexing status through natural language.615MIT
- AlicenseAqualityFmaintenanceQuery Google Search Console search analytics, inspect URL indexing status, manage sitemaps, and analyze keyword performance. 13 tools covering search queries, page performance, sitemap management, and index coverage.132626MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying Google Search Console data including rankings, clicks, and impressions for websites. Provides tools for analyzing search performance, top queries, page metrics, and ranking changes.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to query Google Search Console data including search analytics, URL inspection, sitemap management, and site performance monitoring, with per-user OAuth authentication.-