Skip to content

search console, from inside your ai assistant

shahid ali › tools › search console mcp server

Give Claude real control of Google Search Console

An open-source MCP server that installs on your own machine and hands your AI assistant 15 real Search Console tools. Ask it which pages are not indexed and it inspects them through Google's own API and comes back with reasons, not guesses. Ask it to submit the ones worth submitting and it drives your own browser to do it, at a pace Google does not throttle.

  • No API key. Sign in once, in your browser. Nothing is pasted into a config file.
  • No server of mine. It runs on your machine and talks to Google directly.
  • Open source. Read every line that touches your account before you install it.

Add it to your agent

Nothing needs installing first. uvx fetches and runs the published package on demand, which is why every option below is one line.

Claude Code

one command
claude mcp add gsc -- uvx gsc-indexer-mcp

Claude Desktop, or anything else that speaks MCP

whole config
{
  "mcpServers": {
    "gsc": { "command": "uvx", "args": ["gsc-indexer-mcp"] }
  }
}

Prefer it installed

pre-release, so --pre
pip install --pre gsc-indexer-mcp

One click, in the editors that support it:VS CodeCursorLM Studio

  1. Add

    One of the lines above. Restart the client.

  2. Setup

    Ask it to run gsc_setup. Sign in to Google once.

  3. Pair

    It loads the bridge extension into a browser profile.

  4. Ask

    "Which of my pages are not indexed, and why?"

The distribution is gsc-indexer-mcp. Note the indexer: plain gsc-mcp on PyPI is an unrelated project by another author, so installing that name gets you someone else's server. Version 0.1.0a4 is current, and the changelog says what moved.

The 15 tools your assistant gains

Grouped by the job they do, because the distinction that matters is not alphabetical: reading costs you almost nothing, and submitting spends a slot you cannot get back.

Read the state of a property

Nothing here changes anything in Search Console.

gsc_list_sites
Every Search Console property the signed-in account can reach.
gsc_check_status
Index status for one URL or many, through the official URL Inspection API. Spends no Request Indexing slot.
gsc_performance
Clicks, impressions, CTR and position out of Search Analytics.
gsc_quota
Request Indexing and URL Inspection budget left today, per property.

Find what is not indexed, and why

The part that turns a property into a work list.

gsc_find_unindexed
Collects candidates from sitemaps and the local store, inspects the stale ones, and returns every unindexed URL with one of ten reason codes.
gsc_audit
The current indexation position read from the local store. No HTTP, no quota spent, carries its own as-at timestamp and a stale count.
gsc_submit_sitemaps
Submit or resubmit sitemaps to a property.

Submit for indexing

Drives your own browser. Slots are roughly eleven per property, rolling, and unrecoverable.

gsc_request_indexing
Submit up to five URLs, one at a time, and wait for the outcome of each. Blocks for minutes by design.
gsc_start_indexing_job
Queue a background run over any number of URLs and get your session back immediately.
gsc_job_status
Progress, per-URL results and worker state for a job, or for the most recent one.
gsc_stop_job
Ends a run after the URL in flight, never mid-URL, so the ledger settles against the real outcome.

Setup and diagnosis

Run once, then only when something breaks.

gsc_setup
Walks sign-in, browser pairing and the bridge extension. Idempotent, and returns the single next step.
gsc_doctor
Diagnoses auth, config and environment problems and names the fix.
gsc_detect_browsers
Locates installed Chromium browsers and profiles for browser-driven submission.
gsc_use_browser
Pins the profile to drive when the detector picks the wrong one.

gsc_find_unindexed classifies every URL it returns under one of ten reason codes, each carrying a submitting_helps flag. That flag is the one to read before spending anything: it means a slot can move the URL, not that today is the day to spend it on this one. A URL whose state could not be established comes back as undetermined, never as unindexed, because absence of evidence is not a finding.

Why the quota accounting is the hard part

Most tools in this space get Google's limits wrong, get throttled, and then blame detection. Both limits that matter are per property, not per account, so eight properties means eight independent budgets.

LimitValueMechanic
Request Indexing~11 slots per propertyRolling. Each slot frees 24 hours and a minute after its own use, not at midnight.
URL Inspection2,000 per day per propertyDaily reset.
URL Inspection600 per minute per propertyRate limit.
  • A run stops early rather than burning the batch. A quota error, a captcha, a rate limit or a signed-out session ends it, and the URLs never attempted keep their slots.
  • One run at a time. The bridge drives a single tab in your real profile on one local port, so a second run while one is going is refused outright rather than queued.
  • Nothing is silently resumed. Restart the server mid-job and that job is closed out as failed at the next startup, with any open submission settled against the property's ledger.
  • Act on spendable slots, not free ones. gsc_quota subtracts the daily reserve you set aside in config, so the number you act on is the number you can actually spend.

