Skip to content

SEP-XXXX: Require Server-to-client requests to be associated with Client requests#8

Closed
evalstate wants to merge 18 commits intomodelcontextprotocol:mainfrom
evalstate:feat/sep-draft
Closed

SEP-XXXX: Require Server-to-client requests to be associated with Client requests#8
evalstate wants to merge 18 commits intomodelcontextprotocol:mainfrom
evalstate:feat/sep-draft

Conversation

@evalstate
Copy link
Copy Markdown
Member

Draft proposal for deprecating Sampling and Elicitation.

Motivation and Context

Simplify future transport implementations, tighten existing text as although it works, various parts of the specification allude to this not being desirable (e.g. nested).

How Has This Been Tested?

Breaking Changes

Yes - but scope has been researched and found to be limited so far. One purpose of this SEP is to collect feedback from potentially impacted users we are not aware of.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

For discussion at Transport W-G. The aim is to release new transport versions in H2. This SEP does not intend to change the specification, but serve as notice of intent. Wording changes can be proposed if timelines change.

This text has been created with assistance of LLMs, but hand reviewed and edited.
@evalstate evalstate changed the title Feat/sep draft Notice of intended Sampling and Elicitation Request usage Jan 25, 2026
@evalstate evalstate changed the title Notice of intended Sampling and Elicitation Request usage SEP: Notice to clarify Sampling and Elicitation Request behaviour Jan 25, 2026
@kurtisvg kurtisvg changed the title SEP: Notice to clarify Sampling and Elicitation Request behaviour SEP-XXXX: Notice to clarify Sampling and Elicitation Request behaviour Jan 26, 2026
@kurtisvg kurtisvg changed the title SEP-XXXX: Notice to clarify Sampling and Elicitation Request behaviour SEP-XXXX: Require Sampling and Elicitation Requests to Associate with Client Requests Feb 10, 2026
kurtisvg
kurtisvg previously approved these changes Feb 10, 2026
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Copy link
Copy Markdown
Contributor

@CaitieM20 CaitieM20 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My Vote: Approved with suggestions!

Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md
Comment thread proposals/unsolicited-sep.md Outdated
Servers **MUST** send `sampling/createMessage` requests only in association with an originating client request (e.g., during `tools/call`, `resources/read`, or `prompts/get` processing).

Standalone server-initiated sampling on independent communication streams (unrelated to any client request) is not supported and **MUST NOT** be implemented. Future transport implementations are not required to support this pattern.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems like what we are really saying with this SEP is that the fundamental communication model is changing from bidirectional to client-initiated request/response. Should we just come out and say that?

Co-authored-by: Caitie McCaffrey <caitiem20@github.com>
evalstate and others added 7 commits February 12, 2026 13:36
@evalstate evalstate changed the title SEP-XXXX: Require Sampling and Elicitation Requests to Associate with Client Requests SEP-XXXX: Require server-to-client requests to Associate with Client Requests Feb 13, 2026
@evalstate evalstate changed the title SEP-XXXX: Require server-to-client requests to Associate with Client Requests SEP-XXXX: Require Server-to-client requests to be associated with Client requests Feb 13, 2026
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md
Comment thread proposals/unsolicited-sep.md
Comment thread proposals/unsolicited-sep.md
kurtisvg
kurtisvg previously approved these changes Feb 13, 2026
Copy link
Copy Markdown
Collaborator

@kurtisvg kurtisvg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM -- few suggestions to make it clearer.

Copy link
Copy Markdown

@mikekistler mikekistler left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I recommended a few more changes, but nothing I would let block the review with the core maintainers.

Comment thread proposals/unsolicited-sep.md
Comment on lines +49 to +56
### Simplification Benefits

Making this constraint explicit:

1. **Simplifies transport implementations** - Transports don't need to support arbitrary server-initiated request/response flows, which require a persistent connection from Server to Client; they only need request-scoped bidirectional communication
2. **Clarifies user experience** - Users understand that sampling/elicitation happens *because* they initiated an action, not spontaneously
3. **Reduces security surface** - Ensures client has context for what scope the additional requested information will be used for. This allows clients to make better informed decisions on whether to provide the requested info.
4. **Aligns with practice** - Based on a scan of GitHub all existing implementations already follow this pattern, except one repo owned by the SEP author with a contrived scenario.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this should be the first, and maybe the only, section within Motivation, as I believe the reasons listed here are the most objective and compelling reasons for this change. Reasons given in other sections are subjective and open to debate. We should put the strongest reasoning first.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed. I'll leave the other text here for the moment as it contains links/context but appreciate that the proposal is stronger without.

Comment thread proposals/unsolicited-sep.md
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
Comment thread proposals/unsolicited-sep.md Outdated
+ The server **MAY** send JSON-RPC _requests_ and _notifications_ before sending the
+ JSON-RPC _response_. These messages **SHOULD** relate to the originating client
+ _request_. In particular, `sampling/createMessage` and `elicitation/create`
+ requests **MUST** only be sent in this context (associated with a client request).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need this change. The goal of the SEP is to discourage unsolicited server-to-client requests. Let's keep the scope to that.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we do keep this, let's also mention roots.

Comment thread proposals/unsolicited-sep.md
Copy link
Copy Markdown
Contributor

@markdroth markdroth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks really good to me! Just a few minor comments.

Comment thread proposals/unsolicited-sep.md
+ The server **MAY** send JSON-RPC _requests_ and _notifications_ before sending the
+ JSON-RPC _response_. These messages **SHOULD** relate to the originating client
+ _request_. In particular, `sampling/createMessage` and `elicitation/create`
+ requests **MUST** only be sent in this context (associated with a client request).
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we do keep this, let's also mention roots.

Comment thread proposals/unsolicited-sep.md
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
evalstate and others added 2 commits February 13, 2026 22:08
Co-authored-by: Mike Kistler <mikekistler@microsoft.com>
Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Comment thread proposals/unsolicited-sep.md
@CaitieM20
Copy link
Copy Markdown
Contributor

Closing since this has moved to official SEP: (modelcontextprotocol/modelcontextprotocol#2260)

@CaitieM20 CaitieM20 closed this Feb 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants