From 75ba3433e85cb9d933a74d1bcce4efa1bea2d388 Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 24 Dec 2025 04:48:18 +0000 Subject: [PATCH] refactor: use FastMCP.http_app() for robust SSE and health check support --- src/monarch_mcp_custom/server.py | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/src/monarch_mcp_custom/server.py b/src/monarch_mcp_custom/server.py index edf134c..e39be99 100644 --- a/src/monarch_mcp_custom/server.py +++ b/src/monarch_mcp_custom/server.py @@ -13,7 +13,7 @@ from dotenv import load_dotenv from fastmcp import FastMCP from starlette.applications import Starlette from starlette.responses import JSONResponse -from starlette.routing import Route +from starlette.routing import Route, Mount from mcp.server.sse import SseServerTransport import uvicorn @@ -179,28 +179,14 @@ async def health_check(request): def create_app(): """Create the Starlette application with MCP at /mcp.""" - # SSE Transport following the "newer http-streamable" convention: - # Stream endpoint at /mcp, messages at /mcp/messages - sse = SseServerTransport("/mcp/messages") - - async def handle_sse(scope, receive, send): - async with sse.connect_sse(scope, receive, send) as ( - read_stream, - write_stream, - ): - await mcp._mcp_server.run( - read_stream, - write_stream, - mcp._mcp_server.create_initialization_options(), - ) + mcp_app = mcp.http_app() routes = [ Route("/health", health_check, methods=["GET"]), - Route("/mcp", endpoint=handle_sse), - Route("/mcp/messages", endpoint=sse.handle_post_message, methods=["POST"]), + Mount("/", app=mcp_app), ] - return Starlette(routes=routes, lifespan=mcp._lifespan) + return Starlette(routes=routes, lifespan=mcp_app.lifespan) app = create_app()