Skip to content

23 tools · 104 fixes · 29 issue guides · Sources: GitHub, Supabase, OWASP, Vercel + 28

Incident feed

MCP TypeScript SDK servers that share one instance can send one client's responses to another

On October 15, 2026, the MCP TypeScript SDK published GHSA-jm63-cq47-j5jp. An HTTP server that shares one stateless transport, or one McpServer or Server instance, can deliver one client's responses and notifications to another. The version data lists @modelcontextprotocol/server >= 2.0.0, < 2.3.0, patched in 2.3.0.

Share link · Share on X

What was reported

The MCP TypeScript SDK advisory GHSA-jm63-cq47-j5jp, published October 15, 2026, says 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.

The advisory's version data lists @modelcontextprotocol/server at >= 2.0.0, < 2.3.0, patched in 2.3.0. The advisory text says affected versions are @modelcontextprotocol/server 2.0.0 through 2.2.0. This note uses the version data for the affected range. The advisory rates the issue High, with CVSS 3.1 score 7.7 and vector CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:L/A:H, and names CWE-362. It lists no CVE ID.

The advisory says you are affected if more than one client can reach the HTTP endpoint and the 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. It says these are not affected: createMcpHandler() with a factory that builds a new server on every call, stdio servers, and @modelcontextprotocol/sdk 1.26.0 and later.

Upgrade to @modelcontextprotocol/server 2.3.0 or later, and change the code. The advisory says 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. The advisory's options are a createMcpHandler() factory that builds a new McpServer on every call, a new McpServer and a new transport inside the request handler, or sessionIdGenerator with one McpServer and one transport per session. If you cannot upgrade yet, the advisory says the same change fixes affected versions.

How to prevent it

Build a new McpServer and transport for every HTTP request, or keep one per session with sessionIdGenerator, then upgrade @modelcontextprotocol/server to 2.3.0. The advisory says the patched version refuses a shared instance, so upgrading without that code change makes requests fail.

Sources

The weekly fix

The weekly fix: 3 real security mistakes in vibe-coded apps and how to fix them, every Tuesday.

One email, every Tuesday. A welcome note follows the first signup.