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
Connecting to a strict modern (2026-07-28) HTTP MCP server (e.g. the GitHub MCP Server) and calling a tool whose argument carries a SEP-2243 x-mcp-header annotation fails with:
header mismatch: missing Mcp-Param-owner header for parameter "owner"
The Inspector never sends the mirrored Mcp-Param-* header, so the server rejects the call with -32020.
Root cause
SEP-2243 x-mcp-header → Mcp-Param-* mirroring lives only inside the SDK's client.callTool(), and there it is additionally gated && detectProbeEnvironment() !== "browser". Two independent reasons it never happens in the Inspector:
The Inspector doesn't use callTool(). To drive MRTR / input_required manually (History: drive MRTR manually to keep pending-request UX on modern connections #1704), tools/call is routed through client.request("tools/call", …) (requestWithInputRequired). That path has no mirroring — so it is bypassed on every transport (web, CLI, TUI), not just the browser.
The web path couldn't carry the header anyway.RemoteClientTransport.requestSend() only forwarded { sessionId, message, relatedRequestId }; per-request headers never reached the backend's upstream transport.send.
#1632 added x-mcp-headerdisplay + invalid-tool exclusion, but never wired the header onto the tools/call wire.
Fix
core: in InspectorClient.attemptToolCall, on a modern connection, build the Mcp-Param-* headers (faithful port of the SDK's non-public buildMcpParamHeaders + value encoding, in core/json/xMcpHeader.ts) and attach them to the tools/call request options. Protocol.request forwards headers to the transport and preserves them across MRTR retry legs. Fixes CLI/TUI (direct StreamableHTTP) outright.
web: forward per-send headers through RemoteClientTransport.requestSend → /api/mcp/send → the backend's upstream transport.send. The browser can't set cross-origin headers, but the Node backend can — which is exactly where the Inspector's real request is issued.
Verified end-to-end against the live GitHub MCP Server (HTTP, modern era): tool calls with annotated arguments now succeed.
Problem
Connecting to a strict modern (2026-07-28) HTTP MCP server (e.g. the GitHub MCP Server) and calling a tool whose argument carries a SEP-2243
x-mcp-headerannotation fails with:The Inspector never sends the mirrored
Mcp-Param-*header, so the server rejects the call with-32020.Root cause
SEP-2243
x-mcp-header→Mcp-Param-*mirroring lives only inside the SDK'sclient.callTool(), and there it is additionally gated&& detectProbeEnvironment() !== "browser". Two independent reasons it never happens in the Inspector:callTool(). To drive MRTR /input_requiredmanually (History: drive MRTR manually to keep pending-request UX on modern connections #1704),tools/callis routed throughclient.request("tools/call", …)(requestWithInputRequired). That path has no mirroring — so it is bypassed on every transport (web, CLI, TUI), not just the browser.RemoteClientTransport.requestSend()only forwarded{ sessionId, message, relatedRequestId }; per-request headers never reached the backend's upstreamtransport.send.#1632addedx-mcp-headerdisplay + invalid-tool exclusion, but never wired the header onto thetools/callwire.Fix
InspectorClient.attemptToolCall, on a modern connection, build theMcp-Param-*headers (faithful port of the SDK's non-publicbuildMcpParamHeaders+ value encoding, incore/json/xMcpHeader.ts) and attach them to thetools/callrequest options.Protocol.requestforwardsheadersto the transport and preserves them across MRTR retry legs. Fixes CLI/TUI (direct StreamableHTTP) outright.RemoteClientTransport.requestSend→/api/mcp/send→ the backend's upstreamtransport.send. The browser can't set cross-origin headers, but the Node backend can — which is exactly where the Inspector's real request is issued.Verified end-to-end against the live GitHub MCP Server (HTTP, modern era): tool calls with annotated arguments now succeed.