Skip to content

Commit cc4ac19

Browse files
committed
add a timeout arguments on per-request basis
1 parent 697b6e8 commit cc4ac19

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/mcp/shared/session.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def __init__(
185185
self._request_id = 0
186186
self._receive_request_type = receive_request_type
187187
self._receive_notification_type = receive_notification_type
188-
self._read_timeout_seconds = read_timeout_seconds
188+
self._session_read_timeout_seconds = read_timeout_seconds
189189
self._in_flight = {}
190190

191191
self._exit_stack = AsyncExitStack()
@@ -213,6 +213,7 @@ async def send_request(
213213
self,
214214
request: SendRequestT,
215215
result_type: type[ReceiveResultT],
216+
request_read_timeout_seconds: timedelta | None = None
216217
) -> ReceiveResultT:
217218
"""
218219
Sends a request and wait for a response. Raises an McpError if the
@@ -243,12 +244,15 @@ async def send_request(
243244

244245
await self._write_stream.send(JSONRPCMessage(jsonrpc_request))
245246

247+
# request read timeout takes precedence over session read timeout
248+
timeout = None
249+
if request_read_timeout_seconds is not None:
250+
timeout = request_read_timeout_seconds.total_seconds()
251+
elif self._session_read_timeout_seconds is not None:
252+
timeout = self._session_read_timeout_seconds.total_seconds()
253+
246254
try:
247-
with anyio.fail_after(
248-
None
249-
if self._read_timeout_seconds is None
250-
else self._read_timeout_seconds.total_seconds()
251-
):
255+
with anyio.fail_after(timeout):
252256
response_or_error = await response_stream_reader.receive()
253257
except TimeoutError:
254258
raise McpError(
@@ -257,7 +261,7 @@ async def send_request(
257261
message=(
258262
f"Timed out while waiting for response to "
259263
f"{request.__class__.__name__}. Waited "
260-
f"{self._read_timeout_seconds} seconds."
264+
f"{timeout} seconds."
261265
),
262266
)
263267
)

0 commit comments

Comments
 (0)