claude_design MCP OAuth misroutes to Google Drive connector install flow

Open 💬 5 comments Opened Jun 30, 2026 by mattantaliss

Summary

Connecting the claude_design MCP server (https://api.anthropic.com/v1/design/mcp) misroutes OAuth into the Google Drive connector's install flow. Authentication never reaches a design consent screen; instead the browser lands on https://api.anthropic.com/mcp/gdrive/google/install?metadata=….

Root cause

The design server's protected-resource metadata advertises the correct authorization server:

GET https://api.anthropic.com/v1/design/.well-known/oauth-protected-resource
{
  "resource": "https://api.anthropic.com/v1/design/mcp",
  "authorization_servers": ["https://claude.ai/v1/design/mcp"],
  "scopes_supported": ["user:design:read", "user:design:write"]
}

But OAuth discovery resolves the authorization server to the api.anthropic.com root, and that root's authorization-server metadata is the gdrive connector's:

GET https://api.anthropic.com/.well-known/oauth-authorization-server
{
  "issuer": "https://api.anthropic.com/mcp/gdrive",
  "authorization_endpoint": "https://api.anthropic.com/authorize",
  ...
}

So design auth is handed off to the Google Drive connector's authorization flow.

Steps to reproduce

  1. Configure an HTTP MCP server: {"type": "http", "url": "https://api.anthropic.com/v1/design/mcp"}
  2. Run /mcp and authenticate claude_design.
  3. Browser opens https://api.anthropic.com/mcp/gdrive/google/install?metadata=… (a Google Drive consent screen) instead of a design consent screen.

Notes

  • Reproducible across fresh attempts — a new metadata token is generated each time, so it is not a stale-token issue.
  • No Google Drive connector is enabled on the account.
  • Verified client config is correct and cleared all local OAuth state (mcp-needs-auth-cache.json and the mcpOAuth credential entry); the stored discoveryState recorded authorizationServerUrl: "https://api.anthropic.com/" with an empty accessToken, confirming the flow dies at the authorization step.

This appears to be a server-side gateway misconfiguration rather than a client issue.

View original on GitHub ↗

This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