feat(server): Add support for streamable-http transport type

This commit is contained in:
Chris Coutinho
2025-09-11 17:01:29 +02:00
parent e7c4eb0842
commit c1c5a61952
3 changed files with 24 additions and 14 deletions
+13 -3
View File
@@ -2,7 +2,7 @@ import click
import logging
import uvicorn
from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from contextlib import asynccontextmanager, AsyncExitStack
from dataclasses import dataclass
from starlette.applications import Starlette
@@ -83,9 +83,19 @@ def get_app(transport: str = "sse", enabled_apps: list[str] | None = None):
f"Unknown app: {app_name}. Available apps: {list(available_apps.keys())}"
)
mcp_app = mcp.sse_app() if transport == "sse" else mcp.streamable_http_app()
if transport == "sse":
mcp_app = mcp.sse_app()
lifespan = None
else:
mcp_app = mcp.streamable_http_app()
app = Starlette(routes=[Mount("/", app=mcp_app)])
@asynccontextmanager
async def lifespan(app: Starlette):
async with AsyncExitStack() as stack:
await stack.enter_async_context(mcp.session_manager.run())
yield
app = Starlette(routes=[Mount("/", app=mcp_app)], lifespan=lifespan)
return app