Google Search Console MCP Server for Claude on Windows: OAuth Setup Fixes That Actually Worked
I followed Suganthan’s Google Search Console MCP Server setup guide to connect Google Search Console to Claude Desktop through MCP.
I used Option A: OAuth setup, which is the recommended setup in the guide.
The idea is simple: connect Claude Desktop to Google Search Console, then ask Claude questions about clicks, impressions, pages, queries, CTR, keyword drops, SEO performance, and ranking changes without manually exporting data.
The setup eventually worked, but on Windows there were a few easy ways to break it:
- the Claude config needs to be inserted into the existing file correctly;
- Windows paths need to be escaped properly in JSON;
- Google OAuth can block you with
403 access_denied; - after approving access, you can land on
127.0.0.1:3847with a404; - restarting Claude Desktop can be the missing step.
This is the practical version of what fixed it.
Table of Contents
Important: I used Option A, the OAuth setup
The guide gives more than one setup option. I used Option A: OAuth setup.
That means the Claude config uses this:
"GSC_AUTH_MODE": "oauth"It also needs a local OAuth secrets file:
"GSC_OAUTH_SECRETS_FILE": "C:\\Users\\yourname\\gsc-mcp\\gsc-oauth-secrets.json"That file is the OAuth client JSON downloaded from Google Cloud Console.
Problem 1: The config can break Claude if you paste it wrong
Claude Desktop already has a config file. It may already contain other settings.
For example, it may look something like this:
{
"coworkUserFilesPath": "C:\\Users\\yourname\\Claude",
"preferences": {
"coworkWebSearchEnabled": true
}
}You cannot just paste another full JSON object under it.
This is wrong:
{
"coworkUserFilesPath": "C:\\Users\\yourname\\Claude",
"preferences": {
"coworkWebSearchEnabled": true
}
}
{
"mcpServers": {
"gsc": {
"command": "npx"
}
}
}That breaks the file because JSON must have one top-level object.
You need to add the MCP server inside the existing JSON object.
Correct structure
The finished config should have "mcpServers" at the top level, next to the other Claude settings.
Like this:
{
"mcpServers": {
"gsc": {
"command": "npx",
"args": [
"-y",
"suganthan-gsc-mcp@latest"
],
"env": {
"GSC_AUTH_MODE": "oauth",
"GSC_OAUTH_SECRETS_FILE": "C:\\Users\\yourname\\gsc-mcp\\gsc-oauth-secrets.json",
"GSC_SITE_URL": "sc-domain:example.com",
"GSC_SITE_URLS": "sc-domain:example.com,sc-domain:example.org,https://www.example.net/"
}
}
},
"coworkUserFilesPath": "C:\\Users\\yourname\\Claude",
"preferences": {
"launchPreviewPersistedWorkspaces": [],
"launchPreviewSessionScopedSessions": [],
"coworkScheduledTasksEnabled": true,
"coworkHipaaRestricted": false,
"ccdScheduledTasksEnabled": true,
"bypassPermissionsGateByAccount": {
"00000000-0000-0000-0000-000000000000": false
},
"coworkWebSearchEnabled": true,
"coworkModelAutoFallbackByAccount": {
"00000000-0000-0000-0000-000000000000": true
},
"remoteToolsDeviceName": "your-device-name",
"epitaxyPrefs": {
"starred-local-code-sessions": [],
"starred-cowork-spaces": [],
"starred-session-groups": [],
"dframe-local-slice": {
"pinnedOrder": [],
"customGroupAssignments": {},
"customGroupOrder": {}
},
"ccd-sessions-filter": {
"state": {
"selectedProjects": []
},
"version": 0
},
"desktop-frame.paneStore.v1": {
"state": {
"extraPanesByMode": {},
"colWeightsByMode": {},
"rowSplit": 0.5,
"draftNonce": 0
},
"version": 4
}
},
"chicagoEnabled": true
}
}The important part is this:
{
"mcpServers": {
"gsc": {
"...": "..."
}
},
"coworkUserFilesPath": "...",
"preferences": {
"...": "..."
}
}"mcpServers" is not pasted inside "preferences".
It is not added as a second JSON object at the bottom.
It is just another top-level property in the same JSON object.
If you already have mcpServers
If your Claude config already has an "mcpServers" section, do not create a second one.
Wrong:
{
"mcpServers": {
"someOtherTool": {}
},
"mcpServers": {
"gsc": {}
}
}Correct:
{
"mcpServers": {
"someOtherTool": {},
"gsc": {
"command": "npx",
"args": [
"-y",
"suganthan-gsc-mcp@latest"
],
"env": {
"GSC_AUTH_MODE": "oauth",
"GSC_OAUTH_SECRETS_FILE": "C:\\Users\\yourname\\gsc-mcp\\gsc-oauth-secrets.json",
"GSC_SITE_URL": "sc-domain:example.com",
"GSC_SITE_URLS": "sc-domain:example.com,https://www.example.net/"
}
}
}
}Keep one "mcpServers" object and put all MCP servers inside it.
Windows path issue
This is wrong on Windows:
"GSC_OAUTH_SECRETS_FILE": "C:\Users\yourname\gsc-mcp\gsc-oauth-secrets.json"It looks normal, but inside JSON it can break because backslashes are escape characters.
Use double backslashes:
"GSC_OAUTH_SECRETS_FILE": "C:\\Users\\yourname\\gsc-mcp\\gsc-oauth-secrets.json"Or use forward slashes:
"GSC_OAUTH_SECRETS_FILE": "C:/Users/yourname/gsc-mcp/gsc-oauth-secrets.json"Both are valid.
I used the double-backslash version.
GSC_SITE_URL and GSC_SITE_URLS
The default Search Console property goes here:
"GSC_SITE_URL": "sc-domain:example.com"Multiple properties go here:
"GSC_SITE_URLS": "sc-domain:example.com,sc-domain:example.org,https://www.example.net/"For a domain property, use this format:
sc-domain:example.comFor a URL-prefix property, use the exact URL-prefix property from Google Search Console:
https://www.example.net/Do not guess the format. It needs to match the property as it exists in your Search Console account.
GSC_SITE_URLS does not let you query any of those sites on demand
This tripped me up. Adding multiple properties to GSC_SITE_URLS does not mean Claude can pull data for whichever site you ask about.
All GSC_SITE_URLS does is let the MCP server generate a combined dashboard across those sites. It does not make each site individually queryable.
If you actually want Claude to pull Search Console data for a specific site, GSC_SITE_URL has to be set to that site. Change it to whichever property you’re working with:
"GSC_SITE_URL": "sc-domain:example.com"If you work across multiple sites, you need to update GSC_SITE_URL and restart Claude Desktop each time you switch which site you’re querying.
Problem 2: Google OAuth blocked the app with 403 access_denied
After setting up the OAuth config and trying to connect, Google blocked the login with this:
Error 403: access_deniedThe screen said the app had not completed the Google verification process.
The request showed these Search Console scopes:
https://www.googleapis.com/auth/webmasters.readonly
https://www.googleapis.com/auth/webmastersThe problem was not that these scopes were invalid.
The problem was that the OAuth app was still in testing mode and my Google account was not added as a test user.
Fix 1: Add your Google account as a test user
In Google Cloud Console, open the project you created for the MCP setup.
Go to:
Google Auth Platform → Audience → Test usersAdd the exact Google account you are using to sign in.
It needs to be the same account you select during the OAuth login.
After doing this, I got past the first Google block.
Fix 2: Add the Search Console scopes
Then go to:
Google Auth Platform → Data Access → Add or remove scopesAdd these scopes:
https://www.googleapis.com/auth/webmasters.readonly
https://www.googleapis.com/auth/webmastersSave the changes.
Fix 3: Make sure the Search Console API is enabled
In Google Cloud Console, go to:
APIs & Services → LibrarySearch for:
Google Search Console APIEnable it.
In my case, it was already enabled, but it is worth checking anyway.
Problem 3: Google approved access, then redirected to 127.0.0.1:3847 with a 404
After adding the test user and scopes, the Google OAuth screen finally worked.
I could:
- choose my Google account;
- select the permissions;
- approve access.
Then Google redirected me to a local URL like this:
http://127.0.0.1:3847/?iss=https://accounts.google.com&code=...But the page showed a 404.
This looked broken, but it was actually progress.
Google had approved the request. The issue was local.
The MCP server is supposed to catch that local callback on:
127.0.0.1:3847In my case, Claude Desktop needed a full restart.
Fix 4: Fully restart Claude Desktop
After changing the Google OAuth settings and the Claude config, fully restart Claude Desktop.
Do not just close the visible window.
On Windows, you can also kill Claude from PowerShell:
Stop-Process -Name "Claude" -Force -ErrorAction SilentlyContinueThen open Claude Desktop again and trigger the GSC MCP tool.
After restarting Claude, the same OAuth approval flow worked.
The setup order that worked
This is the order I would follow now:
- Create the Google Cloud project.
- Enable the Google Search Console API.
- Use Option A: OAuth setup from the guide.
- Create an OAuth client.
- Download the OAuth client JSON file.
- Save it somewhere simple, for example:
C:\Users\yourname\gsc-mcp\gsc-oauth-secrets.json- Add the GSC MCP block into Claude’s config correctly.
- Make sure the Windows path uses double backslashes or forward slashes.
- Add your Google account as a test user.
- Add the Search Console OAuth scopes.
- Fully restart Claude Desktop.
- Ask Claude to use Google Search Console.
- Approve the Google permissions.
What the errors meant
403 access_denied
Google was blocking the OAuth app.
The fix was:
- add the Google account as a test user;
- add the Search Console scopes;
- make sure the Search Console API is enabled.
127.0.0.1:3847 with a 404
Google had approved the OAuth request, but the local MCP callback was not being handled properly.
The fix was:
- fully restart Claude Desktop;
- retry the OAuth flow.
What actually fixed it
The setup finally worked after I did all of this:
- Used Option A: OAuth setup.
- Added my Google account as a test user.
- Added the Search Console OAuth scopes.
- Fixed the Windows path in the Claude config.
- Inserted the MCP config into the existing Claude config correctly.
- Restarted Claude Desktop fully.
The most annoying part was that OAuth looked broken even after Google approved access.
But once the config was valid, the OAuth account was added as a test user, the scopes were added, and Claude Desktop was restarted, the Google Search Console MCP server finally worked.