Skip to main content
Glama
scalably-io

io.scalably/gsc-mcp

Official
by scalably-io

Google Search Console MCP

Read-only MCP server for Google Search Console. Five tools cover the read surface: properties, Search Analytics (filters, auto-pagination past the 25,000-row cap, hourly data), sitemaps, URL inspection, batch inspection with throttling. We run this server in production for every SEO client.

Install

Claude Code:

claude mcp add gsc -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json -- uvx scalably-gsc-mcp

Codex:

codex mcp add gsc --env GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json -- uvx scalably-gsc-mcp

Claude Desktop: download gsc-mcp.mcpb from the latest GitHub release and open it.

Related MCP server: gsc-mcp

Setup

  1. In Google Cloud, create or pick a project and enable the Google Search Console API on it (APIs and Services, Library).

  2. Create a service account in that project and download its JSON key.

  3. Add the service account's email as a user on each Search Console property you want to query (Settings, Users and permissions). Full or restricted permission both work for reading.

No OAuth consent screen is needed; the server authenticates as the service account with the webmasters.readonly scope.

Tools (5)

Tool

What it does

gsc_list_sites

List the Search Console properties the service account can read

gsc_query_search_analytics

Query Search Analytics with filters, auto-pagination and hourly data

gsc_list_sitemaps

List sitemaps for a property or read one sitemap

gsc_inspect_url

Inspect one URL's index status

gsc_batch_inspect_urls

Inspect many URLs with client-side throttling

Configuration

Variable

Required

Purpose

GOOGLE_APPLICATION_CREDENTIALS

yes

Path to a Google service-account JSON file with the Search Console read-only scope; share each property with the service account email

GSC_LOG_LEVEL

no

INFO (default) or DEBUG

GSC_RETRY_BASE_SECONDS

no

Base delay in seconds for the retry backoff on transient API errors (default 1)

GSC_WEBMASTERS_BASE, GSC_SEARCHCONSOLE_BASE

no

Override the two Google API base URLs (used by the test suite to point at a local fake; leave unset in normal use)

GSC_TEST_ACCESS_TOKEN

no

Test-suite only: a literal bearer token that bypasses the service account. Never set it in normal use

Reply shape

Every tool returns JSON with status (succeeded, partial, no_op), operation, summary, target, result, proof, warnings, recovery. Failures surface as a tool error whose text is <code>: <message> <hint>. A partial status with proof.nextStartRow means: continue from that row.

Limits

25,000 rows per Search Analytics call (the server auto-paginates past it up to max_rows). URL inspection: Google allows 600 per minute and 2,000 per day per property. The server paces batch inspection client-side (default 8 requests per second) and warns when a batch exceeds the daily quota; it does not track daily usage across calls, so keep your own count.

Verify

Each release lists the package version, the .mcpb sha256 and the production commit it was derived from in CHANGELOG.md. CI runs the tests and a clean install of the built wheel on every push.

Privacy Policy

This server runs locally, on your machine, under your own credentials. It collects no personal data, contains no telemetry, stores nothing persistently, and talks only to the vendor API it wraps. No third party, including Scalably, receives your data. Contact: hello@scalably.io. Canonical copy: https://scalably.io/connector-privacy.html

License

MIT. Copyright Scalably.

Available Tools

5 tools
gsc_batch_inspect_urlsA
Read-only

Inspect many URLs under a single Search Console property. Rate-limited.

Respects Google's 600 QPM / 2,000 QPD per-site limits. Default pace of 8 QPS stays well under 600/minute with headroom. For large jobs (>2000 URLs), split across days or across multiple verified properties (e.g. per-subdomain).

Args: urls: list of fully-qualified URLs under site_url. No dedup. site_url: the Search Console property. language_code: BCP-47, default "en-US". requests_per_second: pace. Max ~10 (600 QPM). Caller can lower on 429 pressure. continue_on_error: if True, collect per-URL errors instead of aborting.

Returns: { "results": [{"url": str, "inspection": {...flattened...}} | {"url": str, "error": str}], "count": total, "errors": N, "skipped": 0 }

