Skip to content

Commit 5553f22

Browse files
author
Yassine Lassoued
committed
Added support for raw request injection in RequestContext.
1 parent 9a2bb6a commit 5553f22

File tree

17 files changed

+144
-24
lines changed

17 files changed

+144
-24
lines changed

.idea/.gitignore

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/deployment.xml

Lines changed: 56 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/inspectionProfiles/profiles_settings.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/modules.xml

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/python-sdk.iml

Lines changed: 18 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/vcs.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/mcp/client/session.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
class SamplingFnT(Protocol):
1515
async def __call__(
1616
self,
17-
context: RequestContext["ClientSession", Any],
17+
context: RequestContext["ClientSession", Any, Any],
1818
params: types.CreateMessageRequestParams,
1919
) -> types.CreateMessageResult | types.ErrorData: ...
2020

2121

2222
class ListRootsFnT(Protocol):
2323
async def __call__(
24-
self, context: RequestContext["ClientSession", Any]
24+
self, context: RequestContext["ClientSession", Any, Any]
2525
) -> types.ListRootsResult | types.ErrorData: ...
2626

2727

@@ -50,7 +50,7 @@ async def _default_message_handler(
5050

5151

5252
async def _default_sampling_callback(
53-
context: RequestContext["ClientSession", Any],
53+
context: RequestContext["ClientSession", Any, Any],
5454
params: types.CreateMessageRequestParams,
5555
) -> types.CreateMessageResult | types.ErrorData:
5656
return types.ErrorData(
@@ -60,7 +60,7 @@ async def _default_sampling_callback(
6060

6161

6262
async def _default_list_roots_callback(
63-
context: RequestContext["ClientSession", Any],
63+
context: RequestContext["ClientSession", Any, Any],
6464
) -> types.ListRootsResult | types.ErrorData:
6565
return types.ErrorData(
6666
code=types.INVALID_REQUEST,
@@ -331,7 +331,7 @@ async def send_roots_list_changed(self) -> None:
331331
async def _received_request(
332332
self, responder: RequestResponder[types.ServerRequest, types.ClientResult]
333333
) -> None:
334-
ctx = RequestContext[ClientSession, Any](
334+
ctx = RequestContext[ClientSession, Any, Any](
335335
request_id=responder.request_id,
336336
meta=responder.request_meta,
337337
session=self,

src/mcp/server/fastmcp/server.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from mcp.server.session import ServerSession, ServerSessionT
3737
from mcp.server.sse import SseServerTransport
3838
from mcp.server.stdio import stdio_server
39-
from mcp.shared.context import LifespanContextT, RequestContext
39+
from mcp.shared.context import LifespanContextT, RequestContext, RequestT
4040
from mcp.types import (
4141
AnyFunction,
4242
EmbeddedResource,
@@ -182,7 +182,7 @@ async def list_tools(self) -> list[MCPTool]:
182182
for info in tools
183183
]
184184

185-
def get_context(self) -> Context[ServerSession, object]:
185+
def get_context(self) -> Context[ServerSession, object, Request]:
186186
"""
187187
Returns a Context object. Note that the context will only be valid
188188
during a request; outside a request, most methods will error.
@@ -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+
request=request,
494495
)
495496

496497
return Starlette(
@@ -558,7 +559,7 @@ def _convert_to_content(
558559
return [TextContent(type="text", text=result)]
559560

560561

561-
class Context(BaseModel, Generic[ServerSessionT, LifespanContextT]):
562+
class Context(BaseModel, Generic[ServerSessionT, LifespanContextT, RequestT]):
562563
"""Context object providing access to MCP capabilities.
563564
564565
This provides a cleaner interface to MCP's RequestContext functionality.
@@ -592,13 +593,13 @@ def my_tool(x: int, ctx: Context) -> str:
592593
The context is optional - tools that don't need it can omit the parameter.
593594
"""
594595

595-
_request_context: RequestContext[ServerSessionT, LifespanContextT] | None
596+
_request_context: RequestContext[ServerSessionT, LifespanContextT, RequestT] | None
596597
_fastmcp: FastMCP | None
597598

598599
def __init__(
599600
self,
600601
*,
601-
request_context: RequestContext[ServerSessionT, LifespanContextT] | None = None,
602+
request_context: RequestContext[ServerSessionT, LifespanContextT, RequestT] | None = None,
602603
fastmcp: FastMCP | None = None,
603604
**kwargs: Any,
604605
):

src/mcp/server/fastmcp/tools/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def from_function(
7676
async def run(
7777
self,
7878
arguments: dict[str, Any],
79-
context: Context[ServerSessionT, LifespanContextT] | None = None,
79+
context: Context[ServerSessionT, LifespanContextT, Any] | None = None,
8080
) -> Any:
8181
"""Run the tool with arguments."""
8282
try:

0 commit comments

Comments
 (0)