@@ -828,7 +828,6 @@ async def sse_endpoint(request: Request) -> Response:
828
828
def streamable_http_app (self ) -> Starlette :
829
829
"""Return an instance of the StreamableHTTP server app."""
830
830
from starlette .middleware import Middleware
831
- from starlette .routing import Mount
832
831
833
832
# Create session manager on first call (lazy initialization)
834
833
if self ._session_manager is None :
@@ -841,8 +840,7 @@ def streamable_http_app(self) -> Starlette:
841
840
)
842
841
843
842
# 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 )
846
844
847
845
# Create routes
848
846
routes : list [Route | Mount ] = []
@@ -889,17 +887,17 @@ async def handle_streamable_http(scope: Scope, receive: Receive, send: Send) ->
889
887
)
890
888
891
889
routes .append (
892
- Mount (
890
+ Route (
893
891
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 ),
895
893
)
896
894
)
897
895
else :
898
896
# Auth is disabled, no wrapper needed
899
897
routes .append (
900
- Mount (
898
+ Route (
901
899
self .settings .streamable_http_path ,
902
- app = handle_streamable_http ,
900
+ endpoint = streamable_http_app ,
903
901
)
904
902
)
905
903
@@ -972,6 +970,18 @@ async def get_prompt(self, name: str, arguments: dict[str, Any] | None = None) -
972
970
raise ValueError (str (e ))
973
971
974
972
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
+
975
985
class Context (BaseModel , Generic [ServerSessionT , LifespanContextT , RequestT ]):
976
986
"""Context object providing access to MCP capabilities.
977
987
0 commit comments