HTTP MCP servers with OAuth fail when auth server doesn't support dynamic client registration
Description
When connecting to an HTTP MCP server that uses OAuth (e.g. the official Slack MCP server at https://mcp.slack.com/mcp), Claude Code attempts to use dynamic client registration (RFC 7591). If the OAuth server doesn't support dynamic client registration, authentication fails with:
SDK auth failed: Incompatible auth server: does not support dynamic client registration
Expected Behavior
Claude Code should support a fallback OAuth flow using a pre-registered client_id (similar to how Cursor handles the same Slack MCP server). Alternatively, Anthropic could pre-register a Claude Code OAuth application with popular MCP providers (e.g. Slack) so users get a seamless one-click auth experience — no manual app creation required.
Actual Behavior
Authentication fails entirely. The only workaround is to abandon the hosted HTTP MCP server and switch to the npm-based @modelcontextprotocol/server-slack package with a manually-created Slack Bot token.
Steps to Reproduce
- Add the Slack MCP server to Claude Code:
``json``
{
"mcpServers": {
"slack": {
"type": "http",
"url": "https://mcp.slack.com/mcp"
}
}
}
- Run
/mcpand attempt to authenticate. - Observe the error:
Incompatible auth server: does not support dynamic client registration
Environment
- Claude Code CLI
- Slack MCP server:
https://mcp.slack.com/mcp
Comparison
The same Slack MCP server authenticates successfully in Cursor IDE because Cursor has a pre-registered OAuth client_id with Slack. Claude Code lacks this.
Suggested Fix
- Allow users to configure a static
client_id/client_secretin the MCP server config for HTTP servers that don't support dynamic registration, or - Pre-register Claude Code as an OAuth client with Slack (and other popular MCP providers) so users get a seamless auth experience.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