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 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()
|
||||||
|
|||||||
Reference in New Issue
Block a user