Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/specification/2025-11-25/basic/lifecycle.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,11 @@ to indicate it is ready to begin normal operations:
In the `initialize` request, the client **MUST** send a protocol version it supports.
This **SHOULD** be the _latest_ version supported by the client.

For HTTP transports, the `initialize` request body is the authoritative input to
version negotiation. The `MCP-Protocol-Version` HTTP header is not required on
the initial `initialize` request and, if present, **MUST NOT** override the
`params.protocolVersion` value in the request body.

If the server supports the requested protocol version, it **MUST** respond with the same
version. Otherwise, the server **MUST** respond with another protocol version it
supports. This **SHOULD** be the _latest_ version supported by the server.
Expand Down
5 changes: 5 additions & 0 deletions docs/specification/2025-11-25/basic/transports.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,11 @@ For example: `MCP-Protocol-Version: 2025-11-25`
The protocol version sent by the client **SHOULD** be the one [negotiated during
initialization](/specification/2025-11-25/basic/lifecycle#version-negotiation).

The initial `initialize` request negotiates the protocol version through
`params.protocolVersion` in the JSON-RPC body. If an HTTP client also sends an
`MCP-Protocol-Version` header on that initial request, the header **MUST NOT**
override the body value used for version negotiation.

For backwards compatibility, if the server does _not_ receive an `MCP-Protocol-Version`
header, and has no other way to identify the version - for example, by relying on the
protocol version negotiated during initialization - the server **SHOULD** assume protocol
Expand Down