tool_name_glob 字段。它是一个有意精简的、
大小写敏感的语法(没有正则,没有回溯),所以一条规则读起来就和你从
Discovered tools 标签里照着键入一个工具名一样,而匹配在中继热路径上
保持线性时间。
本页是关于那一个字段的聚焦语法参考。关于一个 glob 在一条完整规则中的
位置——执行面、参数子句、egress 列表、判定——参见
规则 schema 以及
防火墙规则 中的深度引擎参考。
1. 为什么用 工具名 glob 而非正则
工具按惯例以 server.tool 或 category.action 做命名空间
(shell.exec、db.query、community.http_fetch)。一个 glob 让一条规则
捕获一整个家族——用 shell.* 捕获每一个 shell 动词,用 *.delete 跨
服务器捕获一个动词——而没有在每一次工具调用都运行的路径上用正则带来的
脚枪。
这个语法故意微小。匹配是大小写敏感的——MCP 工具名按惯例是小写加点,
所以一次大小写折叠会让从 Discovered tools 视图直接复制粘贴一个名称的作者
吃惊。没有灾难性回溯,因为它背后没有正则引擎;下面每一个模式都是少数几个
字符串操作。
2. 五种模式形态
一个工具名 glob恰好是这些形态之一。任何不符合通配符形式的东西都被当作
一个字面的、精确的匹配。
| 模式 | 形态 | 匹配 |
|---|---|---|
"" 或 * | 任意 | 每一次工具调用。 |
foo.* | 前缀 | foo.bar、foo.exec——不含裸 foo。 |
*.exec | 后缀 | shell.exec、db.exec,以及裸 exec。 |
*.shell.* | 中缀 | local.shell.exec、byo.shell.run。 |
shell.exec | 精确 | 仅字面字符串 shell.exec。 |
3. 前缀 —— foo.*
匹配任何名称以 foo. 开头且在点之后至少有一个字符的工具。
匹配
对模式
shell.* 匹配 shell.exec、shell.run、shell.rm不匹配
裸
shell(前缀要求那个尾随的点以及它之后的某个东西)shell.* 拒绝覆盖一个
服务器以后可能添加的每一个 shell 动词。
4. 后缀 —— *.exec
匹配任何名称以 .exec 结尾、锚定在一个点上的工具——并且也匹配单独的
裸的、无命名空间的动词 exec。
后缀保持锚定——它不会匹配一个部分单词:
| 模式 | shell.exec | 裸 exec | shell.execute |
|---|---|---|---|
*.exec | 匹配 | 匹配 | 不匹配 |
shell.execute 需要 *.execute;后缀只在一个点边界或字符串开头触发,
绝不在单词中间。
5. 中缀 —— *.shell.*
匹配任何名称把 .shell. 作为中缀包含、每一侧至少有一个字符的工具。
这就是一条规则如何覆盖一个动词,无论一个 BYO-MCP 服务器恰好如何为它做
命名空间。
local.shell.exec、byo.shell.run 以及任何其他
<server>.shell.<verb> 形态。它不匹配裸 shell 或一个周围什么都没有的
裸 .shell.——每一侧至少一个字符的要求让中缀保持诚实。
6. 精确 —— shell.exec
任何不是上面通配符形态之一的东西都是一个字面字符串匹配。shell.exec
匹配 shell.exec 而无其他。当你想点名一个特定工具时这是正确的选择——把它
与一个 参数子句 搭配以进一步
收窄(“只在命令是 rm -rf 时拦截 shell.exec”)。
7. 一个具体示例
假设你想拒绝每一个破坏性 shell 动词,无论一个 MCP 服务器如何为它做命名 空间,同时让其他一切审计。在控制台规则编辑器中(写入需要 Developer+), 该规则的匹配那一半是一个单一的中缀 glob:firewall_policy_id),现在该规则捕获
local.shell.exec、byo.shell.run 和 acme.shell.rm——三个服务器,一个
glob。想在依赖它之前确认它在你预期的内容上触发?使用
测试规则——它返回判定、匹配到的规则
和原因,而不派发任何东西。
8. 快速参考
裸动词被一个后缀 glob 覆盖吗?
裸动词被一个后缀 glob 覆盖吗?
是的。
*.exec 匹配 shell.exec、db.exec,以及裸的、无命名空间的
exec。前缀 glob(foo.*)不匹配裸命名空间 foo——只匹配点之后
有东西的名称。foo.*.bar 中间的星号有效吗?
foo.*.bar 中间的星号有效吗?
不。引擎理解的唯一中间通配符形态是对称中缀
*.X.*。foo.*.bar 落到
一个精确字面匹配。改用两条规则或一个参数子句。匹配是大小写敏感的吗?
匹配是大小写敏感的吗?
是的。
Shell.Exec 和 shell.exec 是不同的工具。从 Discovered tools
标签逐字复制名称。如果 glob 格式不正确会怎样?
如果 glob 格式不正确会怎样?
任何不是上面五种之一的形态都被当作一个精确匹配——它根本不会匹配一个
真实的工具名,所以该规则永不触发,而不是匹配某个意外的东西。控制台在
保存时验证规则。
相关
工具白名单
用 glob 允许一个已知集合并拒绝其余。
验证参数
把一个 JSONPath 参数子句 AND 到一个 glob 上。
规则 schema
一处看清一条规则的每一个字段。
