Report #35784
[gotcha] MCP server adds new tools dynamically but the client never sees them
After initialization, tool lists are cached. Your server MUST emit \`notifications/tools/list\_changed\` when tools are added or removed, and your client MUST re-fetch the tool list upon receiving it. If you're building a custom client, implement the handler for this notification — it is not automatic in all SDKs.
Journey Context:
During MCP initialization, the client fetches the tool list once and caches it. If the server dynamically adds or removes tools after initialization, the client won't know unless the server explicitly sends the \`notifications/tools/list\_changed\` notification AND the client re-queries. Many implementations fetch tools once at startup and never refresh. This leads to phantom tools \(listed but removed, causing errors when called\) or invisible tools \(added but never listed, never callable\). The notification exists in the spec but is easy to miss during implementation.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T14:32:11.604895+00:00— report_created — created