gsc-mcp
Allows querying Google Search Console data, including search analytics, URL inspection, sitemap status, and performance comparisons.
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., "@gsc-mcp Compare search performance for the last month vs the month before"
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 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 authThen paste:
{
"mcpServers": {
"google-search-console": {
"command": "npx",
"args": ["-y", "gsc-mcp-ready"]
}
}
}
gsc-mcp-readyis 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 authThe 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.jsonService-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 |
| List accessible Search Console properties |
| Get one property’s permission level |
| Query clicks, impressions, CTR, and position |
| Convenience queries grouped by page, query, country, device, or appearance |
| Compact top-performance views |
| Compare equal or explicit date ranges |
| Find high-impression, low-CTR queries/pages |
| Inspect Google's indexed version of a URL |
| Bounded-concurrency URL inspection with partial failures |
| List submitted sitemaps |
| Get one sitemap’s status |
| 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 checkMCP 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 logoutGenerate a config snippet:
gsc-mcp config
gsc-mcp config --credentials /absolute/path/service-account.jsonTypeScript 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 3000HTTP 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
0600No 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 |
| Service-account JSON path |
| Standard Google credential path fallback |
| Raw/base64 service-account JSON for secret injection |
| Override saved OAuth token location |
| Override application configuration directory |
| Enable Application Default Credentials fallback |
|
|
| HTTP bind settings |
| Required bearer token for non-loopback HTTP |
| Google API timeout, default 30000 |
| Transient retry count, default 3 |
|
|
| Rows included in model-facing text, default 50 |
| Set |
Documentation
License
MIT
Available Tools
20 toolsgsc_bulk_inspect_urlsARead-onlyIdempotent
Inspect multiple URLs with bounded concurrency. Partial failures are returned per URL.
Inputs: siteUrl (required), inspectionUrls (required), concurrency, languageCode.
gsc_compare_periodsBRead-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_cannibalizationARead-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_decayCRead-onlyIdempotent
Find pages with declining clicks and impressions between two periods.
Inputs: siteUrl (required), currentEndDate (required), currentStartDate (required), type, +5 more.
gsc_diagnose_traffic_dropARead-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_opportunitiesARead-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_siteARead-onlyIdempotent
Get access level details for one Search Console property.
Inputs: siteUrl (required).
gsc_get_sitemapARead-onlyIdempotent
Get details for one submitted sitemap.
Inputs: siteUrl (required), feedpath (required).
gsc_inspect_urlARead-onlyIdempotent
Inspect Google's indexed version of a URL. This is not a live URL test.
Inputs: siteUrl (required), inspectionUrl (required), languageCode.
gsc_list_sitemapsBRead-onlyIdempotent
List sitemaps submitted for a Search Console property.
Inputs: siteUrl (required), sitemapIndex.
gsc_list_sitesARead-onlyIdempotent
List Search Console properties available to the authenticated Google account.
Inputs: no named parameters.
gsc_query_countriesARead-onlyIdempotent
Query Search Analytics grouped by country.
Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.
gsc_query_devicesCRead-onlyIdempotent
Query Search Analytics grouped by device.
Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.
gsc_query_pagesBRead-onlyIdempotent
Query Search Analytics grouped by page.
Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.
gsc_query_queriesBRead-onlyIdempotent
Query Search Analytics grouped by search query.
Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.
gsc_query_search_appearanceBRead-onlyIdempotent
Query Search Analytics grouped by search appearance.
Inputs: endDate (required), siteUrl (required), startDate (required), type, +5 more.
gsc_search_analyticsBRead-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_infoARead-onlyIdempotent
Return local server version, authentication guidance, and safety information without calling Google.
Inputs: no named parameters.
gsc_top_pagesBRead-onlyIdempotent
Return the highest-clicked pages for a date range.
Inputs: endDate (required), siteUrl (required), startDate (required), type, +6 more.
gsc_top_queriesBRead-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
Scored across 20 tools
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.
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.
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.
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
Google Search Console, GA4 and PageSpeed MCP server for Claude, ChatGPT and Cursor. Free, hosted.
Read-only Google Search Console MCP server for AI assistants.
Free Google Search Console MCP: your real GSC, Google Analytics and keyword data for AI agents.
Remote MCP server that gives Claude, ChatGPT, Cursor or any MCP client Google search volume, CPC, competition and similar keywords for 50+ countries. Works with no signup at 20 lookups a day; sign in with OAuth or an API key for higher limits, or $4.99 a month for unlimited.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for querying Google Search Console data — search analytics, URL inspection, sitemap monitoring, and more — read-only tools for any MCP-compatible AI client.739 PyPIApache 2.0
- AlicenseNot gradedqualityCmaintenanceSelf-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.1MIT
- AlicenseBqualityDmaintenanceProfessional 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.4013 npm6MIT
- AlicenseNot gradedqualityDmaintenanceMCP 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 npmMIT