Search Console MCP server: connect Google Search Console to Claude or Codex
Search Console is the platform where an MCP server's read/write split has a concrete consequence: reading query data needs one OAuth scope, and submitting a sitemap needs a different, broader one. A connection made for reading cannot write, and the failure looks like a permissions bug rather than a missing scope.
What already exists for this platform
Google has not shipped a platform-official Search Console MCP server at the time of writing (September 2026). What exists is community wrappers around the Search Console API, which you run yourself.
- No official server, so there is no read-only baseline to compare against — the choice is a community server you host or a hosted one.
- The API itself is generous: Search Analytics gives queries, pages, clicks, impressions, CTR and average position by date, country and device.
- Writes are narrow: sitemap submission and deletion, and that is essentially it.
What a full MCP server adds
| Typical option today | Agent Planners MCP | |
|---|---|---|
| Search Console tools | Varies by community server | 9 reads, 2 writes |
| Sitemap submission | Needs the broader scope, usually unconfigured | Available, approval-gated |
| Joined to ad spend | No | Google Ads on the same key |
| Approval before a write | Usually none | Every write, with an audit row |
How to configure it
- 1Create a key in API & MCP. `tools:read` for questions; add `tools:write` if the agent should be able to change things. Tools mode needs a paid plan and fails closed.
- 2Connect Search Console under Integrations — that OAuth step is why the MCP key never carries platform credentials.
- 3Add the server to Claude Code, Claude Desktop or Codex using the snippet below.
- 4Have the agent call `describe_permissions` first — it reports the key's mode, scopes, plan entitlement and connected accounts.
- 5Call `list_accounts` for the account ids, and scope each call with one. Resolution is exact or it refuses, naming the candidates.
claude mcp add --transport http agentplanners https://www.agentplanners.com/api/mcp \
--header "Authorization: Bearer ap_live_…"Claude Desktop and Codex
Claude Desktop takes the same endpoint as JSON:
{
"mcpServers": {
"agentplanners": {
"url": "https://www.agentplanners.com/api/mcp",
"headers": {
"Authorization": "Bearer ap_live_…"
}
}
}
}The scope detail that breaks sitemap writes
Reading Search Console needs `webmasters.readonly`. Submitting or deleting a sitemap needs `webmasters` — a different, broader scope. A connection authorized for reading therefore cannot write, and the API's refusal reads like a generic permission error rather than "you asked for the wrong scope months ago".
The honest handling is to request the union at connect time and translate the refusal into a named reason, rather than letting an agent retry a call that can never succeed with the token it has.
Use cases
- Organic queries against paid keywords in one session — the cannibalization check that needs Search Console and Google Ads together.
- Pages that lost the most clicks this month, diffed against the prior period, with the ranking movement explained.
- Sitemap submission after a content release, proposed by the agent and approved by you.
- Scheduled monitoring of position drops on the pages that matter, delivered by email.
Frequently asked questions
- Is there an official Search Console MCP server?
- Not from Google at the time of writing (September 2026). The options are a community server you run yourself, or a hosted MCP server that includes Search Console among other platforms.
- Why can't my agent submit a sitemap?
- Reading Search Console uses the webmasters.readonly scope; submitting or deleting a sitemap needs the broader webmasters scope. A connection authorized only for reading will be refused, and the error usually looks like a generic permissions problem.
- Can I compare organic and paid performance in one MCP session?
- Only if the server covers both. Search Console and Google Ads sit on the same key here, which is what makes a cannibalization check a single question rather than two exports and a spreadsheet.