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
All checks were successful
Build and Push Monarch MCP Docker Image / build (push) Successful in 7s
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user