You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[v2][Web][Streamable HTTP] Remote proxy drops the negotiated Mcp-Protocol-Version header #1935
v2 — current (@modelcontextprotocol/inspector@latest)
Which client?
Web
Inspector version
2.1.0
Node version
v24.15.0
Operating system (and browser, for the web client)
Windows 11 10.0.26200, Chrome
Transport
Streamable HTTP
MCP server under inspection
Server: A stateful local Streamable HTTP MCP server
URL: http://localhost:65535/sdk/v1/mcp
Protocol era: legacy / MCP 2025-11-25
OAuth: no
The server returns both Mcp-Session-Id and Mcp-Protocol-Version from initialize. Both headers are also exposed through CORS.
Steps to reproduce
Run npx @modelcontextprotocol/inspector@2.1.0.
Add http://localhost:65535/sdk/v1/mcp as a Streamable HTTP server.
Use the legacy protocol era and connect.
Observe that initialize requests protocol version 2025-11-25.
Observe that the initialize response returns:
Mcp-Session-Id
Mcp-Protocol-Version: 2025-11-25
result.protocolVersion: 2025-11-25
Inspect the immediately following notifications/initialized request.
The request contains Mcp-Session-Id, but does not contain Mcp-Protocol-Version.
Expected behavior
After initialization, every Streamable HTTP request must include the negotiated
protocol version:
Mcp-Protocol-Version: 2025-11-25
This includes notifications/initialized, subsequent JSON-RPC requests, SSE
GET requests, and session DELETE requests.
Actual behavior
The Inspector Web client sends Mcp-Session-Id but drops Mcp-Protocol-Version in the remote proxy layer.
The MCP server therefore rejects notifications/initialized with HTTP 400:
{
"jsonrpc": "2.0",
"id": null,
"error": {
"code": -32001,
"message": "Mcp-Protocol-Version is required for a session",
"data": {}
}
}
Logs, errors, or screenshots
The same endpoint works when used directly through
@modelcontextprotocol/client@2.0.0-beta.5; the direct SDK client correctly
sends both headers.
This resembles #679, but reproduces in the new v2.1.0 remote transport
architecture.
Already prototyped a fix?
No response
Before you submit
I searched existing issues and this is not a duplicate.
This is not a security vulnerability report (those go through the private advisory process).
Activity
symdeb commentedon Aug 6, 2026
I believe protocol version was always in the arguments but not in the header in v1 ?
In v2 its double up. in the header and in the args.