Summary
When adding Google's official People API MCP server (https://people.googleapis.com/mcp/v1) as a custom connector in claude.ai, the OAuth flow completes successfully (the connector shows Connected and tools are visible in the tool list), but every tool call fails with The caller does not have permission because the access token issued by claude.ai's OAuth flow is missing the scopes the MCP server declared as required.
This is functionally the same class of bug as #42 (offline_token not being added as a scope during oauth), but for the People API scopes (userinfo.profile, contacts.readonly, directory.readonly).
Environment
- Client: claude.ai web (custom connector UI)
- MCP server:
https://people.googleapis.com/mcp/v1 (Google official, docs)
- Upstream OAuth IdP: Google (via customer-owned OAuth client in Google Cloud)
- Google Workspace customer with Domain-wide Delegation enabled; all required APIs enabled; OAuth consent screen lists
userinfo.profile, userinfo.email, contacts.readonly, directory.readonly; end-user granted all requested scopes on the consent screen.
Reproduction
- Create an OAuth 2.0 Web Application client in Google Cloud, add
https://claude.ai/api/mcp/auth_callback to authorized redirect URIs.
- In claude.ai → Settings → Connectors → Add custom connector, set URL
https://people.googleapis.com/mcp/v1 and paste the OAuth client ID / secret.
- Click Connect → redirected to Google consent screen → approve.
- Connector status becomes
Connected.
- Invoke any People API tool (
get_user_profile, search_contacts, search_directory_people).
Expected
Tool call succeeds (or at minimum fails with a Google API error unrelated to missing OAuth scopes).
Actual
All three tools return:
The caller does not have permission
Root cause (as far as we could diagnose)
- The People API MCP server correctly advertises the three required scopes (
userinfo.profile, contacts.readonly, directory.readonly) via authorization server metadata.
- The Google Cloud OAuth client is configured with these scopes on the consent screen.
- The end-user grants all scopes at the consent screen.
- However, claude.ai's OAuth authorization request to Google does not include these scopes in the
scope parameter, so the resulting access token has only the default minimum scopes and cannot call the People API methods.
The same user / same GCP project / same OAuth client works correctly with Gmail, Drive, Calendar, and Chat custom connectors — so the issue appears specific to how claude.ai maps the server-declared required scopes to the scope parameter sent to the upstream IdP for the People MCP endpoint.
Note: claude.ai's custom connector UI does not expose a "scopes" input field, so there is no user-side workaround.
Related
Impact
Google's official People API MCP server is effectively unusable from claude.ai custom connectors, blocking use cases that rely on organization directory / contact lookups (e.g. personal assistant agents that resolve attendees, participants, email recipients by name).
Summary
When adding Google's official People API MCP server (
https://people.googleapis.com/mcp/v1) as a custom connector in claude.ai, the OAuth flow completes successfully (the connector showsConnectedand tools are visible in the tool list), but every tool call fails withThe caller does not have permissionbecause the access token issued by claude.ai's OAuth flow is missing the scopes the MCP server declared as required.This is functionally the same class of bug as #42 (
offline_tokennot being added as a scope during oauth), but for the People API scopes (userinfo.profile,contacts.readonly,directory.readonly).Environment
https://people.googleapis.com/mcp/v1(Google official, docs)userinfo.profile,userinfo.email,contacts.readonly,directory.readonly; end-user granted all requested scopes on the consent screen.Reproduction
https://claude.ai/api/mcp/auth_callbackto authorized redirect URIs.https://people.googleapis.com/mcp/v1and paste the OAuth client ID / secret.Connected.get_user_profile,search_contacts,search_directory_people).Expected
Tool call succeeds (or at minimum fails with a Google API error unrelated to missing OAuth scopes).
Actual
All three tools return:
Root cause (as far as we could diagnose)
userinfo.profile,contacts.readonly,directory.readonly) via authorization server metadata.scopeparameter, so the resulting access token has only the default minimum scopes and cannot call the People API methods.The same user / same GCP project / same OAuth client works correctly with Gmail, Drive, Calendar, and Chat custom connectors — so the issue appears specific to how claude.ai maps the server-declared required scopes to the
scopeparameter sent to the upstream IdP for the People MCP endpoint.Note: claude.ai's custom connector UI does not expose a "scopes" input field, so there is no user-side workaround.
Related
offline_tokennot being added as a scope during oauth #42 — same class of bug (hardcoded scopes in authorize request). Marked `fix-in-progress` but this case suggests the fix did not cover server-declared scopes for all Google Workspace MCP endpoints.Impact
Google's official People API MCP server is effectively unusable from claude.ai custom connectors, blocking use cases that rely on organization directory / contact lookups (e.g. personal assistant agents that resolve attendees, participants, email recipients by name).