File tree 3 files changed +14
-1
lines changed
3 files changed +14
-1
lines changed Original file line number Diff line number Diff line change @@ -491,6 +491,7 @@ async def handle_sse(request: Request) -> None:
491
491
streams [0 ],
492
492
streams [1 ],
493
493
self ._mcp_server .create_initialization_options (),
494
+ extra_metadata = {"http_request" : request },
494
495
)
495
496
496
497
return Starlette (
@@ -501,6 +502,15 @@ async def handle_sse(request: Request) -> None:
501
502
],
502
503
)
503
504
505
+ def get_http_request (self ) -> Request | None :
506
+ ctx = self .get_context ()
507
+ if (ctx .request_context and
508
+ ctx .request_context .meta and
509
+ hasattr (ctx .request_context .meta , "extra_metadata" )):
510
+ req : Request = ctx .request_context .meta .extra_metadata .get ("http_request" ) # type: ignore
511
+ return req
512
+ return None
513
+
504
514
async def list_prompts (self ) -> list [MCPPrompt ]:
505
515
"""List all available prompts."""
506
516
prompts = self ._prompt_manager .list_prompts ()
Original file line number Diff line number Diff line change @@ -479,6 +479,7 @@ async def run(
479
479
# but also make tracing exceptions much easier during testing and when using
480
480
# in-process servers.
481
481
raise_exceptions : bool = False ,
482
+ extra_metadata : dict [str , Any ] | None = None ,
482
483
):
483
484
async with AsyncExitStack () as stack :
484
485
lifespan_context = await stack .enter_async_context (self .lifespan (self ))
@@ -489,7 +490,8 @@ async def run(
489
490
async with anyio .create_task_group () as tg :
490
491
async for message in session .incoming_messages :
491
492
logger .debug (f"Received message: { message } " )
492
-
493
+ if hasattr (message , "request_meta" ) and getattr (message , "request_meta" ):
494
+ message .request_meta .extra_metadata = extra_metadata # type: ignore
493
495
tg .start_soon (
494
496
self ._handle_message ,
495
497
message ,
Original file line number Diff line number Diff line change 41
41
class RequestParams (BaseModel ):
42
42
class Meta (BaseModel ):
43
43
progressToken : ProgressToken | None = None
44
+ extra_metadata : dict [str , Any ] | None = None
44
45
"""
45
46
If specified, the caller requests out-of-band progress notifications for
46
47
this request (as represented by notifications/progress). The value of this
You can’t perform that action at this time.
0 commit comments