Skip to content

Commit 00a1336

Browse files
committed
refactor: accept plain set for ResourceSecurity.exempt_params
Changes the type from frozenset[str] to collections.abc.Set[str] so users can write exempt_params={"range"} instead of exempt_params=frozenset({"range"}). The default factory stays frozenset for immutability.
1 parent 928698b commit 00a1336

File tree

4 files changed

+6
-6
lines changed

4 files changed

+6
-6
lines changed

docs/migration.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ mcp = MCPServer()
579579

580580
@mcp.resource(
581581
"git://diff/{+range}",
582-
security=ResourceSecurity(exempt_params=frozenset({"range"})),
582+
security=ResourceSecurity(exempt_params={"range"}),
583583
)
584584
def git_diff(range: str) -> str:
585585
...

src/mcp/server/mcpserver/resources/templates.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import annotations
44

55
import inspect
6-
from collections.abc import Callable, Mapping
6+
from collections.abc import Callable, Mapping, Set
77
from dataclasses import dataclass, field
88
from typing import TYPE_CHECKING, Any
99

@@ -36,7 +36,7 @@ class ResourceSecurity:
3636
# Opt out for a parameter that legitimately contains ..
3737
@mcp.resource(
3838
"git://diff/{+range}",
39-
security=ResourceSecurity(exempt_params=frozenset({"range"})),
39+
security=ResourceSecurity(exempt_params={"range"}),
4040
)
4141
def git_diff(range: str) -> str: ...
4242
"""
@@ -47,7 +47,7 @@ def git_diff(range: str) -> str: ...
4747
reject_absolute_paths: bool = True
4848
"""Reject values that look like absolute filesystem paths."""
4949

50-
exempt_params: frozenset[str] = field(default_factory=frozenset[str])
50+
exempt_params: Set[str] = field(default_factory=frozenset[str])
5151
"""Parameter names to skip all checks for."""
5252

5353
def validate(self, params: Mapping[str, str | list[str]]) -> bool:

tests/server/mcpserver/resources/test_resource_template.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def test_matches_allows_dotdot_as_substring():
5555

5656

5757
def test_matches_exempt_params_skip_security():
58-
policy = ResourceSecurity(exempt_params=frozenset({"range"}))
58+
policy = ResourceSecurity(exempt_params={"range"})
5959
t = _make("git://diff/{+range}", security=policy)
6060
assert t.matches("git://diff/../foo") == {"range": "../foo"}
6161

tests/server/mcpserver/test_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ async def test_resource_security_per_resource_override(self):
176176

177177
@mcp.resource(
178178
"git://diff/{+range}",
179-
security=ResourceSecurity(exempt_params=frozenset({"range"})),
179+
security=ResourceSecurity(exempt_params={"range"}),
180180
)
181181
def git_diff(range: str) -> str:
182182
return f"diff:{range}"

0 commit comments

Comments
 (0)