Quota warning: This does NOT replace the Search Analytics API for bulk query analysis. If the intent is "which pages have most traffic", use gsc_query_search_analytics instead - 40,000 QPM per project vs 600/site here.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlsYes
site_urlYes
language_codeNoen-US
continue_on_errorNo
requests_per_secondNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and openWorldHint annotations, the description discloses concrete rate limits, the default 8 QPS pace, the ~10 QPS maximum, behavior under 429 pressure, and the lack of deduplication. It also clarifies continue_on_error behavior, making the tool's runtime behavior fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with an opening summary, rate-limit context, an Args section, a Returns section, and a quota warning. Every sentence adds operational value, and the most important scoping information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter rate-limited batch tool with no schema descriptions, the description covers invocation, parameter semantics, error handling, rate limits, return shape, and alternative routing. Nothing essential for an agent to call this tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description richly documents each parameter: fully-qualified URLs under site_url, the Search Console property, BCP-47 language_code, rate limit semantics for requests_per_second, and the conditional effect of continue_on_error. This fully compensates for the schema's lack of descriptive text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Inspect many URLs under a single Search Console property', stating a specific verb, resource, and batch scope. The batch nature clearly differentiates it from the sibling gsc_inspect_url, and the quota warning distinguishes it from gsc_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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when not to use this tool: it explicitly names gsc_query_search_analytics as the alternative for bulk traffic analysis. It also provides practical usage guidance for large jobs, including splitting across days or multiple verified properties, and mentions lowering requests_per_second when hitting 429 pressure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gsc_inspect_urlA
Read-only

Inspect a URL in the Google index. Flattened response.

Checks index status, coverage state, canonical URLs, crawl info, AMP status, and rich results. Does NOT trigger a live crawl - checks Google's current index snapshot only.

Args: inspection_url: fully-qualified URL to inspect (must be under the property). site_url: the Search Console property - "https://example.com/" or "sc-domain:example.com". language_code: IETF BCP-47, default "en-US".

Quota: 2,000 requests/day/site + 600 requests/minute/site. Requires the SA to be a Full user on the property (Restricted users get 403 here).

Returns a flat dict with top-level verdict, coverage_state, canonical info, plus optional amp and rich_results sub-objects. _raw has the full untouched payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
site_urlYes
language_codeNoen-US
inspection_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark readOnlyHint=true, but the description adds valuable behavioral context: no live crawl, quota limits (2,000/day/site + 600/min), and permission requirements. It also discloses the flattened response shape and the `_raw` field, going well beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections: one-line purpose, capability list, behavioral warning, args, quota/auth, and return shape. Information is front-loaded and every section carries necessary information; the only minor redundancy is 'Flattened response' appearing in both the first line and the returns section.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All essential invocation context is present: purpose, parameter semantics, quota, permissions, non-live-crawl behavior, and return structure. With an output schema also available, nothing critical is missing for an agent to call and interpret this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully documents each parameter: inspection_url must be fully-qualified and under the property, site_url formats are given ('https://example.com/' or 'sc-domain:example.com'), and language_code is described as IETF BCP-47 with default 'en-US'. This completely compensates for the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Inspect a URL in the Google index,' and enumerates the concrete checks (index status, coverage, canonical, crawl info, AMP, rich results). The description is unambiguous about what the tool does, though it does not explicitly compare itself to the sibling gsc_batch_inspect_urls, so its sibling differentiation is implied 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear use context: it operates on Google's current index snapshot and explicitly warns it does not trigger a live crawl, which helps an agent decide when a live fetch tool would be needed. It also gives auth prerequisites (Full user, Restricted users get 403) and quota numbers. However, it does not explicitly state when to choose this single-URL tool over gsc_batch_inspect_urls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gsc_list_sitemapsA
Read-only

List sitemaps on a site - or fetch one sitemap by feedpath.

Args: site_url: the Search Console property. sitemap_index: optional - if set, list only the children of a sitemap-index URL (e.g. "https://example.com/sitemap_index.xml"). feedpath: optional - if set, returns the single sitemap entry at that URL instead of the list (absorbs the prior get_sitemap tool).

