Streamable HTTP MCP: mcp.json headers besides X-DomainHost-Key are dropped on tools/call

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Streamable HTTP MCP: headers from project .cursor/mcp.json are not all sent on tools/call.

The server is configured with several custom headers (X-DomainHost-Key, X-Ai-Agent-Id, X-WooW-User, X-WooW-Password, X-WooW-Instance, X-WooW-Year, X-WooW-InstanceType). On each JSON-RPC tools/call POST, Cursor only forwards X-DomainHost-Key. The rest never arrive.

The same mcp.json, posted with PowerShell to the same URL, sends every header and the tool succeeds. This host has no OAuth and no .well-known oauth endpoints.

Handshake (initialize / notifications/initialized) works. Failure is on tool execution auth headers.

Related forum threads (same class of bug; search titles): “cursor-automation-datadog-tool” and “mcp-headers-config-ignored-when-server-has-oauth-discovery”. Staff have said .cursor/mcp.json should forward headers; we still only see one of several on tools/call.

Steps to Reproduce

Run a Streamable HTTP MCP at http://localhost:6010/mcp that logs incoming header names (not values) on tools/call.
Put this in the project .cursor/mcp.json (values redacted):
{
“mcpServers”: {
“woow-domain”: {
“url”: “http://localhost:6010/mcp”,
“headers”: {
“X-DomainHost-Key”: “”,
“X-Ai-Agent-Id”: “cursor-qas”,
“X-WooW-User”: “”,
“X-WooW-Password”: “”,
“X-WooW-Instance”: “”,
“X-WooW-Year”: “2026”,
“X-WooW-InstanceType”: “QAS”
}
}
}
}
Reload MCP / restart Cursor. Confirm the server is connected.
In Agent chat, invoke a tool that requires the extra headers (e.g. api_list).
Compare with the same JSON posted via PowerShell or MCP Inspector to POST /mcp tools/call.

Expected Behavior

very key under headers is attached to every JSON-RPC POST (initialize, tools/list, tools/call). Streamable HTTP treats each POST as independent, so auth headers must be repeated.

Actual from Cursor tools/call:

[MCP-AUTH] tool=api_list agent=- hasUser=False hasPassword=False hasAgentId=False headerNames=X-DomainHost-Key
Actual from PowerShell with the same file:

[MCP-AUTH] tool=api_list agent=cursor-qas hasUser=True hasPassword=True hasAgentId=True
headerNames=X-Ai-Agent-Id,X-DomainHost-Key,X-WooW-Instance,X-WooW-InstanceType,X-WooW-Password,X-WooW-User,X-WooW-Year

Operating System

Windows 10/11

Version Information

OS: Windows 10/11 (win32 10.0.26200)
Cursor: (Help → About — pega la versión)
MCP transport: Streamable HTTP (url only, no command)
Config: project .cursor/mcp.json (not registerServer())
Server: local sidecar, HTTP localhost:6010, no OAuth discovery

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hey @Fernando_Chio_Achi, thanks for the detailed report!

On current builds, the configured headers are attached to every request the MCP client sends — initialize, tools/list, and tools/call all share the same header set. So what you’re describing usually means the tool call is being served by a different copy of the server definition than the one you’re editing.

Could you check two things?

  1. Have your sidecar log the incoming header names on initialize and tools/list as well, so we can see whether the extra headers are missing on every request or only on tool calls.

  2. Check whether the same server (same name or same URL) is also defined somewhere else — in your global C:\Users\<you>\.cursor\mcp.json, in Cursor Settings → MCP, or in a team config. If so, remove the older copy and then fully restart Cursor.

If after that you still only see X-DomainHost-Key arrive, please share your exact Cursor version (Help → About) along with the MCP logs from Output → MCP, and we’ll dig further!