diff --git a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_config.py b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_config.py index 6e4f51275..371192641 100644 --- a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_config.py +++ b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_config.py @@ -1,4 +1,3 @@ -from datetime import timedelta from typing import Any, Literal from mcp import StdioServerParameters @@ -32,8 +31,8 @@ class StreamableHttpServerParams(BaseModel): url: str # The endpoint URL. headers: dict[str, Any] | None = None # Optional headers to include in requests. - timeout: timedelta = timedelta(seconds=30) # HTTP timeout for regular operations. - sse_read_timeout: timedelta = timedelta(seconds=60 * 5) # Timeout for SSE read operations. + timeout: float = 30.0 # HTTP timeout for regular operations in seconds. + sse_read_timeout: float = 300.0 # Timeout for SSE read operations in seconds. terminate_on_close: bool = True diff --git a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_session.py b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_session.py index 590f209c3..c11d39cb6 100644 --- a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_session.py +++ b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_session.py @@ -32,7 +32,12 @@ async def create_mcp_server_session( ) as session: yield session elif isinstance(server_params, StreamableHttpServerParams): - async with streamablehttp_client(**server_params.model_dump(exclude={"type"})) as ( + # Convert float seconds to timedelta for the streamablehttp_client + params_dict = server_params.model_dump(exclude={"type"}) + params_dict["timeout"] = timedelta(seconds=server_params.timeout) + params_dict["sse_read_timeout"] = timedelta(seconds=server_params.sse_read_timeout) + + async with streamablehttp_client(**params_dict) as ( read, write, session_id_callback, # type: ignore[assignment, unused-variable] @@ -41,6 +46,6 @@ async def create_mcp_server_session( async with ClientSession( read_stream=read, write_stream=write, - read_timeout_seconds=server_params.sse_read_timeout, + read_timeout_seconds=timedelta(seconds=server_params.sse_read_timeout), ) as session: yield session diff --git a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_streamable_http.py b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_streamable_http.py index 169300b81..dde980acc 100644 --- a/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_streamable_http.py +++ b/python/packages/autogen-ext/src/autogen_ext/tools/mcp/_streamable_http.py @@ -49,7 +49,6 @@ class StreamableHttpMcpToolAdapter( .. code-block:: python import asyncio - from datetime import timedelta from autogen_ext.models.openai import OpenAIChatCompletionClient from autogen_ext.tools.mcp import StreamableHttpMcpToolAdapter, StreamableHttpServerParams from autogen_agentchat.agents import AssistantAgent @@ -62,8 +61,8 @@ class StreamableHttpMcpToolAdapter( server_params = StreamableHttpServerParams( url="https://api.example.com/mcp", headers={"Authorization": "Bearer your-api-key", "Content-Type": "application/json"}, - timeout=timedelta(seconds=30), - sse_read_timeout=timedelta(seconds=60 * 5), + timeout=30.0, # HTTP timeout in seconds + sse_read_timeout=300.0, # SSE read timeout in seconds (5 minutes) terminate_on_close=True, )