fastmcp icon indicating copy to clipboard operation
fastmcp copied to clipboard

Stale Session Reuse Causes Initialization Errors After Server Restart(RuntimeError: Received request before initialization was complete)

Open goshut opened this issue 7 months ago • 0 comments

Description

When the server restarts quickly, clients maintaining SSE connections from previous sessions receive RuntimeError: RuntimeError: Received request before initialization was complete.

The root cause is:

Session State Persistence Clients retain old session IDs after server restart and continue using them for non-initialization requests.

Missing Session Validation The current _received_request handler in server/session.py doesn't detect stale sessions when processing non-initialization requests (the case _ branch).

Affected Component: mcp/server/session.py in _received_request method

Example Code


Version Information

FastMCP version:                                        2.3.4
MCP version:                                            1.9.0
Python version:                                        3.12.9
Platform:                           Windows-11-10.0.26100-SP0
FastMCP root path: D:\python\virtualenv\mcp\Lib\site-packages

Additional Context

Start server with SSE transport

Client connects and completes initialization

Restart server rapidly (<5s)

Client sends any non-initialization request using old session

Observe RuntimeError in server logs

Expected Behavior:

Server should detect stale sessions after restart

Clients should be notified to reinitialize when using obsolete sessions

case _:
    # Add session freshness check
    if self._server_instance_id != responder.request.meta.get("server_instance_id"):
        raise RuntimeError("Stale session detected - please reinitialize")
    
    if self._initialization_state != InitializationState.Initialized:
        raise RuntimeError("Received request before initialization was complete")

goshut avatar May 16 '25 16:05 goshut