Google Search Console MCP
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 MCPShow clicks and impressions for the last 28 days, grouped by query."
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
A secure, community-maintained Model Context Protocol server for Google Search Console. It gives MCP clients structured access to Search Analytics, properties, sitemaps, and URL Inspection.
Features
Query clicks, impressions, CTR, and average position.
List and inspect Search Console properties.
List and inspect submitted sitemaps.
Inspect the indexed version of a URL.
Return both readable text and structured MCP output.
Restrict access to an explicit property allowlist.
Keep sitemap mutation tools disabled by default.
Authenticate with a service account or Google Application Default Credentials.
Install with
npx; no global package installation is required.
Related MCP server: GSC MCP Server
Requirements
Node.js 22.14 or newer.
A Google Cloud project with the Search Console API enabled.
A Google identity that has access to at least one Search Console property.
An MCP client such as Claude Code.
Quick start
1. Prepare Google credentials
For a service account:
Enable the Google Search Console API in a Google Cloud project.
Create a service account and download its JSON key.
In Google Search Console, add the service account email under Settings → Users and permissions for each property it should access.
See Authentication for Application Default Credentials and detailed setup instructions.
2. Run the setup wizard
npx -y google-search-console-mcp setupThe wizard validates Google access, stores only the credential file path in the user configuration directory, and registers the MCP server with Claude Code at user scope.
Non-interactive setup is also supported:
npx -y google-search-console-mcp setup \
--credentials /absolute/path/to/service-account.json \
--allowed-sites sc-domain:example.com,https://www.example.com/ \
--non-interactiveOn Windows PowerShell, use one line or PowerShell backticks instead of backslashes.
3. Use it from Claude Code
Restart Claude Code after setup, then try:
List my Google Search Console properties.
Show clicks and impressions for the last 28 days, grouped by query.
Inspect https://www.example.com/article for indexing issues.
List the sitemaps submitted for sc-domain:example.com.Run diagnostics at any time:
npx -y google-search-console-mcp doctorManual Claude Code registration
macOS and Linux:
claude mcp add google-search-console --scope user \
--env GSC_CREDENTIALS_FILE=/absolute/path/to/service-account.json \
-- npx -y google-search-console-mcpWindows:
claude mcp add google-search-console --scope user --env GSC_CREDENTIALS_FILE=C:\path\to\service-account.json -- cmd /c npx -y google-search-console-mcpSee Client setup for project-level JSON configuration.
Tools
Tool | Default | Description |
| Enabled | List accessible Search Console properties. |
| Enabled | Get permission information for one property. |
| Enabled | Query Search Analytics metrics and dimensions. |
| Enabled | List submitted sitemaps. |
| Enabled | Get details about one sitemap. |
| Enabled | Inspect the version of a URL known to Google's index. |
| Opt-in | Submit a sitemap. |
| Opt-in | Remove a submitted sitemap. |
URL Inspection does not run a live test and cannot request indexing. Google does not expose those actions through the Search Console API.
See the complete Tool reference.
Configuration
Variable | Default | Description |
| ADC | Path to a service account JSON file. |
| ADC | Standard Google credential file variable. |
| All accessible | Comma-separated property allowlist. |
|
| Register sitemap mutation tools. |
|
| Google API request timeout. |
|
| Retry count for transient failures. |
|
| Maximum rows returned by one analytics request. |
|
|
|
| OS config directory | Override the setup-generated config path. |
Environment variables take precedence over the stored user configuration. See Configuration.
Security defaults
Read-only Google scope unless write tools are enabled.
No credentials or API response data are written to logs.
Logs go to stderr so MCP stdio messages remain valid.
Write tools are absent from the tool list unless explicitly enabled.
Property access can be constrained with
GSC_ALLOWED_SITES.No telemetry.
Read Security model and Security policy before enabling write tools.
Development
git clone https://github.com/dienhokhanh/google-search-console-mcp.git
cd google-search-console-mcp
npm install
npm run checkRun the development server:
npm run devSee Development and Contributing.
License
Available Tools
6 toolsgsc_get_siteGet a Search Console propertyBRead-onlyIdempotent
Get permission information for one Google Search Console property.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | Search Console property, such as "sc-domain:example.com" or "https://www.example.com/". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety and idempotency profile is covered. The description adds that the returned payload is permission information, which is useful context about the result, but nothing about auth requirements, error states, or rate limits.
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 purpose front-loaded. It is tight, though so terse that it omits any context that would help selection.
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 full annotation coverage this is nearly adequate, but with no output schema the description carries some burden for explaining what 'permission information' includes, and it does so only vaguely.
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 there is a single required parameter, so the schema already documents siteUrl with concrete examples ('sc-domain:example.com'). The description adds nothing about the parameter, 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 (get) and resource (permission information for one Search Console property), which is more precise than the tool name alone. The singular 'one property' implicitly contrasts with the plural gsc_list_sites sibling, though no sibling is named 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 description offers no when-to-use guidance or exclusions. It does not state that gsc_list_sites should be used for enumerating properties, so the agent must infer the distinction between the singular and plural tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_get_sitemapGet a sitemapBRead-onlyIdempotent
Get details about a submitted sitemap.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | Search Console property, such as "sc-domain:example.com" or "https://www.example.com/". | |
| sitemapUrl | Yes | Absolute URL of the sitemap. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds no behavioral context of its own (auth needs, error cases for unsubmitted sitemaps, return shape) but does not contradict the annotations either.
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 resource front-loaded. It is efficient, though nearly to the point of under-specification rather than tightness.
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 lookup with two fully documented parameters and no nested objects or output schema, the description plus annotations is essentially complete. The only gap is that 'details' is never characterized.
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 both parameters documented (siteUrl property format and sitemapUrl as an absolute URI), so the schema carries the parameter semantics. The description adds nothing beyond that, which is the baseline 3 case.
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 (get details about a submitted sitemap), which is clear on its own. However it does not distinguish itself from the sibling gsc_list_sitemaps, so an agent must infer that this one retrieves a single sitemap rather than enumerating 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?
No when-to-use guidance, prerequisites, or alternatives are given. There is no mention of gsc_list_sitemaps as the way to discover sitemapUrl values, nor any note that the sitemap must already be submitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_inspect_urlInspect a URLARead-onlyIdempotent
Inspect the version of a URL currently known to Google's index. This does not run a live test or request indexing.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | Search Console property, such as "sc-domain:example.com" or "https://www.example.com/". | |
| languageCode | No | ||
| inspectionUrl | Yes | Fully qualified URL to inspect. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuine context beyond them: this reads cached index state rather than triggering a live crawl or indexing, which is the key behavioral distinction an agent needs. It omits rate/quota behavior, which is notable for this API.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and followed immediately by the clarifying exclusion. No filler, no repetition of the title's wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should indicate what inspection results contain (index status, coverage state, crawl info) and any quota constraints, but it says nothing about the response shape. Combined with the undocumented languageCode parameter, this leaves clear gaps for a tool an agent must interpret results from.
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 67%: siteUrl and inspectionUrl are documented in the schema, while languageCode carries only a pattern with no explanation. The description adds no parameter meaning at all, so it relies entirely on structured fields; baseline 3 is appropriate for this moderate 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 states a specific verb and resource: inspecting the index-known version of a URL, plus a useful negative ('not a live test or indexing request'). It is immediately distinguishable from the sibling tools (sites, sitemaps, search analytics), though no sibling performs a comparable action, so explicit differentiation has no target.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when NOT to use it ('does not run a live test or request indexing'), which prevents a common misuse of this tool for indexing requests. It does not name an alternative or state prerequisites such as property access, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitemapsList sitemapsCRead-onlyIdempotent
List sitemaps submitted for a Google Search Console property.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | Search Console property, such as "sc-domain:example.com" or "https://www.example.com/". | |
| sitemapIndex | No | Optional sitemap index URL used to filter results. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description adds nothing beyond that — no pagination behavior, no result cap, and no note about what the optional sitemapIndex filter does at runtime.
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. It is efficient, though its brevity is partly under-specification rather than disciplined trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with full schema coverage, the description is adequate but thin. With no output schema present, it should at least hint at what is returned (sitemap URLs, submission status) or whether results are paginated.
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 both siteUrl and sitemapIndex documented in the schema itself, so the baseline of 3 applies. The description contributes no additional parameter meaning, such as how sitemapIndex filtering combines with the property scope.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (sitemaps) scoped to a Google Search Console property, so the intent is unambiguous. It does not, however, distinguish itself from the sibling gsc_get_sitemap, which is the closest alternative an agent must choose between.
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 gsc_get_sitemap or gsc_list_sites, and no mention of prerequisites such as a verified property. Usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_list_sitesList Search Console propertiesARead-onlyIdempotent
List Google Search Console properties available to the configured identity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered by structured data. The description contributes one extra fact — that results are scoped to the 'configured identity' — but says nothing about result shape or pagination beyond that.
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 scope constraint appears at the end where it adds value without delaying the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no nested objects, and full annotation coverage, the description is nearly sufficient for correct invocation. The one gap is that no output schema exists and the description doesn't hint at what a property entry contains, leaving return shape unspecified.
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 schema takes no parameters and reports 100% description coverage, so the description has no parameter semantics to compensate for. Baseline 4 applies for a parameterless 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 a specific verb ('List') and resource ('Google Search Console properties') with an explicit scope qualifier ('available to the configured identity'). It is clearly distinguishable from siblings like gsc_get_site, gsc_inspect_url, and gsc_list_sitemaps, though it never names an alternative to differentiate itself.
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 explicit when-to-use or when-not-to-use guidance and no mention of alternatives. For a zero-parameter enumeration tool the intended use is strongly implied, but the definition leaves it to inference rather than stating it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gsc_query_search_analyticsQuery Search AnalyticsCRead-onlyIdempotent
Query clicks, impressions, CTR, and average position from Google Search Console. Use startRow for pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | web | |
| endDate | Yes | Inclusive end date. | |
| siteUrl | Yes | Search Console property, such as "sc-domain:example.com" or "https://www.example.com/". | |
| rowLimit | No | ||
| startRow | No | ||
| dataState | No | final | |
| startDate | Yes | Inclusive start date. | |
| dimensions | No | ||
| aggregationType | No | ||
| dimensionFilterGroups | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds a pagination behavior hint (startRow), which is genuinely useful, but reveals nothing about row caps, data freshness/state, rate limits, or result shape.
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-loading the purpose before the pagination tip with no filler. Appropriately sized, though the second sentence carries little weight relative to the missing semantic detail.
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 10-parameter, nested-filter tool with no output schema and low schema description coverage, the description is too thin. It omits how dimensions drive the result granularity, the rowLimit ceiling of 25000, date format expectations, and filter group semantics that an agent would need to invoke it reliably.
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 only 30% across 10 parameters, so the description must compensate but does not. It explains startRow only, leaving siteUrl, dimensions, rowLimit, aggregationType, dataState and dimensionFilterGroups undocumented in prose; these are structured-only and potentially ambiguous, especially the nested filter group shape.
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 (Query) and resource (Google Search Console Search Analytics) and enumerates the returned metrics (clicks, impressions, CTR, average position). It is clearly distinct from the sibling tools (sites, sitemaps, URL inspection), though it does not explicitly say so.
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 only usage guidance is 'Use startRow for pagination', which is a parameter tip rather than a when-to-use statement. There is no indication of when this should be chosen over alternatives or what preconditions (e.g., verified property) apply.
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.
6 tool updates
v0.1.0- First observed
gsc_get_site - First observed
gsc_get_sitemap - First observed
gsc_inspect_url - First observed
gsc_list_sitemaps - First observed
gsc_list_sites - First observed
gsc_query_search_analytics
TDQS
Scored across 6 tools
Each tool targets a distinct resource and action: sites (list vs permission get), sitemaps (list vs detail get), URL inspection, and search analytics. The list/get pairs are clearly separated by their descriptions, and query_search_analytics and inspect_url have no overlap.
All tools use a uniform gsc_ prefix followed by a consistent verb_noun pattern (list_sites, inspect_url, get_site, query_search_analytics, list_sitemaps, get_sitemap). No style mixing.
Six tools is well-scoped for a Search Console read surface, covering properties, sitemaps, analytics, and URL inspection without redundancy. Each tool earns its place.
Core read operations (list/get sites, list/get sitemaps, analytics query, URL inspection) are covered. Notable gaps exist on the write side: no sitemap submission/deletion and no indexing request, which limits lifecycle coverage but is workable for a read-focused server.
Maintenance
Related MCP Connectors
Read-only Search Console analytics, URL inspection, indexing diagnostics, and sitemaps.
Read and edit GA4, Search Console and Google Tag Manager from any MCP client. 29 tools.
Read Search Console performance, keyword opportunities and annotations for your sites.
Hosted MCP server for GA4, Google Ads and Search Console. Google OAuth, nothing to install.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables interaction with Google Search Console via MCP, offering search analytics, performance summaries, URL inspection, sitemap management, and property listing for SEO workflows.159 npm1MIT
- AlicenseAqualityAmaintenanceConnects MCP clients to the Google Search Console API, enabling search analytics queries, URL inspection, sitemap management, and performance comparison across time periods.2035 PyPIMIT
- AlicenseAqualityAmaintenanceSecure MCP server for Google Search Console. Query search analytics (clicks, impressions, CTR, position), manage sitemaps, inspect URL indexing status, and manage site properties.10AGPL 3.0
- AlicenseBqualityBmaintenanceEnables Google Search Console data queries via MCP, including search analytics, performance comparisons, URL inspection, and sitemap management.121MIT