Skip to content

tools/call requests no longer echo Mcp-Session-Id (violates Streamable HTTP spec) #647

@TonMarton

Description

@TonMarton

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.

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 lost
Loading

To Reproduce
Steps to reproduce the behavior:

  1. Stand up a Streamable HTTP MCP server that returns Mcp-Session-Id on initialize.
  2. Connect from ChatGPT and trigger any tool that produces multiple tools/call requests (e.g. a polling tool driven by an MCP App / widget).
  3. Inspect inbound HTTP headers grouped by User-Agent:
    • openai-mcp/1.0.0 (ChatGPT) requests carry Mcp-Session-Id.
    • openai-mcp/1.0.0 tools/call requests do not.

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/callMUST 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions