@@ -828,7 +828,6 @@ async def sse_endpoint(request: Request) -> Response:
828828 def streamable_http_app (self ) -> Starlette :
829829 """Return an instance of the StreamableHTTP server app."""
830830 from starlette .middleware import Middleware
831- from starlette .routing import Mount
832831
833832 # Create session manager on first call (lazy initialization)
834833 if self ._session_manager is None :
@@ -841,8 +840,7 @@ def streamable_http_app(self) -> Starlette:
841840 )
842841
843842 # Create the ASGI handler
844- async def handle_streamable_http (scope : Scope , receive : Receive , send : Send ) -> None :
845- await self .session_manager .handle_request (scope , receive , send )
843+ streamable_http_app = StreamableHTTPASGIApp (self ._session_manager )
846844
847845 # Create routes
848846 routes : list [Route | Mount ] = []
@@ -889,17 +887,17 @@ async def handle_streamable_http(scope: Scope, receive: Receive, send: Send) ->
889887 )
890888
891889 routes .append (
892- Mount (
890+ Route (
893891 self .settings .streamable_http_path ,
894- app = RequireAuthMiddleware (handle_streamable_http , required_scopes , resource_metadata_url ),
892+ endpoint = RequireAuthMiddleware (streamable_http_app , required_scopes , resource_metadata_url ),
895893 )
896894 )
897895 else :
898896 # Auth is disabled, no wrapper needed
899897 routes .append (
900- Mount (
898+ Route (
901899 self .settings .streamable_http_path ,
902- app = handle_streamable_http ,
900+ endpoint = streamable_http_app ,
903901 )
904902 )
905903
@@ -972,6 +970,18 @@ async def get_prompt(self, name: str, arguments: dict[str, Any] | None = None) -
972970 raise ValueError (str (e ))
973971
974972
973+ class StreamableHTTPASGIApp :
974+ """
975+ ASGI application for Streamable HTTP server transport.
976+ """
977+
978+ def __init__ (self , session_manager : StreamableHTTPSessionManager ):
979+ self .session_manager = session_manager
980+
981+ async def __call__ (self , scope : Scope , receive : Receive , send : Send ) -> None :
982+ await self .session_manager .handle_request (scope , receive , send )
983+
984+
975985class Context (BaseModel , Generic [ServerSessionT , LifespanContextT , RequestT ]):
976986 """Context object providing access to MCP capabilities.
977987
0 commit comments