Skip to content

Commit 0090583

Browse files
committed
Fix: fastmcp exit stuck
1 parent fbe6b06 commit 0090583

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

src/mcp/server/fastmcp/server.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
from pydantic_settings import BaseSettings, SettingsConfigDict
2121
from starlette.applications import Starlette
2222
from starlette.requests import Request
23+
from starlette.responses import Response
2324
from starlette.routing import Mount, Route
2425

2526
from mcp.server.fastmcp.exceptions import ResourceError
@@ -482,17 +483,20 @@ def sse_app(self) -> Starlette:
482483
"""Return an instance of the SSE server app."""
483484
sse = SseServerTransport(self.settings.message_path)
484485

485-
async def handle_sse(request: Request) -> None:
486-
async with sse.connect_sse(
487-
request.scope,
488-
request.receive,
489-
request._send, # type: ignore[reportPrivateUsage]
490-
) as streams:
491-
await self._mcp_server.run(
492-
streams[0],
493-
streams[1],
494-
self._mcp_server.create_initialization_options(),
495-
)
486+
async def handle_sse(request: Request) -> Response:
487+
with anyio.CancelScope() as cancel_scope:
488+
async with sse.connect_sse(
489+
request.scope,
490+
request.receive,
491+
request._send, # type: ignore[reportPrivateUsage]
492+
callback=lambda: cancel_scope.cancel(),
493+
) as streams:
494+
await self._mcp_server.run(
495+
streams[0],
496+
streams[1],
497+
self._mcp_server.create_initialization_options(),
498+
)
499+
return Response(status_code=200)
496500

497501
return Starlette(
498502
debug=self.settings.debug,

0 commit comments

Comments
 (0)