gsc-mcp
gsc-mcp
MCP server for Google Search Console and IndexNow — manage search indexing programmatically instead of driving a browser.
Image:
ghcr.io/robertdwhite/gsc-mcp, built by CI in this repo.Transport: MCP streamable HTTP at
/mcp, bearer-gated byMCP_TOKEN./healthzis open.
Tools
Tool | Does |
| Credential check; reports the service-account email |
| Search Console properties |
| Get FILE/META ownership token |
| Complete verification — the service account becomes an owner |
| Grant a human Google account access (UI + API) |
| Sitemap management with indexed-count stats |
| Clicks/impressions/CTR/position by query, page, country, device, date |
| Per-URL index status, last crawl, canonical |
| Push URLs to Bing/DuckDuckGo/Yandex — works with no Google setup |
One-time Google setup (human, ~5 minutes)
In Google Cloud Console, create/reuse a project and enable Google Search Console API and Site Verification API.
Create a service account (no roles needed) and a JSON key.
Put the key JSON in the
GSC_SA_JSONenv var (in-cluster: thegsc-mcp-envsecret).
Then, via tools: add_site → verification_token (place the token on the
site) → verify_site → the service account is a verified owner and every
other tool works. add_owner grants your personal account the same property.
Config (env)
Var | Meaning |
| Bearer token required on |
| Service-account key JSON (the raw JSON string). |
| Optional defaults for |
| Listen port (default 8080). |
Deploy
Manifests live in
whitehouse-rke2 under
apps/ai/gsc-mcp (endpoint https://gsc-mcp.internal.white.fm/mcp, tailnet
only).
Connecting clients
The server speaks MCP streamable HTTP at /mcp and expects
Authorization: Bearer <MCP_TOKEN>. Anything below works from any machine
that can reach the endpoint (for the house deploy: tailnet/LAN only).
Claude Code
claude mcp add --transport http gsc https://gsc-mcp.internal.white.fm/mcp \
--header "Authorization: Bearer <MCP_TOKEN>"Or directly in ~/.claude.json:
"mcpServers": {
"gsc": {
"type": "http",
"url": "https://gsc-mcp.internal.white.fm/mcp",
"headers": { "Authorization": "Bearer <MCP_TOKEN>" }
}
}Claude Desktop
The custom-connector UI expects OAuth; this server uses a static bearer, so
bridge it with mcp-remote in
claude_desktop_config.json (needs Node):
"mcpServers": {
"gsc": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://gsc-mcp.internal.white.fm/mcp",
"--transport", "http-only",
"--header", "Authorization: Bearer <MCP_TOKEN>"]
}
}Codex (ChatGPT app / Codex CLI)
Codex configures MCP servers as stdio commands — use the same bridge in
~/.codex/config.toml:
[mcp_servers.gsc]
command = "npx"
args = ["-y", "mcp-remote", "https://gsc-mcp.internal.white.fm/mcp",
"--transport", "http-only",
"--header", "Authorization: Bearer <MCP_TOKEN>"]
startup_timeout_sec = 60Restart the app after editing.
Hermes (or any YAML-config MCP client)
mcp_servers:
gsc:
url: https://gsc-mcp.internal.white.fm/mcp
headers:
Authorization: Bearer ${GSC_MCP_TOKEN}Sanity check without a client
curl -s https://gsc-mcp.internal.white.fm/healthz # -> ok (no auth)
curl -s -o /dev/null -w '%{http_code}\n' -X POST \
https://gsc-mcp.internal.white.fm/mcp # -> 401 (auth gate works)Note: claude.ai web connectors cannot reach a tailnet-only endpoint; expose
an external route first if you need it there.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/RobertDWhite/gsc-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server