Open a draft subscriptions/listen stream over stdio. Unlike Streamable
HTTP — where the listen stream is a separate long-lived SSE response — stdio
shares one channel, so opening a subscription is just writing the
subscriptions/listen request line; the server delivers the leading
notifications/subscriptions/acknowledged and every subsequent change
notification on the same stdout channel, each stamped with
io.modelcontextprotocol/subscriptionId (the listen request id), and they
reach the client's inbound dispatcher through the channel's read loop (draft
basic/utilities/subscriptions: "On stdio ... clients MUST use this field to
correlate notifications"). The returned handle's cancel()/close() ends
the subscription by sending notifications/cancelled referencing the listen
request id, per the draft stdio cancellation rule.
Open a draft subscriptions/listen stream over stdio. Unlike Streamable HTTP — where the listen stream is a separate long-lived SSE response — stdio shares one channel, so opening a subscription is just writing the subscriptions/listen request line; the server delivers the leading notifications/subscriptions/acknowledged and every subsequent change notification on the same stdout channel, each stamped with io.modelcontextprotocol/subscriptionId (the listen request id), and they reach the client's inbound dispatcher through the channel's read loop (draft basic/utilities/subscriptions: "On stdio ... clients MUST use this field to correlate notifications"). The returned handle's cancel()/close() ends the subscription by sending notifications/cancelled referencing the listen request id, per the draft stdio cancellation rule.