Remote MCP proxy caches tools/list, ignoring notifications/tools/list_changed

Resolved 💬 3 comments Opened Mar 30, 2026 by hortovanyi Closed Apr 3, 2026

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_changed events 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

  • ToolSearch in Claude Code returns the pre-change description after the deploy
  • Tool calls work (server returns correct results), but Claude Code shows old tool metadata
  • /mcp reconnect 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

  1. Notification delivery: When the server emits notifications/tools/list_changed, Claude Code should re-fetch tools/list and update its cached tool definitions.
  1. Fresh reconnect: At minimum, /mcp reconnect (which creates a new session) should return the current tools/list from the live server, not a cached version.

Actual behavior

  • notifications/tools/list_changed is never delivered to the client via SSE, despite the server persisting it correctly.
  • Even a full /mcp reconnect returns stale tool descriptions, suggesting the Anthropic proxy caches tools/list responses 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_changed mechanism 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.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