From be95110596435a53ff2059c9370cb7e8726eaf39 Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Tue, 20 May 2025 18:39:32 -0400 Subject: [PATCH 1/3] Avoid hanging on initialize --- src/fastmcp/client/client.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/fastmcp/client/client.py b/src/fastmcp/client/client.py index dcb4ff013..139ce0333 100644 --- a/src/fastmcp/client/client.py +++ b/src/fastmcp/client/client.py @@ -1,8 +1,10 @@ +import asyncio import datetime from contextlib import AsyncExitStack, asynccontextmanager from pathlib import Path from typing import Any, cast +import anyio import mcp.types from exceptiongroup import catch from mcp import ClientSession @@ -161,7 +163,11 @@ class Client: self._initialize_result = await self._session.initialize() try: + with anyio.fail_after(1): + self._initialize_result = await self._session.initialize() yield + except asyncio.TimeoutError: + raise RuntimeError("Failed to initialize server session") finally: self._exit_stack = None self._session = None From ec76d180bcd6de610fc1e30e83d5d4a0f006a527 Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Tue, 20 May 2025 19:05:01 -0400 Subject: [PATCH 2/3] Remove extra initialize --- src/fastmcp/client/client.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/fastmcp/client/client.py b/src/fastmcp/client/client.py index 139ce0333..bafdf3385 100644 --- a/src/fastmcp/client/client.py +++ b/src/fastmcp/client/client.py @@ -160,8 +160,6 @@ class Client: ) as session: self._session = session # Initialize the session - self._initialize_result = await self._session.initialize() - try: with anyio.fail_after(1): self._initialize_result = await self._session.initialize() From f084f3e3db88d00d00428e68ec85548b9182301d Mon Sep 17 00:00:00 2001 From: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> Date: Tue, 20 May 2025 19:05:38 -0400 Subject: [PATCH 3/3] Trap timeouterror --- src/fastmcp/client/client.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fastmcp/client/client.py b/src/fastmcp/client/client.py index bafdf3385..98c3298be 100644 --- a/src/fastmcp/client/client.py +++ b/src/fastmcp/client/client.py @@ -1,4 +1,3 @@ -import asyncio import datetime from contextlib import AsyncExitStack, asynccontextmanager from pathlib import Path @@ -164,7 +163,7 @@ class Client: with anyio.fail_after(1): self._initialize_result = await self._session.initialize() yield - except asyncio.TimeoutError: + except TimeoutError: raise RuntimeError("Failed to initialize server session") finally: self._exit_stack = None