fix(mcp): stateless HTTP transport so client reconnects after redeploy
Stateful session manager strands Claude Code after a container redeploy: it reconnects with a now-unknown Mcp-Session-Id, the server 404s, and the client won't re-initialize on a 404 (claude-code #60949). Stateless makes each request self-contained (bearer-auth only) so post-deploy reconnect works without a manual /mcp retry.
This commit is contained in:
@@ -74,9 +74,18 @@ def build_mcp_server() -> FastMCP:
|
|||||||
behind a reverse proxy with bearer-token auth as the real security
|
behind a reverse proxy with bearer-token auth as the real security
|
||||||
boundary.
|
boundary.
|
||||||
"""
|
"""
|
||||||
|
# stateless_http=True: don't hand the client a persistent Mcp-Session-Id.
|
||||||
|
# The stateful default strands Claude Code after a container redeploy —
|
||||||
|
# it reconnects with the now-unknown session id, the server returns 404,
|
||||||
|
# and the client won't re-initialize on a 404 (Claude Code issue #60949),
|
||||||
|
# so the connection stays dead until a manual /mcp retry. Stateless makes
|
||||||
|
# every request self-contained (bearer-auth only), so a post-deploy
|
||||||
|
# reconnect just works. Trade-off: no server-pushed list_changed stream,
|
||||||
|
# which we don't use — tools are re-fetched on reconnect anyway.
|
||||||
mcp = FastMCP(
|
mcp = FastMCP(
|
||||||
"scribe",
|
"scribe",
|
||||||
instructions=_INSTRUCTIONS.strip(),
|
instructions=_INSTRUCTIONS.strip(),
|
||||||
|
stateless_http=True,
|
||||||
transport_security=TransportSecuritySettings(
|
transport_security=TransportSecuritySettings(
|
||||||
enable_dns_rebinding_protection=False,
|
enable_dns_rebinding_protection=False,
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user