diff --git a/docs/migration.md b/docs/migration.md index c0fda063..9ce3f253 100644 --- a/docs/migration.md +++ b/docs/migration.md @@ -579,7 +579,7 @@ mcp = MCPServer() @mcp.resource( "git://diff/{+range}", - security=ResourceSecurity(exempt_params=frozenset({"range"})), + security=ResourceSecurity(exempt_params={"range"}), ) def git_diff(range: str) -> str: ... diff --git a/src/mcp/server/mcpserver/resources/templates.py b/src/mcp/server/mcpserver/resources/templates.py index aeef1370..5bb434f9 100644 --- a/src/mcp/server/mcpserver/resources/templates.py +++ b/src/mcp/server/mcpserver/resources/templates.py @@ -3,7 +3,7 @@ from __future__ import annotations import inspect -from collections.abc import Callable, Mapping +from collections.abc import Callable, Mapping, Set from dataclasses import dataclass, field from typing import TYPE_CHECKING, Any @@ -36,7 +36,7 @@ class ResourceSecurity: # Opt out for a parameter that legitimately contains .. @mcp.resource( "git://diff/{+range}", - security=ResourceSecurity(exempt_params=frozenset({"range"})), + security=ResourceSecurity(exempt_params={"range"}), ) def git_diff(range: str) -> str: ... """ @@ -47,7 +47,7 @@ class ResourceSecurity: reject_absolute_paths: bool = True """Reject values that look like absolute filesystem paths.""" - exempt_params: frozenset[str] = field(default_factory=frozenset[str]) + exempt_params: Set[str] = field(default_factory=frozenset[str]) """Parameter names to skip all checks for.""" def validate(self, params: Mapping[str, str | list[str]]) -> bool: diff --git a/tests/server/mcpserver/resources/test_resource_template.py b/tests/server/mcpserver/resources/test_resource_template.py index 22638b57..c6cdabce 100644 --- a/tests/server/mcpserver/resources/test_resource_template.py +++ b/tests/server/mcpserver/resources/test_resource_template.py @@ -55,7 +55,7 @@ def test_matches_allows_dotdot_as_substring(): def test_matches_exempt_params_skip_security(): - policy = ResourceSecurity(exempt_params=frozenset({"range"})) + policy = ResourceSecurity(exempt_params={"range"}) t = _make("git://diff/{+range}", security=policy) assert t.matches("git://diff/../foo") == {"range": "../foo"} diff --git a/tests/server/mcpserver/test_server.py b/tests/server/mcpserver/test_server.py index c14ce56d..077b3079 100644 --- a/tests/server/mcpserver/test_server.py +++ b/tests/server/mcpserver/test_server.py @@ -176,7 +176,7 @@ class TestServer: @mcp.resource( "git://diff/{+range}", - security=ResourceSecurity(exempt_params=frozenset({"range"})), + security=ResourceSecurity(exempt_params={"range"}), ) def git_diff(range: str) -> str: return f"diff:{range}"