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 fastmcp import FastMCP
from starlette.applications import Starlette from starlette.applications import Starlette
from starlette.responses import JSONResponse from starlette.responses import JSONResponse
from starlette.routing import Route from starlette.routing import Route, Mount
from mcp.server.sse import SseServerTransport from mcp.server.sse import SseServerTransport
import uvicorn import uvicorn
@@ -179,28 +179,14 @@ async def health_check(request):
def create_app(): def create_app():
"""Create the Starlette application with MCP at /mcp.""" """Create the Starlette application with MCP at /mcp."""
# SSE Transport following the "newer http-streamable" convention: mcp_app = mcp.http_app()
# 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(),
)
routes = [ routes = [
Route("/health", health_check, methods=["GET"]), Route("/health", health_check, methods=["GET"]),
Route("/mcp", endpoint=handle_sse), Mount("/", app=mcp_app),
Route("/mcp/messages", endpoint=sse.handle_post_message, methods=["POST"]),
] ]
return Starlette(routes=routes, lifespan=mcp._lifespan) return Starlette(routes=routes, lifespan=mcp_app.lifespan)
app = create_app() app = create_app()