Version Packages - #175
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 12:33
9bf0e19 to
b798e3c
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
January 14, 2026 00:33
df38f93 to
59df763
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
January 22, 2026 18:33
5582238 to
b362edf
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
January 28, 2026 18:33
89b57bb to
085b09c
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
7 times, most recently
from
February 6, 2026 18:33
e385700 to
41a64d9
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
February 13, 2026 18:33
f341bd3 to
636fae5
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
3 times, most recently
from
February 20, 2026 06:33
ada79de to
d9110e9
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
3 times, most recently
from
March 15, 2026 18:33
e956327 to
ee99040
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
12 times, most recently
from
March 30, 2026 12:34
752fad9 to
894c2e2
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
3 times, most recently
from
March 31, 2026 06:34
c5aad6d to
e9f4a90
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
April 4, 2026 06:34
72ccc3f to
3b6840e
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
April 16, 2026 12:34
e6326bb to
53f503a
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
2 times, most recently
from
April 23, 2026 00:34
940e536 to
c2e832f
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 []: