File tree Expand file tree Collapse file tree 5 files changed +16
-11
lines changed Expand file tree Collapse file tree 5 files changed +16
-11
lines changed Original file line number Diff line number Diff line change 1+ from datetime import timedelta
2+
13from anyio .streams .memory import MemoryObjectReceiveStream , MemoryObjectSendStream
24from pydantic import AnyUrl
35
@@ -36,7 +38,7 @@ def __init__(
3638 self ,
3739 read_stream : MemoryObjectReceiveStream [JSONRPCMessage | Exception ],
3840 write_stream : MemoryObjectSendStream [JSONRPCMessage ],
39- read_timeout_seconds : int | float | None = None ,
41+ read_timeout_seconds : timedelta | None = None ,
4042 ) -> None :
4143 super ().__init__ (
4244 read_stream ,
Original file line number Diff line number Diff line change 33"""
44
55from contextlib import asynccontextmanager
6+ from datetime import timedelta
67from typing import AsyncGenerator
78
89import anyio
@@ -52,10 +53,10 @@ async def create_client_server_memory_streams() -> AsyncGenerator[
5253@asynccontextmanager
5354async def create_connected_server_and_client_session (
5455 server : Server ,
55- read_timeout_seconds : int | float | None = None ,
56+ read_timeout_seconds : timedelta | None = None ,
5657 raise_exceptions : bool = False ,
5758) -> AsyncGenerator [ClientSession , None ]:
58- """Creates a ServerSession that is connected to the ` server` ."""
59+ """Creates a ClientSession that is connected to a running MCP server."""
5960 async with create_client_server_memory_streams () as (
6061 client_streams ,
6162 server_streams ,
@@ -75,9 +76,6 @@ async def create_connected_server_and_client_session(
7576 )
7677
7778 try :
78- # Client session could be created here using client_read and
79- # client_write This would allow testing the server with a client
80- # in the same process
8179 async with ClientSession (
8280 read_stream = client_read , write_stream = client_write ,
8381 read_timeout_seconds = read_timeout_seconds ,
Original file line number Diff line number Diff line change 11from contextlib import AbstractAsyncContextManager
2+ from datetime import timedelta
23from typing import Generic , TypeVar
4+ import httpx
35
46import anyio
57import anyio .lowlevel
@@ -88,7 +90,7 @@ def __init__(
8890 receive_request_type : type [ReceiveRequestT ],
8991 receive_notification_type : type [ReceiveNotificationT ],
9092 # If none, reading will never time out
91- read_timeout_seconds : int | float | None = None ,
93+ read_timeout_seconds : timedelta | None = None ,
9294 ) -> None :
9395 self ._read_stream = read_stream
9496 self ._write_stream = write_stream
@@ -151,12 +153,15 @@ async def send_request(
151153 await self ._write_stream .send (JSONRPCMessage (jsonrpc_request ))
152154
153155 try :
154- with anyio .fail_after (self ._read_timeout_seconds ):
156+ with anyio .fail_after (
157+ None if self ._read_timeout_seconds is None
158+ else self ._read_timeout_seconds .total_seconds ()
159+ ):
155160 response_or_error = await response_stream_reader .receive ()
156161 except TimeoutError :
157162 raise McpError (
158163 ErrorData (
159- code = 408 ,
164+ code = httpx . codes . REQUEST_TIMEOUT ,
160165 message = (
161166 f"Timed out while waiting for response to "
162167 f"{ request .__class__ .__name__ } . Waited "
Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ build-backend = "hatchling.build"
44
55[project ]
66name = " mcp-python"
7- version = " 0.4.0 .dev"
7+ version = " 0.3.1 .dev"
88description = " Model Context Protocol implementation for Python"
99readme = " README.md"
1010requires-python = " >=3.10"
You can’t perform that action at this time.
0 commit comments