Skip to content

SDKs and other middleware SHOULD allow these timeouts to be configured on a per-request basis. #600

@grll

Description

@grll

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."
                    ),
                )
            )

see

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Moderate issues affecting some users, edge cases, potentially valuable featureenhancementRequest for a new feature that's not currently supportedneeds decisionIssue is actionable, needs maintainer decision on whether to implement

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions