HTTP MCP servers with OAuth never trigger browser auth flow

Resolved 💬 3 comments Opened Mar 19, 2026 by travisbraultrivo Closed Mar 23, 2026

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

  1. 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
``

  1. claude mcp list shows:

``
slack: https://mcp.slack.com/mcp (HTTP) - ! Needs authentication
``

  1. Restart Claude Code — no browser window opens for OAuth
  2. Attempt to use Slack tools — no tools are available (server never connects)
  3. 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.

View original on GitHub ↗

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