From 505b861058bfc1d535c0692c28a255a3daaf5988 Mon Sep 17 00:00:00 2001 From: Sami Hamine Date: Thu, 2 Jan 2025 13:13:10 +0100 Subject: [PATCH] fix: use Mount instead of Route for SSE message handling This change follows the recommended approach from MCP SDK (modelcontextprotocol/python-sdk#83) for handling SSE messages using Starlette's Mount instead of Route. - Replace Route with Mount for /messages/ endpoint - Update SseServerTransport path to include trailing slash --- src/fastmcp/server.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/fastmcp/server.py b/src/fastmcp/server.py index 8b9238da1..00bb21b0d 100644 --- a/src/fastmcp/server.py +++ b/src/fastmcp/server.py @@ -428,9 +428,9 @@ class FastMCP: async def run_sse_async(self) -> None: """Run the server using SSE transport.""" from starlette.applications import Starlette - from starlette.routing import Route + from starlette.routing import Route, Mount - sse = SseServerTransport("/messages") + sse = SseServerTransport("/messages/") async def handle_sse(request): async with sse.connect_sse( @@ -442,14 +442,11 @@ class FastMCP: self._mcp_server.create_initialization_options(), ) - async def handle_messages(request): - await sse.handle_post_message(request.scope, request.receive, request._send) - starlette_app = Starlette( debug=self.settings.debug, routes=[ Route("/sse", endpoint=handle_sse), - Route("/messages", endpoint=handle_messages, methods=["POST"]), + Mount("/messages/", app=sse.handle_post_message), ], )