MCP notifications/tools/list_changed ignored over Streamable HTTP in 2.1.211 (regression from 2.1.210)
Bug: MCP notifications/tools/list_changed ignored over Streamable HTTP in 2.1.211 (worked in 2.1.210)
Summary
Claude Code CLI 2.1.211 does not refresh an MCP server's tool list when the
server sends notifications/tools/list_changed over the Streamable HTTP
transport. The notification is received on the client's open GET SSE stream but
no tools/list re-fetch follows, so newly available tools never appear until the
server is manually reconnected (/mcp → Reconnect). 2.1.210 behaves correctly
(tools auto-appear), so this is a regression introduced in 2.1.211.
Environment
- Claude Code CLI: 2.1.210 (works) vs 2.1.211 (broken), native installer, macOS
- MCP server:
httptype (Streamable HTTP), OAuth-authenticated, configured in
~/.claude.json mcpServers
- Server advertises
capabilities.tools.listChanged: truein theinitializeresult
Steps to reproduce
- Connect Claude Code to a remote
httpMCP server that supports dynamic tools. - In an active session, cause the server to gain new tools (here: authorize a
downstream service, after which the server exposes new tools).
- Server pushes
{"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
as an SSE data: frame on the standalone GET stream the client opened.
Expected
Claude Code re-fetches tools/list and the new tools become available in the
same session without reconnect (this is the documented list_changed behavior,
and is what 2.1.210 does).
Actual (2.1.211)
No re-fetch occurs. New tools do not appear until /mcp → Reconnect (which forces
a fresh initialize → tools/list). Server-side logs confirm the push was
delivered to an open stream (streams:1).
Evidence it's client-side, not server-side
- Server advertises
tools.listChanged: trueatinitialize. - Server log shows the stream open and the notification pushed to it
(mcp: SSE stream opened, mcp: pushed tools/list_changed notification streams:1).
- The exact same server + push auto-refreshes correctly in claude.ai and Cowork,
and in Claude Code CLI 2.1.210.
Regression range
Works in 2.1.210, broken in 2.1.211.
Impact
Users of remote MCP servers with dynamic tool lists (e.g. gateways that expose
tools after per-service authorization) must manually reconnect to see new tools,
defeating the point of tools/list_changed.