-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Open
Labels
P2Moderate issues affecting some users, edge cases, potentially valuable featureModerate issues affecting some users, edge cases, potentially valuable featurefeature requestRequest for a new feature that's not currently supportedRequest for a new feature that's not currently supportedready for workEnough information for someone to start working onEnough information for someone to start working on
Milestone
Description
Describe the bug
According to the MCP specs:
"SDKs and other middleware SHOULD allow these timeouts to be configured on a per-request basis."
But looking at the code the timeouts are set at the session level and not easily configured on a per-request basis as the specs recommend:
async def send_request(
self,
request: SendRequestT,
result_type: type[ReceiveResultT],
) -> ReceiveResultT:
...
try:
with anyio.fail_after(
None
if self._read_timeout_seconds is None
else self._read_timeout_seconds.total_seconds()
):
response_or_error = await response_stream_reader.receive()
except TimeoutError:
raise McpError(
ErrorData(
code=httpx.codes.REQUEST_TIMEOUT,
message=(
f"Timed out while waiting for response to "
f"{request.__class__.__name__}. Waited "
f"{self._read_timeout_seconds} seconds."
),
)
)
Suggestion
Add an optional argument request_read_timeout_seconds
and rename current _read_timeout_seconds into session_read_timeout_seconds
if request_read_timeout_seconds
is set it would override the session one.
I will publish a small PR in that sense.
njbrake, daavoo and hexdecimal16
Metadata
Metadata
Assignees
Labels
P2Moderate issues affecting some users, edge cases, potentially valuable featureModerate issues affecting some users, edge cases, potentially valuable featurefeature requestRequest for a new feature that's not currently supportedRequest for a new feature that's not currently supportedready for workEnough information for someone to start working onEnough information for someone to start working on