Version Packages - #184
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
December 23, 2025 18:49
04a0898 to
85091b9
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
6 times, most recently
from
January 14, 2026 00:54
ed66b0a to
4f02d5a
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
January 22, 2026 20:16
5475898 to
5425ee9
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
January 28, 2026 22:50
b165ad8 to
820bfe4
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
7 times, most recently
from
February 6, 2026 19:26
70d3d66 to
ab946d9
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
February 13, 2026 20:49
6df74b7 to
ae67dbb
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
February 20, 2026 00:23
d040c16 to
0b11446
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
3 times, most recently
from
March 16, 2026 02:48
480a2a1 to
45afe01
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
10 times, most recently
from
March 30, 2026 14:08
9ebfb8a to
68934ef
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
March 31, 2026 20:44
35cc43b to
3832832
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
3 times, most recently
from
April 4, 2026 19:36
3ec4ddc to
46067a6
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
April 16, 2026 23:55
80ac0da to
3c3a830
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
April 23, 2026 14:50
d68485d to
ac04abd
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
April 29, 2026 07:58
9d1a7eb to
d9e7ae5
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@modelcontextprotocol/client@2.0.1
Patch Changes
#2654
03842cdThanks @pshah19! - Treat request id0as a real id. Two guards tested aRequestIdfor truthiness, so the legal JSON-RPC ids0and''were read as absent. Id0is not a corner case: the outbound request counter is zero-based, so it is the first id every peer assigns, which on the server→client leg is the firstsampling/createMessage,elicitation/create, orroots/lista server sends.notifications/cancelledcarrying id0was ignored, and the in-flight handler ran to completion with itsAbortSignalnever fired.relatedRequestId: 0wrongly passed the debounce gate (for methods opted intodebouncedNotificationMethods). Because the pending set is keyed by method alone, a second such notification in the same tick was silently dropped rather than sent.Absent is now the only value that means "no id".
#2668
3e90449Thanks @KKonstantinov! - Stop sendingnotifications/cancelledfor theinitializehandshake. The spec is explicit that a client MUST NOT attempt to cancel itsinitializerequest, but the outbound cancel path fired for any in-flight request: aborting theAbortSignalpassed toconnect(), or letting the handshake hit its timeout, put a forbidden cancellation on the wire naming the initialize request id.The local behaviour is unchanged — the caller's promise still rejects with the same abort/timeout error, and
connect()still tears the connection down. Only the wire notification is suppressed. Every other method keeps the existing cancellation path.Updated dependencies []:
@modelcontextprotocol/server@2.0.1
Patch Changes
#2654
03842cdThanks @pshah19! - Treat request id0as a real id. Two guards tested aRequestIdfor truthiness, so the legal JSON-RPC ids0and''were read as absent. Id0is not a corner case: the outbound request counter is zero-based, so it is the first id every peer assigns, which on the server→client leg is the firstsampling/createMessage,elicitation/create, orroots/lista server sends.notifications/cancelledcarrying id0was ignored, and the in-flight handler ran to completion with itsAbortSignalnever fired.relatedRequestId: 0wrongly passed the debounce gate (for methods opted intodebouncedNotificationMethods). Because the pending set is keyed by method alone, a second such notification in the same tick was silently dropped rather than sent.Absent is now the only value that means "no id".
#2668
3e90449Thanks @KKonstantinov! - Stop sendingnotifications/cancelledfor theinitializehandshake. The spec is explicit that a client MUST NOT attempt to cancel itsinitializerequest, but the outbound cancel path fired for any in-flight request: aborting theAbortSignalpassed toconnect(), or letting the handshake hit its timeout, put a forbidden cancellation on the wire naming the initialize request id.The local behaviour is unchanged — the caller's promise still rejects with the same abort/timeout error, and
connect()still tears the connection down. Only the wire notification is suppressed. Every other method keeps the existing cancellation path.#2590
75dc7eaThanks @davidpavlovschi! - Reject a modern (2026-07-28) POST that omits the requiredMCP-Protocol-Versionheader.createMcpHandleraccepted a request whose body carried a valid per-request_metaenvelope but whose
MCP-Protocol-Versionheader was absent: the request was classifiedmodern, dispatched, and answered
200— tool handlers ran. Only the mismatch case(header present, disagreeing with the body) was rejected, so of the standard headers
SEP-2243 requires on a modern POST, presence was enforced for
Mcp-Method(and forMcp-Nameon the methods that mirrorparams.name/params.uri) but not forMCP-Protocol-Version.Such a request is now refused with
400 Bad Requestand JSON-RPC-32020(
HeaderMismatch), matching the shape the sibling missing-header cells already emit andechoing the request id — per the Streamable HTTP spec, which requires the header on every
POST and lists a missing required standard header as a
HeaderMismatchfailure. Thespec's allowance to treat a header-less request as
2025-03-26is available only to aserver that also serves pre-2025-06-18 clients, and permits routing it to legacy
handling — never serving it as 2026-07-28; under
legacy: 'reject'the requirement isunconditional.
Era classification is deliberately unchanged and stays body-primary: a proxy that strips
the header still must not change the era, so such a request is still classified modern
and is refused one rung later, at
standard-header-validation— the same rung thatalready answers a missing
Mcp-Method. Legacy-era traffic is untouched, notificationsare unaffected, body-less
GET/DELETEsession operations are method-routed beforeany header validation, and stdio serving (which has no HTTP headers) is not involved.
Clients built with this SDK always send the header, so no first-party client is affected;
hand-rolled clients that omitted it must add it.
Updated dependencies []:
@modelcontextprotocol/server-legacy@2.0.1
Patch Changes
@modelcontextprotocol/codemod@2.0.1
@modelcontextprotocol/core@2.0.1
@modelcontextprotocol/core-internal@2.0.1
Patch Changes
#2654
03842cdThanks @pshah19! - Treat request id0as a real id. Two guards tested aRequestIdfor truthiness, so the legal JSON-RPC ids0and''were read as absent. Id0is not a corner case: the outbound request counter is zero-based, so it is the first id every peer assigns, which on the server→client leg is the firstsampling/createMessage,elicitation/create, orroots/lista server sends.notifications/cancelledcarrying id0was ignored, and the in-flight handler ran to completion with itsAbortSignalnever fired.relatedRequestId: 0wrongly passed the debounce gate (for methods opted intodebouncedNotificationMethods). Because the pending set is keyed by method alone, a second such notification in the same tick was silently dropped rather than sent.Absent is now the only value that means "no id".
#2668
3e90449Thanks @KKonstantinov! - Stop sendingnotifications/cancelledfor theinitializehandshake. The spec is explicit that a client MUST NOT attempt to cancel itsinitializerequest, but the outbound cancel path fired for any in-flight request: aborting theAbortSignalpassed toconnect(), or letting the handshake hit its timeout, put a forbidden cancellation on the wire naming the initialize request id.The local behaviour is unchanged — the caller's promise still rejects with the same abort/timeout error, and
connect()still tears the connection down. Only the wire notification is suppressed. Every other method keeps the existing cancellation path.#2590
75dc7eaThanks @davidpavlovschi! - Reject a modern (2026-07-28) POST that omits the requiredMCP-Protocol-Versionheader.createMcpHandleraccepted a request whose body carried a valid per-request_metaenvelope but whose
MCP-Protocol-Versionheader was absent: the request was classifiedmodern, dispatched, and answered
200— tool handlers ran. Only the mismatch case(header present, disagreeing with the body) was rejected, so of the standard headers
SEP-2243 requires on a modern POST, presence was enforced for
Mcp-Method(and forMcp-Nameon the methods that mirrorparams.name/params.uri) but not forMCP-Protocol-Version.Such a request is now refused with
400 Bad Requestand JSON-RPC-32020(
HeaderMismatch), matching the shape the sibling missing-header cells already emit andechoing the request id — per the Streamable HTTP spec, which requires the header on every
POST and lists a missing required standard header as a
HeaderMismatchfailure. Thespec's allowance to treat a header-less request as
2025-03-26is available only to aserver that also serves pre-2025-06-18 clients, and permits routing it to legacy
handling — never serving it as 2026-07-28; under
legacy: 'reject'the requirement isunconditional.
Era classification is deliberately unchanged and stays body-primary: a proxy that strips
the header still must not change the era, so such a request is still classified modern
and is refused one rung later, at
standard-header-validation— the same rung thatalready answers a missing
Mcp-Method. Legacy-era traffic is untouched, notificationsare unaffected, body-less
GET/DELETEsession operations are method-routed beforeany header validation, and stdio serving (which has no HTTP headers) is not involved.
Clients built with this SDK always send the header, so no first-party client is affected;
hand-rolled clients that omitted it must add it.
Updated dependencies []: