No official Google Search Console MCP connector exists, so this is a from-scratch build — a free, local Claude Desktop extension using only first-party SDKs (Anthropic's own MCP SDK and Google's own API client), with four read-only tools: listing your Search Console properties, search performance data, sitemap status, and single-URL index inspection. Setup is entirely free; the only real limitation is that Google's API doesn't expose the bulk "Pages" indexing-issue report — that's UI/export only, with no workaround.

Key takeaways

  • No official connector exists — not from Google, not from Anthropic. What's listed in Claude's Discover marketplace for "GSC" is entirely community/third-party code.
  • Entirely free for personal use — no credit card anywhere in Google Cloud Console setup, OAuth configuration, or normal API usage.
  • One real capability gap to know up front: the Search Console API has no endpoint for the bulk indexing-issue report (404s, soft 404s, excluded-by-noindex). That data is UI/export-only, permanently — no MCP server can get around it.
  • Local-first by design: this runs as a Claude Desktop extension on your own machine. Each person who installs it authorizes with their own Google account — nobody's data passes through anybody else's server.
  • The install method that actually works turned out not to be the obvious one — more on that below.

Why build this instead of using an existing one

Searching for a Google Search Console MCP connector turns up a real gap: nothing official from Google or Anthropic. Claude's own Discover marketplace does list several community-built options when you search "GSC" — multiple of them, in fact, which says something about the actual demand — but every single one is third-party code from an author with no track record to check. For something that would hold OAuth access to real Search Console data, that's a meaningful trust gap, not a theoretical one. Worth noting: some of those listings are hosted connectors, meaning the vendor's own server sits between you and Google — your OAuth grant would flow through infrastructure you've never heard of, not just code you haven't audited.

The alternative built here draws a specific line: original code, built on first-party SDKs only — Anthropic's own @modelcontextprotocol/sdk for the protocol, Google's own googleapis client for OAuth and API calls. Not a hand-rolled OAuth implementation either — reusing the provider's own, audited libraries for the security-critical parts is the safer choice, not a compromise on "from scratch."

The capability gap, stated plainly before you invest any setup time. Google's Search Console API has never exposed the "Pages" report — Not Found, Soft 404, Crawled–currently not indexed, Excluded by noindex. That's UI-and-manual-export only, on Google's side, for every tool that exists or could exist. What the API does cover: search performance (clicks, impressions, position), sitemap status, and single-URL index inspection. If bulk indexing-issue data is what you actually need, export it from the Search Console UI instead — no MCP server changes that.

What you end up with

Four read-only tools, usable directly from a Claude Desktop chat once installed:

The four tools this server exposes.
Tool What it does
list_sitesLists the Search Console properties your Google account can access
list_sitemapsSubmitted sitemaps and their status for a property
search_analytics_queryClicks, impressions, CTR, position — by query, page, country, device, or date
inspect_urlIndex status, canonical URL, mobile usability for one exact page

Scope is webmasters.readonly only — nothing it does can change anything in your Search Console account. It can look, not touch.

Setting it up, step by step

This section assumes zero prior experience with Google Cloud Console or MCP. Every command is given for both Windows and macOS/Linux where they actually differ — most don't.

Before you start: install Node.js (the LTS version) and Git if you don't already have them. Windows users: installing Git also installs Git Bash — use that instead of Command Prompt for the commands below (PowerShell works too; given separately wherever the syntax differs).

Step 1 — create a Google Cloud project

  1. Go to console.cloud.google.com.
  2. Top bar → project dropdown → New Project.
  3. Name it anything (e.g. "gsc-mcp-server") and create it.
  4. Make sure the new project is selected in the top bar before continuing.

Step 2 — enable the Search Console API

  1. APIs & Services → Library.
  2. Search for "Google Search Console API".
  3. Click it, then click Enable.

Step 3 — configure the OAuth consent screen

