tool_name_glob フィールド
です。それは意図的に小さく、大文字小文字を区別する文法(正規表現なし、バックトラック
なし)であり、ルールは Discovered tools タブからツール名を打ち込むのと同じ読み方に
なり、マッチングはリレーのホットパス上で線形時間を保ちます。
このページはその 1 つのフィールドへの焦点を絞った文法リファレンスです。グロブが完全な
ルールの中のどこに位置するか — サーフェス、引数句、egress リスト、判定 — については、
ルールスキーマと
ファイアウォールルールの詳細なエンジンリファレンスを
参照してください。
1. なぜ正規表現ではなく ツール名グロブ か
ツールは慣習的に server.tool または category.action で名前空間化されます
(shell.exec、db.query、community.http_fetch)。グロブは、すべてのツール呼び出しで
実行されるパス上での正規表現のフットガンなしに、1 つのルールがファミリー全体を捕捉
できるようにします — shell.* ですべてのシェル動詞、*.delete でサーバーをまたいだ
動詞。
文法は意図的に極小です。マッチングは大文字小文字を区別します — MCP ツール名は
慣習的にドット付き小文字なので、大文字小文字の畳み込みは Discovered tools ビューから
名前をそのままコピー&ペーストする作成者を驚かせるでしょう。背後に正規表現エンジンが
ないため壊滅的なバックトラックはありません;以下のすべてのパターンはひと握りの文字列
操作です。
2. 5 つのパターン形
ツール名グロブはこれらの形のちょうど 1 つです。ワイルドカードの形に合わないものは
すべて、リテラルの正確なマッチとして扱われます。
| パターン | 形 | マッチするもの |
|---|---|---|
"" または * | 任意 | すべてのツール呼び出し。 |
foo.* | プレフィックス | foo.bar、foo.exec — 裸の foo は不可。 |
*.exec | サフィックス | shell.exec、db.exec、そして裸の exec。 |
*.shell.* | インフィックス | local.shell.exec、byo.shell.run。 |
shell.exec | exact | リテラル文字列 shell.exec のみ。 |
3. プレフィックス — foo.*
名前が foo. で始まり、ドットの後に少なくとももう 1 文字ある任意のツールに
マッチします。
マッチする
パターン
shell.* に対して shell.exec、shell.run、shell.rmマッチしない
裸の
shell(プレフィックスは末尾のドットとその後に何かを必要とします)shell.* deny が、サーバーが後で追加するかもしれないすべてのシェル動詞をカバーします。
4. サフィックス — *.exec
名前が .exec で終わり、ドットでアンカーされた任意のツールにマッチします — そして
裸の、名前空間化されていない動詞 exec 単独にもマッチします。
サフィックスはアンカーされたままです — 部分的な単語にはマッチしません:
| パターン | shell.exec | 裸の exec | shell.execute |
|---|---|---|---|
*.exec | マッチ | マッチ | マッチなし |
shell.execute には *.execute が必要でしょう;サフィックスはドット境界または文字列の
先頭でのみ発火し、単語の途中では決して発火しません。
5. インフィックス — *.shell.*
.shell. をインフィックスとして含む任意のツール名に、各側に少なくとも 1 文字
ある状態でマッチします。これが、BYO-MCP サーバーがどう名前空間化しようと、1 つのルール
が動詞をカバーする方法です。
local.shell.exec、byo.shell.run、そして他の任意の
<server>.shell.<verb> 形にマッチします。裸の shell や、周りに何もない裸の
.shell. にはマッチしません — 各側に文字があるという要件がインフィックスを誠実に
保ちます。
6. Exact — shell.exec
上記のワイルドカード形のいずれでもないものはリテラル文字列マッチです。shell.exec は
shell.exec にマッチし、他には何もマッチしません。1 つの特定のツールを名指ししたい
ときの正しい選択です — さらに絞るために引数句と
組み合わせます(「コマンドが rm -rf のときのみ shell.exec をブロック」)。
7. 具体例 1 つ
MCP サーバーがどう名前空間化するかに関わらず、すべての破壊的シェル動詞を deny し、 それ以外すべてを audit させたいとします。コンソールのルールエディタで(書き込みは Developer+ が必要)、ルールのマッチ半分は単一のインフィックスグロブです:firewall_policy_id)、ルールは今や
local.shell.exec、byo.shell.run、acme.shell.rm を捕捉します — 3 つのサーバー、
1 つのグロブ。依存する前に期待どおりに発火することを確認したい?
ルールのテストを使います — 何もディスパッチせずに
判定、マッチしたルール、理由を返します。
グロブはどのツールかを絞ります。どの引数で絞るには、同じルールに
引数句を AND します;特定のスキルが所有する
ときのみツールを統制するには、スキル名グロブを追加します(同じ文法、所有スキルに
対してマッチ)。両方ともファイアウォールルールで
カバーされています。
8. クイックリファレンス
裸の動詞はサフィックスグロブでカバーされるか?
裸の動詞はサフィックスグロブでカバーされるか?
はい。
*.exec は shell.exec、db.exec、そして裸の、名前空間化されていない
exec にマッチします。プレフィックスグロブ(foo.*)は裸の名前空間 foo には
マッチしません — ドットの後に何かある名前のみです。foo.*.bar の中間スターは機能するか?
foo.*.bar の中間スターは機能するか?
いいえ。エンジンが理解する唯一の中間ワイルドカード形は対称なインフィックス
*.X.*
です。foo.*.bar は exact なリテラルマッチに落ちます。代わりに 2 つのルールか
引数句を使ってください。マッチングは大文字小文字を区別するか?
マッチングは大文字小文字を区別するか?
はい。
Shell.Exec と shell.exec は異なるツールです。Discovered tools タブから
名前をそのままコピーしてください。グロブが不正な形だったら?
グロブが不正な形だったら?
上記の 5 つのいずれでもない形は exact マッチとして扱われます — それは実際のツール名に
単にマッチしないため、予期しないものにマッチするのではなく、ルールが決して発火しません。
コンソールは保存時にルールを検証します。
関連
ツール許可リスト
グロブを使って既知のセットを許可し、それ以外を deny。
引数の検証
グロブに JSONPath 引数句を AND する。
ルールスキーマ
ルールのすべてのフィールドを 1 か所で。
