searchconsole-mcp
Provides tools to list sites, query search analytics (clicks, impressions, CTR, position), manage sitemaps (list, submit, delete), and inspect URL indexing status in Google Search Console.
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., "@searchconsole-mcp List all sites in my Search Console account"
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 Server (by Haris Nadeem)
Package name: searchconsole-mcp
A lightweight, fast MCP server for Google Search Console. Query search analytics, manage sitemaps, and inspect URLs directly from your AI assistant.
Features
7 Powerful Tools: List sites, query search analytics, manage sitemaps, inspect URLs
Fast & Lightweight: Built with
httpxandgoogle-auth— minimal dependenciesStandard MCP: Works with Claude Desktop, Cursor, Windsurf, and any MCP-compatible client
Full Analytics: Query clicks, impressions, CTR, and position with flexible dimensions and filters
URL Inspection: Check indexing status and coverage for any URL
Sitemap Management: Submit, list, and delete sitemaps
Related MCP server: gsc-mcp-connector
Installation
From PyPI (recommended)
pip install searchconsole-mcpFrom source
git clone https://github.com/harisnadeem/searchconsole-mcp.git
cd searchconsole-mcp
pip install -e .Quick Start
1. Enable the Search Console API
Go to Google Cloud Console
Select or create a project
Click Enable
2. Authenticate
Option A: User Account (OAuth) — recommended for personal use
gcloud auth application-default loginOption B: Service Account — recommended for team/agency use
Create a service account: Google Cloud Console → IAM → Service Accounts
Download the JSON key
Set the environment variable:
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-key.json"
3. Configure your MCP client
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"searchconsole": {
"command": "searchconsole-mcp",
"env": {}
}
}
}Cursor
In Cursor Settings → Features → MCP, add:
Name:
searchconsoleType:
commandCommand:
searchconsole-mcp
Windsurf
Edit ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"searchconsole": {
"command": "searchconsole-mcp"
}
}
}Usage Examples
Once connected, ask your AI assistant:
"List all sites in my Search Console account"
"Show me search analytics for example.com for the last 30 days"
"Get the top queries with highest impressions but low CTR"
"Check if https://example.com/page is indexed"
"Submit the sitemap at https://example.com/sitemap.xml"
Available Tools
Tool | Description |
| List all verified sites in your Search Console account |
| Query clicks, impressions, CTR, position by dimensions |
| Get metadata for a specific sitemap |
| List all sitemaps for a site |
| Submit/add a new sitemap URL |
| Remove a sitemap from Search Console |
| Inspect indexing status, coverage, and robots.txt state |
Configuration
Environment Variables
Variable | Description | Required |
| Path to service account key JSON | Only if using service account |
Google Cloud Project
The server uses Application Default Credentials (ADC). Ensure the Google Cloud project has the Search Console API enabled.
API Rate Limits
The Search Console API enforces per-user quotas:
Default: ~25,000 queries per day
URL Inspection: Limited (~10 per minute)
The server does not implement additional rate limiting; respect the API quotas.
Requirements
Python 3.10+
Google Cloud project with Search Console API enabled
Authenticated Google account with Search Console access
Development
# Clone and setup
git clone https://github.com/harisnadeem/searchconsole-mcp.git
cd searchconsole-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Run tests
python -m pytest tests/
# Format code
black searchconsole_mcp/
ruff check searchconsole_mcp/Publishing a Release
This repository is configured for GitHub Actions + PyPI Trusted Publishing.
In PyPI, create the project
searchconsole-mcp(or use the existing one).In PyPI project settings, add a Trusted Publisher:
Owner:
harisnadeemRepository:
searchconsole-mcpWorkflow:
publish.ymlEnvironment:
pypi
Create and push a version tag:
git tag v0.1.0 git push origin v0.1.0Create a GitHub Release for that tag.
The
Publish to PyPIworkflow publishes the package automatically.
Contributing
Contributions welcome! Please read CONTRIBUTING.md for guidelines.
Changelog
See CHANGELOG.md for version history.
License
Apache 2.0 — see LICENSE for details.
Acknowledgments
Built with:
Not officially affiliated with Google. This is an unofficial, community-maintained MCP server for Google Search Console.
Available Tools
7 toolsdelete_sitemapA
Delete a sitemap from a website.
Args: site_url: The site, e.g. 'https://example.com/'. feedpath: The sitemap path to delete, e.g. '/sitemap.xml'.
Returns: Empty dict on success.
Inputs: site_url (required), feedpath (required).
get_sitemapA
Get details about a specific sitemap.
Args: site_url: The site, e.g. 'https://example.com/'. feedpath: The sitemap path, e.g. '/sitemap.xml'.
Returns: Dictionary with sitemap metadata (submitted/referenced counts, last downloaded, errors, warnings).
Inputs: site_url (required), feedpath (required).
get_sitesA
List all websites in the user's Search Console account.
Returns a list of site entries, each containing 'siteUrl' and permission level.
Inputs: no named parameters.
inspect_urlA
Inspect the indexing status of a URL in Google.
Args: site_url: The site URL registered in Search Console, e.g. 'https://example.com/'. inspection_url: The full URL to inspect, e.g. 'https://example.com/some-page'. language_code: The language code for the inspection request (default 'en-US').
Returns: Dictionary with inspection result including indexStatus, coverageState, robots_txt_state, page_fetch_state, etc.
Inputs: site_url (required), inspection_url (required), language_code.
list_sitemapsA
List all sitemaps submitted for a website.
Args: site_url: The site whose sitemaps to list, e.g. 'https://example.com/'.
Returns: Dictionary with 'sitemap' list containing feedpath, type, contentsCounts, etc.
Inputs: site_url (required).
query_search_analyticsA
Query Search Analytics data for a website.
Args: site_url: The site to query, e.g. 'https://example.com/' or 'sc-domain:example.com'. start_date: Start date in YYYY-MM-DD format. end_date: End date in YYYY-MM-DD format. dimensions: Group results by these dimensions. Valid values: date, query, page, country, device, searchAppearance. Omit to get aggregate totals with no grouping. search_type: Type of search to filter by. Values: web (default), image, video, news, discover, googleNews. row_limit: Maximum number of rows to return (default 1000). start_row: Zero-based offset for pagination (default 0). data_state: Include only 'final' (default) confirmed data, or 'all'. aggregation_type: How to aggregate data. 'auto' (default), 'byPage', or 'byProperty'. dimension_filter_groups: List of filter groups to apply. Each group has 'groupType' ('and'/'or') and 'filters' list. Each filter: {dimension, expression, operator}. Operators: equals, notEquals, contains, notContains, beginsWith, notBeginsWith, endsWith, notEndsWith, isEmpty, isNotEmpty.
Returns: Dictionary with 'rows' (list of result rows) and 'responseAggregationType'. Each row contains dimension values in 'keys' plus: - clicks (total clicks) - impressions (total impressions) - ctr (click-through rate) - position (average search position)
Inputs: site_url (required), start_date (required), end_date (required), dimensions, +6 more.
submit_sitemapA
Submit (add) a sitemap to a website.
Args: site_url: The site, e.g. 'https://example.com/'. feedpath: The sitemap path to submit, e.g. '/sitemap.xml'.
Returns: Empty dict on success.
Inputs: site_url (required), feedpath (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool has a distinct purpose: sitemap operations (delete, get, list, submit), site listing, URL inspection, and analytics querying. No overlapping functionality.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., delete_sitemap, get_sites, query_search_analytics), making naming predictable.
With 7 tools, the set is well-scoped for the Google Search Console domain, covering essential operations without unnecessary bloat.
Covers core functionality: site listing, sitemap management (CRUD), URL inspection, and search analytics. Minor gaps like site permission management or other reports are missing but not critical.
Maintenance
Related MCP Connectors
Read-only Google Search Console MCP server for AI assistants.
Google Search Console, GA4 and PageSpeed MCP server for Claude, ChatGPT and Cursor. Free, hosted.
Free Google Search Console MCP: your real GSC, Google Analytics and keyword data for AI agents.
Web search API and MCP server for developers building AI agents.
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
- 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.37 npmMIT
- AlicenseNot gradedqualityDmaintenanceSelf-hosted MCP server that connects Google Search Console to AI assistants, enabling natural language queries about search analytics, sitemaps, and URL inspection data.MIT