modelcontextprotocol / modelcontextprotocol/ext-apps

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

Open
#647 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
TypeScript
Stars
2.9k
Forks
387
Avg merge
3h 21m
Merged PRs (30d)
6

Description

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

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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the TypeScript Streamable HTTP transport handling for initialization and subsequent tools/call requests, then reproduce the behavior with a server that returns Mcp-Session-Id. Done means tools/call requests from the affected client plane consistently include the session header, matching the specification and the issue's expected request sequence.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
api
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.