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
Describe the bug
ChatGPT (host) no longer sends Mcp-Session-Id back to the server on tools/call requests, violating the Streamable HTTP transport rule that clients MUST include the session id on all subsequent HTTP requests once the server returned one during initialization.
If an Mcp-Session-Id is returned by the server during initialization, clients using the Streamable HTTP transport MUST include it in the Mcp-Session-Id header on all of their subsequent HTTP requests.
sequenceDiagram
participant CTRL as ChatGPT (CTRL plane)<br/>UA: openai-mcp/1.0.0 (ChatGPT)
participant TOOL as ChatGPT (TOOL plane)<br/>UA: openai-mcp/1.0.0
participant Server as MCP Server
CTRL->>Server: POST initialize
Server-->>CTRL: Mcp-Session-Id: ctrl-aaa
CTRL->>Server: POST tools/list (Mcp-Session-Id: ctrl-aaa) ✅
CTRL->>Server: POST resources/read (Mcp-Session-Id: ctrl-aaa) ✅
TOOL->>Server: POST initialize
Server-->>TOOL: Mcp-Session-Id: tool-bbb
TOOL->>Server: POST tools/call (no Mcp-Session-Id) ❌
TOOL->>Server: POST tools/call (no Mcp-Session-Id) ❌
Note over TOOL,Server: Subsequent tool calls never carry the session id<br/>→ server falls into stateless code path<br/>→ capabilities learned at initialize are lost
Loading
To Reproduce
Steps to reproduce the behavior:
Stand up a Streamable HTTP MCP server that returns Mcp-Session-Id on initialize.
Connect from ChatGPT and trigger any tool that produces multiple tools/call requests (e.g. a polling tool driven by an MCP App / widget).
Inspect inbound HTTP headers grouped by User-Agent:
Expected behavior
Per the Streamable HTTP transport spec: once the server returns Mcp-Session-Id on a plane's initialize, every subsequent request on that plane — including tools/call — MUST include the Mcp-Session-Id header.
Logs
Additional context
On ChatGPT web it seems ok, as of writing this, but iOS App and MacOS App still do not echo id.
Describe the bug
ChatGPT (host) no longer sends
Mcp-Session-Idback to the server ontools/callrequests, violating the Streamable HTTP transport rule that clients MUST include the session id on all subsequent HTTP requests once the server returned one during initialization.— Spec 2025-11-25 / Streamable HTTP / session management
sequenceDiagram participant CTRL as ChatGPT (CTRL plane)<br/>UA: openai-mcp/1.0.0 (ChatGPT) participant TOOL as ChatGPT (TOOL plane)<br/>UA: openai-mcp/1.0.0 participant Server as MCP Server CTRL->>Server: POST initialize Server-->>CTRL: Mcp-Session-Id: ctrl-aaa CTRL->>Server: POST tools/list (Mcp-Session-Id: ctrl-aaa) ✅ CTRL->>Server: POST resources/read (Mcp-Session-Id: ctrl-aaa) ✅ TOOL->>Server: POST initialize Server-->>TOOL: Mcp-Session-Id: tool-bbb TOOL->>Server: POST tools/call (no Mcp-Session-Id) ❌ TOOL->>Server: POST tools/call (no Mcp-Session-Id) ❌ Note over TOOL,Server: Subsequent tool calls never carry the session id<br/>→ server falls into stateless code path<br/>→ capabilities learned at initialize are lostTo Reproduce
Steps to reproduce the behavior:
Mcp-Session-Idoninitialize.tools/callrequests (e.g. a polling tool driven by an MCP App / widget).User-Agent:openai-mcp/1.0.0 (ChatGPT)requests carryMcp-Session-Id.openai-mcp/1.0.0tools/callrequests do not.Expected behavior
Per the Streamable HTTP transport spec: once the server returns
Mcp-Session-Idon a plane'sinitialize, every subsequent request on that plane — includingtools/call— MUST include theMcp-Session-Idheader.Logs
Additional context
On ChatGPT web it seems ok, as of writing this, but iOS App and MacOS App still do not echo id.