Stale Session Reuse Causes Initialization Errors After Server Restart(RuntimeError: Received request before initialization was complete)
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")