Returns: {"sitemaps": [...], "count": N} or {"sitemap": {...}} if feedpath given. Each entry: {path, lastSubmitted, lastDownloaded, isPending, isSitemapsIndex, type, warnings, errors, contents}.

ParametersJSON Schema
NameRequiredDescriptionDefault
feedpathNo
site_urlYes
sitemap_indexNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnly and openWorld, and the description adds meaningful behavior: feedpath changes the response shape from a list to a single object, sitemap_index filters results, and each entry's fields are disclosed. This goes well beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized with a front-loaded summary, bullet-style parameter explanations, and a concise return contract. No sentence is wasted and every clause adds operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter tool with two optional modes, the description covers all behaviors, return types, and entry fields. Combined with the output schema and read-only annotations, an agent has everything needed to select and invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully defines each parameter: site_url as the Search Console property, sitemap_index as the sitemap-index URL whose children are listed, and feedpath as the exact sitemap URL to fetch. This fully compensates for the schema's lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action and resource: 'List sitemaps on a site' or 'fetch one sitemap by feedpath.' This clearly differentiates it from sibling tools like gsc_list_sites, which lists sites, and query tools, by anchoring on sitemap operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear mode-based guidance: use sitemap_index to list children of an index, use feedpath to fetch a single sitemap, and omit both for the full list. It also notes that this tool absorbs the prior get_sitemap tool. It does not explicitly enumerate sibling alternatives, but the usage context is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gsc_list_sitesA
Read-only

List every verified Search Console property accessible to this service account.

Returns: {"sites": [{siteUrl, permissionLevel}, ...], "count": N}. permissionLevel: siteOwner | siteFullUser | siteRestrictedUser | siteUnverifiedUser.

Call this first. URL Inspection requires siteFullUser or siteOwner; restricted users cannot inspect.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes safety, and the description adds useful context by showing the return shape, permissionLevel values, and the requirement that URL Inspection needs siteFullUser or siteOwner. It does not cover edge cases like empty results or errors, but for a read-only listing tool the disclosed behavior is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose, return format, permissionLevel enum, and usage ordering are each conveyed in a few short sentences. Every sentence adds information and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool, the description is complete. It explains what is returned, what the permissionLevel values mean, and how this tool relates to the follow-up URL Inspection workflow. The presence of the output schema further reduces the need to document return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to clarify. The baseline of 4 applies because the schema is already complete and the description correctly focuses on the output rather than parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List every verified Search Console property accessible to this service account.' This clearly distinguishes gsc_list_sites from siblings like gsc_list_sitemaps, which list a different resource type. The scope is also explicit: accessible properties for the service account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit ordering guidance with 'Call this first' and explains why permission levels matter for URL Inspection. It does not explicitly mention when not to use this tool or name an alternative, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

gsc_query_search_analyticsA
Read-only

Query Search Console traffic data - clicks, impressions, CTR, position.

THE workhorse tool. Supports all six dimensions (incl. HOUR, April 2025), all six search types, full filter compose, pagination, and auto-pagination.

Args: site_url: "https://example.com/" (URL-prefix) or "sc-domain:example.com" (domain). start_date / end_date: YYYY-MM-DD (Pacific Time). 16-month retention hard cap. dimensions: list of {date, query, page, country, device, searchAppearance, HOUR}. HOUR requires data_state='hourly_all'. searchAppearance cannot be combined with other dimensions in one query - query it alone and join client-side. search_type: web (default) | image | video | news | discover | googleNews. filters: flat list [{dimension, operator, expression}]. Operators: equals, contains, notEquals, notContains, includingRegex, excludingRegex. filter_groups: advanced - pass raw dimensionFilterGroups if you need OR logic. Mutually exclusive with filters. aggregation_type: auto (default) | byPage | byProperty | byNewsShowcasePanel. data_state: final (default, ~2-3d lag) | all (fresh, includes unfinalized) | hourly_all (~10d history with HOUR dimension). row_limit: per-call cap, 1–25000 (API hard cap). start_row: 0-based offset for single-page paging. max_rows: if set (up to 1M), auto-paginate until exhausted or max_rows hit.

