Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7a3ea56

Browse filesBrowse files
committed
fix: add type params to generic Context
1 parent f8c68af commit 7a3ea56
Copy full SHA for 7a3ea56

File tree

2 files changed

+19
-13
lines changed
Filter options

2 files changed

+19
-13
lines changed

‎src/mcp/server/fastmcp/resources/resource_manager.py

Copy file name to clipboardExpand all lines: src/mcp/server/fastmcp/resources/resource_manager.py
+5-1Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
if TYPE_CHECKING:
1313
from mcp.server.fastmcp.server import Context
14+
from mcp.server.session import ServerSessionT
15+
from mcp.shared.context import LifespanContextT
1416

1517
logger = get_logger(__name__)
1618

@@ -69,7 +71,9 @@ def add_template(
6971
return template
7072

7173
async def get_resource(
72-
self, uri: AnyUrl | str, context: "Context | None" = None
74+
self,
75+
uri: AnyUrl | str,
76+
context: "Context[ServerSessionT, LifespanContextT] | None" = None,
7377
) -> Resource | None:
7478
"""Get resource by URI, checking concrete resources first, then templates."""
7579
uri_str = str(uri)

‎src/mcp/server/fastmcp/resources/templates.py

Copy file name to clipboardExpand all lines: src/mcp/server/fastmcp/resources/templates.py
+14-12Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
from pydantic import BaseModel, Field, validate_call
1111

1212
from mcp.server.fastmcp.resources.types import FunctionResource, Resource
13+
from mcp.server.fastmcp.server import Context
1314
from mcp.server.fastmcp.utilities.func_metadata import func_metadata
1415

1516
if TYPE_CHECKING:
16-
from mcp.server.fastmcp.server import Context
17+
from mcp.server.session import ServerSessionT
18+
from mcp.shared.context import LifespanContextT
1719

1820

1921
class ResourceTemplate(BaseModel):
@@ -43,23 +45,20 @@ def from_function(
4345
name: str | None = None,
4446
description: str | None = None,
4547
mime_type: str | None = None,
48+
context_kwarg: str | None = None,
4649
) -> ResourceTemplate:
4750
"""Create a template from a function."""
4851
func_name = name or fn.__name__
4952
if func_name == "<lambda>":
5053
raise ValueError("You must provide a name for lambda functions")
5154

5255
# Find context parameter if it exists
53-
context_kwarg = None
54-
sig = inspect.signature(fn)
55-
for param_name, param in sig.parameters.items():
56-
if (
57-
param.annotation.__name__ == "Context"
58-
if hasattr(param.annotation, "__name__")
59-
else False
60-
):
61-
context_kwarg = param_name
62-
break
56+
if context_kwarg is None:
57+
sig = inspect.signature(fn)
58+
for param_name, param in sig.parameters.items():
59+
if param.annotation is Context:
60+
context_kwarg = param_name
61+
break
6362

6463
# Get schema from func_metadata, excluding context parameter
6564
func_arg_metadata = func_metadata(
@@ -91,7 +90,10 @@ def matches(self, uri: str) -> dict[str, Any] | None:
9190
return None
9291

9392
async def create_resource(
94-
self, uri: str, params: dict[str, Any], context: Context | None = None
93+
self,
94+
uri: str,
95+
params: dict[str, Any],
96+
context: Context[ServerSessionT, LifespanContextT] | None = None,
9597
) -> Resource:
9698
"""Create a resource from the template with the given parameters."""
9799
try:

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.