{
  "markdown": "<div align=\"center\">\n\n# search-console-mcp\n\n**Search Console was built for dashboards. This gives you a conversation instead.**\n\nTalk to your Google Search Console from Claude, Cursor, or any MCP client.\n\nOne sign-in. 30 seconds. *No Google Cloud project. No API keys. Tokens never leave your machine.*\n\n[![npm](https://img.shields.io/npm/v/search-console-mcp-server)](https://www.npmjs.com/package/search-console-mcp-server)\n[![license](https://img.shields.io/npm/l/search-console-mcp-server)](./LICENSE)\n[![node](https://img.shields.io/node/v/search-console-mcp-server)](https://nodejs.org)\n\n[Docs](https://www.getpercy.io/search-console-mcp) · [npm](https://www.npmjs.com/package/search-console-mcp-server) · [Report an issue](https://github.com/sudomichael/search-console-mcp/issues)\n\n</div>\n\n<!-- TODO(launch): hero GIF here — login → consent → \"Connected.\" → asking Claude \"which pages lost clicks this month?\" -->\n\n---\n\n```\n Google Search Console\n          │\n          ▼\n  search-console-mcp        ← runs on your machine, read-only\n          │\n          ▼\n  Claude / Cursor / any MCP client\n          │\n          ▼\n  \"Why did my traffic drop?\"\n```\n\nEvery other Search Console MCP server makes you create a Google Cloud project, enable APIs, and wrangle service-account JSON. This one doesn't:\n\n```bash\nnpx search-console-mcp-server login\n```\n\nYour browser opens, you sign in with Google, done. Tokens are minted by Google directly to your machine and stored **only** in `~/.search-console-mcp/` — nothing passes through anyone's servers.\n\n|  | This server | Typical GSC MCP setup |\n| --- | --- | --- |\n| Setup | `npx … login`, sign in, done (~30s) | Create a Google Cloud project, enable the API, create OAuth credentials, download JSON, point config at it |\n| Runtime | Node — `npx`, nothing to install | Python + uv/venv |\n| Can it modify your site data? | **Impossible** — read-only scope by construction | Write scopes with destructive ops \"disabled by default\" |\n| Analyses | 5 built-in (checkup, cannibalization, striking distance, traffic drop, indexing audit) | Bring your own prompts |\n\n## What to expect on first run\n\n```\n$ npx search-console-mcp-server login\nOpening your browser to sign in with Google…\n\nConnected. Your Search Console is ready — tokens stored in\n~/.search-console-mcp (this machine only).\n```\n\nThat's the whole setup. No clone, no Google Cloud console, no JSON files.\n\n---\n\n## What it feels like\n\n```\nYou:  Which of my pages are closest to page one?\n\nClaude:  Three real opportunities, by impressions at stake:\n\n  1. /pricing — \"scoreboard app pricing\" sits at position 11.2 with\n     2,400 impressions/mo and almost no clicks. One position-group\n     jump is worth ~90 clicks/mo. The title doesn't contain the\n     query; start there.\n\n  2. /templates/trivia — position 12.8 on \"trivia scoreboard\",\n     1,100 impressions/mo. The page ranks but has no H2 matching\n     the intent.\n\n  3. /blog/keep-score-online — position 9.4, already page one on\n     some days. It's cannibalizing with /features — run\n     cannibalization_check before touching it.\n```\n\n*(Illustrative output — shape and numbers are what the tools return from your real data.)*\n\n## Built-in SEO analysts\n\nFive ready-made analyses ship as MCP prompts — slash-commands in clients that support them. Outcomes, not API calls:\n\n| Prompt | What you get |\n| --- | --- |\n| `seo_checkup` | Trend vs last month, biggest movers, and the top 3 moves worth making |\n| `cannibalization_check` | Queries where two of your pages compete — which should win, and how to fix it |\n| `striking_distance` | Queries sitting at position 5–15 — the fastest traffic you're not getting, with the fix per page |\n| `traffic_drop` | When the drop started, which pages/queries lost, indexed-or-not, most likely cause |\n| `indexing_audit` | Sitemap status + index inspection of your top pages, with plain-language fixes |\n\n## Setup\n\n**1. Sign in (one time):**\n\n```bash\nnpx search-console-mcp-server login\n```\n\n**2. Add to your MCP client:**\n\nClaude Code:\n\n```bash\nclaude mcp add gsc -- npx -y search-console-mcp-server\n```\n\nClaude Desktop / Cursor / anything else (`mcpServers` config):\n\n```json\n{\n  \"mcpServers\": {\n    \"gsc\": { \"command\": \"npx\", \"args\": [\"-y\", \"search-console-mcp-server\"] }\n  }\n}\n```\n\n**3. Ask:**\n\n- *\"Which of my pages lost the most clicks this month vs last?\"*\n- *\"Show my queries sitting at position 8–15 with real impressions — what's closest to page 1?\"*\n- *\"Is https://mysite.com/pricing indexed? If not, why?\"*\n- *\"How much Google Discover traffic do I get?\"*\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `list_properties` | Your GSC properties (call first — gives exact `siteUrl` values) |\n| `query_search_analytics` | Clicks / impressions / CTR / position by query, page, date, country, device — filters, pagination, and every traffic source **including Google Discover** |\n| `compare_periods` | Biggest movers, computed for you: this period vs the prior one, per-page or per-query deltas, sorted by change |\n| `inspect_url` | Google's index status for a URL: indexed or not, why, chosen canonical, last crawl |\n| `inspect_urls` | The same, batched — up to 10 URLs in one call for indexing audits |\n| `list_sitemaps` | Submitted sitemaps with status |\n\nRead-only by construction: the Google scope this tool requests (`webmasters.readonly`) **cannot** modify your properties, submit sitemaps, or change anything — not \"disabled by default.\" Impossible.\n\nWhat a `compare_periods` call hands your model (the model never does date arithmetic):\n\n```json\n{ \"key\": \"https://example.com/pricing\",\n  \"current\":  { \"clicks\": 1040, \"impressions\": 20502, \"position\": 6.4 },\n  \"previous\": { \"clicks\": 1070, \"impressions\": 17176, \"position\": 5.8 },\n  \"deltaClicks\": -30, \"deltaImpressions\": 3326, \"deltaPosition\": 0.6 }\n```\n\n## Privacy\n\n- **Read-only** Google scope (`webmasters.readonly`).\n- Tokens live in `~/.search-console-mcp/credentials.json` on your machine, `chmod 600`. `npx search-console-mcp-server logout` deletes them.\n- No telemetry, no proxy — API calls go from your machine to Google, full stop.\n- Prefer your own Google Cloud project? Set `SEARCH_CONSOLE_MCP_CLIENT_ID` / `SEARCH_CONSOLE_MCP_CLIENT_SECRET` and it uses yours.\n\n## FAQ / Troubleshooting\n\n**How can the login work without me creating Google credentials?**\nThe CLI ships a Google \"Desktop app\" OAuth client — the same supported model `gcloud` and GitHub's CLI use. Your tokens are still minted by Google directly to your machine (PKCE + localhost callback); they never touch our servers. The entire auth path is ~200 lines in [`src/auth.ts`](src/auth.ts) — read it. Want zero shared anything? Set `SEARCH_CONSOLE_MCP_CLIENT_ID` / `SEARCH_CONSOLE_MCP_CLIENT_SECRET` with your own credentials.\n\n**Switch Google accounts?**\n`npx search-console-mcp-server login` again — Google shows the account picker.\n\n**\"Not signed in\" errors in my MCP client?**\nRun the login from the same user account your client runs under; credentials live in `~/.search-console-mcp/`.\n\n**A property is missing from `list_properties`.**\nThe signed-in Google account needs at least \"Restricted\" access to it in Search Console.\n\n**Why is yesterday missing from the data?**\nGoogle Search Console data lags ~2–3 days. That's Google, not the tool. History goes back ~16 months.\n\n**Revoke access?**\n`npx search-console-mcp-server logout` deletes local tokens; [myaccount.google.com/permissions](https://myaccount.google.com/permissions) revokes the grant itself.\n\n## Development\n\n```bash\ngit clone https://github.com/sudomichael/search-console-mcp\ncd search-console-mcp && npm install\nnpm run dev      # run from source\nnpm run build    # bundle to dist/ (10KB, no googleapis dependency)\n```\n\nThe entire auth path is ~200 lines in [`src/auth.ts`](src/auth.ts). To verify any privacy claim above, read the source.\n\n---\n\n### Looking for something proactive?\n\nThis MCP server helps you *investigate* — you ask, it answers.\n\nAfter a week you may notice you keep asking the same questions: *What dropped? What's closest to page one? What should I fix?*\n\n[**Percy**](https://www.getpercy.io) is the other half: he checks your Search Console every week on his own, builds a strategy, emails you exactly what to change — then re-checks the live page and measures whether it worked.\n\nExploration here. Execution there. Same philosophy: real data, plain English, no dashboards.\n\n---\n\nMIT licensed. Issues and PRs welcome. Built by [Percy](https://www.getpercy.io).\n",
  "bytes": 8494,
  "sha": "711a44708c520a0f611c559021557e28beadaeb88d535ca427a72721982b65fc",
  "repo_slug": "sudomichael/search-console-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_sudomichael_search_console_mcp_c7e9bdac/readme"
}