@@ -1071,6 +1071,45 @@ async def test_streamable_http_client_basic_connection(basic_server: None, basic
10711071 assert result .server_info .name == SERVER_NAME
10721072
10731073
1074+ @pytest .mark .anyio
1075+ async def test_streamable_http_client_no_race_on_consecutive_requests (basic_server : None , basic_server_url : str ):
1076+ """Regression test for a start-up race immediately after initialize().
1077+
1078+ In some cases, the first request after initialize() (e.g. list_tools())
1079+ could behave inconsistently. This test runs multiple short-lived sessions
1080+ to reliably catch any start-up race.
1081+ """
1082+ for iteration in range (10 ): # pragma: no branch
1083+ async with streamable_http_client (f"{ basic_server_url } /mcp" ) as (read_stream , write_stream ):
1084+ async with ClientSession (read_stream , write_stream ) as session :
1085+ await session .initialize ()
1086+
1087+ tools = await session .list_tools ()
1088+ assert len (tools .tools ) == 10 , f"Iteration { iteration } : expected 10 tools, got { len (tools .tools )} "
1089+ assert tools .tools [0 ].name == "test_tool"
1090+
1091+ tools2 = await session .list_tools ()
1092+ assert len (tools2 .tools ) == 10
1093+
1094+ resource = await session .read_resource (uri = "foobar://test-iteration" )
1095+ assert len (resource .contents ) == 1
1096+
1097+
1098+ @pytest .mark .anyio
1099+ async def test_streamable_http_client_rapid_request_sequence (basic_server : None , basic_server_url : str ):
1100+ """Stress test for rapid sequences of requests."""
1101+ async with streamable_http_client (f"{ basic_server_url } /mcp" ) as (read_stream , write_stream ):
1102+ async with ClientSession (read_stream , write_stream ) as session :
1103+ await session .initialize ()
1104+
1105+ for i in range (20 ):
1106+ tools = await session .list_tools ()
1107+ assert len (tools .tools ) == 10 , f"Request { i } : expected 10 tools, got { len (tools .tools )} "
1108+
1109+ resource = await session .read_resource (uri = "foobar://final-test" )
1110+ assert len (resource .contents ) == 1
1111+
1112+
10741113@pytest .mark .anyio
10751114async def test_streamable_http_client_resource_read (initialized_client_session : ClientSession ):
10761115 """Test client resource read functionality."""
0 commit comments