Sami Hamine commited on
Commit
e3750ea
·
1 Parent(s): a055ee6

fix: use Mount instead of Route for SSE message handling

Browse files

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

Files changed (1) hide show
  1. src/fastmcp/server.py +3 -6
src/fastmcp/server.py CHANGED
@@ -428,9 +428,9 @@ class FastMCP:
428
  async def run_sse_async(self) -> None:
429
  """Run the server using SSE transport."""
430
  from starlette.applications import Starlette
431
- from starlette.routing import Route
432
 
433
- sse = SseServerTransport("/messages")
434
 
435
  async def handle_sse(request):
436
  async with sse.connect_sse(
@@ -442,14 +442,11 @@ class FastMCP:
442
  self._mcp_server.create_initialization_options(),
443
  )
444
 
445
- async def handle_messages(request):
446
- await sse.handle_post_message(request.scope, request.receive, request._send)
447
-
448
  starlette_app = Starlette(
449
  debug=self.settings.debug,
450
  routes=[
451
  Route("/sse", endpoint=handle_sse),
452
- Route("/messages", endpoint=handle_messages, methods=["POST"]),
453
  ],
454
  )
455
 
 
428
  async def run_sse_async(self) -> None:
429
  """Run the server using SSE transport."""
430
  from starlette.applications import Starlette
431
+ from starlette.routing import Route, Mount
432
 
433
+ sse = SseServerTransport("/messages/")
434
 
435
  async def handle_sse(request):
436
  async with sse.connect_sse(
 
442
  self._mcp_server.create_initialization_options(),
443
  )
444
 
 
 
 
445
  starlette_app = Starlette(
446
  debug=self.settings.debug,
447
  routes=[
448
  Route("/sse", endpoint=handle_sse),
449
+ Mount("/messages/", app=sse.handle_post_message),
450
  ],
451
  )
452