Skip to main content
Glama
gsc-mcp

gsc-mcp

by uzzii-21

Google Search Console MCP

A production-oriented, read-only Google Search Console MCP server and TypeScript SDK for Claude, Cursor, VS Code, and other MCP clients. Query real Search Console data, inspect indexed URLs, review sitemaps, compare periods, and surface transparent SEO opportunities without handing private data to a third-party SaaS.

The package is currently named gsc-mcp-ready; npm availability was checked during development. This repository is not yet claiming public publication, adoption, or eligibility metrics.

npx -y gsc-mcp-ready auth

Then paste:

{
  "mcpServers": {
    "google-search-console": {
      "command": "npx",
      "args": ["-y", "gsc-mcp-ready"]
    }
  }
}

gsc-mcp-ready is the starter package name. Replace it with your final npm package name before publishing.

Authentication choices

Browser login — best end-user DX

When the npm publisher bundles a verified Google Desktop OAuth client into the release:

npx -y gsc-mcp-ready auth

The browser opens, the user approves read-only Search Console access, and the package securely stores a refresh token in the OS configuration directory.

A source clone without bundled OAuth values uses:

npm install
npm run build
node dist/cli.js auth --client /absolute/path/oauth-client.json

Service-account JSON — best for servers and CI

{
  "mcpServers": {
    "google-search-console": {
      "command": "npx",
      "args": ["-y", "gsc-mcp-ready"],
      "env": {
        "GSC_CREDENTIALS_PATH": "/absolute/path/service-account.json"
      }
    }
  }
}

The service-account email must be added to the Search Console property.

Related MCP server: gsc-mcp-connector

Tools

Tool

Purpose

gsc_list_sites

List accessible Search Console properties

gsc_get_site

Get one property’s permission level

gsc_search_analytics

Query clicks, impressions, CTR, and position

gsc_query_*

Convenience queries grouped by page, query, country, device, or appearance

gsc_top_pages / gsc_top_queries

Compact top-performance views

gsc_compare_periods

Compare equal or explicit date ranges

gsc_find_opportunities

Find high-impression, low-CTR queries/pages

gsc_inspect_url

Inspect Google's indexed version of a URL

gsc_bulk_inspect_urls

Bounded-concurrency URL inspection with partial failures

gsc_list_sitemaps

List submitted sitemaps

gsc_get_sitemap

Get one sitemap’s status

gsc_server_info

Show local server metadata and safety settings

Search Analytics supports dimensions query, page, country, device, date, hour, and searchAppearance; filters; result types; aggregation; finalized or fresh data; and safe pagination. Google documents that Search Analytics returns top rows and does not guarantee every underlying row; the result explicitly reports this limitation.

Clone workflow

git clone https://github.com/your-org/gsc-mcp.git
cd gsc-mcp
npm install
npm run check

MCP configuration for a clone:

{
  "mcpServers": {
    "google-search-console-local": {
      "command": "node",
      "args": ["/absolute/path/gsc-mcp/dist/cli.js"]
    }
  }
}

CLI

gsc-mcp auth [--client oauth-client.json] [--no-open]
gsc-mcp serve [--transport stdio|http]
gsc-mcp doctor [--credentials service-account.json]
gsc-mcp sites [--credentials service-account.json]
gsc-mcp config [--credentials /absolute/path/service-account.json]
gsc-mcp logout

Generate a config snippet:

gsc-mcp config
gsc-mcp config --credentials /absolute/path/service-account.json

TypeScript library

import { GscClient, resolveGoogleAuth } from 'gsc-mcp-ready';

const resolved = await resolveGoogleAuth({
  credentialsPath: '/absolute/path/service-account.json'
});

const gsc = new GscClient({ auth: resolved.auth });
const sites = await gsc.listSites();
const analytics = await gsc.searchAnalytics({
  siteUrl: 'sc-domain:example.com',
  startDate: '2026-07-01',
  endDate: '2026-07-31',
  dimensions: ['query'],
  maxRows: 1000
});

console.log({ sites, analytics });

HTTP/cloud mode

GSC_CREDENTIALS_PATH=/run/secrets/gsc.json \
GSC_HTTP_AUTH_TOKEN='replace-with-a-long-random-secret' \
gsc-mcp serve --transport http --host 0.0.0.0 --port 3000

HTTP endpoint: http://host:3000/mcp. Health check: /healthz. Non-loopback HTTP binding is refused without a bearer token.

Production safeguards

  • Read-only Google OAuth scope

  • OS-specific token storage with POSIX mode 0600

  • No stdout logging in stdio mode

  • Retry with exponential backoff for rate limits and transient server failures

  • Request timeout controls

  • Strict argument validation

  • URL-to-property validation before URL Inspection calls

  • Bearer protection for remote HTTP

  • Credential redaction in logs and errors

  • Dependency updates and Node 20/22 CI

Configuration

Variable

Meaning

GSC_CREDENTIALS_PATH

Service-account JSON path

GOOGLE_APPLICATION_CREDENTIALS

Standard Google credential path fallback

GSC_CREDENTIALS_JSON

Raw/base64 service-account JSON for secret injection

GSC_TOKEN_PATH

Override saved OAuth token location

GSC_CONFIG_DIR

Override application configuration directory

GSC_USE_ADC

Enable Application Default Credentials fallback

GSC_MCP_TRANSPORT

stdio or http

GSC_MCP_HOST / GSC_MCP_PORT

HTTP bind settings

GSC_HTTP_AUTH_TOKEN

Required bearer token for non-loopback HTTP

GSC_REQUEST_TIMEOUT_MS

Google API timeout, default 30000

