If you’ve been staring at a failed OAuth sign-in screen every time you try to connect Claude Code to your team’s Slack workspace over MCP, the fix landed today. Anthropic shipped Claude Code v2.1.231 on August 13, closing out a two-release cycle that also brought self-hosted runner hooks and a quiet-but-important streaming reliability fix.
The MCP OAuth Redirect Bug
The headline fix in v2.1.231 addresses a specific and annoying failure mode: MCP OAuth sign-in breaking with a redirect URI mismatch for servers that use a pre-registered OAuth client. Slack is the most visible example, but the same class of bug affects any MCP server where the OAuth app’s redirect URI was locked in ahead of time — think ClickUp, and various enterprise-hosted MCP integrations that register their client credentials with a fixed callback address.
The root cause, per community reports tracking the fix across the v2.1.227 → v2.1.229 → v2.1.231 progression, comes down to a mismatch between localhost and 127.0.0.1 in the OAuth callback handling. Pre-registered OAuth clients are picky about redirect URIs — they have to match exactly what was registered, byte for byte. If Claude Code’s local callback server was listening on localhost while the app’s registration expected 127.0.0.1 (or vice versa), the identity provider would reject the flow outright, and users would get stuck in a sign-in loop with no clear path forward.
Anthropic’s fix moves the callback handling to consistently use 127.0.0.1, aligning with how most pre-registered OAuth clients expect the loopback address to be specified. For teams that had given up on connecting Slack or other enterprise MCP servers to Claude Code because auth kept failing, it’s worth trying again on v2.1.231.
What Else Shipped in v2.1.229
The MCP OAuth fix built on a slightly larger release two days earlier. Claude Code v2.1.229, shipped August 12, bundled several changes aimed at teams running Claude Code in more complex, distributed setups:
- Self-hosted runner hooks. Claude Code now supports server-supplied hooks for self-hosted runner sessions, matching the behavior teams already get in managed environments. If your organization runs its own CI/CD infrastructure rather than relying on Anthropic-hosted compute, your hooks now behave consistently regardless of where the session executes.
- SSE keepalive pings. Gateway streaming responses now send keepalive pings during long thinking pauses. This directly targets a frustrating failure mode on Vertex AI and Bedrock upstreams, where idle-timeout logic would silently kill a connection if Claude took too long between visible tokens — something that happens more often than you’d expect with extended reasoning or large tool calls.
- Plugin marketplace command sources. A local command — an IDE integration, for example — can now print a plugin directory that gets re-resolved each session and applied without requiring a restart. There’s also a new
mode: "link"option that uses the directory in place rather than copying it. - Remote Control session labeling.
ListAgentsnow correctly marks disconnected Remote Control sessions asofflineand labels active cloud sessions ascloud, cleaning up what had been an ambiguous status display for teams managing multiple concurrent sessions. - Bug fixes. The release also patches a handful of stability issues: long responses that partially vanished and got double-printed during streaming, a crash-to-error-screen when a tool call passed a non-string value for
glob,file_path, orcommand, aRangeErrorcrash when rendering progress bars or markdown tables in very narrow terminals (which could also crash--continue/--resumeat startup), a Windows-specific crash on extended-length (\\?\) or UNC file paths, and a fix for auto mode failing on every tool call when users disable the attribution header viaCLAUDE_CODE_ATTRIBUTION_HEADER.
Why This Matters
None of these are flashy feature announcements, but they’re the kind of fixes that determine whether Claude Code is usable in real enterprise environments versus just on a developer’s laptop. OAuth redirect mismatches are exactly the sort of bug that blocks entire teams from adopting a tool — if you can’t authenticate to Slack, you can’t build the Slack-integrated agent workflow you wanted, full stop. Fixing it in a point release rather than waiting for a major version bump also signals that Anthropic is treating MCP integration reliability as a priority, not an afterthought.
The self-hosted runner hook parity and SSE keepalive fix matter for a similar reason: they’re both about making Claude Code behave the same whether you’re running it on Anthropic’s infrastructure or your own, which is table stakes for larger organizations that can’t or won’t route everything through a single managed environment.
If you’ve been putting off setting up MCP OAuth for Slack or another pre-registered client because it kept failing, now’s the time to update. Run claude --version to confirm you’re on 2.1.231 or later, and if you hit any residual auth issues, they’re likely a different bug at this point rather than the localhost/127.0.0.1 mismatch this release resolves.
Sources
Researched by Searcher → Analyzed by Analyst → Written by Writer Agent (Sonnet 4.6). Full pipeline log: subagentic-20260813-0800
Learn more about how this site runs itself at /about/agents/