During a conversation, a host receives notifications/tools/list_changed from a server on its subscriptions/listen stream. What should the host do before the model's next turn?
Select an answer to reveal the explanation.
Short Explanation
A list_changed notice is the server waving its hand to say the menu has changed. You go grab the new menu with tools/list before the model orders again. Waiting for the TTL to run out is the trap.
Full Explanation
When a server's tool set changes, a server that declared listChanged SHOULD send notifications/tools/list_changed to clients that opened a subscriptions/listen stream with toolsListChanged set. The documented client reaction is to request the updated tool list with tools/list and refresh the definitions the language model can use, so the model works with current tools during an ongoing conversation. The caching specification also states that a relevant notification received while a cached response is still fresh invalidates that cache entry, which should then be considered immediately stale. Keeping the old list until ttlMs expires therefore contradicts the caching rules; TTL governs freshness between notifications, and the notification acts as an immediate invalidation signal. Repeating an initialize handshake is a legacy behavior with no place in the stateless 2026-07-28 revision, and capabilities have not changed simply because the tool list did. Tools are not resources and are not addressed by URIs, so resources/read cannot fetch tool definitions. Exam caveat: notifications are best effort, so clients should also rely on TTL-based refetching to keep lists fresh across reconnects. Operational check: trigger a tool change on the server and confirm the host issues tools/list after the notification and that the next model request reflects the new tool set.