modelcontextprotocol / modelcontextprotocol/python-sdk

[v2] Expose the SSE max_event_size setting in Streamable HTTP clients

未關閉
#3,332 7 則留言 0 個 reaction 已指派 1 人 在 GitHub 檢視

@Kludex 已經在處理了。

開始於 2026年8月19日。

v2
主要語言
Python
星號
24.3k
分支
4k
平均合併
1 天 1 小時
30 天內合併 PR
31

描述

What happened?

MCP Python SDK v2.0.0 constructs httpx2.EventSource(response) directly when parsing a Streamable HTTP POST response. Since HTTPX2 2.10, a single SSE event is limited to 1 MiB by default.

When a valid tools/call result is larger than 1 MiB and is returned as one SSE event, HTTPX2 raises SSEError. The SDK catches that transport error and the caller receives the generic MCP error:

SSE stream ended without a response

There is currently no public Streamable HTTP setting that lets callers raise the SSE event-size limit. The transport also creates SSE readers in multiple places: the POST response path constructs EventSource(response) directly, while the GET and reconnection paths call AsyncClient.sse() without a transport-level event-size setting.

What did you expect?

I expected the Streamable HTTP client/transport to expose an SSE event-size setting and apply it consistently to:

  • POST SSE responses;
  • the GET stream; and
  • reconnection streams.

One possible API shape would be a max_event_size argument on streamable_http_client() and StreamableHTTPTransport, matching HTTPX2 terminology. The exact public API is open for maintainer direction.

If an event exceeds the configured limit, the original JSON-RPC request should receive a clear request-scoped error. The already-sent POST should not be replayed, and sibling requests sharing the session should remain usable.

Reproduction

Use an MCP Streamable HTTP server whose tool returns more than 1 MiB of text in a single SSE event, then call that tool with the v2 client:

result = await client.call_tool("large_result", {})

With a 2 MiB single-event response, the call fails with SSE stream ended without a response. The same response succeeds when the underlying EventSource is constructed with a larger max_event_size.

I can contribute an implementation and exact boundary tests if maintainers agree with exposing this setting.

Environment

  • Python 3.11
  • MCP Python SDK 2.0.0
  • HTTPX2 2.10.0
  • Area: Client transports / Streamable HTTP

Reference

This issue was prepared with AI assistance and reviewed by the reporter.

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。