This is the step most likely to trip you up if you skip a sub-step, so read this one slowly.

  1. APIs & Services → OAuth consent screen.
  2. User type: External — this just means "not restricted to a Google Workspace org." It stays private to you until you explicitly publish it, which personal use never requires.
  3. Fill in the required fields (app name, your email as support contact) — nothing here is visible to anyone but you.
  4. Scopes: add https://www.googleapis.com/auth/webmasters.readonly.
  5. Test users: add your own Google account's email address — do not skip this. Miss it, and signing in later fails with Error 403: access_denied, for a reason that isn't obvious from the error itself (explained below).
  6. Leave Publishing status as Testing. In Testing mode, only the emails you listed as test users can authorize the app at all, and Google's full app-verification review — a real, multi-week process — doesn't apply. It only kicks in if you publish for the general public. The "100 test users" limit you'll see mentioned is irrelevant here; this uses 1 of 100.

Step 4 — create the OAuth client credentials

  1. APIs & Services → Credentials → Create Credentials → OAuth client ID.
  2. Application type: Desktop app — important. Desktop-type clients get Google's automatic loopback-redirect allowance, so no redirect URI or port needs registering ahead of time.
  3. Name it anything, create it.
  4. Click the download icon next to the new client → Download JSON.

Step 5 — save the client secret where the server expects it

Windows (Git Bash) and macOS/Linux — identical command:

mkdir -p ~/.gsc-mcp-server
mv ~/Downloads/client_secret_*.json ~/.gsc-mcp-server/client_secret.json

Windows (PowerShell), if that's what you're using instead:

mkdir "$env:USERPROFILE\.gsc-mcp-server"
Move-Item "$env:USERPROFILE\Downloads\client_secret_*.json" "$env:USERPROFILE\.gsc-mcp-server\client_secret.json"

The single most common mistake here is Windows-specific and invisible. File Explorer hides known file extensions by default, so renaming a file by hand can silently produce client_secret.json.json instead of client_secret.json — it looks correct in the UI and isn't. Verify with the commands below, and confirm the file is exactly client_secret.json, nothing appended.

# macOS / Linux
ls -la ~/.gsc-mcp-server/

# Windows PowerShell
dir "$env:USERPROFILE\.gsc-mcp-server\"

Step 6 — clone, install, and authorize

Same commands on every OS — git and npm don't differ by platform:

git clone https://github.com/learnwithbadridutta/gsc-mcp-server.git
cd gsc-mcp-server
npm install
npm run authorize

npm run authorize prints a URL — open it, sign in with the same Google account you added as a test user in step 3, and approve. The script catches the redirect on a local port automatically, saves a token to ~/.gsc-mcp-server/token.json, and exits. One-time step — the saved token is reused after this.

Step 7 — test it before involving Claude at all

npm run inspect

This opens Anthropic's own official MCP Inspector in a browser — a tool built specifically for testing MCP servers directly, call by call, before wiring them into a real client. Try list_sites first; if it returns your properties, the Google side of this is fully working and anything that goes wrong afterward is specific to Claude Desktop, not the server itself.

Step 8 — install it into Claude Desktop

Current Claude Desktop versions install local MCP servers as a packaged .mcpb file — Anthropic's own "MCP Bundle" format — through Settings → Extensions. This is not the same place as Settings → Connectors, which is for remote/HTTPS servers and won't show a local one.

Download the pre-built bundle directly — no build step needed: releases/gsc-mcp-server-v0.1.0.mcpb, click "Download raw file."

What's actually inside that file. Just this project's own code and its production dependencies — nothing from anyone's personal ~/.gsc-mcp-server/ folder, which lives outside the packaged project directory and was never part of what gets bundled. Confirmed by unzipping the built archive and searching it for any trace of credential filenames before this was written up — found none. Until you complete steps 1-6 yourself with your own Google account, the installed extension has nothing to authenticate with.

Use this install method — it's the one that actually worked in testing:

  1. Open Claude Desktop → Settings → Extensions
  2. Find Advanced settings → Install Extension…
  3. Browse to the downloaded .mcpb file and select it

