flin-google-search-console-mcp
A read-only Google Search Console MCP server for checking setup and querying Search Console performance and URL indexing data.
Check local configuration, server version, auth status, and next steps without calling Google (
connection_status,health_check)List accessible Search Console properties and trigger Google sign-in/token refresh when needed (
list_sites)Get aggregate clicks, impressions, CTR, and position for a property over a date range (
get_site_summary)Run custom Search Analytics queries with dimensions, filters, search type, aggregation, row limits, and pagination (
query_performance)Retrieve top search queries and top pages (
get_top_queries,get_top_pages)Get single-dimension performance breakdowns (
get_dimension_breakdown)Inspect a URL's indexed status and canonical/indexability details without requesting indexing (
inspect_url)Select between multiple configured Google accounts per tool call using
accountRead data only; it does not modify properties or request indexing
Provides tools to interact with Google Search Console, enabling retrieval of search analytics data, site summaries, top queries, top pages, dimension breakdowns, and URL inspections for verified properties.
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., "@flin-google-search-console-mcp Show me the search analytics for my site in the last 28 days"
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.
flin Google Search Console MCP
In Claude Desktop starten — Mac mit Apple Silicon (M1 oder neuer)
Desktop-Paket herunterladen und in Claude Desktop unter Einstellungen → Erweiterungen → Erweiterung installieren importieren.
Google OAuth Client ID und Google OAuth Client Secret aus dem Passwortmanager bzw. vom zuständigen Administrator eintragen. Optional: die freigegebene Standard-Property. Die Werte gehören zu einem Google-OAuth-Client vom Typ Desktop-App; die Search Console API muss aktiviert sein.
In Claude: „Führe connection_status aus.“ Das prüft die lokale Einrichtung, öffnet keinen Browser und ruft Google nicht auf. Bei
incompletezuerst die Einstellungen vervollständigen.Danach ausdrücklich: „Führe list_sites aus und prüfe, ob meine freigegebene Property angezeigt wird.“ Bei Bedarf Google-Anmeldung im Browser abschliessen. Nur ein erfolgreicher Google-Aufruf bestätigt den Zugriff; ein vorhandenes Token genügt dafür nicht.
Für den konkreten Datentest: „Zeige mit get_site_summary die Klicks und Impressionen meiner ausgewählten Property für die letzte abgeschlossene Woche.“ Verwende die Property exakt aus
list_sites. Ergebnisse können vertrauliche Daten enthalten.
Windows und Intel-Macs bleiben unterstützt; Linux kann den Python-Server direkt nutzen. Ein automatisierter Paketstart auf Apple Silicon ersetzt keinen echten Kundenkontotest in der Claude-Oberfläche.
Related MCP server: google-search-console-mcp-python
Updates und Verbindungsstatus
Erweiterungsversion: Version des importierten Starters in Claude.
Serverversion:
connection_status.server_versionbzw.health_check.server_version.Der aktuelle Starter übernimmt bei Neustart stabile PyPI-Updates innerhalb
>=0.1.8,<0.2mit Python 3.12. Vorabversionen und 0.2/1.x sind ausgeschlossen. Laufende Sitzungen, OAuth-Einstellungen und gespeicherte Tokens bleiben erhalten.Einmaliger Import des aktuellen Pakets ist für ältere Starter nötig, damit die Versionsgrenze und das neue Tool-Verzeichnis gelten. Normale kompatible Server-Updates brauchen danach keinen Paketimport. Änderungen am Starter, an Eingabefeldern oder der Python-Anforderung können einen neuen Import verlangen.
Start benötigt normalerweise Internet. Bei Startproblemen: Verbindung prüfen und Claude neu starten; den Cache nicht löschen. Der dokumentierte manuelle Cache-Fallback ist nur für bereits geladene Pakete verfügbar. Google-Abfragen benötigen weiterhin Internet.
connection_status liefert nur server_version, configuration_status,
auth_status, live_access und next_step. Gespeicherte gültige oder erneuerbare
Tokens ergeben auth_status=unknown, solange Google nicht geprüft wurde.
live_access bleibt bei diesem rein lokalen Tool immer not_checked; list_sites
ist ein separater Live-Test und ändert diese lokale Statusaussage nicht.
Das bestehende health_check und seine Felder bleiben erhalten.
Datenumfang und Rechte
Der Server liest Daten; er ändert keine Properties und beantragt keine Indexierung. Performance-Leserechte genügen für Performance-Abfragen; für den vollständigen Funktionsumfang einen Full User verwenden. Eine pauschale Owner-Pflicht besteht nicht. API-Aktivierung und Zugriff auf die konkrete Property sind getrennte Voraussetzungen. Google-Rollen
Search Analytics liefert Top-Zeilen, keinen garantierten Voll-Export. Pro
Anfrage sind maximal 25'000 Zeilen möglich (Standard 1'000); start_row ermöglicht
weitere Seiten, hebt Googles interne Grenzen aber nicht auf. Google nennt maximal
50'000 Zeilen pro Tag, Property und Suchtyp. Anonymisierte Suchanfragen fehlen in
Query-Zeilen; Zeilensummen können deshalb von Gesamtsummen abweichen. Fehlende
Zeilen sind kein Nachweis für null Suchanfragen.
API-Grenzen ·
Datenauslassungen
URL Inspection zeigt den Stand im Google-Index, keinen Live-Crawl der Website. Google API
Datenschutz · Sicherheit · Support · Claude Code Plugin · Versionierte Downloads
Administrator and developer setup
If your goal is simply "make this work in Claude Desktop", follow these steps in order.
1) Make sure the Google account has Search Console access
The Google account you use during login must already have access to at least one Search Console property.
The signed-in account needs access to the selected Search Console property.
Full-user access is sufficient for the full read-only feature set; owner status
is not required. Restricted users can view Performance data and have limited
URL Inspection rights. Google Cloud API enablement does not grant property access.
See Google's permissions table.
The OAuth client must be a Desktop app with the Search Console API enabled;
the server requests only webmasters.readonly.
2) Create or choose a Google Cloud project
In Google Cloud:
Create a new project or select an existing one.
Enable the Google Search Console API for that project.
Official references:
3) Configure the OAuth consent screen
In Google Cloud, configure the OAuth consent screen for the same project.
For most personal or team setups:
choose
Externalkeep the app in
Testingwhile you validate the integrationadd your own Google account as a test user
Important:
If the app is
Externaland still inTesting, users must be listed as test usersGoogle documents that test-user authorizations in testing mode can expire after 7 days
This MCP only requests one read-only scope:
https://www.googleapis.com/auth/webmasters.readonly
Official references:
4) Create OAuth credentials of type Desktop app
Create an OAuth client in the same Google Cloud project:
Go to Credentials
Click Create client
Choose Desktop app
Copy the generated:
client ID
client secret
You do not need to manually wire redirect URIs into Claude Desktop for this MCP. The desktop OAuth flow uses a local loopback callback handled by the running MCP process.
5) Add the MCP to Claude Desktop
Recommended: desktop extension
Download flin-google-search-console-mcp-<version>.mcpb from the
GitHub releases
and open it in a current Claude Desktop version with MCPB UV runtime support.
Alternatively, use Install Extension in the desktop extension settings.
Enter the Google OAuth client ID and client secret from step 4 and, optionally,
a default property such as sc-domain:example.com. The secret field is marked
sensitive. Continue with the login instructions below. Manual JSON editing is
not required; the Google Cloud setup in steps 1–4 is still required.
The extension runs locally on macOS and Windows. From installer 0.1.8, it checks PyPI for the newest stable compatible 0.1-series server release every time the server starts. Restart Claude Desktop to apply a published server update; no new installer is needed for ordinary server releases. Running conversations are not hot-updated. Python 3.12 and server packages are managed by uv. Startup requires internet access; the installer contains no credentials or saved tokens.
Already installed 0.1.7 or earlier? Import the current bundle once to apply the compatibility limit
and updated extension metadata. Keep the same OAuth settings; tokens remain outside the extension.
The extension's displayed version describes the launcher. health_check returns
server_version, the actual running PyPI version.
Changes to Claude's extension settings, permissions, launcher or required Python
version may still require a new bundle. Claude does not auto-update privately
shared manifests from GitHub. A package that drops Python 3.12 support cannot be
used by this launcher; uv selects the latest stable version within >=0.1.8,<0.2.
Alternative: manual configuration
The existing PyPI installation remains available. Its minimum configuration is:
{
"mcpServers": {
"flin-google-search-console-mcp": {
"command": "uvx",
"args": ["--refresh-package", "flin-google-search-console-mcp", "--prerelease", "disallow", "flin-google-search-console-mcp>=0.1.8,<0.2"],
"env": {
"GOOGLE_CLIENT_ID": "your_oauth_client_id",
"GOOGLE_CLIENT_SECRET": "your_oauth_client_secret"
}
}
}
}If you want a default property so you do not have to pass site_url every time:
{
"mcpServers": {
"flin-google-search-console-mcp": {
"command": "uvx",
"args": ["--refresh-package", "flin-google-search-console-mcp", "--prerelease", "disallow", "flin-google-search-console-mcp>=0.1.8,<0.2"],
"env": {
"GOOGLE_CLIENT_ID": "your_oauth_client_id",
"GOOGLE_CLIENT_SECRET": "your_oauth_client_secret",
"GOOGLE_SEARCH_CONSOLE_SITE_URL": "sc-domain:example.com"
}
}
}
}For local development from a checkout:
{
"mcpServers": {
"flin-google-search-console-mcp-local": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/flin-google-search-console-mcp",
"flin-google-search-console-mcp"
],
"env": {
"GOOGLE_CLIENT_ID": "your_oauth_client_id",
"GOOGLE_CLIENT_SECRET": "your_oauth_client_secret"
}
}
}
}Replace /absolute/path/to/flin-google-search-console-mcp with your local checkout path.
6) Restart Claude Desktop
After saving the MCP configuration, fully restart Claude Desktop so it reloads the local server definition.
7) Complete the first login inside Claude
Start with these prompts:
Run health_check for the Google Search Console MCP and show the full result.List my Search Console sites.On the first authenticated tool call, the MCP opens a browser window. Sign in with the Google account that has Search Console access and approve the request.
After that:
the token is stored locally
future access tokens refresh automatically
you do not need to paste a refresh token into Claude Desktop config
What the MCP stores locally
The MCP stores a local token JSON file after the first successful login.
New token directories are created with private permissions. Existing directories keep their permissions; on macOS and Linux, they must belong to the current user and must not be writable by other users. Token files are written with owner-only access.
Default locations:
macOS:
~/Library/Application Support/flin-google-search-console-mcp/token.jsonLinux:
~/.config/flin-google-search-console-mcp/token.jsonWindows:
%APPDATA%\flin-google-search-console-mcp\token.json
If you want to override the location:
{
"mcpServers": {
"flin-google-search-console-mcp": {
"command": "uvx",
"args": ["--refresh-package", "flin-google-search-console-mcp", "--prerelease", "disallow", "flin-google-search-console-mcp>=0.1.8,<0.2"],
"env": {
"GOOGLE_CLIENT_ID": "your_oauth_client_id",
"GOOGLE_CLIENT_SECRET": "your_oauth_client_secret",
"GOOGLE_SEARCH_CONSOLE_TOKEN_PATH": "/absolute/path/to/flin-google-search-console-mcp-token.json"
}
}
}
}Multiple Google accounts
You can connect multiple Google accounts and choose the account per tool call.
By default, named account tokens are stored next to the default token. To choose a dedicated token directory, set GOOGLE_SEARCH_CONSOLE_TOKEN_DIR:
{
"mcpServers": {
"flin-google-search-console-mcp": {
"command": "uvx",
"args": ["--refresh-package", "flin-google-search-console-mcp", "--prerelease", "disallow", "flin-google-search-console-mcp>=0.1.8,<0.2"],
"env": {
"GOOGLE_CLIENT_ID": "your_oauth_client_id",
"GOOGLE_CLIENT_SECRET": "your_oauth_client_secret",
"GOOGLE_SEARCH_CONSOLE_TOKEN_DIR": "/absolute/path/to/search-console-tokens"
}
}
}
}Then pass account in tool calls:
{
"tool": "list_sites",
"args": {
"account": "work"
}
}The first call for a new account opens the OAuth browser flow and stores a separate token, for example work.json. Account names may contain only letters, numbers, _, -, and ..
An account name must not resolve to the default token file, including case variants
or filesystem aliases. With the default storage layout, token is reserved. Omit
account to use the default account. Existing named account files remain supported.
First Prompts To Verify Everything Works
Use these in Claude Desktop after the server is configured.
Health check
Run health_check for the Google Search Console MCP and show the full result.Confirm available properties
List my Search Console sites and tell me whether sc-domain:example.com is available.Quick summary
Run get_site_summary for site_url sc-domain:example.com from 2026-04-01 to 2026-04-20 and show clicks, impressions, ctr, and position.Top queries
Run get_top_queries for site_url sc-domain:example.com from 2026-04-01 to 2026-04-20 with row_limit 25 and show the top queries by clicks.Top pages
Run get_top_pages for site_url sc-domain:example.com from 2026-04-01 to 2026-04-20 with row_limit 25 and show the top pages by clicks.URL inspection
Run inspect_url for site_url sc-domain:example.com and inspection_url https://example.com/.Property Format: Domain vs URL-prefix
This is one of the most common setup mistakes.
Examples:
Domain property:
sc-domain:example.comURL-prefix property:
https://www.example.com/
Use the exact property string returned by list_sites. Do not guess.
What This MCP Exposes
connection_status(local, no sign-in or Google request)health_checklist_sitesget_site_summaryquery_performanceget_top_queriesget_top_pagesget_dimension_breakdowninspect_url
Which Tool To Use
Recommended call order:
health_checklist_sitesget_site_summaryget_top_queriesorget_top_pagesquery_performancefor custom dimensions and filtersinspect_urlfor indexability and canonical checks on a specific URL
Search Analytics Notes
query_performanceuses the Search Analytics API under the hoodSearch Analytics returns top rows, not guaranteed full exports
The MCP maps Google's positional
keys[]rows into nameddimensionsobjects
Supported knobs include:
dimensionsfilterssearch_typeaggregation_typedata_staterow_limitstart_row
Example Tool Calls
Site summary
{
"tool": "get_site_summary",
"args": {
"site_url": "sc-domain:example.com",
"start_date": "2026-04-01",
"end_date": "2026-04-20"
}
}Top queries
{
"tool": "get_top_queries",
"args": {
"account": "work",
"site_url": "sc-domain:example.com",
"start_date": "2026-04-01",
"end_date": "2026-04-20",
"row_limit": 25
}
}Query performance with filters
{
"tool": "query_performance",
"args": {
"site_url": "sc-domain:example.com",
"start_date": "2026-04-01",
"end_date": "2026-04-20",
"dimensions": ["page"],
"filters": [
{
"dimension": "device",
"operator": "equals",
"expression": "MOBILE"
}
],
"row_limit": 50
}
}URL inspection
{
"tool": "inspect_url",
"args": {
"site_url": "sc-domain:example.com",
"inspection_url": "https://example.com/blog/seo-agent"
}
}Source Setup
If you want to run the MCP from source:
uv sync --extra dev
cp .env.example .env
# Fill .env values
uv run --env-file .env flin-google-search-console-mcpPublished Package
Run the latest published package directly:
uvx --refresh-package flin-google-search-console-mcp --prerelease disallow "flin-google-search-console-mcp>=0.1.8,<0.2"Troubleshooting
missing_configuration
GOOGLE_CLIENT_IDorGOOGLE_CLIENT_SECRETis missing from the MCP config
oauth_required
no usable token exists yet
the first browser-based login has not been completed
the stored refresh token is no longer usable and the browser flow must run again
permission_denied
the Google account used during login does not have access to the Search Console property
No sites returned
verify that the Google account really has Search Console access
confirm you logged into the correct Google account in the browser
Google shows an unverified or testing warning
this is usually expected while the app is in testing mode
make sure your Google account is added as a test user on the OAuth consent screen
Security
See the security review for checks, fixes and remaining limitations. Tokens must be private files (0600 on macOS/Linux); legacy token files with broader permissions must be restricted before use. The extension is unsigned; SHA256SUMS verifies download integrity, not publisher identity.
More Docs
Release on GitHub + PyPI
This repository publishes automatically with GitHub Actions:
CI:
.github/workflows/ci.ymlRelease:
.github/workflows/release.ymltriggered by git tagsv*
CI tests the Python package, desktop bundle and Claude Code plugin on Linux,
macOS and Windows. It also checks the plugin manifest and rejects stale copies
of the runtime in plugin/. A release tag builds all formats, publishes the Python package to PyPI,
verifies the launcher against that published version, and creates a GitHub Release with the .mcpb, plugin ZIP,
their checksums and Python distributions. Only Python distributions go to PyPI.
A manual workflow run on a branch only validates and builds downloadable workflow artifacts. Publishing requires a version tag matching the project, package, plugin and lockfile versions. Publishing a directory listing requires the separate process described in the submission guide.
PyPI publication runs automatically for each version tag. To retry publishing
an older tag separately, manually run Release on that tag with publish_pypi enabled.
1) Configure PyPI Trusted Publisher
In PyPI project settings for flin-google-search-console-mcp, add a Trusted Publisher with:
Owner:
flin-agencyRepository:
flin-google-search-console-mcpWorkflow:
release.ymlEnvironment:
pypi
2) Cut a release
Follow the release checklist, commit and push the reviewed changes, then tag the prepared version:
git tag v0.1.8
git push origin v0.1.8Available Tools
9 toolsconnection_statusARead-onlyIdempotent
Report local setup and running version; never sign in, refresh tokens or call Google.
A saved token cannot prove that Google still accepts it: auth_status is unknown in that case, and live_access remains not_checked. Run list_sites explicitly to sign in if needed and check access; it may display private property names.
Inputs: account. Returns: object
get_dimension_breakdownDRead-onlyIdempotent
Get a single-dimension Search Analytics breakdown.
Inputs: end_date (required), dimension (required), start_date (required), account, +6 more. Returns: object
get_site_summaryCRead-onlyIdempotent
Get aggregate performance metrics for a property over a date range.
Inputs: end_date (required), start_date (required), account, site_url, +2 more. Returns: object
get_top_pagesCRead-onlyIdempotent
Get top page rows for a property over a date range.
Inputs: end_date (required), start_date (required), account, filters, +5 more. Returns: object
get_top_queriesCRead-onlyIdempotent
Get top query rows for a property over a date range.
Inputs: end_date (required), start_date (required), account, filters, +5 more. Returns: object
health_checkARead-onlyIdempotent
Check local configuration and saved sign-in status without opening a browser or calling Google.
Inputs: account. Returns: object
inspect_urlBRead-onlyIdempotent
Read Google's indexed status for a URL within an accessible property; does not request indexing.
Inputs: inspection_url (required), account, site_url, language_code. Returns: object
list_sitesARead-onlyIdempotent
List properties available to the selected Google account before choosing a site to analyse.
Opens Google sign-in in the browser if needed and saves or refreshes the local token. Does not modify Search Console properties.
Inputs: account. Returns: object
query_performanceCRead-onlyIdempotent
Query Search Analytics performance data with explicit dimensions and filters.
Inputs: end_date (required), start_date (required), account, filters, +7 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools are distinct, but connection_status and health_check both report local setup/saved sign-in status without calling Google, creating real misselection risk. The analytics tools are clearer, though query_performance overlaps somewhat with get_site_summary, get_top_pages, get_top_queries, and get_dimension_breakdown as specialized wrappers.
Names are consistently snake_case and mostly follow a verb_noun pattern such as get_site_summary, get_top_pages, list_sites, inspect_url, and query_performance. The only minor deviations are the status-oriented noun phrases connection_status and health_check.
Nine tools is well-scoped for a Google Search Console MCP focused on status, site listing, analytics, and URL inspection. Each tool has a plausible role without excessive surface area.
The set covers the core read-only workflows: auth/status checks, listing properties, Search Analytics queries, common top-row summaries, and URL indexed-status inspection. It intentionally omits write operations, and lacks sitemap or fuller property-management tools, but those are minor gaps for an analysis-focused server.
Maintenance
Related MCP Connectors
Read-only Google Search Console MCP server for AI assistants.
Hosted, read-only Google Search Console MCP: performance, comparisons, URL inspection, sitemaps.
Hosted MCP server for GA4, Google Ads and Search Console. Google OAuth, nothing to install.
Google Search Console, GA4 and PageSpeed MCP server for Claude, ChatGPT and Cursor. Free, hosted.
Related MCP Servers
- AlicenseAqualityBmaintenanceRead-only MCP server for Google Search Console: performance queries, URL inspection, indexing checks, sitemaps, and one-call HTML SEO audit reports.18246 PyPI10MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for Google Search Console API that enables querying search analytics, managing sites, inspecting URLs, and supporting domain delegation via service accounts.34 PyPI1MIT
- AlicenseNot gradedqualityCmaintenanceRead-only MCP server for Google Search Console data, enabling search analytics, URL inspection, indexing diagnostics, and sitemap management through MCP clients.19 npm1MIT
- AlicenseAqualityBmaintenanceSecure 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