Google Search Console MCP Server
Provides tools for interacting with the Google Search Console API v1, covering all published methods and task-shaped tools for property/site management, sitemaps, search performance analytics, URL inspection, and URL testing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Search Console MCP Serverwhat are my top search queries for example.com in the last 28 days?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Search Console MCP Server
An MCP server covering the entire Google Search Console API — all 11 published methods, plus task-shaped tools on top for the questions people actually ask of search performance data.
Overview
This project provides a Model Context Protocol server that wraps the Google Search Console API v1, letting LLMs work with search performance data, sitemaps, property management and URL indexing through a standardised interface.
Search Console ships no official SDK in any language, so this is built on the
generic google-api-python-client with complete static types supplied by
google-api-python-client-stubs. See
Why there is no Search Console SDK.
Related MCP server: Google Search Console MCP Server
Features
Complete API Coverage: all 11 published API methods, enforced by a test rather than claimed
Full Type Safety: strict
pyrightwith 0 errors100% Test Coverage: 144 tests, 100% statement and branch coverage, floor enforced in config
Task-Shaped Tools: 11 convenience tools on top of the raw API
MCP Compliant: FastMCP 4, stdio transport
Async Throughout: the synchronous Google client is dispatched off the event loop
Read-Only Mode: an opt-in switch that refuses every mutating call
Installation
git clone https://github.com/rgellis/google-search-console-mcp.git
cd google-search-console-mcp
# Install dependencies using uv
uv syncRequires Python 3.12+.
1. Enable the API
Search Console API must be enabled on the Google Cloud project that owns your OAuth client:
gcloud services enable searchconsole.googleapis.com --project=<project>2. Create an OAuth client
In the Google Cloud console, create an OAuth 2.0 client of type Desktop app
(or Web application with http://localhost as an authorised redirect URI).
Note the client ID and secret.
3. Mint a refresh token
Search Console needs the https://www.googleapis.com/auth/webmasters scope:
GOOGLE_CLIENT_ID="..." GOOGLE_CLIENT_SECRET="..." \
uv run scripts/get_refresh_token.py
# or, if this server will never manage properties:
GOOGLE_CLIENT_ID="..." GOOGLE_CLIENT_SECRET="..." \
uv run scripts/get_refresh_token.py --read-onlySign in as an account with access to the Search Console properties you need. The script prints the refresh token.
Scope the token to this server alone rather than reusing one minted for other
Google APIs — re-consenting a shared token to add webmasters rotates a secret
everything else using it depends on.
4. Set credentials
export GOOGLE_CLIENT_ID="your_client_id"
export GOOGLE_CLIENT_SECRET="your_client_secret"
export GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN="token_from_step_3"
# optional: request only the readonly scope and refuse all mutations
export SEARCH_CONSOLE_READ_ONLY=falseIf those three are not all set, the client falls back to Application Default
Credentials, which covers a service account via GOOGLE_APPLICATION_CREDENTIALS
as well as local gcloud auth.
5. Verify
uv run main.py --groups sitesThen call check_client_status, which reports whether credentials resolve, the
scopes in use, and whether read-only mode is active — without spending API quota.
Usage
uv run main.py # all tools, over stdio
uv run main.py --groups sites,analytics # a subsetGroups: sites, sitemaps, analytics, inspection, testing-tools.
With an MCP client
{
"mcpServers": {
"search-console": {
"command": "uv",
"args": ["run", "--directory", "/path/to/google-search-console-mcp", "main.py"],
"env": {
"GOOGLE_CLIENT_ID": "...",
"GOOGLE_CLIENT_SECRET": "...",
"GOOGLE_SEARCH_CONSOLE_REFRESH_TOKEN": "..."
}
}
}
}Property identifiers
Search Console has two property types and the API is strict about the exact string for each. Tools normalise input, so all of these work:
You pass | Sent to the API |
|
|
|
|
|
|
|
|
A URL-prefix property passed without its trailing slash is the most common cause of a spurious 403 from this API, which is why normalisation happens here rather than being left to the caller. A 403 raised by this server appends a reminder of exactly that.
Feature Parity Table
Implementation status of Google Search Console API v1 methods (discovery revision 20260909):
Tool | Category | API Method | Implemented | Test Coverage | Notes |
Property Management | |||||
| Sites |
| ✅ Yes | ✅ Yes | All properties and permission levels |
| Sites |
| ✅ Yes | ✅ Yes | One property, with permission level |
| Sites |
| ✅ Yes | ✅ Yes | Mutation; needs verification afterwards |
| Sites |
| ✅ Yes | ✅ Yes | Mutation; irreversible via the API |
Sitemaps | |||||
| Sitemaps |
| ✅ Yes | ✅ Yes | Optional sitemap-index drill-down |
| Sitemaps |
| ✅ Yes | ✅ Yes | Processing status and error counts |
| Sitemaps |
| ✅ Yes | ✅ Yes | Mutation |
| Sitemaps |
| ✅ Yes | ✅ Yes | Mutation |
| Sitemaps | (composes | ✅ Yes | ✅ Yes | Bulk; failure-tolerant per sitemap |
Search Analytics | |||||
| Search Analytics |
| ✅ Yes | ✅ Yes | Raw 1:1 wrapper, full request control |
| Search Analytics | (composes | ✅ Yes | ✅ Yes | Pages past the 25,000-row cap |
| Search Analytics | (grouped by | ✅ Yes | ✅ Yes | Sorted by clicks, named fields |
| Search Analytics | (grouped by | ✅ Yes | ✅ Yes | Sorted by clicks |
| Search Analytics | (grouped by | ✅ Yes | ✅ Yes | Daily time series |
| Search Analytics | (grouped by | ✅ Yes | ✅ Yes | ISO-3166-1 alpha-3 |
| Search Analytics | (grouped by | ✅ Yes | ✅ Yes | Desktop / mobile / tablet |
| Search Analytics | (grouped by | ✅ Yes | ✅ Yes | Rich result types |
| Search Analytics | (two queries, with deltas) | ✅ Yes | ✅ Yes | Equal-length preceding period, flags new |
URL Inspection | |||||
| URL Inspection |
| ✅ Yes | ✅ Yes | Index status, canonicals, crawl, AMP |
| URL Inspection | (composes | ✅ Yes | ✅ Yes | Bulk, quota-aware, verdict summary |
URL Testing Tools | |||||
| Testing Tools |
| ✅ Yes | ✅ Yes | ⚠️ Shut down by Google 1 Dec 2023 |
Diagnostics | |||||
| Diagnostics | (no API call) | ✅ Yes | ✅ Yes | Credential state; spends no quota |
Summary Statistics
API Methods Implemented: 11 out of 11 Search Console API v1 methods (100%)
Total Tools: 22 (11 API methods + 11 convenience tools)
Tools with Tests: 22 (100% test coverage)
Line & Branch Coverage: 100% across
src(468 statements, 96 branches), enforced byfail_under = 100Test Count: 144
Type Safety:
pyrightstrict, 0 errors
Implementation Highlights
✅ Complete API Surface: every published method, including the one Google deprecated
✅ Coverage Enforced, Not Claimed:
tests/test_api_coverage.pydiffs the implementation against the vendored discovery document in both directions✅ End-to-End Tool Tests: every tool is invoked through a real MCP client, not just unit-tested at the service layer
✅ Correct Metric Aggregation: totals recompute CTR from summed clicks/impressions and weight position by impressions — averaging either across rows gives a wrong answer
✅ Quota Awareness: bulk URL inspection refuses to exceed the documented 2,000/property/day limit
Key Features
Typed Discovery Client: complete static types from
google-api-python-client-stubsOff-Loop Execution: the synchronous Google client is dispatched via
asyncio.to_thread, so it never blocks the MCP event loopUniform Error Translation: one
execute()helper turnsHttpErrorinto a readable message, including a 403 hint about property-identifier formatLazy Client Initialisation: credentials resolve on first use, so the server starts even when misconfigured and
check_client_statuscan say whyRead-Only Mode:
SEARCH_CONSOLE_READ_ONLY=truerequests the readonly scope and refuses all four mutationsProperty Normalisation: domain vs URL-prefix properties handled at the boundary
Deprecated API Methods
Nothing is unimplemented. One method is implemented but non-functional upstream:
urlTestingTools.mobileFriendlyTest.run— Google shut this down on 1 December 2023. It is still published in the discovery document, so it is implemented here for complete coverage, and its docstring says plainly that it returns an error. For mobile usability signals useinspect_url, whose response carries amobileUsabilityResult.
Why there is no Search Console SDK
Search Console is a discovery-document API. Google ships no dedicated client
library for it in any language — no equivalent of google-ads or
google-analytics-data. It is one of ~300 APIs served by the generic
google-api-python-client, whose resources are built dynamically at runtime and
are entirely untyped.
Other languages fare better, because their generic clients generate code at build
time into per-API packages: Go has google.golang.org/api/searchconsole/v1, Java
has google-api-services-searchconsole, .NET has Google.Apis.SearchConsole.v1,
and Node's googleapis ships Schema$* TypeScript interfaces. Python is the
outlier — its client parses the discovery document at runtime, so there is
nothing to type-check.
That would normally rule out strict type checking. The way out is
google-api-python-client-stubs, which covers searchconsole/v1 completely: all
30 schemas as TypedDicts with Literal enums, and a build() overload keyed on
the literal service name. It is a dev-only dependency — stubs never ship at
runtime, so if it goes stale the cost is type-checking, not functionality.
Two consequences to know before editing:
src/client.pyimportsSearchConsoleResourceunderif TYPE_CHECKING:. Thegoogleapiclient._apispackage does not exist at runtime; that guard must stay.FastMCP resolves tool annotations at runtime, so tool signatures use
Dict[str, Any]while the service layer beneath stays precisely typed. Annotating a tool with a stub type raisesNameErrorat registration.
Testing
# Run tests
uv run pytest
# Run tests with coverage (must stay at 100%)
.venv/bin/python -m pytest --cov --cov-report=term-missing
# Run type checking
uv run pyright
# Run code formatting
uv run ruff format .
# Everything at once
./scripts/typecheck.shCoverage is invoked as .venv/bin/python -m pytest rather than uv run pytest
for one reason, documented in pyproject.toml: constructing a FastMCP instance
inside a coverage-instrumented module trips a type check in cryptography's Rust
bindings, so main.py is excluded from the measured source set and covered
end-to-end by tests/test_api_coverage.py instead.
Test layout
File | Covers |
| Every tool invoked through a real MCP client, end to end |
| Sites service methods |
| Sitemaps service methods |
| Query building, pagination, aggregation maths, period comparison |
| Inspection, bulk summarising, quota guard |
| Deprecated Mobile-Friendly Test |
| Credential resolution, scopes, read-only gate, lifecycle |
| Error translation, 403 hint, off-loop dispatch |
| Property normalisation, date maths, dotenv |
| The API coverage contract, both directions |
When Google revises the API
uv run scripts/refresh_discovery.py
uv run pytest tests/test_api_coverage.pyA new method fails test_every_api_method_is_declared until it is implemented
and mapped in src/coverage.py. A removed one fails
test_no_declared_method_has_been_removed. That failure is the intended alarm —
do not weaken the test.
Repository layout
src/client.py credentials, typed discovery client, read-only gate
src/coverage.py API method -> tool mapping; the coverage contract
src/services/ one module per API resource
src/services/base.py off-loop dispatch and error translation
refs/ vendored discovery document
scripts/ token minting, discovery refresh, checks
tests/ 144 tests, 100% coverage
main.py stdio MCP serverContributing
Contributions are welcome. Please ensure:
All code has proper type annotations
Tests are added for new functionality — coverage must stay at 100%
Code passes
uv run pyrightwith no errorsCode is formatted with
uv run ruff formatAny new API method is mapped in
src/coverage.py
License
MIT — see LICENSE.
Disclaimer
This is an unofficial integration and is not affiliated with or endorsed by Google. Search Console API quotas apply; the URL Inspection API is limited to 2,000 queries per property per day and 600 per minute.
Available Tools
22 toolsadd_siteAdd SiteA
Add a property to Search Console. Requires verification afterwards.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Property identifier to add. |
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 burden. It does disclose one meaningful post-condition (verification is required after adding), which is real behavioral context. However, it omits idempotency behavior, required auth level, and the outcome when the site already 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?
Two short sentences with zero filler; the core action is front-loaded and the verification caveat follows 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?
An output schema exists, so return values need not be explained. For a mutation tool with no annotations, though, the description is thin: it does not cover permissions, duplicate-handling, or what verification entails, which are the main things an agent would need.
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?
There is a single parameter with 100% schema description coverage, so the schema already defines site_url as the property identifier. The description adds no format guidance (e.g. URL vs domain property syntax), so 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?
The description states a specific verb and resource ("Add a property to Search Console"), which clearly distinguishes it from siblings like delete_site and list_sites. It stops short of naming an alternative or contrast condition, but the action 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?
Usage is implied by the verb and the note that verification is required afterwards, but the description never states when to add a site versus other management tools, nor any prerequisites (permissions, ownership) or what to do if the property already exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_client_statusCheck Client StatusA
Check that the Search Console client is configured and can authenticate.
Returns: Whether credentials resolve, whether the server is in read-only mode, and the OAuth scopes in use.
| 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?
With no annotations, the description carries the full burden and does reasonably well: it discloses what the check exposes (credential resolution, read-only mode, OAuth scopes), which is meaningful behavior beyond the empty schema. It stops short of saying whether this performs a live network round-trip or how failures surface.
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-sentence purpose followed by a compact 'Returns' block; the key claim (configured and can authenticate) is front-loaded and nothing is wasted.
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 adequate for a simple zero-param diagnostic, and the 'Returns' section redundantly but harmlessly previews the output schema. It lacks only guidance on interpreting failure (e.g., what a false credential resolution implies for subsequent calls).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 by rule. The description correctly signals a no-input check and adds no misleading parameter expectations.
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 ('check') and resource (the Search Console client's configuration/authentication), which unambiguously separates it from the data-fetching siblings like list_sites and query_search_analytics. An agent can tell this is a diagnostic/preflight tool 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?
Usage is only implied: the purpose (verify config and auth) suggests calling it before other operations or when auth fails, but the description never states when to use it, when not to, or what to do with the result. No alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_periodsCompare PeriodsB
Compare a period against the equal-length period immediately before it.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Simplified filters combined with AND. | |
| end_date | No | Inclusive end of the current period. | |
| site_url | Yes | Property identifier. | |
| dimension | No | Optional dimension to break the comparison down by, e.g. QUERY or PAGE. Omit for property-level totals only. | |
| row_limit | No | Rows per period when a dimension is given. | |
| start_date | No | Inclusive start of the current period. Defaults to a 28-day window ending three days ago. | |
| search_type | No | Report type. | WEB |
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. It does not disclose whether the operation is read-only, what permissions are required, whether there are rate limits, or how pagination works.
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?
It is a single front-loaded sentence with zero waste. The comparison semantics are stated 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?
The schema fully documents parameters and an output schema exists, so the description need not cover returns. Still, it omits when-to-use guidance and behavioral context, leaving it only minimally complete for an analytics comparison 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 parameter meanings are already fully documented in the schema. The description adds no parameter-level meaning beyond what is structured.
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: compare a period against the equal-length period immediately before it. However, it does not distinguish this tool from sibling analytics tools such as performance_by_date or query_search_analytics.
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, prerequisites, or alternatives are given. The description only says what the tool does, leaving the agent to infer when it should be selected over siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_siteDelete SiteA
Remove a property from Search Console.
This unlinks the property from the account. Historical data is retained by Google but becomes inaccessible until the property is re-added and re-verified.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Property identifier to remove. |
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 provided, the description carries the full burden and succeeds in disclosing key behavior: the property is unlinked from the account, and historical data remains with Google but is inaccessible until re-adding and re-verification. It does not mention permission requirements or confirmation behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and immediately followed by the key consequence. Every sentence earns its place with no redundant or filler 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?
The tool has one required parameter with full schema coverage and an output schema that handles return values. The description fully covers the effect and data-retention behavior, leaving nothing essential 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 description coverage is 100%, so the single site_url parameter is already well documented. The description adds no further syntax or format details beyond what the schema provides, matching the baseline for full schema coverage.
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 verb and resource: 'Remove a property from Search Console.' It clearly distinguishes this tool from sibling operations like add_site and delete_sitemap, which target different resources.
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 the tool by saying it removes a property, but it does not explicitly state when to choose this over alternatives such as delete_sitemap or list_sites. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_sitemapDelete SitemapC
Delete a sitemap from Search Console.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap to delete. | |
| site_url | Yes | Property identifier. |
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, yet it discloses nothing beyond the bare action. It does not state that deletion is irreversible, whether the sitemap must first exist, whether the property permission level matters, or what happens on a nonexistent sitemap. For an unannotated destructive mutation this is a significant 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 zero filler, and the action verb is front-loaded. Nothing is padded or repeated.
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 the description is still incomplete for a destructive, unannotated tool. It should at minimum state irreversibility and any preconditions for deletion; as written, the agent learns nothing it could not already infer from the tool name and 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?
Schema description coverage is 100%; both site_url (property identifier) and feedpath (full URL of the sitemap) are documented in the schema itself. The description adds no syntax, format, or example detail 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 specific verb (Delete) and resource (a sitemap from Search Console), so an agent can immediately tell what the tool does. However, it makes no attempt to distinguish itself from siblings such as submit_sitemap, submit_sitemaps, or get_sitemap, so differentiation is left to inference.
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 tool versus alternatives, no precondition stating the sitemap must already be registered, and no mention of authorization requirements. The agent must infer that this is the inverse of submit_sitemap purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_siteGet SiteB
Get one Search Console property and the caller's permission level.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Property identifier. Either a domain property ("sc-domain:example.com") or a URL-prefix property ("https://example.com/"). A bare hostname is treated as a 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 burden. It discloses that the response includes the caller's permission level and implies a read-only operation, but does not state auth requirements, explicitly confirm read-only behavior, or describe error handling.
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. Every word contributes to stating the verb, resource, and additional return detail without 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?
Given the low complexity (one fully documented parameter), the presence of an output schema, and no annotations, the description is nearly complete. It could be improved by clarifying when to choose get_site over list_sites, but it provides enough to 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%, so the sole parameter 'site_url' is already fully documented in the schema. The description adds no additional meaning, syntax, or constraints beyond what the schema provides; 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') and resource ('Search Console property'), plus an additional return item ('caller's permission level'). It implicitly distinguishes from list_sites by saying 'one', but does not explicitly name or contrast with any sibling 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?
No guidance on when to use this tool versus list_sites or other siblings. It does not state prerequisites, exclusions, or alternatives, leaving the agent to infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sitemapGet SitemapA
Get one sitemap's processing status and error counts.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap, e.g. https://example.com/sitemap.xml | |
| site_url | Yes | Property identifier. |
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 burden. 'Get' plus the read-oriented framing (status and error counts) makes the read-only, non-destructive nature apparent, but permissions, whether an unsubmitted or unprocessed sitemap returns an error, and rate-limit behavior are all undisclosed.
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 tight sentence with the resource and the returned content front-loaded. No filler, no restatement of the title.
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 the description need not explain return values, and the two parameters are fully documented in the schema. For a simple single-resource read this is nearly complete; only the usage routing against list_sitemaps/submit_sitemap siblings 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%: feedpath is documented as a full URL with an example and site_url as a property identifier. The description adds no further parameter meaning, 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 (Get) and resource (one sitemap), plus what it returns: processing status and error counts. It implicitly distinguishes itself from the plural sibling list_sitemaps, though it never names that sibling or explicitly contrasts the two.
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 only implied: an agent can infer this is for inspecting a single already-known sitemap rather than enumerating them, but the description gives no explicit when-to-use condition, no prerequisite (e.g. the sitemap must have been submitted), and no named alternative such as list_sitemaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_urlInspect UrlA
Inspect one URL's index status in Google Search.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Property identifier. The inspected URL must be under it. | |
| language_code | No | BCP-47 code for translated issue messages, e.g. en-US. | en-US |
| inspection_url | Yes | Full URL to inspect. |
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 burden. 'Inspect' implies a read-only, non-destructive operation, and the output schema covers return values, but the description does not disclose permission requirements, quota behavior, or Search Console property ownership constraints.
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 efficient sentence front-loads the operation and resource. There is no redundant or wasted phrasing.
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 inspection tool with full schema descriptions and an output schema, the description is largely complete: it identifies the operation, scope, and resource. It could explicitly route the agent to 'inspect_urls' for multiple URLs, but that is the main missing contextual detail.
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 input schema already documents all three parameters clearly. The description adds only the concept of inspecting one URL's index status and does not contribute additional parameter syntax or constraints 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?
States a specific verb ('Inspect'), a clear resource ('one URL's index status in Google Search'), and the singular scope distinguishes it from the sibling 'inspect_urls' bulk tool. An agent can identify the operation 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 'one URL' implies this is for single-URL inspection versus the plural sibling 'inspect_urls', but the description does not explicitly say when to use this tool, when not to, or that batch inspection should use the alternative. Usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_urlsInspect UrlsA
Inspect several URLs and summarise their index status.
Each URL costs one unit of the 2,000-per-property-per-day URL Inspection quota.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Property identifier. | |
| language_code | No | BCP-47 code for translated issue messages. | en-US |
| inspection_urls | Yes | Full URLs to inspect, all under the 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 burden, and it usefully discloses a hard operational constraint: one unit per URL against a 2,000-per-property-per-day quota. It says nothing about auth requirements or partial-failure behavior across multiple URLs, which is the main remaining 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?
Two short sentences, front-loaded with the action and result, then the cost constraint. Every sentence earns its place with no 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?
An output schema exists, so return values need not be explained, and all parameters are schema-documented. The quota disclosure fills the biggest behavioral gap; only the missing routing guidance versus inspect_url keeps this from being 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 all three parameters (site_url, language_code, inspection_urls) are already documented in the schema. The description adds no syntax, format, or constraint detail beyond that, 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?
The description gives a specific verb and resource ('Inspect several URLs') plus the purpose of the result ('summarise their index status'). The plural framing implicitly distinguishes it from the singular sibling inspect_url, but it never names that sibling explicitly, so differentiation relies on inference.
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?
Apart from the quota cost note, there is no guidance on when to choose this over inspect_url or the other sibling tools, and no stated prerequisites or exclusions. The agent must infer that this is the batch counterpart to inspect_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitemapsList SitemapsC
List the sitemaps submitted for a property.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Property identifier. | |
| sitemap_index | No | Optional sitemap index URL. When given, lists the child sitemaps of that index instead of the top-level ones. |
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, and it says nothing about read-only vs mutating semantics, permissions/auth, pagination, or limits. A single sentence for a bare list operation leaves the agent with little beyond the read-only inference from the verb 'List'.
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 sentence with no wasted words and the key scope ('submitted for a property') front-loaded. It is efficient, though arguably under-specified rather than tight for a tool with siblings needing differentiation.
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, and the core read operation is conveyed. But with no annotations and no usage or behavioral context, the definition is only minimally complete for selecting this tool among its many siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including a well-documented sitemap_index parameter explaining child-sitemap listing, so the schema does the heavy lifting. The description adds no parameter meaning beyond what is already documented, which matches the baseline 3 for high coverage.
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 gives a specific verb (List) and resource (sitemaps) scoped to a property, which is clearer than the title alone. However, it does nothing to distinguish itself from close siblings like get_sitemap, submit_sitemaps, or delete_sitemap, so an agent must infer the difference from names alone.
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 statement of when to use this tool versus alternatives, nor any prerequisites or exclusions. The agent must guess, for example, that this lists sitemaps while get_sitemap retrieves a single one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sitesList SitesA
List all Search Console properties the account can access.
Returns: Each property's siteUrl and the caller's permissionLevel (siteOwner, siteFullUser, siteRestrictedUser or siteUnverifiedUser).
| 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?
No annotations are provided, so the description carries the full behavioral burden. It implicitly conveys a safe read-only enumeration and names the returned fields, but says nothing about permissions needed or result limits; the return details are also partially redundant given an output schema 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?
Two tight sentences, front-loaded with the core action and scope, followed by a compact return summary. Every line earns its place with no 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?
For a zero-parameter list tool with an output schema, the description covers what it does and what comes back, so an agent can call it confidently. The only shortfall is the absence of any usage context or sibling routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the documented baseline of 4. There is no parameter meaning for the description to add, and it correctly avoids inventing any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List all Search Console properties') with an explicit scope ('the account can access'). It is clearly distinguishable from siblings like get_site, add_site, and delete_site, though it does not name any of them directly.
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 only implied: an agent can infer this is the discovery step before using get_site/add_site, but the description offers no when-to-use framing, prerequisites, or explicit alternatives. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_by_countryPerformance By CountryC
Performance broken down by country.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Simplified filters combined with AND. | |
| end_date | No | Inclusive end date. | |
| site_url | Yes | Property identifier. | |
| row_limit | No | Number of countries to return. | |
| start_date | No | Inclusive start date. Defaults to a 28-day window ending three days ago. | |
| search_type | No | Report type. | WEB |
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, and it adds nothing: no mention of default date windowing, row-limit behavior, rate limits, or authentication needs. The schema does encode defaults (28-day window, row_limit 100), but the description offers no behavioral context beyond the title.
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 grouping dimension front-loaded. It is efficient, though its brevity borders on under-specification rather than tight writing.
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, and the schema covers parameters well. Still, for a tool in a family of four 'performance_by_*' siblings with no annotations, the description should at minimum say what metrics are reported and how it differs from the other breakdowns.
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%, including enum values, defaults, and the date-window default, so the schema fully documents all six parameters. The description adds no additional parameter meaning, which is the expected baseline when the schema does the heavy lifting.
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 phrase 'Performance broken down by country' names the resource and the grouping dimension, which loosely distinguishes it from siblings like performance_by_date. However, 'performance' is never defined (clicks, impressions, CTR, position?), so the purpose is only implied rather than stated with a concrete verb/resource pair.
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 tool versus performance_by_date, performance_by_device, or performance_by_search_appearance, nor any mention of prerequisites such as which site properties are valid. The agent must infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_by_datePerformance By DateC
Daily performance time series for a property.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Simplified filters combined with AND. | |
| end_date | No | Inclusive end date. | |
| site_url | Yes | Property identifier. | |
| row_limit | No | Maximum days to return. | |
| start_date | No | Inclusive start date. Defaults to a 28-day window ending three days ago. | |
| search_type | No | Report type. | WEB |
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 burden, yet it only restates the shape of the result. It says nothing about read-only behavior, authentication/scope requirements, rate limits, data freshness, or the default 28-day window semantics that drive results.
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 eight-word sentence with no filler and a front-loaded subject. It is efficiently sized, though arguably too terse to carry any detail an agent could use.
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, and the schema covers all six parameters. However, given the dense sibling set of similar performance_* tools and the absence of annotations, the description omits any disambiguation or behavioral context needed to pick this tool confidently.
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 every parameter (including filter combination semantics, inclusive date bounds, row_limit, and the search_type enum) is already documented in the schema. The description adds no syntax, format, or interaction detail 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?
States a specific resource (performance) and a specific dimension (daily/date-based time series), which implicitly distinguishes it from the sibling dims performance_by_country and performance_by_device. It does not explicitly name an alternative, so it falls short of 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 when-to-use guidance, no mention of when to prefer it over performance_by_country/performance_by_device or query_search_analytics, and no prerequisites. The reader must infer intended usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_by_devicePerformance By DeviceB
Performance broken down by device (desktop, mobile, tablet).
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Simplified filters combined with AND. | |
| end_date | No | Inclusive end date. | |
| site_url | Yes | Property identifier. | |
| start_date | No | Inclusive start date. Defaults to a 28-day window ending three days ago. | |
| search_type | No | Report type. | WEB |
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 disclosure burden. It does not state read-only/destructive status, authorization needs, rate limits, or that it returns aggregate reporting rather than modifying data; only the tool name implies a read operation.
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 wasted words. It is extremely terse, but conciseness is appropriate and not verbose.
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 the input schema fully documents parameters, so the description need not explain return values or parameter details. It identifies the device breakdown clearly enough to route among the performance_by_* siblings, though it omits usage and behavioral context.
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 schema already documents all five parameters including defaults and the search_type enum. The description adds device breakdown context but no parameter semantics beyond what the schema provides; 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 resource and breakdown dimension ('performance broken down by device'), and 'by device' distinguishes it from siblings like performance_by_date, performance_by_country, and performance_by_search_appearance. However, it lacks an explicit verb and does not directly 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?
Provides no when-to-use guidance, prerequisites, or comparison to alternative performance breakdown tools. The agent is not told when to choose this over performance_by_date, performance_by_country, or compare_periods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_by_search_appearancePerformance By Search AppearanceA
Performance broken down by search appearance (rich result types).
Note that SEARCH_APPEARANCE cannot be combined with other dimensions in the same request, which is why this has no filters argument.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | No | Inclusive end date. | |
| site_url | Yes | Property identifier. | |
| row_limit | No | Number of appearance types to return. | |
| start_date | No | Inclusive start date. Defaults to a 28-day window ending three days ago. | |
| search_type | No | Report type. | WEB |
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 burden. It usefully discloses a request-level limitation (the dimension cannot be combined, hence no filters argument), which is genuine behavioral context. However, it says nothing about read-only nature, permission scope, pagination, or result ordering.
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 core purpose and followed by the single most surprising design fact. No filler, no restatement of the title.
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, and the schema fully documents parameters. The description supplies the one non-obvious constraint about dimension incompatibility. Minor gaps remain around result ordering and how appearance types are enumerated, but nothing blocking.
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 end_date, site_url, row_limit, start_date and search_type are all documented in the schema itself. The description adds no parameter-level detail beyond explaining the deliberate absence of a filters argument, 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 ('Performance broken down by search appearance') and clarifies the dimension with 'rich result types'. The dimension name inherently distinguishes it from parallel siblings like performance_by_date, performance_by_country and performance_by_device, though it never names them explicitly.
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 note that SEARCH_APPEARANCE cannot be combined with other dimensions gives a real usage constraint, but there is no explicit statement of when to pick this tool over the parallel performance_by_* siblings or what the intended scenarios are. Usage is only implied by the groupby dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_all_rowsQuery All RowsB
Retrieve every row for a query, paging past the 25,000-row cap.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Simplified filters combined with AND, each {"dimension": ..., "operator": ..., "expression": ...}. | |
| end_date | Yes | Inclusive end date, YYYY-MM-DD. | |
| max_rows | No | Safety ceiling on rows retrieved. Default 100,000. | |
| site_url | Yes | Property identifier. | |
| data_state | No | FINAL (default) or ALL to include fresh partial data. | |
| dimensions | No | Dimensions to group by. Defaults to ["QUERY"]. | |
| start_date | Yes | Inclusive start date, YYYY-MM-DD. | |
| search_type | No | WEB, IMAGE, VIDEO, NEWS, DISCOVER or GOOGLE_NEWS. | WEB |
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. It discloses the pagination behavior past the 25,000-row cap, which is genuinely useful, but adds nothing about rate limits, permission requirements, or the cost of exhaustively paging large result sets despite max_rows defaulting to 100,000.
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 sentence, front-loaded with the action and the distinguishing pagination behavior. Every word earns its place with no 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?
The description covers the core purpose and the row-cap behavior, and an output schema exists so return values need not be explained. However, for an 8-parameter exhaustive-retrieval tool with no annotations, the lack of guidance on cost, permissions, or when to prefer it over narrower analytics siblings leaves meaningful gaps.
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 schema already documents all 8 parameters including enums, defaults, and date formats. The description adds no parameter-level detail beyond what the schema provides, 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 (retrieve) and resource (every row for a query) and distinguishes itself by promising full retrieval past the 25,000-row cap, which sets it apart from siblings like top_queries that likely cap results. It doesn't explicitly name which sibling to use instead, keeping it from 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?
No explicit when-to-use or when-not-to-use guidance relative to the many analytics siblings (query_search_analytics, top_queries, performance_by_date). The agent must infer that this is the exhaustive-retrieval option from the phrase 'every row,' with no stated exclusions or cost warnings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_search_analyticsQuery Search AnalyticsA
Run a raw Search Analytics query with full control over the request.
This is the unmodified API method. For the common cases prefer top_queries, top_pages, performance_by_date, performance_by_country, performance_by_device, compare_periods or query_all_rows.
| Name | Required | Description | Default |
|---|---|---|---|
| end_date | Yes | Inclusive end date, YYYY-MM-DD (PST). | |
| site_url | Yes | Property identifier. | |
| row_limit | No | 1 to 25,000. Page with start_row beyond that. | |
| start_row | No | Zero-based index of the first row to return. | |
| data_state | No | FINAL for finalised data only (default), ALL to include fresh partial data from the last ~2 days, HOURLY_ALL for hourly. | |
| dimensions | No | Dimensions to group by, in order. Results are keyed by the combination of these, in the order supplied. | |
| start_date | Yes | Inclusive start date, YYYY-MM-DD (PST). | |
| search_type | No | WEB, IMAGE, VIDEO, NEWS, DISCOVER or GOOGLE_NEWS. | WEB |
| aggregation_type | No | AUTO, BY_PROPERTY or BY_PAGE. Use AUTO when grouping or filtering by PAGE. | |
| dimension_filter_groups | No | Native filter groups, e.g. [{"groupType": "AND", "filters": [{"dimension": "QUERY", "operator": "CONTAINS", "expression": "buy"}]}] |
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 burden of behavioral disclosure. It hints the query is 'raw' and 'full control', but says nothing about authorization requirements, rate limits, whether results are paginated (though the schema mentions paging), or what the return structure is (output schema exists, so that's partially covered). For a complex 10-parameter analytics tool with no annotations, this is a significant 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?
Ten words in the first sentence and a single list of alternatives in the second — no filler, and the key distinction (raw vs. preset) 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?
Given the 10 parameters and no annotations, the description does not provide enough operational context (e.g., auth scope, rate limits, pagination behavior beyond what the schema implies). An output schema exists so return-value explanation is not required, but behavioral gaps remain for a complex query 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 schema already documents all 10 parameters depthfully. The description adds no parameter-level meaning beyond the schema. Baseline 3 is appropriate when the schema is comprehensive.
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 first sentence states a specific verb and resource ('Run a raw Search Analytics query') and the second sentence clarifies the tool's positioning ('unmodified API method'). However, it doesn't explicitly state what distinguishes it from the named siblings beyond being raw/not preset; the mechanism of distinction is implied by the alternative names.
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?
Explicitly names seven alternative tools for common cases (top_queries, top_pages, performance_by_date, etc.) and states the condition for using this tool ('full control over the request'), creating a clear when-to-use / when-to-use-something-else split.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_mobile_friendly_testRun Mobile Friendly TestA
DEPRECATED AND NON-FUNCTIONAL. Run the Mobile-Friendly Test on a URL.
Google shut this API down on 1 December 2023; calling it returns an error. It exists here only so this server covers the published API surface completely. Do not call it expecting a result. For mobile usability signals, use inspect_url instead, whose response carries a mobileUsabilityResult.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to test. | |
| request_screenshot | No | Whether to request a rendered screenshot. |
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 and does so well: it discloses the API shutdown date, that calling it returns an error, and that it exists only for API-surface completeness. It stops short of describing the concrete error shape or whether the call still consumes quota, but the essential behavior is unambiguous.
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 critical warning is front-loaded in the first line, followed by the reason and the alternative. Every sentence earns its place and nothing is wasted.
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. Combined with the deprecation status, error behavior, and the explicit redirect to inspect_url, an agent has everything needed to decide not to call 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% and both parameters (url, request_screenshot) are documented in the schema, so the baseline is 3. The description adds nothing about parameter semantics, but the schema already does the heavy lifting for a two-param tool.
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 the specific verb+resource ('Run the Mobile-Friendly Test on a URL') and immediately qualifies it with 'DEPRECATED AND NON-FUNCTIONAL', so an agent understands both the nominal purpose and its unusability. It also names a sibling (inspect_url) so it can be distinguished without opening schemas.
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?
Explicitly says 'Do not call it expecting a result' and redirects to the alternative ('use inspect_url instead, whose response carries a mobileUsabilityResult'), naming the exact field to look for. This is textbook when-not-to-use plus the replacement path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_sitemapSubmit SitemapC
Submit a sitemap to Search Console.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | Yes | Full URL of the sitemap to submit. | |
| site_url | Yes | Property identifier. |
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. It says nothing about idempotency, permissions, error handling, rate limits, or what happens if the sitemap is invalid — only that a submission occurs.
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 wasted words. It is structurally sound but extremely terse for a mutation 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, and the input schema is fully described. However, the description lacks sibling differentiation and behavioral context for a write operation, leaving it partially incomplete.
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 schema already documents both parameters. The description adds no additional meaning about site_url or feedpath formats beyond what the schema provides, making the baseline of 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 'Submit' and resource 'sitemap' with the destination 'Search Console,' making the core action clear. However, it does not distinguish this tool from the sibling 'submit_sitemaps,' leaving ambiguity for an agent choosing between the two.
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, no mention of alternatives like submit_sitemaps, and no prerequisites or conditions for invocation. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_sitemapsSubmit SitemapsB
Submit several sitemaps to one property in a single call.
| Name | Required | Description | Default |
|---|---|---|---|
| site_url | Yes | Property identifier. | |
| feedpaths | Yes | Full URLs of the sitemaps to submit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It doesn't disclose what happens on duplicate or invalid URLs, whether re-submission is idempotent, any per-property sitemap limits, or auth requirements for a mutating submission.
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; the batch scope and target are stated 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?
With an output schema present and full parameter coverage, return values need no explanation. However, for a mutating submission tool with zero annotations and a near-identical sibling, the description leaves behavioral expectations and tool selection entirely to inference.
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 and feedpaths are already documented as a property identifier and a list of full sitemap URLs. The description adds only the constraint that all submitted sitemaps target one property, which is marginal over 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 gives a specific verb (Submit) and resource (sitemaps) plus the batch scope ('several sitemaps... in a single call'), which implicitly distinguishes it from the singular submit_sitemap sibling. It stops short of naming that alternative, so differentiation is inferable rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Several sitemaps ... in a single call' hints at the batch use case versus the singular submit_sitemap, but the description never explicitly says when to use this tool instead of that sibling or what preconditions (ownership/verification of the property) apply. Usage is implied, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_pagesTop PagesC
Top landing pages by clicks for a property.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Simplified filters combined with AND. | |
| end_date | No | Inclusive end date. | |
| site_url | Yes | Property identifier. | |
| row_limit | No | Number of pages to return. | |
| start_date | No | Inclusive start date. Defaults to a 28-day window ending three days ago. | |
| search_type | No | Report type. | WEB |
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, and it discloses almost nothing: not that this is a read-only, non-destructive query, not how ranking is defined (implicitly clicks descending?), and not pagination or row_limit truncation behavior. For a multi-parameter analytics tool with zero annotation coverage this is a significant 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 front-loaded sentence with no filler, which is structurally efficient. It is arguably under-specified rather than concise, but it wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be restated, but with six parameters, no annotations, and a ranking-based semantic, the description leaves the agent without ordering rules, default behavior context, or safety profile. Too thin for a core analytics query 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 schema already documents site_url, filters, dates, row_limit, and search_type, making 3 the baseline. The description adds nothing beyond the schema, not even clarifying that 'top' is ranked by the click metric the schema never names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (landing pages), a metric (clicks), and a scope (a property), which is enough to place it among siblings like top_queries and performance_by_date. It does not explicitly name how it differs from query_search_analytics, which also returns ranked results, but the 'landing pages' phrasing is a meaningful disambiguator.
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 when-to-use guidance, no mention of alternatives (top_queries, query_all_rows), and no stated prerequisites such as needing a valid site_url or an accessible property. The agent must infer all of this from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_queriesTop QueriesC
Top search queries by clicks for a property.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No | Simplified filters combined with AND. | |
| end_date | No | Inclusive end date. | |
| site_url | Yes | Property identifier. | |
| row_limit | No | Number of queries to return. | |
| start_date | No | Inclusive start date. Defaults to a 28-day window ending three days ago, so the last day is not partial. | |
| search_type | No | Report type. | WEB |
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, and it only discloses the click-based ordering. It says nothing about authentication requirements, rate limits, pagination, or whether results are truncated at row_limit, all of which matter for an analytics retrieval tool.
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 single sentence is front-loaded and free of filler, but it is arguably under-sized rather than concise for a six-parameter analytics tool. Nothing is wasted, yet too little is said.
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, and the schema thoroughly documents parameters. However, with zero annotations and no usage or behavioral context, the definition leaves an agent without enough to confidently choose this tool over its many analytics siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the filters object and the default 28-day date window is already documented in the schema. The description adds no parameter-level meaning beyond the click-ordering hint, making 3 the correct 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 names a specific resource (search queries) and a ranking metric (by clicks) scoped to a property, which is enough to distinguish it from siblings like top_pages or performance_by_date. It stops short of explicitly naming those alternatives, so it doesn't reach the top tier.
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 tool versus query_search_analytics, query_all_rows, or top_pages, and no mention of prerequisites. The agent must infer usage purely from the name and resource.
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.
22 tool updates
v0.1.0- First observed
add_site - First observed
check_client_status - First observed
compare_periods - First observed
delete_site - First observed
delete_sitemap - First observed
get_site - First observed
get_sitemap - First observed
inspect_url - First observed
inspect_urls - First observed
list_sitemaps - First observed
list_sites - First observed
performance_by_country - First observed
performance_by_date - First observed
performance_by_device - First observed
performance_by_search_appearance - First observed
query_all_rows - First observed
query_search_analytics - First observed
run_mobile_friendly_test - First observed
submit_sitemap - First observed
submit_sitemaps - First observed
top_pages - First observed
top_queries
TDQS
Scored across 22 tools
Most tools target distinct resources or actions, and descriptions explicitly differentiate the raw analytics query from specialized ones. Minor overlap exists between singular/plural pairs (submit_sitemap/submit_sitemaps, inspect_url/inspect_urls), but the text clarifies the distinction.
Names are consistently snake_case and mostly follow a verb_noun pattern. A few analytics tools are noun phrases (top_queries, performance_by_date), which is a minor deviation but still readable and coherent.
At 22 tools the set feels heavy for the domain. Several analytics wrappers overlap with query_search_analytics, and run_mobile_friendly_test is explicitly deprecated and non-functional, so not every tool earns its place.
The surface covers full lifecycle operations for sites and sitemaps, offers comprehensive search analytics breakdowns, and includes both single and batch URL inspection. No obvious gaps remain for the Google Search Console API.
Maintenance
Related MCP Connectors
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
- VibeSEOOAuthdev.vibeseo
SEO research, audits, backlinks, GSC, and content workflow tools for AI agents.
Turn Search Console data into SEO actions, content, publishing, indexing, and AI insights.
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables querying Google Search Console and Google Analytics 4 data to retrieve search performance and site analytics. It provides tools for listing web properties and running detailed reports using secure Google OAuth authentication.-
- FlicenseNot gradedqualityFmaintenanceEnables interacting with Google Search Console via natural language, supporting search analytics, URL inspection, sitemap management, and site listing.25-
- 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.-
- AlicenseAqualityCmaintenanceConnects Google Search Console to AI assistants, enabling natural language analysis of SEO data. Provides read-only tools for properties, search analytics, URL inspection, and sitemaps.15MIT