docs: document subscriptions/listen and CacheableResult in draft learn and client pages#3068
docs: document subscriptions/listen and CacheableResult in draft learn and client pages#3068claude[bot] wants to merge 10 commits into
Conversation
… concepts The 2026-07-28 draft removes the resources/subscribe RPC. Update the resource protocol operations table to show subscriptions/listen and explain the resourceSubscriptions filter. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WBaED7Rta4YsYVz66Qoru
…itecture overview Rework the Real-time Updates step around the subscriptions/listen stream: clients opt in with a notifications filter (toolsListChanged), the server acknowledges the filter, and every notification carries io.modelcontextprotocol/subscriptionId in _meta. Add the required ttlMs and cacheScope fields to the example tools/list response with short field descriptions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WBaED7Rta4YsYVz66Qoru
Point the tool definition caching guidance at the spec's caching utility: ttlMs is a freshness hint that decides when to re-fetch, list_changed notifications invalidate early, and cacheScope private results must stay within one authorization context. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WBaED7Rta4YsYVz66Qoru
Add the required per-request _meta fields to the subscriptions/listen and follow-up tools/list examples, and add resultType: "complete" to the tools/list response that shows the ttlMs and cacheScope hints. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WBaED7Rta4YsYVz66Qoru
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfPKVFyxGAbS7i2f2vhT2G
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfPKVFyxGAbS7i2f2vhT2G
localden
left a comment
There was a problem hiding this comment.
Second pass for spec alignment and prose cleanup, one em dash pair inline.
| - `"tools": {"listChanged": true}` - The server supports the tools primitive AND can send `tools/list_changed` notifications when its tool list changes | ||
| - `"tools": {"listChanged": true}` - The server supports the tools primitive and can honor a `toolsListChanged` filter in `subscriptions/listen`. Clients that request this filter receive `notifications/tools/list_changed` when the tool list changes. | ||
| - `"resources": {}` - The server also supports the resources primitive (can handle `resources/list` and `resources/read` methods) |
There was a problem hiding this comment.
Can we link to the subscription pages?
There was a problem hiding this comment.
Done — the remaining unlinked subscriptions/listen mentions (architecture prose and the server-concepts resources section) now link to the subscriptions spec page as of 7d03123.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AfPKVFyxGAbS7i2f2vhT2G
| ### Caching | ||
|
|
||
| Each `tools/list` result carries `ttlMs` and `cacheScope` hints. Follow them as defined in the | ||
| specification's [caching utility](/specification/draft/server/utilities/caching). In particular, | ||
| treat a cached list as stale once a `list_changed` notification arrives, even before its TTL | ||
| expires. | ||
|
|
There was a problem hiding this comment.
| ### Caching | |
| Each `tools/list` result carries `ttlMs` and `cacheScope` hints. Follow them as defined in the | |
| specification's [caching utility](/specification/draft/server/utilities/caching). In particular, | |
| treat a cached list as stale once a `list_changed` notification arrives, even before its TTL | |
| expires. | |
| ### Caching | |
| All list (e.g.`tools/list`) ,as well as `server/discover` and `resources/read`, results carries `ttlMs` and `cacheScope` hints. Follow them as defined in the | |
| specification's [caching utility](/specification/draft/server/utilities/caching). In particular, | |
| treat a cached list as stale once a `list_changed` notification arrives, even before its TTL | |
| expires. |
There was a problem hiding this comment.
Done in 8ba1088 — the Caching section now covers list results plus server/discover and resources/read, matching the caching utility's operation list.
| 4. **Event-Driven**: The server decides when to send notifications based on internal state changes, making MCP connections dynamic and responsive. | ||
|
|
There was a problem hiding this comment.
| 4. **Event-Driven**: The server decides when to send notifications based on internal state changes, making MCP connections dynamic and responsive. | |
| 4. **Event-Driven**: The server decides when to send notifications based on internal state changes, making MCP connections dynamic and responsive. | |
| 5. **Best Effort**: There are no guarantees that every notification will be sent/received, particularly across transport reconnects. Clients should also rely on polling to preserve freshness of results. | |
There was a problem hiding this comment.
Added the "Best Effort" bullet as suggested in 8ba1088.
…ns spec page Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Ep4aMzUcNqroQQuXdiHKn
… note best-effort notification delivery Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018Ep4aMzUcNqroQQuXdiHKn
Requested by Den Delimarsky · Slack thread
Readers of the draft learn pages previously saw resource updates explained through
resources/subscribeand tool list examples with no caching hints. The server concepts and architecture pages now walk through thesubscriptions/listenflow, from the filtered request and its required_metafields to the acknowledgment and the tagged update notifications. The architecture page's tool list example and the client best practices page now coverresultTypetogether with thettlMsandcacheScopecaching fields.Motivation and Context
Part of the docs preparation for the 2026-07-28 release. The learn pages still taught the old update flow, where
resources/subscribeand a standalone GET stream delivered notifications, and the tool list examples predated the requirement that complete list and read results carry caching hints.Closes #3041
Closes #3044
How Has This Been Tested?
Documentation-only change. Ran
npm run check:docs, which passes after the changes. That covers the prettier format check, the MDX comment check, and the mint broken-links check. Prettier accepts the edited files as-is.Breaking Changes
None.
Types of changes
Checklist
Additional context
This bundle touches the draft architecture page, which other rc-high-priority bundle PRs also modify, so merge order may need care.
AI assistance disclosure: this PR, including the documentation changes and this description, was written primarily with AI assistance. The diff gets human review before merge.
Generated by Claude Code