Double-clicking the file and dragging it into the Claude Desktop window are both also documented as valid install methods — neither worked reliably here: double-click did nothing at all on Windows, and dragging the file in got treated as a chat attachment instead of an install action. The Settings menu path above didn't have either problem.

Claude Desktop shows a permissions screen — review it, approve, and the four tools become available. One more thing worth knowing: once installed, it's actually listed under Settings → Connectors → Yours alongside any remote connectors — that's where to check it's there and enabled, even though the install itself happened through Extensions.

Step 9 — try it

Start a new chat and ask:

"Using the gsc tool, list my Search Console sites"

Claude Desktop will ask you to approve the tool call the first time — allow it. You should get back your verified properties. From there, something more useful:

"Using gsc, show me search analytics for [your exact site URL from that list] over the last 28 days, broken down by query"

Every real mistake made getting here

This is the part a polished walkthrough usually edits out. Each of these cost real troubleshooting time, and every one of them is now baked into the steps above so nobody else has to hit it blind.

What actually went wrong, building and testing this.
What happened Actual cause
GitHub clone failed with "password authentication is not supported"GitHub dropped password auth years ago — a Personal Access Token is required as the password instead
npm run authorize generated a URL, but signing in returned Error 403: access_deniedThe Google account wasn't added as a Test user on the OAuth consent screen — required in Testing mode, easy to miss
"No OAuth client secret found" even after saving the fileWindows had silently renamed it to client_secret.json.json — hidden file extensions struck again
Double-clicking the .mcpb file did nothing on WindowsFile-type association for .mcpb wasn't reliably registered — the Settings → Extensions install path sidesteps this entirely
Dragging the file into Claude Desktop uploaded it as a chat attachmentThe drop zone in this build is a general chat attachment target, not an install trigger
After install, nothing showed under Settings → ConnectorsIt actually was there — just needed a full process restart via Task Manager, not just closing the window (which usually just minimizes to the tray)
A GitHub Release with the built file attached couldn't be createdBlocked by platform policy on this specific session type, not a permissions issue — worked around by committing the built file directly into the repo instead

A note on trusting this (or anything like it)

The honest version of "is this safe": this server can only do what its webmasters.readonly OAuth scope allows — read, never write — and it runs entirely on your own machine once installed, talking directly to Google's API with your own credentials. Nobody else's server sits in between. That said, "safe" for a downloaded binary isn't a property of the file format — it's a property of whether the source behind it is actually inspectable, which is why this is published as open source rather than a closed download, and why the bundle was verified by hand (not just assumed) before being written up here.

Documented vs. inferred vs. unsupported

What's actually established, building this.
Claim Status Basis
No official Google or Anthropic Search Console MCP connector exists Documented Checked against Anthropic's connector directory and Google's own published MCP server list — neither lists one
The Search Console API has no bulk indexing-issue endpoint Documented Confirmed against the API's own published reference — the Pages report has no corresponding API method
Double-click and drag-and-drop install are unreliable generally, not just on this machine Inferred Observed failing on one Windows setup; plausible as a general pattern given how file-type associations and drop-zone handling work, but not verified across other systems
Community GSC connectors in Claude's Discover marketplace are unsafe to use Unsupported Not independently audited one by one — the concern here is the absence of verification, not a confirmed finding of a specific problem in any particular listing
Want the exact source, not just the walkthrough? The full project — code, README, and this same setup guide — lives at github.com/learnwithbadridutta/gsc-mcp-server.
What to ask it. Three workflows put the tools to use: finding pages stuck just off page one, and the two indexing diagnoses, Discovered, currently not indexed and Crawled, currently not indexed. The API gap described above is exactly why those guides use an export for the bulk list. The server built here is the real-world test case in test an MCP server before you connect an agent.

Badri Dutta

Software engineer · 20 years building for the web

20 years building for the web, now building with AI coding agents and the tools that connect to them daily. This one got written up because every mistake in it was real, and the finished steps are the ones that survived actually hitting them.

Full background →