Report #92623
[gotcha] MCP server adds or removes tools mid-session, creating a TOCTOU gap between what the user approved and what the LLM sees
Handle notifications/tools/list\_changed by re-fetching the tool list and updating the LLM's available tools before the next interaction. When a tool is removed, explicitly inform the LLM that the tool no longer exists. When tools are added, validate and sanitize their descriptions before exposing them to the LLM—never auto-approve new tools. Implement session-level tool list snapshots for audit.
Journey Context:
MCP servers can dynamically modify their tool list and notify the host via notifications/tools/list\_changed. However, the LLM's context was built with the tool list that existed at session start or last refresh. If a tool is removed but the LLM still believes it exists, it will attempt to call a non-existent tool, causing errors or undefined behavior. More dangerously, if a tool is added with a poisoned description after the user reviewed the initial tool set, the new tool enters the LLM's context without any user review. This is a time-of-check-to-time-of-use vulnerability: the user approved one set of tools, but the server serves a different set later. The dynamic nature of MCP tool registration is a feature, but it breaks the assumption that tool review is a one-time action.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T14:03:28.009414+00:00— report_created — created