
Question: How to get a resource argument containing “/” ?
快速结论:在 MCP Python SDK 中使用 @mcp.resource("folder://{path}") 定义资源模板时,如果路径参数中包含斜杠(如 folder://xxx/abc/zzz/),默认的正则匹配规则 [^/]+ 无法匹配带斜杠的参数。该问题尚未被正式修复,社区正在讨论引入类似 FastAPI/Starlette 的 {path:path} 语法来支持路径通配符。
问题场景
在 MCP Python SDK 中使用 @mcp.resource 装饰器定义资源模板时,用户希望路径参数(如 {path})能够匹配包含斜杠(/)的完整路径,例如 folder://xxx/abc/zzz/,以便实现嵌套目录的资源访问。
报错原文
# 当前正则匹配失败,params 返回 None
params = template.matches("folder://xxx/abc/zzz/")
assert params is not None # 断言失败
原因分析
可能原因:MCP Python SDK 的 ResourceTemplate 默认使用 [^/]+ 作为路径参数的正则匹配模式,该模式不支持斜杠字符。当 URI 中包含嵌套路径(如 xxx/abc/zzz)时,正则无法正确提取完整路径参数,导致 matches() 方法返回 None。
环境排查
- 确认使用 MCP Python SDK 的版本(该 Issue 当前未指定版本号)
- 检查是否使用了
ResourceTemplate.from_function()或@mcp.resource()装饰器 - 确认 URI 格式是否符合预期:如
folder://{path}
解决步骤
当前 Issue 尚未提供最终修复方案,以下为社区讨论的解决思路(可优先尝试):
- 等待官方修复:社区提议参考 FastAPI/Starlette 的 Path Convertor 语法,支持
{path:path}格式,使参数可以包含斜杠。该功能当前处于讨论阶段,标签为ready for work,尚未被实现。 - 临时替代方案:在官方修复前,可以通过对 URI 进行预处理,将斜杠替换为其他分隔符(如
_或-),然后在回调函数中还原。例如:定义@mcp.resource("folder://{path}"),但实际传入folder://xxx_abc_zzz,并在folder_contents函数中将path中的_替换回/。 - 自行修改正则:如果有 SDK 源码访问权限,可以尝试修改
ResourceTemplate中的正则模式,将[^/]+替换为.+?或其他允许斜杠的模式。注意这可能会影响参数绑定的精确性。
验证方法
通过 template.matches() 验证参数提取是否成功:如果 params 返回正确的路径字典(如 {"path": "xxx/abc/zzz/"}),则问题解决。
# 期望输出
params = template.matches("folder://xxx/abc/zzz/")
print(params) # 应输出:{'path': 'xxx/abc/zzz/'}
参考来源
modelcontextprotocol/python-sdk #436:Question: How to get a resource argument containing “/” ?


![[Feature Request]: Restart Failed Subtasks Instead of Restarting Entire Process](https://www.chat-gpts.plus/wp-content/uploads/2026/06/8682-f9e725d4-768x403.jpg)
![[Bug]: /team/member_update does not support setting budget_duration on individual member budgets](https://www.chat-gpts.plus/wp-content/uploads/2026/06/25509-cb8f8d8a-768x403.jpg)