HTTP MCP servers with OAuth never trigger browser auth flow
Description
When adding HTTP MCP servers that require OAuth (e.g., Slack, Linear, Stripe), Claude Code recognizes the OAuth config and reports "Needs authentication" but never initiates the browser-based OAuth flow.
Steps to Reproduce
- Add an HTTP MCP server with OAuth config:
````
claude mcp add --transport http --client-id "1601185624273.8899143856786" --callback-port 3118 slack https://mcp.slack.com/mcp
claude mcp listshows:
````
slack: https://mcp.slack.com/mcp (HTTP) - ! Needs authentication
- Restart Claude Code — no browser window opens for OAuth
- Attempt to use Slack tools — no tools are available (server never connects)
- No
mcp__slack__*tools appear in tool search
Expected Behavior
Claude Code should either:
- Automatically initiate the OAuth flow on startup when a server needs authentication
- Trigger the OAuth flow when a tool from that server is first requested
- Provide a
claude mcp auth <name>command to manually trigger the flow
Actual Behavior
The server stays permanently in "Needs authentication" state with no way to trigger auth. Claude Code never:
- Opens a browser for OAuth
- Spins up the local callback server on the configured
callbackPort - Provides any CLI command to initiate auth
Environment
- Claude Code version: 2.1.79
- Platform: macOS (Darwin 24.3.0)
- Shell: zsh
Additional Context
The OAuth discovery endpoint at https://mcp.slack.com/.well-known/oauth-authorization-server responds correctly with authorization and token endpoints. The Slack MCP plugin exists in ~/.claude/plugins/marketplaces/claude-plugins-official/external_plugins/slack/.mcp.json with the correct OAuth config. The server config in ~/.claude.json also shows the OAuth settings correctly.
The user previously had these services connected through claude.ai (web app) where the OAuth flow works. The CLI appears to be missing the implementation to trigger the same flow.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