refactor: use FastMCP.http_app() for robust SSE and health check support
All checks were successful
Build and Push Monarch MCP Docker Image / build (push) Successful in 7s

This commit is contained in:
Ben
2025-12-24 04:48:18 +00:00
parent 177832053f
commit 75ba3433e8

View File

@@ -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()