Where the project actually is

Pre-alpha, and stated plainly rather than buried. The whole surface is wired up and has met a real Google account, on one operating system, driven by one person. Sign-in has been walked live on Windows, and Google confirmed real Request Indexing calls in both Chrome and Brave against live properties. Every automated assertion is still made against a fake, and macOS and Linux are unproven.

That is the honest shape of it: usable today if you are on Windows and reading the output rather than trusting it blindly. If you run it somewhere else and it breaks,the repo is where that becomes a fix. The defects the live run found are already written down in the smoke notes rather than quietly patched out of the record.

Where your data actually goes

Nowhere near me. This is not a hosted product: the server runs as a process on your machine, and every request it makes goes straight from there to Google. There is no account here, no telemetry call home, and no server of mine anywhere in the path. I cannot see your properties, your URLs or your results, and the architecture is the reason rather than the promise.

Sign-in uses OAuth with PKCE in your own browser. The token and the local store live under your user account on your own disk, so uninstalling takes them with it. The one shared thing is the OAuth client the project ships, which is what spares you a Google Cloud project; it identifies the application to Google and grants access to nothing. Supply your own instead if you would rather.

The browser tools on this site make the same promise by a different route: they run in your tab and keep nothing. Same rule either way, stated in full on theprivacy page.

Why I built it

Because I was doing this by hand, every morning, one property at a time. Open Search Console, pick a property, paste a URL, read the verdict, decide whether it is worth one of the eleven slots, wait, repeat. Across client properties that is most of a morning gone before any actual work starts, and the case studies here are built from exactly those snapshots. An assistant that can ask Google the same questions turns the reading into a sentence and leaves the judgment where it belongs. The judgment is still the job, which is whatthe indexing service is.

Straight answers

What is an MCP server, in plain terms?

MCP is the Model Context Protocol: a standard way to hand an AI assistant a set of real tools it can call. Installing this one means Claude stops guessing about your site and starts asking Google. You type "which of my blog posts are not indexed" in the chat, and it calls the Search Console API, reads the answer, and tells you. There is no dashboard here and no web app, only the tools your assistant gains.

Do I need a Google Cloud project or an API key?

No, and this is the part most alternatives get wrong. Nothing on this page asks you for a key. The server ships its own OAuth client, so sign-in happens once, in your own browser, when you first call gsc_setup(). The token that comes back is stored on your machine, under your user account, and never travels anywhere near me. You can supply your own OAuth client instead if your organisation requires it.

Can it actually submit URLs for indexing?

Yes, and honestly: Google publishes no Request Indexing API that a tool like this may use, so submission goes through your own browser. A small bridge extension, loaded into the profile you pair during setup, clicks the real Request Indexing button in a real Search Console session. It paces submissions 130 to 180 seconds apart, which is the interval proven not to draw a throttle over long runs. Five URLs is therefore up to fifteen minutes of wall clock. The slowness is the feature.

How many URLs can I submit per day?

Roughly eleven per property, and the counting is stranger than most tools admit. The window is rolling, not daily: each slot frees itself 24 hours and one minute after its own use, not at midnight. Properties are independent budgets, so eight properties means eight separate pools. This server tracks slots individually rather than counting a daily total, so it knows the exact minute the next one opens, and it deliberately over-counts rather than under-counts when a race is possible, because a short wait costs less than a hard quota error.

What does pre-alpha mean here, exactly?

It means the whole surface is wired up and has met a real Google account, on one operating system, driven by one person. Sign-in, browser-driven submission and the reporting tools have all been walked live on Windows against real properties, and Google confirmed real Request Indexing calls in both Chrome and Brave. Every automated assertion, though, is still made against a fake. So: usable, and not yet proven on macOS or Linux. The defects that live run found are written down in the repo rather than quietly fixed.

Which browsers and Python versions does it need?

Python 3.11 or newer, and a Chromium browser: Chrome, Brave, Edge, Vivaldi, Opera or Chromium itself. Setup loads the bridge extension into one of your existing profiles, and there is no way to finish setup without one. Firefox and Safari are not Chromium and will not work. The read-only tools, the ones that inspect and report, need no browser at all.

Is it free, and can I read the code?

Free, and the whole source is public under the Functional Source License, which converts to Apache 2.0 over time. You can read every line that touches your Google account before you install it. The only thing asked in return is that you say so when something breaks, because one person on one operating system cannot find every defect alone.

Broke on your machine, or want a tool it does not have?Open an issue, ortell me on WhatsApp. One person on one operating system cannot find every defect alone.