anthropics / anthropics/claude-ai-mcp
[BUG] Google Sheets MCP (sheetsmcp.googleapis.com) custom connector: OAuth completes and tools appear, but every call returns "The caller does not have permission"
- Dominant language
- No language data
- Stars
- 471
- Forks
- 76
- PR merge metrics
- No merged PRs in 30d
Description
## Description
Adding Google's official Sheets MCP server (Developer Preview, per https://developers.google.com/workspace/sheets/api/guides/configure-mcp-server) as a custom connector in Claude follows the documented setup exactly, but every tool call fails with a permission error. This looks like the same root-cause class as #218 (People API) and #424 (Gmail/Calendar "account-scoped auth failure"), just not yet reported against the Sheets MCP endpoint specifically.
## Setup (matches Google's documented configuration)
- Server URL: `https://sheetsmcp.googleapis.com/mcp/v1`
- OAuth client: **Web application** type, created in a dedicated Google Cloud project, with redirect URI `https://claude.ai/api/mcp/auth_callback` (exactly as specified in Google's setup guide)
- APIs enabled in the GCP project: Google Sheets API, Google Sheets MCP API, Google Drive API
- OAuth consent screen configured with all 4 scopes Google's guide requires: `spreadsheets`, `spreadsheets.readonly`, `drive.file`, `drive.readonly`
- Test user (the account owner) added to the consent screen
- Confirmed correct Google account used throughout (verified via the consent screen's displayed account)
## Repro steps
1. Add "Google Sheets MCP" as a custom connector in Claude settings using the above configuration
2. Connect — OAuth flow completes, consent screen appears and is approved, connector shows as "Connected", and its tools (`get_values`, `get_spreadsheet`, `update_values`, `update_formulas`, `insert_dimension`, `copy_sheet_to_another_spreadsheet`) appear in the tool list
3. Call `get_values` or `get_spreadsheet` (metadata-only, no data) against a spreadsheet owned by the same authenticated account
4. Every call returns: `The caller does not have permission`
## Troubleshooting already ruled out
- Wrong Google account: confirmed correct account on the consent screen each time
- Missing/incorrect scopes on the consent screen: confirmed all 4 required scopes present and saved
- APIs not enabled: confirmed both Sheets API and Sheets MCP API (and Drive API) show as enabled
- Stale/cached OAuth grant: fully revoked the app's access via Google Account → Linked apps, then reconnected from scratch in Claude — same error persisted
- OAuth client misconfiguration: reviewed the client's detail page in Google Cloud Console — name, type (Web application), redirect URI, and secret status all correct
- Propagation delay: waited and retried after several hours — same error persisted
## Suspected root cause
One detail that lines up with #218's diagnosis: during the Google consent screen step, the permission prompt displayed **"claude.ai wants access to your Google Account"** rather than the name configured on our own OAuth client ("Espresso Tracker Sheets Connector"). This is consistent with #218's finding that claude.ai's authorization request to Google does not properly forward the scopes (or possibly the client identity) declared by the target MCP server, resulting in a token that lacks the necessary permissions regardless of how the Google Cloud side is configured.
## Impact
The custom-connector UI provides no way for users to inspect or override the scopes actually requested during the OAuth flow, so there's no available workaround — this makes the documented Sheets MCP integration (per Google's own setup guide) currently non-functional via Claude's custom connector flow.
## Related issues
- #218 (People API — same symptom, same suspected root cause)
- #424 (Gmail/Calendar — same exact error message, described as a recurring "account-scoped auth failure")
- #42 (related: claude.ai hardcodes OAuth scope requests rather than properly requesting what's declared/needed)
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.