Skip to main content
Glama
io.scalably/gsc-mcp

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: searchconsole-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.

Inputs: urls (required), site_url (required), language_code, continue_on_error, +1 more. Returns: result

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.

Inputs: site_url (required), inspection_url (required), language_code. Returns: result

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}.

Inputs: site_url (required), feedpath, sitemap_index. Returns: result

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.

Inputs: no named parameters. Returns: result

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).

Inputs: end_date (required), site_url (required), start_date (required), filters, +8 more. Returns: result

Tool Schema Changelog

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

Loading tool schema changelog…

    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

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Provides read-only access to Google Search Console data, including search analytics, sitemap status, and URL inspection, for MCP clients like Claude.
      6 npm
      MIT
    • A
      license
      A
      quality
      D
      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
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables MCP clients to query Google Search Console search performance, inspect indexing, analyze sitemaps, and run SEO analyses such as cannibalisation detection, query clustering, and wins/losses, all with read-only access.
      20
      119 npm
      Apache 2.0
    • A
      license
      A
      quality
      B
      maintenance
      Enables read-only access to Google Search Console data, including property discovery, search analytics queries, and URL inspection, through a security-focused interface.
      3
      2,172 PyPI
      2
      MIT