|
14 | 14 |
|
15 | 15 | if TYPE_CHECKING:
|
16 | 16 | from mcp.server.fastmcp.server import Context
|
| 17 | + from mcp.server.session import ServerSessionT |
| 18 | + from mcp.shared.context import LifespanContextT |
17 | 19 |
|
18 | 20 |
|
19 | 21 | class ResourceTemplate(BaseModel):
|
@@ -43,23 +45,22 @@ def from_function(
|
43 | 45 | name: str | None = None,
|
44 | 46 | description: str | None = None,
|
45 | 47 | mime_type: str | None = None,
|
| 48 | + context_kwarg: str | None = None, |
46 | 49 | ) -> ResourceTemplate:
|
47 | 50 | """Create a template from a function."""
|
48 | 51 | func_name = name or fn.__name__
|
49 | 52 | if func_name == "<lambda>":
|
50 | 53 | raise ValueError("You must provide a name for lambda functions")
|
51 | 54 |
|
52 | 55 | # 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 | + from mcp.server.fastmcp.server import Context |
| 58 | + |
| 59 | + sig = inspect.signature(fn) |
| 60 | + for param_name, param in sig.parameters.items(): |
| 61 | + if param.annotation is Context: |
| 62 | + context_kwarg = param_name |
| 63 | + break |
63 | 64 |
|
64 | 65 | # Get schema from func_metadata, excluding context parameter
|
65 | 66 | func_arg_metadata = func_metadata(
|
@@ -91,7 +92,10 @@ def matches(self, uri: str) -> dict[str, Any] | None:
|
91 | 92 | return None
|
92 | 93 |
|
93 | 94 | async def create_resource(
|
94 |
| - self, uri: str, params: dict[str, Any], context: Context | None = None |
| 95 | + self, |
| 96 | + uri: str, |
| 97 | + params: dict[str, Any], |
| 98 | + context: Context[ServerSessionT, LifespanContextT] | None = None, |
95 | 99 | ) -> Resource:
|
96 | 100 | """Create a resource from the template with the given parameters."""
|
97 | 101 | try:
|
|
0 commit comments