FastMCP搭建的MCP Server初始化完成后仍报初始化未完成错误求解
问题
使用FastMCP构建MCP Server,确认服务已完成初始化(已处理多个工具请求),但仍出现如下错误:
INFO: 192.168.182.1:2520 - "GET /sse HTTP/1.1" 200 OK INFO: 192.168.182.1:2691 - "POST /messages/?session_id=aa9fa14634144092aed00e8a04f84ca4 HTTP/1.1" 202 Accepted INFO: 192.168.182.1:2760 - "POST /messages/?session_id=aa9fa14634144092aed00e8a04f84ca4 HTTP/1.1" 202 Accepted ERROR: Exception in ASGI application + Exception Group Traceback (most recent call last): | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/uvicorn/protocols/http/h11_impl.py", line 403, in run_asgi | result = await app( # type: ignore[func-returns-value] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | self.scope, self.receive, self.send | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ) | ^ | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in __call__ | return await self.app(scope, receive, send) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/applications.py", line 112, in __call__ | await self.middleware_stack(scope, receive, send) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 187, in __call__ | raise exc | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/middleware/errors.py", line 165, in __call__ | await self.app(scope, receive, _send) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/middleware/exceptions.py", line 62, in __call__ | await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app | raise exc | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app | await app(scope, receive, sender) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 714, in __call__ | await self.middleware_stack(scope, receive, send) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 734, in app | await route.handle(scope, receive, send) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 288, in handle | await self.app(scope, receive, send) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 76, in app | await wrap_app_handling_exceptions(app, request)(scope, receive, send) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app | raise exc | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app | await app(scope, receive, sender) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/starlette/routing.py", line 73, in app | response = await f(request) | ^^^^^^^^^^^^^^^^ | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/server/fastmcp/server.py", line 485, in handle_sse | async with sse.connect_sse( | ~~~~~~~~~~~~~~~^ | request.scope, | ^^^^^^^^^^^^^^ | request.receive, | ^^^^^^^^^^^^^^^^ | request._send, # type: ignore[reportPrivateUsage] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ) as streams: | ^ | File "/home/lewis/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/contextlib.py", line 235, in __aexit__ | await self.gen.athrow(value) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/server/sse.py", line 123, in connect_sse | async with anyio.create_task_group() as tg: | ~~~~~~~~~~~~~~~~~~~~~~~^^ | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 772, in __aexit__ | raise BaseExceptionGroup( | "unhandled errors in a TaskGroup", self._exceptions | ) from None | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) +-+---------------- 1 ---------------- | Exception Group Traceback (most recent call last): | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/server/sse.py", line 131, in connect_sse | yield (read_stream, write_stream) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/server/fastmcp/server.py", line 490, in handle_sse | await self._mcp_server.run( | ...<3 lines>... | ) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/server/lowlevel/server.py", line 483, in run | async with AsyncExitStack() as stack: | ~~~~~~~~~~~~~~^^ | File "/home/lewis/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/contextlib.py", line 768, in __aexit__ | raise exc | File "/home/lewis/.local/share/uv/python/cpython-3.13.2-linux-x86_64-gnu/lib/python3.13/contextlib.py", line 751, in __aexit__ | cb_suppress = await cb(*exc_details) | ^^^^^^^^^^^^^^^^^^^^^^ | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/shared/session.py", line 210, in __aexit__ | return await self._task_group.__aexit__(exc_type, exc_val, exc_tb) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/anyio/_backends/_asyncio.py", line 772, in __aexit__ | raise BaseExceptionGroup( | "unhandled errors in a TaskGroup", self._exceptions | ) from None | ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception) +-+---------------- 1 ---------------- | Traceback (most recent call last): | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/shared/session.py", line 324, in _receive_loop | await self._received_request(responder) | File "/home/lewis/mcp/mcp_k8s_server/.venv/lib/python3.13/site-packages/mcp/server/session.py", line 163, in _received_request | raise RuntimeError( | "Received request before initialization was complete" | ) | RuntimeError: Received request before initialization was complete +------------------------------------
创建FastMCP实例时已添加初始化超时参数:
# Create the MCP server with initialization timeout # This helps prevent "Received request before initialization was complete" errors # by automatically closing connections that don't initialize properly mcp = FastMCP( config.server.name, host=config.server.host, port=config.server.port, settings={"initialization_timeout": 10.0} # 10 second timeout )
MCP Server运行代码:
mcp.run(transport="sse")
客户端为CherryStdio,如何解决该问题?
解决方案
延长初始化超时时间
当前10秒的超时可能无法覆盖复杂初始化场景(如依赖外部资源加载),尝试将超时调整至20-30秒:mcp = FastMCP( config.server.name, host=config.server.host, port=config.server.port, settings={"initialization_timeout": 30.0} # 延长至30秒 )修正客户端请求时序
检查CherryStdio的逻辑,确保只有在收到服务端初始化完成的信号后,再发送业务请求,避免连接未就绪时的提前调用。添加服务端初始化状态校验
若使用自定义MCP实现,可在初始化完成后设置状态标记,在处理请求前先校验状态:class CustomMCPHandler: def __init__(self): self._initialized = False async def initialize(self): # 执行原初始化逻辑 self._initialized = True async def _received_request(self, responder): if not self._initialized: await responder.error("Service not ready, please wait") return # 处理业务请求逻辑排查SSE连接异常
在服务端添加日志,记录每个SSE连接的建立、初始化、断开事件,定位是否存在频繁重连的异常连接,这类场景可能导致旧连接未清理完成时新请求提前到达。
内容的提问来源于stack exchange,提问作者Dangerman
相关产品推荐
相关产品推荐

