tool_name_glob 欄位。
它是一套刻意保持很小、區分大小寫的文法(沒有 regex、沒有回溯),
所以一條規則讀起來就和你會從 Discovered tools 分頁打出一個工具
名稱的方式一樣,而匹配在中繼熱路徑上維持線性時間。
本頁是針對那一個欄位的聚焦文法參考。關於一個 glob 在一條完整規則
內部的位置——介面、引數子句、egress 清單、裁決——參見
規則綱要與
防火牆規則中的深入引擎參考。
1. 為何用一個 工具名稱 glob 而非 regex
工具按慣例以 server.tool 或 category.action 命名空間化
(shell.exec、db.query、community.http_fetch)。一個 glob 讓
一條規則捕捉整個家族——shell.* 對應每個 shell 動詞、*.delete 對應
跨伺服器的一個動詞——而沒有一個在每次工具呼叫上執行的路徑上跑
regex 的自傷風險。
這套文法刻意很小。匹配是區分大小寫的——MCP 工具名稱按慣例是
小寫加點,所以一次大小寫摺疊會讓一個直接從 Discovered tools 檢視
複製貼上一個名稱的作者感到意外。它背後沒有 regex 引擎,所以沒有
災難性的回溯;下面每一個模式都是少數幾個字串操作。
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.* deny
涵蓋一個伺服器之後可能加入的每個 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 引數子句與一個 glob 做 AND。
規則綱要
一條規則的每個欄位,集於一處。
