Skip to content

Commit 5cbea24

Browse files
authored
Use proper generic for Context (#245)
1 parent 06e692b commit 5cbea24

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

src/mcp/server/fastmcp/server.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
from mcp.server.session import ServerSession
3838
from mcp.server.sse import SseServerTransport
3939
from mcp.server.stdio import stdio_server
40-
from mcp.shared.context import RequestContext
40+
from mcp.shared.context import LifespanContextT, RequestContext
4141
from mcp.types import (
4242
AnyFunction,
4343
EmbeddedResource,
@@ -564,7 +564,7 @@ def _convert_to_content(
564564
return [TextContent(type="text", text=result)]
565565

566566

567-
class Context(BaseModel):
567+
class Context(BaseModel, Generic[LifespanContextT]):
568568
"""Context object providing access to MCP capabilities.
569569
570570
This provides a cleaner interface to MCP's RequestContext functionality.
@@ -598,13 +598,13 @@ def my_tool(x: int, ctx: Context) -> str:
598598
The context is optional - tools that don't need it can omit the parameter.
599599
"""
600600

601-
_request_context: RequestContext[ServerSession, Any] | None
601+
_request_context: RequestContext[ServerSession, LifespanContextT] | None
602602
_fastmcp: FastMCP | None
603603

604604
def __init__(
605605
self,
606606
*,
607-
request_context: RequestContext | None = None,
607+
request_context: RequestContext[ServerSession, LifespanContextT] | None = None,
608608
fastmcp: FastMCP | None = None,
609609
**kwargs: Any,
610610
):
@@ -620,7 +620,7 @@ def fastmcp(self) -> FastMCP:
620620
return self._fastmcp
621621

622622
@property
623-
def request_context(self) -> RequestContext:
623+
def request_context(self) -> RequestContext[ServerSession, LifespanContextT]:
624624
"""Access to the underlying request context."""
625625
if self._request_context is None:
626626
raise ValueError("Context is not available outside of a request")

src/mcp/shared/context.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
from dataclasses import dataclass
2-
from typing import Generic, TypeVar
2+
from typing import Any, Generic
3+
4+
from typing_extensions import TypeVar
35

46
from mcp.shared.session import BaseSession
57
from mcp.types import RequestId, RequestParams
68

7-
SessionT = TypeVar("SessionT", bound=BaseSession)
8-
LifespanContextT = TypeVar("LifespanContextT")
9+
SessionT = TypeVar("SessionT", bound=BaseSession[Any, Any, Any, Any, Any])
10+
LifespanContextT = TypeVar("LifespanContextT", default=None)
911

1012

1113
@dataclass

0 commit comments

Comments
 (0)