Response: {rows, row_count, response_aggregation_type, first_incomplete_date?, first_incomplete_hour?, metadata}. Use first_incomplete_date to distinguish 'data still cooking' from 'data is final' when data_state != 'final'.

Gotchas:

  • 16-month retention. start_date older than 16 months returns empty.

  • Anonymized queries (fewer than ~a dozen users over 2-3 months) drop from the 'query' dimension but count in totals - page-level data is more complete.

  • Aggregation shift: with a page filter, totals aggregate byPage (inflates clicks vs property-level). Set aggregation_type explicitly when comparing.

  • searchAppearance cannot co-exist with other dimensions (API 400).

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersNo
end_dateYes
max_rowsNo
site_urlYes
row_limitNo
start_rowNo
data_stateNo
dimensionsNo
start_dateYes
search_typeNo
filter_groupsNo
aggregation_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the readOnlyHint and openWorldHint annotations by disclosing behavioral gotchas: 16-month retention limits, anonymized queries dropping from the query dimension, aggregation shifts under page filters, and searchAppearance incompatibility with other dimensions. It also explains data_state semantics, response fields like first_incomplete_date, and auto-pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but it has 12 parameters and no schema-level descriptions, so the length is justified. It is well-structured with Args and Gotchas sections, front-loads the core purpose, and every line adds operational value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the high parameter count and zero schema coverage, the description covers required params, optional behaviors, mutual exclusions, hard limits, response shape, and real-world pitfalls. The presence of an output schema means return-value details do not need repeating, and nothing essential is left missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must carry the full burden of parameter semantics, and it does. It documents all parameters with concrete details: date format and timezone, HOUR requiring data_state='hourly_all', search_type values, filter operator list, filter_groups OR logic, aggregation_type options, row_limit cap, start_row offset, and max_rows auto-pagination behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Query Search Console traffic data - clicks, impressions, CTR, position.' This unambiguously states the tool's function and output metrics. The name and description clearly separate it from sibling tools like gsc_list_sites and gsc_inspect_url.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description positions this as 'THE workhorse tool' and enumerates supported dimensions, search types, filters, and pagination, making it clear this is the default tool for Search Console analytics queries. It does not explicitly name alternatives or state when not to use it, but the sibling tools are sufficiently different that the intended usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.1
    • First observedgsc_batch_inspect_urls
    • First observedgsc_inspect_url
    • First observedgsc_list_sitemaps
    • First observedgsc_list_sites
    • First observedgsc_query_search_analytics

TDQS

A4.6/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct GSC resource: site discovery, search analytics, sitemaps, and URL inspection. The single and batch inspect tools are clearly separated by scope, and descriptions make the boundaries easy to identify.

Naming Consistency4/5

All tools share the gsc_ prefix and snake_case convention, with clear verbs like list, query, and inspect. The one slight deviation is batch_inspect_urls, which combines an adverb with the verb, but the pattern remains predictable and readable.

Tool Count5/5

Five tools is a well-scoped size for a Google Search Console server focused on reading data and inspecting URLs. Each tool serves a meaningful workflow, and the set is neither bloated nor too thin.

Completeness4/5

Core GSC workflows are covered: enumerating sites, querying search analytics, reading sitemaps, and inspecting URLs individually or in bulk. Sitemap submission/deletion and site management are absent, but these are minor gaps for a read-oriented analytics server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides read-only access to Google Search Console data, allowing AI assistants to query site performance metrics like keywords, clicks, and rankings using natural language. It supports listing verified properties, querying search analytics with dimension filters, and retrieving sitemap information.
    3
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides read-only access to Google Search Console data, including search analytics, sitemap status, and URL inspection, for MCP clients like Claude.
    18
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables automation of Google Search Console tasks, including retrieving search analytics, managing sitemaps and site properties, and inspecting URLs for index status and crawl information.
    9
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only access to Google Analytics 4 and Google Search Console data, allowing users to run reports, query search analytics, and generate combined snapshots for reporting.
    -