Skip to content

fix: honor supported_protocol_versions when negotiating initialize - #1093

Merged
DaleSeo merged 1 commit into
mainfrom
fix/negotiate-honors-supported-protocol-versions
Jul 30, 2026
Merged

fix: honor supported_protocol_versions when negotiating initialize#1093
DaleSeo merged 1 commit into
mainfrom
fix/negotiate-honors-supported-protocol-versions

Conversation

@DaleSeo

@DaleSeo DaleSeo commented Jul 30, 2026

Copy link
Copy Markdown
Member

Motivation and Context

Follow-up to #1080.

ServerHandler::supported_protocol_versions already declares which revisions a server supports, and two paths already honor it. Inline, per-request negotiation rejects versions outside the list with unsupported_protocol_version, and discover advertises the list to clients. However, the initialize handshake ignored it and hardcoded ProtocolVersion::KNOWN_VERSIONS inside negotiate_protocol_version.

That made the server inconsistent. For example, a server that narrows its list to exclude 2026-07-28 would advertise the narrower list through discover and reject a per-request 2026-07-28. But initialize would still return 2026-07-28, and the server would then be unable to handle the follow-up requests that version requires, including SEP-2243 standard headers and discovery. KNOWN_VERSIONS only represents the versions the SDK has constants for. It does not mean that every server supports all of them.

This PR passes the server's supported list into negotiate_protocol_version, so the handshake only agrees to versions the server actually declares. supported_protocol_versions has been added to Service with the same default of KNOWN_VERSIONS. This lets both service-layer negotiation paths access it, including the serve_server handshake used by stdio and stateful HTTP, as well as the stateless wrapper added in #1080.

How Has This Been Tested?

Added tests

Breaking Changes

None.

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

@github-actions github-actions Bot added T-test Testing related changes T-core Core library changes T-handler Handler implementation changes T-service Service layer changes T-transport Transport layer changes labels Jul 30, 2026
@DaleSeo
DaleSeo marked this pull request as ready for review July 30, 2026 13:38
@DaleSeo
DaleSeo requested a review from a team as a code owner July 30, 2026 13:38
@DaleSeo DaleSeo self-assigned this Jul 30, 2026
@DaleSeo
DaleSeo merged commit d272389 into main Jul 30, 2026
22 checks passed
@DaleSeo
DaleSeo deleted the fix/negotiate-honors-supported-protocol-versions branch July 30, 2026 19:44
@github-actions github-actions Bot mentioned this pull request Jul 30, 2026
howardjohn pushed a commit to agentgateway/agentgateway that referenced this pull request Jul 31, 2026
Bump to latest stable release
https://github.com/modelcontextprotocol/rust-sdk/releases/tag/rmcp-v3.1.0

```
Added
classify authorization-required errors (modelcontextprotocol/rust-sdk#1056)
add strict stateless protocol metadata validation (modelcontextprotocol/rust-sdk#1091)
SEP-2260 stream-based enforcement of client receive-side request association (modelcontextprotocol/rust-sdk#1055)
Fixed
(model) decode metadata-bearing input-required results affecting mrtr (modelcontextprotocol/rust-sdk#1097)
require metadata for modern HTTP requests (modelcontextprotocol/rust-sdk#1089)
honor supported_protocol_versions when negotiating initialize (modelcontextprotocol/rust-sdk#1093)
Other
document the ping utility with examples (modelcontextprotocol/rust-sdk#1106)
complete Tier 1 feature docs and finalize roadmap (modelcontextprotocol/rust-sdk#1101)
(conformance) meeting requirements for tier 1 (modelcontextprotocol/rust-sdk#1087)
```

Signed-off-by: Filinto Duran <1373693+filintod@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

T-core Core library changes T-handler Handler implementation changes T-service Service layer changes T-test Testing related changes T-transport Transport layer changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants