GitHub Advisoryadvisory · npm
GHSA-jm63-cq47-j5jp MCP TypeScript server SDK: Shared transport or server instances delivered one HTTP client's messages to another
HIGH
Official page ↗
- Aliases
- CVE-2026-111770
- Ecosystem
- npm
- Packages
- @modelcontextprotocol/server
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:H
- Weaknesses
- CWE-362
- Reviewed
- 2026-10-20
Affected packages
• npm @modelcontextprotocol/server: >= 2.0.0, < 2.3.0 → fixed in 2.3.0
Description
Summary
In affected versions, an MCP server reached over HTTP could deliver one client's responses and notifications to another client. This happened when clients shared one stateless transport, or one `McpServer` or `Server` instance.
Messages were matched to a connection by JSON-RPC `id` alone. SDK clients number requests from 0, so ids collide in normal use.
Am I affected?
Yes, if more than one client can reach your HTTP endpoint and your code creates the transport or the server once at startup, instead of once per request or per session. Until this release, the README examples of `@modelcontextprotocol/hono`, `express`, `fastify` and `node` showed that pattern.
Affected versions: `@modelcontextprotocol/server` 2.0.0 through 2.2.0.
Not affected:
• `createMcpHandler()` with a factory that builds a new server on every call
• stdio servers
• `@modelcontextprotocol/sdk` 1.26.0 and later
Fix
Upgrade to `@modelcontextprotocol/server` 2.3.0 or later.
You also need to change your code. The SDK now refuses to be shared, so an affected app fails requests after upgrading: a second `connect()` rejects with `ALREADY_CONNECTED`, and a stateless transport rejects its second request.
Change to one of these:
• `createMcpHandler()`: pass a factory that builds a new `McpServer` on every call.
• Per request: build a new `McpServer` and a new transport inside the request handler.
• Per session: set `sessionIdGenerator` and keep one `McpServer` and one transport per session.
If you cannot upgrade yet, the same change fixes affected versions.
Related
Alias · not in database (1)
Weakness · CWE (1)
- CWE-362 Concurrent Execution using Shared Resource with Improper Synchronization weakness
References
- https://github.com/modelcontextprotocol/typescript-sdk/security/advisories/GHSA-jm63-cq47-j5jp web
- https://github.com/modelcontextprotocol/typescript-sdk/pull/2918 web
- https://github.com/modelcontextprotocol/typescript-sdk/commit/84804c22e45a662675a198f853b7f00063838a8d web
- https://github.com/modelcontextprotocol/typescript-sdk package