[BUG] Slack MCP plugin OAuth fails: SDK tries dynamic client registration before using pre-registered clientId
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:
- Skip dynamic client registration
- Use the pre-registered
clientIddirectly - Present the interactive auth menu so the user can complete the OAuth flow in their browser
- Successfully authenticate with the Slack workspace
Error Messages/Logs
SDK auth failed: Incompatible auth server: does not support dynamic client registration
Steps to Reproduce
- Enable the Slack plugin (
slack@claude-plugins-official) in Claude Code settings - Start a new Claude Code session
- Run
/mcpand select the Slack server - Observe: error text "SDK auth failed: Incompatible auth server: does not support dynamic client registration" is displayed with no interactive auth options
- Alternatively, invoke the
mcp__plugin_productivity_slack__authenticatetool — 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.jsonis 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.jsonbut 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/slackv1.0.0 (also tested withslackapi/slack-mcp-pluginfrom 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
clientIdis already provided in the plugin.mcp.json, dynamic client registration should be skipped entirely
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