Remote MCP proxy caches tools/list, ignoring notifications/tools/list_changed
Bug Report: Claude Code MCP proxy caches tools/list responses, ignoring notifications/tools/list_changed
Summary
When a remote MCP server updates its tool definitions and emits notifications/tools/list_changed, Claude Code does not refresh its tool list. Even a manual /mcp reconnect (which should perform a fresh initialize + tools/list exchange) returns stale tool descriptions. The issue appears to be caching in the Anthropic MCP proxy layer between Claude Code and remote MCP servers.
Environment
- Claude Code: CLI (latest as of 2026-03-30)
- MCP transport: Remote HTTP+SSE via Anthropic proxy (claude.ai remote MCP integration)
- MCP server: Custom Lambda behind API Gateway REST API
- Tool change mode: Dynamic (server detects tool fingerprint changes and emits notifications)
Reproduction steps
1. Establish baseline session
Connect Claude Code to a remote MCP server. Call a tool to confirm the session is active and the tool description is loaded.
2. Change a tool description and deploy
Modify the description field of a tool in the server code. Deploy the updated server.
3. Trigger a tool call on the existing session
Call any tool from Claude Code. The server detects the tool fingerprint mismatch and emits notifications/tools/list_changed per the MCP spec.
4. Observe: Claude Code does not refresh
The tool description shown in Claude Code remains stale — the old description without the change.
5. Manual /mcp reconnect — still stale
Run /mcp in Claude Code to force a reconnect. This creates a new MCP session (initialize + tools/list). The tool description returned is still the old one.
Evidence
Server-side: working correctly
- Server detects fingerprint change on first tool call after deploy (old:
04baf931f279330d→ new:9fa989984cd9717a) - Server persists
notifications/tools/list_changedevents for all active sessions - 3 events emitted across 3 sessions, each containing valid JSON-RPC:
{"jsonrpc":"2.0","method":"notifications/tools/list_changed"}
- Tool calls continue to succeed — the server processes requests correctly with the new code
Client-side: stale description persists
ToolSearchin Claude Code returns the pre-change description after the deploy- Tool calls work (server returns correct results), but Claude Code shows old tool metadata
/mcpreconnect does not resolve the staleness
Specific example
Tool check_data_freshness description was updated to add "13 sources monitored." and change the INTERMAGNET threshold from "6-hour" to "24-hour". After deploy + reconnect, Claude Code still shows the old description without either change.
Expected behavior
- Notification delivery: When the server emits
notifications/tools/list_changed, Claude Code should re-fetchtools/listand update its cached tool definitions.
- Fresh reconnect: At minimum,
/mcpreconnect (which creates a new session) should return the currenttools/listfrom the live server, not a cached version.
Actual behavior
notifications/tools/list_changedis never delivered to the client via SSE, despite the server persisting it correctly.- Even a full
/mcpreconnect returns stale tool descriptions, suggesting the Anthropic proxy cachestools/listresponses independently of the MCP session lifecycle.
Impact
- Tool description changes are invisible to Claude Code users until the cache expires (TTL unknown).
- The MCP spec's
notifications/tools/list_changedmechanism is effectively non-functional for remote servers accessed through the Anthropic proxy. - Server operators cannot dynamically update tool metadata with confidence that clients will see the changes.
Workaround
None known. /mcp reconnect does not clear the cache.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