@@ -523,3 +523,54 @@ async def test_sse_session_cleanup_on_disconnect() -> None:
523523 headers = {"Content-Type" : "application/json" },
524524 )
525525 assert response .status_code == 404
526+
527+
528+ @pytest .mark .anyio
529+ async def test_sse_client_none_disables_the_sse_event_limit () -> None :
530+ """Regression test for https://github.com/modelcontextprotocol/python-sdk/issues/3803
531+
532+ Passing max_sse_event_size=None to sse_client disables the 1 MiB default SSE
533+ event size limit so tool results over 1 MiB can be received over SSE.
534+ """
535+ payload = "x" * (2 * 1024 * 1024 )
536+ response = JSONRPCResponse (
537+ jsonrpc = "2.0" ,
538+ id = 1 ,
539+ result = {"text" : payload },
540+ )
541+ response_json = response .model_dump_json (by_alias = True , exclude_none = True )
542+ event_stream = (
543+ "event: endpoint\n data: /messages/?session_id=abc123\n \n "
544+ f"event: message\n data: { response_json } \n \n "
545+ )
546+
547+ def serve (request : httpx2 .Request ) -> httpx2 .Response :
548+ return httpx2 .Response (200 , headers = {"content-type" : "text/event-stream" }, text = event_stream )
549+
550+ def factory (
551+ headers : dict [str , str ] | None = None ,
552+ timeout : httpx2 .Timeout | None = None ,
553+ auth : httpx2 .Auth | None = None ,
554+ ) -> httpx2 .AsyncClient :
555+ return httpx2 .AsyncClient (transport = httpx2 .MockTransport (serve ))
556+
557+ with anyio .fail_after (5 ):
558+ async with sse_client ("http://test/sse" , httpx_client_factory = factory , max_sse_event_size = None ) as (
559+ read_stream ,
560+ _ ,
561+ ):
562+ msg = await read_stream .receive ()
563+
564+ assert isinstance (msg , SessionMessage )
565+ assert isinstance (msg .message , types .JSONRPCResponse )
566+ assert msg .message .result == {"text" : payload }
567+
568+
569+ @pytest .mark .anyio
570+ @pytest .mark .parametrize ("invalid_size" , [0 , - 1 ])
571+ async def test_sse_client_rejects_non_positive_max_sse_event_size (invalid_size : int ) -> None :
572+ """sse_client rejects zero or negative max_sse_event_size values."""
573+ with pytest .raises (ValueError , match = "max_sse_event_size must be positive or None" ):
574+ async with sse_client ("http://test/sse" , max_sse_event_size = invalid_size ):
575+ pytest .fail ("should not connect" ) # pragma: no cover
576+
0 commit comments