GSC_MAX_RETRIES

Transient retry count, default 3

GSC_LOG_LEVEL

debug, info, warn, error, or silent

GSC_TEXT_PREVIEW_ROWS

Rows included in model-facing text, default 50

GSC_EXPOSE_ERROR_DETAILS

Set 1 only for controlled debugging

Documentation

License

MIT

Available Tools

20 tools
gsc_bulk_inspect_urlsA
Read-onlyIdempotent

Inspect multiple URLs with bounded concurrency. Partial failures are returned per URL.

Inputs: siteUrl (required), inspectionUrls (required), concurrency, languageCode.

gsc_compare_periodsB
Read-onlyIdempotent

Compare a date range with an explicit previous range or the immediately preceding equal-length period.

Inputs: siteUrl (required), currentEndDate (required), currentStartDate (required), type, +7 more.

gsc_detect_cannibalizationA
Read-onlyIdempotent

Find queries receiving impressions or clicks from multiple pages in the same period; this is a review signal, not proof of cannibalization.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +7 more.

gsc_detect_content_decayC
Read-onlyIdempotent

Find pages with declining clicks and impressions between two periods.

Inputs: siteUrl (required), currentEndDate (required), currentStartDate (required), type, +5 more.

gsc_diagnose_traffic_dropA
Read-onlyIdempotent

Find pages, queries, countries, and devices with the largest period-over-period traffic declines. Results are evidence, not causal attribution.

Inputs: siteUrl (required), currentEndDate (required), currentStartDate (required), type, +4 more.

gsc_find_opportunitiesA
Read-onlyIdempotent

Find high-impression, low-CTR queries or pages within a ranking-position range.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +8 more.

gsc_get_siteA
Read-onlyIdempotent

Get access level details for one Search Console property.

Inputs: siteUrl (required).

gsc_get_sitemapA
Read-onlyIdempotent

Get details for one submitted sitemap.

Inputs: siteUrl (required), feedpath (required).

gsc_inspect_urlA
Read-onlyIdempotent

Inspect Google's indexed version of a URL. This is not a live URL test.

Inputs: siteUrl (required), inspectionUrl (required), languageCode.

gsc_list_sitemapsB
Read-onlyIdempotent

List sitemaps submitted for a Search Console property.

Inputs: siteUrl (required), sitemapIndex.

gsc_list_sitesA
Read-onlyIdempotent

List Search Console properties available to the authenticated Google account.

Inputs: no named parameters.

gsc_query_countriesA
Read-onlyIdempotent

Query Search Analytics grouped by country.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.

gsc_query_devicesC
Read-onlyIdempotent

Query Search Analytics grouped by device.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.

gsc_query_pagesB
Read-onlyIdempotent

Query Search Analytics grouped by page.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.

gsc_query_queriesB
Read-onlyIdempotent

Query Search Analytics grouped by search query.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.

gsc_query_search_appearanceB
Read-onlyIdempotent

Query Search Analytics grouped by search appearance.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.

gsc_search_analyticsB
Read-onlyIdempotent

Query clicks, impressions, CTR, and average position with optional dimensions and filters.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.

gsc_server_infoA
Read-onlyIdempotent

Return local server version, authentication guidance, and safety information without calling Google.

Inputs: no named parameters.

gsc_top_pagesB
Read-onlyIdempotent

Return the highest-clicked pages for a date range.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +6 more.

gsc_top_queriesB
Read-onlyIdempotent

Return the highest-clicked search queries for a date range.

Inputs: endDate (required), siteUrl (required), startDate (required), type, +6 more.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 20 tools

    Disambiguation2/5

    The set includes five specialized query tools (gsc_query_pages, gsc_query_queries, etc.) that all overlap with the generic gsc_search_analytics tool, which supports arbitrary dimensions and filters. Additionally, gsc_top_pages and gsc_top_queries are essentially sorted queries that could also be expressed via gsc_search_analytics. This creates significant ambiguity in tool selection.

    Naming Consistency4/5

    Most tools follow a `gsc_verb_noun` snake_case pattern (e.g., list_sites, query_pages, inspect_url). However, `gsc_search_analytics` and `gsc_server_info` deviate from the verb-first convention, and there is minor mixing of verb styles (query vs list vs diagnose). Overall, the pattern is still recognizable and consistent enough.

    Tool Count3/5

    At 20 tools, the set is on the heavy side but not excessive for a Google Search Console integration covering analytics, sitemaps, sites, and URL inspection. The redundancy among query-related tools makes the count feel somewhat inflated; trimming a few would tighten the surface.

    Completeness4/5

    The server covers core Search Console workflows: analytics querying with multiple dimensions and comparisons, sitemap listing/detail, site listing/detail, URL inspection, and common SEO analyses. Gaps exist around sitemap submission/removal and site verification, but these are secondary for an analytics-focused tool.

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      MCP server for querying Google Search Console data — search analytics, URL inspection, sitemap monitoring, and more — read-only tools for any MCP-compatible AI client.
      7
      39 PyPI
      Apache 2.0
    • A
      license
      Not graded
      quality
      C
      maintenance
      Self-hosted MCP server that exposes Google Search Console tools (list sites, query analytics, inspect URL, list sitemaps) via natural language to AI assistants like ChatGPT and Claude.
      1
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Professional Google Search Console MCP server providing 40+ SEO tools for performance analysis, content decay, CTR opportunities, and more, enabling real search data in clients like Cursor and Claude.
      40
      13 npm
      6
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that exposes the Google Search Console API, allowing LLMs to query SEO data, inspect URLs, manage sitemaps, and analyze search performance via natural language.
      71 npm
      MIT