mcp-google-search-console-crunchtools
Allows to query search analytics (clicks, impressions, CTR, position), manage sitemaps, inspect URL indexing status, and manage site properties in Google Search Console.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-google-search-console-crunchtoolsshow me last week's clicks and impressions for my site"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-google-search-console-crunchtools
Secure MCP server for Google Search Console. Query search analytics (clicks, impressions, CTR, position), manage sitemaps, inspect URL indexing status, and manage site properties.
Installation
uvx (recommended, zero-install)
claude mcp add mcp-google-search-console-crunchtools \
--env GSC_CLIENT_ID=your_client_id \
--env GSC_CLIENT_SECRET=your_client_secret \
--env GSC_REFRESH_TOKEN=your_refresh_token \
-- uvx mcp-google-search-console-crunchtoolspip
pip install mcp-google-search-console-crunchtoolsContainer (Podman/Docker)
podman run -d -p 8017:8017 \
--env-file ~/.config/mcp-env/mcp-google-search-console.env \
quay.io/crunchtools/mcp-google-search-console \
--transport streamable-http --host 0.0.0.0Related MCP server: Google Search Console MCP Server
OAuth Setup
This server supports two authentication methods: browser-based OAuth (recommended) and environment variable (fallback).
Option A: Browser-Based OAuth (Recommended)
Browser-based OAuth handles token exchange automatically. When credentials expire, visit the /auth URL and click through Google's consent screen — no manual code exchange needed.
Step 1: Create a Google Cloud OAuth App
Go to Google Cloud Console
Create a new project (or select an existing one)
Navigate to APIs & Services > Library
Search for Google Search Console API and click Enable
Navigate to APIs & Services > Credentials
Click + CREATE CREDENTIALS > OAuth client ID
If prompted, configure the OAuth consent screen first:
User type: External (or Internal if using Google Workspace)
App name: anything (e.g., "MCP Search Console")
Scopes: add
https://www.googleapis.com/auth/webmastersTest users: add your Google account email
Back on Create OAuth client ID:
Application type: Web application
Name: anything (e.g., "MCP Search Console")
Authorized redirect URIs: add your server's callback URL (e.g.,
https://mcp-gsc.example.com/oauth2callback)
Click Create — copy the Client ID and Client Secret
Step 2: Configure and Start
Create an env file:
cat > ~/.config/mcp-env/mcp-google-search-console.env << 'EOF'
GSC_CLIENT_ID=your_client_id
GSC_CLIENT_SECRET=your_client_secret
GSC_CREDENTIALS_DIR=/data
GSC_OAUTH_REDIRECT_URI=https://mcp-gsc.example.com/oauth2callback
EOF
chmod 600 ~/.config/mcp-env/mcp-google-search-console.envStart the server with a persistent volume for credentials:
podman run -d -p 8017:8017 \
--env-file ~/.config/mcp-env/mcp-google-search-console.env \
-v mcp-gsc-data:/data:Z \
quay.io/crunchtools/mcp-google-search-console \
--transport streamable-http --host 0.0.0.0Step 3: Authenticate
Visit https://mcp-gsc.example.com/auth in your browser. You'll be redirected to Google's consent screen. Grant access and the server will save credentials automatically.
When tokens expire, any tool call will return the /auth URL. Click it to re-authenticate — no container restart needed.
Option B: Environment Variable (Fallback)
If you prefer static credentials or can't expose a callback URL, set GSC_REFRESH_TOKEN in your env file. See the manual OAuth flow below.
export GSC_CLIENT_ID="your_client_id_here"
export GSC_CLIENT_SECRET="your_client_secret_here"
echo "https://accounts.google.com/o/oauth2/v2/auth?client_id=${GSC_CLIENT_ID}&redirect_uri=http://127.0.0.1&response_type=code&scope=https://www.googleapis.com/auth/webmasters&access_type=offline&prompt=consent"Open the URL in your browser, sign in, and click Allow
Copy the
code=value from the redirect URLExchange the code:
curl -s -X POST https://oauth2.googleapis.com/token \
-d "client_id=${GSC_CLIENT_ID}" \
-d "client_secret=${GSC_CLIENT_SECRET}" \
-d "code=PASTE_CODE_HERE" \
-d "grant_type=authorization_code" \
-d "redirect_uri=http://127.0.0.1" | python3 -m json.toolCopy the
refresh_tokenfrom the response and addGSC_REFRESH_TOKEN=...to your env file.
How it works at runtime
The server checks for credentials in this order:
File-based credentials from
GSC_CREDENTIALS_DIR/credentials.json(written by the browser-based flow)Environment variable
GSC_REFRESH_TOKEN(fallback)
On each API call, the server exchanges the refresh token for a short-lived access token (~1 hour), cached in memory and refreshed automatically. Updated tokens are persisted to the credentials file for reuse across container restarts.
Available Tools (10)
Category | Count | Tools |
Sites | 4 | list_sites, get_site, add_site, delete_site |
Search Analytics | 1 | query_search_analytics |
Sitemaps | 4 | list_sitemaps, get_sitemap, submit_sitemap, delete_sitemap |
URL Inspection | 1 | inspect_url |
Security
OAuth2 credentials stored as
SecretStr(never logged)File-based credentials written with
0o600permissions (atomic writes)Automatic token scrubbing from error messages
Pydantic input validation with
extra="forbid"No filesystem access, shell execution, or code evaluation
TLS certificate validation (httpx default)
Request timeouts and response size limits
Built on Hummingbird container images
See SECURITY.md for the full security design document.
Development
uv sync --all-extras
uv run ruff check src tests
uv run mypy src
uv run pytest -v
gourmand --full .
podman build -f Containerfile .License
Available Tools
10 toolsadd_site_toolAdd Site ToolC
Add a site to Search Console.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Site URL (e.g., "https://example.com/") or domain property |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Add' implies a write, but it says nothing about required permissions/ownership level, idempotency, or failure modes when the site is already registered.
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?
One short, front-loaded sentence with no filler, but it is terse to the point of under-specification for a mutation tool; it is concise without earning much informational value.
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?
An output schema exists, so return values need no explanation, but a mutation tool with zero annotations and one undocumented behavior surface (auth, conflicts, verification) leaves real gaps for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single site_url parameter is documented in the schema with an example URL and domain-property note. The description adds nothing beyond the schema, so the baseline 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?
States a specific verb and resource ('Add a site to Search Console'), so the operation is unambiguous. It does not distinguish itself from siblings such as delete_site_tool or get_site_tool, which would have made it a 5.
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?
There is no guidance on when to use this versus list_sites_tool/get_site_tool, nor any prerequisites such as owning or verifying the property, or what happens if the site already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sitemap_toolDelete Sitemap ToolC
Remove a sitemap from Search Console.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap to delete | |
| site_url | Yes | Site URL or domain property |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. For a destructive deletion it says nothing about irreversibility, required permissions, idempotency, or behavior when the sitemap does not exist — only restating the removal action.
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?
A single front-loaded sentence with no filler, appropriate for the operation. It is efficient, though the brevity is arguably under-specification rather than true conciseness given the destructive nature of the tool.
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?
An output schema exists so return values need not be explained, but for a destructive, annotation-free tool the description should disclose irreversibility and prerequisites. As written it is too thin to let an agent invoke it safely.
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 2 documented parameters (site_url, feedpath), so the schema already explains both required inputs including the full-URL format for feedpath. The description adds no meaning beyond that, which is the baseline expectation.
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 ('Remove') and resource ('a sitemap') scoped to Search Console, so the operation is unambiguous. It does not explicitly differentiate itself from siblings like delete_site_tool, list_sitemaps_tool, or submit_sitemap_tool, but the delete-vs-list-vs-submit distinction is inferable from the name.
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?
No guidance on when to use this versus get_sitemap_tool, list_sitemaps_tool, or submit_sitemap_tool, and no preconditions stated (e.g., the sitemap must already exist, the caller must own the property). The agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_site_toolDelete Site ToolC
Remove a site from Search Console.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Site URL to remove |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the entire burden. For a destructive removal operation it discloses nothing about reversibility, whether removal requires verification, or whether the site's data is preserved — a significant gap that could lead an agent to invoke it carelessly.
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?
A single short sentence with the action front-loaded and no filler. It is efficient, though its brevity is partly a symptom of under-specification rather than disciplined conciseness.
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?
An output schema exists so return values need not be explained, but for an irreversible, annotation-free deletion the description omits the consequences and cautions an agent needs before acting. It is too thin for the operation's risk profile.
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 site_url is fully documented in the schema itself. The description adds no format hints (e.g., URL vs. domain property prefix) or normalization behavior, so it does not exceed the 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 states a specific verb and resource ("Remove a site") and scopes it to Search Console, which is enough to distinguish it from siblings like delete_sitemap_tool. It stops short of explicitly differentiating itself from other site tools, but the purpose is 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?
No guidance on when to use this versus list_sites_tool, get_site_tool, or delete_sitemap_tool, and no mention of prerequisites such as verifying ownership or confirming the site is unverified. The agent must infer all usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sitemap_toolGet Sitemap ToolCRead-only
Get details for a specific sitemap.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap (e.g., "https://example.com/sitemap.xml") | |
| site_url | Yes | Site URL or domain property |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description only needed to add context such as behavior when the sitemap is missing or auth requirements. It adds none of that, merely restating the read action with no new behavioral detail.
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?
A single front-loaded sentence with zero waste. It is efficient, though arguably under-specified rather than maximally concise given the tool's context.
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?
An output schema exists and annotations cover the safety profile, so return values and read-only status need not be repeated. However, for a tool sitting among list/submit/delete siblings, the description omits the routing guidance an agent needs to pick it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with two well-documented parameters including a concrete feedpath example, so the schema does the heavy lifting. The description adds no meaning beyond the schema, which is the correct baseline of 3.
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 clear verb (get) and resource (a specific sitemap's details), which distinguishes it from the plural list_sitemaps_tool and the mutating submit/delete siblings. It does not explicitly name those siblings, and 'details' stays vague about what is actually 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?
There is no guidance on when to call this versus list_sitemaps_tool (e.g., when you already know the feedpath) or what prerequisites exist. The 'specific sitemap' phrasing implicitly requires an identifier but never states the condition for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_toolGet Site ToolBRead-only
Get details for a specific Search Console property.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Site URL (e.g., "https://example.com/") or domain property (e.g., "sc-domain:example.com") |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description adds essentially nothing behavioral: no mention of what happens for unverified or non-existent properties, no permission requirements, no indication that the result depends on prior add_site/verification state. For a read tool the bar is lower, but this adds zero context.
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?
A single front-loaded sentence with no filler or redundancy. Nothing could be trimmed without losing information.
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 output schema and annotations already cover return shape and safety, so the description's job is narrow. It is nonetheless silent on failure modes (unverified or missing property) and on the relationship to the sibling list/add/delete site tools, leaving an agent to infer the intended workflow.
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 helpfully documents both accepted URL forms (https:// and sc-domain:). The description adds no parameter meaning of its own, so the 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?
States a specific verb ('Get details') and resource ('a specific Search Console property'), which the agent can distinguish from list_sites_tool's bulk listing. It does not explicitly name or contrast with any sibling, but the singular scope is clear from the wording.
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?
No guidance on when to call this versus list_sites_tool (which may already return property details) or when to use inspect_url_tool instead. The only implied usage is 'you already know the site_url', which the agent must infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_url_toolInspect Url ToolARead-only
Inspect a URL's index status in Google Search.
Returns detailed information about how Google sees a URL including index coverage, crawl status, mobile usability, and rich results.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | The Search Console property this URL belongs to | |
| language_code | No | Language code for localized results (default: en-US) | en-US |
| inspection_url | Yes | The fully-qualified URL to inspect (e.g., "https://example.com/page") |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read operation. The description adds useful context about the categories of information returned, but does not disclose auth requirements, rate limits, or other behavioral constraints beyond what the annotation and output schema 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?
Two concise sentences with no wasted text. The core purpose is front-loaded, and the second sentence efficiently summarizes the return 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?
Given the read-only annotation, complete schema descriptions, and presence of an output schema, the description is largely complete for correct invocation. Minor gaps remain around explicit sibling selection, but the description covers what the tool does and what it returns.
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 all three parameters are already documented in the input schema. The description adds no additional meaning about parameter formats, defaults, or constraints. Baseline 3 is appropriate when the schema fully carries 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?
The description uses a specific verb (inspect) and resource (a URL's index status in Google Search), clearly distinguishing this URL-level indexing tool from sibling site, sitemap, and analytics 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?
Usage is implied by the purpose: use this to inspect a URL's index status. However, there is no explicit guidance on when to prefer it over siblings like query_search_analytics_tool or what conditions would make it inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitemaps_toolList Sitemaps ToolBRead-only
List all sitemaps submitted for a site.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Site URL or domain property |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint=true annotation already establishes this as a safe read operation, so the description's burden is lower. It adds only the 'submitted for a site' scoping nuance; it does not mention result limits or ordering, and with an output schema present, return-format details are unnecessary.
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?
A single short sentence with zero filler, front-loading the verb and resource. Nothing could be trimmed without losing meaning.
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 one-parameter read tool with an output schema and readOnlyHint, the description covers the essential scope. It could add minor context such as what happens if no sitemaps are submitted, but it is largely complete given the structured metadata.
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 the single site_url parameter, so the schema already carries the parameter documentation. The description adds no syntax or format guidance beyond what the schema provides, making the baseline 3 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?
States a specific verb ('List') and resource ('sitemaps') with a clear scope ('submitted for a site'). It does not explicitly distinguish itself from siblings like get_sitemap_tool or list_sites_tool, leaving that inference to the agent.
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 when-to-use guidance, prerequisites, or alternatives. An agent cannot tell from the text alone when to prefer this over get_sitemap_tool for a single sitemap or submit_sitemap_tool for additions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sites_toolList Sites ToolARead-only
List all Search Console properties accessible by the authenticated user.
Returns: List of site entries with permission levels and site URLs
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read. The description adds that access is scoped to the authenticated user and that results include permission levels, which is useful context. No pagination or rate-limit note, but with annotations covering safety a 3 is appropriate.
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 short sentences, front-loaded with the core action, plus a compact Returns block. No waste.
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?
An output schema exists, so return values needn't be explained, and the description still highlights the useful fields (permission levels, URLs). For a zero-param read tool this is nearly complete; only the sibling distinction 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?
Zero parameters, so the baseline is 4. Nothing to misdocument, and the description correctly implies no filtering inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List all Search Console properties') scoped to the authenticated user. It is distinguishable from get_site_tool (singular) and add/delete_site_tool, but doesn't explicitly contrast with the closest sibling. Clear but no sibling differentiation.
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?
Implied usage (retrieve all properties) but no explicit when-to-use vs get_site_tool, no exclusions, no prerequisites. An agent can infer intent but must reason about alternatives itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_search_analytics_toolQuery Search Analytics ToolARead-only
Query search traffic data with filters and dimensions.
Returns clicks, impressions, CTR, and average position grouped by the requested dimensions. Use this to analyze search performance for specific pages, queries, countries, devices, or date ranges.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | End date in YYYY-MM-DD format | |
| site_url | Yes | Site URL or domain property | |
| row_limit | No | Maximum rows to return, 1-25000 (default: 1000) | |
| start_row | No | Zero-based row offset for pagination (default: 0) | |
| data_state | No | Data freshness (final, all). Default: final | final |
| dimensions | No | Dimensions to group by (date, query, page, country, device, searchAppearance). Multiple allowed. | |
| start_date | Yes | Start date in YYYY-MM-DD format | |
| search_type | No | Search type filter (web, image, video, news, googleNews, discover). Default: web | web |
| aggregation_type | No | How to aggregate results (auto, byPage, byProperty). Default: auto | auto |
| dimension_filter_groups | No | Filter groups to narrow results |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is covered structurally. The description adds the metric list, but that duplicates the output schema, and it says nothing about quota/rate limits, data-freshness lag tied to data_state, or pagination behavior beyond the schema defaults.
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 short sentences with the purpose front-loaded and no filler. Every sentence carries information about what is queried and what comes back.
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 a fully-documented 10-parameter schema, an existing output schema, and readOnlyHint annotations, the description covers what an agent needs to select the tool. It stops short of explaining the more intricate knobs (aggregation_type interactions, dimension_filter_groups shape), but those are schema-documented.
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 every parameter is already documented individually. The description adds no syntax, default, or interaction guidance (e.g. how dimension_filter_groups relates to dimensions), so the baseline 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?
States a specific verb+resource ('query search traffic data') and enumerates the metrics returned (clicks, impressions, CTR, average position). This is clearly distinct from the sibling site/sitemap management tools, though the description never explicitly distinguishes itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to analyze search performance for specific pages, queries, countries, devices, or date ranges' is usage context, but it largely restates what the dimensions parameter does. There are no prerequisites (site verification, permission scope) and no explicit when-not guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_sitemap_toolSubmit Sitemap ToolC
Submit a sitemap for crawling.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap to submit (e.g., "https://example.com/sitemap.xml") | |
| site_url | Yes | Site URL or domain property |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about idempotency, whether an existing sitemap is replaced, auth/verification requirements, or rate limits. Only the phrase 'for crawling' hints at behavior; for a mutation tool this is a substantial gap.
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?
A single short sentence with no filler and the action front-loaded. It is efficient, though its brevity arguably under-serves the tool rather than being exemplary conciseness.
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?
An output schema exists, so return values need not be described, but for a mutation tool with no annotations and no usage context the description leaves the agent without enough to invoke it confidently (prerequisites, effect on existing sitemaps, required site ownership).
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 both parameters (site_url, feedpath) are already documented in the schema with an example for feedpath. The description adds no format, constraint, or relationship information beyond that, 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 clear verb+resource ('Submit a sitemap'), which is unambiguous about what the tool does and is distinguishable by name from siblings like list_sitemaps_tool or get_sitemap_tool. However, it does not explicitly differentiate itself from those siblings or state the effect of submission.
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?
No when-to-use guidance is given: nothing about prerequisites (e.g., site verification), when to submit vs. refresh, or how it relates to list_sitemaps_tool/get_sitemap_tool. The agent must infer all usage context.
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.
10 tool updates
v0.1.0- First observed
add_site_tool - First observed
delete_site_tool - First observed
delete_sitemap_tool - First observed
get_site_tool - First observed
get_sitemap_tool - First observed
inspect_url_tool - First observed
list_sitemaps_tool - First observed
list_sites_tool - First observed
query_search_analytics_tool - First observed
submit_sitemap_tool
TDQS
Scored across 10 tools
Each tool targets a distinct Search Console operation: site management, sitemap management, search analytics querying, and URL inspection. Boundaries between site-level, sitemap-level, and performance-data tools are clear, so an agent can select the correct tool without confusion.
All names use consistent snake_case with a `_tool` suffix and follow a verb_noun pattern (inspect_url, list_sites, get_sitemap, submit_sitemap, etc.). The suffix is applied uniformly, making the naming predictable despite being slightly redundant.
The 10 tools map exactly to the core Google Search Console API surface: sites CRUD, sitemaps CRUD, search analytics query, and URL inspection. The count is well-scoped with no extraneous or missing tools from a coverage perspective.
The set covers all primary GSC operations: listing, getting, adding, and deleting sites; listing, getting, submitting, and deleting sitemaps; querying search analytics; and inspecting URLs. No obvious gaps exist for typical SEO monitoring workflows.
Maintenance
Related MCP Connectors
Read-only Google Search Console MCP server for AI assistants.
Hosted, read-only Google Search Console MCP: performance, comparisons, URL inspection, sitemaps.
Audit, rank-track and analyze SEO for sites via an authenticated MCP server.
Hosted Google Search Console MCP server, with each action switched on or off per account.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for Google Search Console API that enables querying search analytics, managing sites, inspecting URLs, and supporting domain delegation via service accounts.MIT
- AlicenseNot gradedqualityDmaintenanceThis MCP server provides LLMs with programmatic access to Google Search Console data and functionality, including search analytics, sitemap management, site management, and URL inspection.MIT
- AlicenseAqualityDmaintenanceMCP server for Google Search Console, enabling querying search performance, listing properties, and inspecting URL indexing status from MCP-compatible clients.47 npm1MIT
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server for Google Search Console data, enabling search analytics, URL inspection, indexing diagnostics, and sitemap management through MCP clients.8 npmMIT