claude-code - 💡(How to fix) Fix [BUG] Slack MCP plugin OAuth fails: SDK tries dynamic client registration before using pre-registered clientId [1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
anthropics/claude-code#53253Fetched 2026-04-26 05:20:28
View on GitHub
Comments
0
Participants
1
Timeline
6
Reactions
0
Author
Participants
Timeline (top)
labeled ×5unlabeled ×1

Error Message

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__plugin_productivity_slack__authenticate tool call also fails with the same error.

Error Messages/Logs

  1. Observe: error text "SDK auth failed: Incompatible auth server: does not support dynamic client registration" is displayed with no interactive auth options
  2. Alternatively, invoke the mcp__plugin_productivity_slack__authenticate tool — it returns the same error

Code Example

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

---

SDK auth failed: Incompatible auth server: does not support dynamic client registration
RAW_BUFFERClick to expand / collapse

Preflight Checklist

  • I have searched existing issues and this hasn't been reported yet
  • This is a single bug report (please file separate reports for different bugs)
  • 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

extent analysis

TL;DR

The Slack MCP server plugin authentication issue can be resolved by modifying the MCP SDK's OAuth flow to skip dynamic client registration when a clientId is already provided in the plugin config.

Guidance

  • The issue is likely caused by the MCP SDK's OAuth flow not handling pre-registered clients correctly, resulting in a failed dynamic client registration attempt.
  • To verify, check the mcp.json file for the presence of a clientId and ensure it matches the expected value.
  • The MCP SDK should be updated to detect the presence of a clientId in the plugin config and skip dynamic registration, allowing the pre-registered client flow to proceed.
  • As a temporary workaround, consider manually modifying the MCP SDK's OAuth flow to bypass dynamic client registration for the Slack plugin.

Example

No code example is provided as the issue is related to the MCP SDK's internal logic and not a specific code snippet.

Notes

The provided information suggests that the issue is a regression or missing feature in the MCP SDK's OAuth flow, and resolving it may require updates to the SDK itself.

Recommendation

Apply a workaround by modifying the MCP SDK's OAuth flow to skip dynamic client registration when a clientId is already provided in the plugin config, as this is the most direct way to address the issue given the current information.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING