[BUG] Slack MCP plugin OAuth fails: SDK tries dynamic client registration before using pre-registered clientId

Resolved 💬 2 comments Opened Apr 25, 2026 by vazooom Closed May 6, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

The Slack MCP server plugin (plugin:productivity:slack) fails to authenticate. The /mcp dialog shows the server as "needs authentication" but displays the error immediately with no interactive auth options — the Authenticate/Disable choices are rendered but not selectable.

The MCP SDK's OAuth discovery checks for RFC 7591 dynamic client registration support first, and fails when Slack's auth server responds that it doesn't support it. The SDK should detect that a clientId is already provided in the plugin config (.mcp.json) and skip dynamic registration, proceeding with the pre-registered client flow instead.

The mcp__plugin_productivity_slack__authenticate tool call also fails with the same error.

The plugin .mcp.json already provides the pre-registered client:

{
  "mcpServers": {
    "slack": {
      "type": "http",
      "url": "https://mcp.slack.com/mcp",
      "oauth": {
        "clientId": "1601185624273.8899143856786",
        "callbackPort": 3118
      }
    }
  }
}

What Should Happen?

Since the plugin config already includes a clientId, the SDK should:

  1. Skip dynamic client registration
  2. Use the pre-registered clientId directly
  3. Present the interactive auth menu so the user can complete the OAuth flow in their browser
  4. Successfully authenticate with the Slack workspace

Error Messages/Logs

SDK auth failed: Incompatible auth server: does not support dynamic client registration

Steps to Reproduce

  1. Enable the Slack plugin (slack@claude-plugins-official) in Claude Code settings
  2. Start a new Claude Code session
  3. Run /mcp and select the Slack server
  4. Observe: error text "SDK auth failed: Incompatible auth server: does not support dynamic client registration" is displayed with no interactive auth options
  5. Alternatively, invoke the mcp__plugin_productivity_slack__authenticate tool — it returns the same error

Additional context:

  • Reinstalling from the source repo (git clone https://github.com/slackapi/slack-mcp-plugin.git && claude --plugin-dir ./) produces the same result since the .mcp.json is identical
  • The same Slack workspace works with Claude Desktop's built-in first-party Slack integration, confirming no Slack-side restrictions
  • Other OAuth MCP plugins (Notion, Atlassian) appear in ~/.claude/mcp-needs-auth-cache.json but Slack never does — it fails at the discovery stage before any auth state is recorded

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

N/A - bug is in MCP SDK OAuth, not model-related

Claude Code Version

2.1.119 (Claude Code)

Platform

Anthropic API

Operating System

macOS

Terminal/Shell

Terminal.app (macOS)

Additional Information

  • OS: macOS 26.4.1 (Build 25E253), Apple Silicon
  • Terminal: Claude Code CLI
  • API Platform: Anthropic (via custom proxy)
  • Plugin source: claude-plugins-official/slack v1.0.0 (also tested with slackapi/slack-mcp-plugin from GitHub — identical config)
  • The same Slack workspace authenticates fine through Claude Desktop's built-in first-party Slack integration, confirming workspace admin approval is in place
  • The Slack server never appears in ~/.claude/mcp-needs-auth-cache.json, suggesting it fails at discovery before any auth state is recorded
  • This appears to be a regression or missing feature in the MCP SDK's OAuth flow — when a clientId is already provided in the plugin .mcp.json, dynamic client registration should be skipped entirely

View original on GitHub ↗

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