Claude Code deferred-tool registry is frozen at session start — mid-session MCP cutovers require a fresh session
The trap
When an MCP server is upgraded mid-session (rebuild + container restart + new tools published), the Claude Code session that was already running BEFORE the cutover will NOT see the new deferred tool schemas — even though /health and direct tools/list curl confirm the new tools are live server-side. The session’s deferred-tool registry was populated when the session opened and is NOT refreshed by container restarts.
Symptoms
ToolSearchfor the new tool name returns “No matching deferred tools found”- OR — worse — the OLD schema for an upgraded tool is what gets loaded, with new optional params absent (silent rejection of new args, or args getting routed to
additionalProperties: trueand ignored) - Direct
curl /mcpconfirms the new schema is live → confirms it’s a CLIENT-side cache issue, not a server-side gap
Confirmed examples (operator session 2026-05-06)
- fivetran-mcp v18.x → v19.1.2 — added
daily_sync_time+schedule_typeas top-level params onmodify_connector. Live session’s cached schema lacked the new top-level fields; operator passed them nested underconfig(additionalProperties:true) → Fivetran returned 200 OK and silently ignored the unknown nested key. Connector unchanged. - tableau-mcp v5.x → v6.0.4 — added
update_extract_refresh_task+create_extract_refresh_task. Live session’sToolSearchreturned “No matching deferred tools found” for both names. Server-side/mcp tools/listconfirmed both present. - salesforce-mcp v7.0.2 → v7.1.0 — added 9 new P1-P6 operator-intent tools. Live session’s deferred registry was frozen at v7.0.2 launch and didn’t surface the new tools. Required a fresh session to access them.
Resolution (operator-side, ~30 sec)
- Open a fresh Claude Code session — the deferred-tool registry rebuilds on session open and inherits the upgraded MCP server’s current tools/list.
- (Optional belt-and-suspenders) — refresh the relevant Custom Connector in Claude Desktop before opening the new session.
Anti-patterns — do NOT
- ❌ Try harder with the stale schema (passing new params nested in
configetc.) — they get silently ignored OR routed wrong - ❌ Bypass with curl scripts using stored creds — violates tool-ambiguity protocol
- ❌ Assume the server is broken because the session can’t see new tools — verify server-side first via direct
/health+/mcp tools/listcurl
How to tell quickly
If you suspect this:
# Compare what the session sees vs. what the server actually exposes
curl -s https://<server>.arjtech.in/health | jq '.tools, .version'
curl -s https://<server>.arjtech.in/mcp -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools | length'If server count > what your session can resolve via ToolSearch → it’s session staleness. Open fresh session.
Why this matters
The frozen-registry behavior is invisible — there’s no warning, no version skew banner. Operator confidently calls upgraded tooling, gets “tool not found” or silent argument-drop, and starts debugging the wrong layer (server thinks it’s a server bug, dev thinks it’s a feature gap, etc.). Costs 30-60 min per occurrence to re-diagnose.
Time-saving claim
Catching this in <2 min instead of 30-60 min ≈ 30+ min saved per recurrence. With the rate of MCP server upgrades on this stack (≥1 per week), this is one of the higher-frequency operator gotchas on the Claude Code platform itself.
Related
feedback_tool_ambiguity_protocol.md— flag + stop, don’t bypass- Decisions log entries 2026-05-06 (DSR pipeline reschedule re-attempt) and 2026-05-06 (System Admin Clone tightening on v7.1.0)