fix(mcp): return Response() from handle_sse to prevent NoneType error

When an MCP client disconnects, Starlette tries to call the return value
of the handle_sse endpoint as an ASGI response. Since the function had
no return statement it returned None, causing:

  TypeError: 'NoneType' object is not callable

The mcp library's own SseServerTransport docstring explicitly documents
this requirement. Fix by adding 'return Response()' and importing
starlette.responses.Response.
This commit is contained in:
HuajunGao
2026-02-28 14:54:43 +11:00
parent ded24b10da
commit ab64186a38

View File

@@ -15,6 +15,7 @@ from mcp.server import Server
from mcp.server.sse import SseServerTransport from mcp.server.sse import SseServerTransport
from starlette.applications import Starlette from starlette.applications import Starlette
from starlette.requests import Request from starlette.requests import Request
from starlette.responses import Response
from starlette.routing import Mount, Route from starlette.routing import Mount, Route
from .resources import RESOURCE_TEMPLATES, RESOURCES, handle_resource from .resources import RESOURCE_TEMPLATES, RESOURCES, handle_resource
@@ -64,6 +65,7 @@ async def handle_sse(request: Request):
streams[1], streams[1],
server.create_initialization_options(), server.create_initialization_options(),
) )
return Response()
def create_mcp_starlette_app() -> Starlette: def create_mcp_starlette_app() -> Starlette: