Skip to content

Commit 6dcbb3d

Browse files
committed
sse-pass-http-req
1 parent babb477 commit 6dcbb3d

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

Diff for: src/mcp/server/fastmcp/server.py

+10
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,7 @@ async def handle_sse(request: Request) -> None:
491491
streams[0],
492492
streams[1],
493493
self._mcp_server.create_initialization_options(),
494+
extra_metadata={"http_request": request},
494495
)
495496

496497
return Starlette(
@@ -501,6 +502,15 @@ async def handle_sse(request: Request) -> None:
501502
],
502503
)
503504

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+
504514
async def list_prompts(self) -> list[MCPPrompt]:
505515
"""List all available prompts."""
506516
prompts = self._prompt_manager.list_prompts()

Diff for: src/mcp/server/lowlevel/server.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,7 @@ async def run(
479479
# but also make tracing exceptions much easier during testing and when using
480480
# in-process servers.
481481
raise_exceptions: bool = False,
482+
extra_metadata: dict[str, Any] | None = None,
482483
):
483484
async with AsyncExitStack() as stack:
484485
lifespan_context = await stack.enter_async_context(self.lifespan(self))
@@ -489,7 +490,8 @@ async def run(
489490
async with anyio.create_task_group() as tg:
490491
async for message in session.incoming_messages:
491492
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
493495
tg.start_soon(
494496
self._handle_message,
495497
message,

Diff for: src/mcp/types.py

+1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
class RequestParams(BaseModel):
4242
class Meta(BaseModel):
4343
progressToken: ProgressToken | None = None
44+
extra_metadata: dict[str, Any] | None = None
4445
"""
4546
If specified, the caller requests out-of-band progress notifications for
4647
this request (as represented by notifications/progress). The value of this

0 commit comments

Comments
 (0)