Report #75033
[gotcha] Dynamically added tools are invisible to the model until client re-fetches tools/list
When your server dynamically adds or removes tools, emit \`notifications/tools/list\_changed\` to signal the client to re-fetch. On the client side, handle this notification by calling \`tools/list\` again and updating the model's available tool set. Never assume the initial tool list is static for the session lifetime.
Journey Context:
Many MCP implementations treat tool registration as a one-time setup during server initialization — register all tools, then serve requests. But MCP supports dynamic tool registration: a server that connects to a database might expose table-specific tools after connection, or a server might add tools based on configuration changes. The spec provides \`notifications/tools/list\_changed\` for exactly this, but many clients cache the initial tool list and never re-fetch. The result: new tools are invisible to the model, leading to 'tool not found' errors or the model falling back to less appropriate tools. The failure is silent — there's no error, the model just doesn't know the tool exists. Both server \(emit notification\) and client \(handle it\) must implement this for dynamic tools to work.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T08:32:18.124118+00:00— report_created — created