Project these capabilities to the wire shape for protocol version v,
stripping any field newer than v and migrating tasks to the draft
extensions map. roots/rootsListChanged, a bare sampling, and
experimental exist in every supported version and pass through unchanged.
elicitation applies from 2025-06-18, so it is gated to
>= 2025-06-18 (a client that set only an elicitation submode still
projects a bare elicitation there). The sampling/elicitation sub-objects
(sampling.tools/sampling.context, elicitation.form/elicitation.url)
apply from 2025-11-25 and are stripped below that. tasks is a
first-class client capability in the stable 2025-11-25 era (and any future
stable revision >= 2025-11-25); the draft schema has no top-level client
tasks, so for draft it is folded into extensions[tasksExtensionKey]. The
extensions negotiation map itself is draft-only.
Project these capabilities to the wire shape for protocol version v, stripping any field newer than v and migrating tasks to the draft extensions map. roots/rootsListChanged, a bare sampling, and experimental exist in every supported version and pass through unchanged. elicitation applies from 2025-06-18, so it is gated to >= 2025-06-18 (a client that set only an elicitation submode still projects a bare elicitation there). The sampling/elicitation sub-objects (sampling.tools/sampling.context, elicitation.form/elicitation.url) apply from 2025-11-25 and are stripped below that. tasks is a first-class client capability in the stable 2025-11-25 era (and any future stable revision >= 2025-11-25); the draft schema has no top-level client tasks, so for draft it is folded into extensions[tasksExtensionKey]. The extensions negotiation map itself is draft-only.