メインコンテンツへスキップ
すべてのファイアウォールルールは、どのツール呼び出しに適用するかに答えることから 始まります。その答えの前半はツール名グロブ — ルール上の tool_name_glob フィールド です。それは意図的に小さく、大文字小文字を区別する文法(正規表現なし、バックトラック なし)であり、ルールは Discovered tools タブからツール名を打ち込むのと同じ読み方に なり、マッチングはリレーのホットパス上で線形時間を保ちます。 このページはその 1 つのフィールドへの焦点を絞った文法リファレンスです。グロブが完全な ルールの中のどこに位置するか — サーフェス、引数句、egress リスト、判定 — については、 ルールスキーマファイアウォールルールの詳細なエンジンリファレンスを 参照してください。

1. なぜ正規表現ではなく ツール名グロブ

ツールは慣習的に server.tool または category.action で名前空間化されます (shell.execdb.querycommunity.http_fetch)。グロブは、すべてのツール呼び出しで 実行されるパス上での正規表現のフットガンなしに、1 つのルールがファミリー全体を捕捉 できるようにします — shell.* ですべてのシェル動詞、*.delete でサーバーをまたいだ 動詞。
文法は意図的に極小です。マッチングは大文字小文字を区別します — MCP ツール名は 慣習的にドット付き小文字なので、大文字小文字の畳み込みは Discovered tools ビューから 名前をそのままコピー&ペーストする作成者を驚かせるでしょう。背後に正規表現エンジンが ないため壊滅的なバックトラックはありません;以下のすべてのパターンはひと握りの文字列 操作です。

2. 5 つのパターン形

ツール名グロブはこれらの形のちょうど 1 つです。ワイルドカードの形に合わないものは すべて、リテラルの正確なマッチとして扱われます。
パターンマッチするもの
"" または *任意すべてのツール呼び出し。
foo.*プレフィックスfoo.barfoo.exec — 裸の foo不可
*.execサフィックスshell.execdb.execそして裸の exec
*.shell.*インフィックスlocal.shell.execbyo.shell.run
shell.execexactリテラル文字列 shell.exec のみ。
各形で人を引っかける 1 つのエッジについては、次のセクションを読んでください。

3. プレフィックス — foo.*

名前が foo. で始まり、ドットの後に少なくとももう 1 文字ある任意のツールに マッチします。

マッチする

パターン shell.* に対して shell.execshell.runshell.rm

マッチしない

裸の shell(プレフィックスは末尾のドットその後に何かを必要とします)
サーバーやカテゴリ全体を一度に統制するにはプレフィックスグロブを使います — 1 つの shell.* deny が、サーバーが後で追加するかもしれないすべてのシェル動詞をカバーします。

4. サフィックス — *.exec

名前が .exec で終わり、ドットでアンカーされた任意のツールにマッチします — そして 裸の、名前空間化されていない動詞 exec 単独にもマッチします。
裸の動詞のマッチは意図的です。プロバイダネイティブの関数呼び出しと、名前空間化しない MCP サーバーは、ツールを裸の動詞のもとで公開します(shell.exec ではなく単に exec)。 *.exec ルールは両方の形をカバーするため、名前空間化しないツールがサイレントに 見逃されることはありません。
サフィックスはアンカーされたままです — 部分的な単語にはマッチしません:
パターンshell.exec裸の execshell.execute
*.execマッチマッチマッチなし
shell.execute には *.execute が必要でしょう;サフィックスはドット境界または文字列の 先頭でのみ発火し、単語の途中では決して発火しません。

5. インフィックス — *.shell.*

.shell. をインフィックスとして含む任意のツール名に、各側に少なくとも 1 文字 ある状態でマッチします。これが、BYO-MCP サーバーがどう名前空間化しようと、1 つのルール が動詞をカバーする方法です。
{
  "label": "gate every shell tool, any server",
  "tool_name_glob": "*.shell.*",
  "verdict": "deny"
}
そのルールは local.shell.execbyo.shell.run、そして他の任意の <server>.shell.<verb> 形にマッチします。裸の shell や、周りに何もない裸の .shell. にはマッチしません — 各側に文字があるという要件がインフィックスを誠実に 保ちます。
インフィックス形は対称な *.X.* 形ののみです。中間にスターのあるパターン — foo.*.bar — はインフィックスグロブではありません;それはexact な文字列マッチに 落ちます(文字どおり foo.*.bar という名前のツールにのみマッチし、それは存在しません)。 「foo. で始まり .bar で終わる」にマッチするには、1 つのグロブではなく、2 つのルール または引数句が必要です。

6. Exact — shell.exec

上記のワイルドカード形のいずれでもないものはリテラル文字列マッチです。shell.execshell.exec にマッチし、他には何もマッチしません。1 つの特定のツールを名指ししたい ときの正しい選択です — さらに絞るために引数句と 組み合わせます(「コマンドが rm -rf のときのみ shell.exec をブロック」)。

7. 具体例 1 つ

MCP サーバーがどう名前空間化するかに関わらず、すべての破壊的シェル動詞を deny し、 それ以外すべてを audit させたいとします。コンソールのルールエディタで(書き込みは Developer+ が必要)、ルールのマッチ半分は単一のインフィックスグロブです:
{
  "label": "deny shell across servers",
  "stage": "response",
  "tool_name_glob": "*.shell.*",
  "verdict": "deny"
}
ポリシーにキーをアタッチすると(キーの firewall_policy_id)、ルールは今や local.shell.execbyo.shell.runacme.shell.rm を捕捉します — 3 つのサーバー、 1 つのグロブ。依存する前に期待どおりに発火することを確認したい? ルールのテストを使います — 何もディスパッチせずに 判定、マッチしたルール、理由を返します。
グロブはどのツールかを絞ります。どの引数で絞るには、同じルールに 引数句を AND します;特定のスキルが所有する ときのみツールを統制するには、スキル名グロブを追加します(同じ文法、所有スキルに 対してマッチ)。両方ともファイアウォールルールで カバーされています。

8. クイックリファレンス

はい。*.execshell.execdb.execそして裸の、名前空間化されていない exec にマッチします。プレフィックスグロブ(foo.*)は裸の名前空間 foo には マッチしません — ドットの後に何かある名前のみです。
いいえ。エンジンが理解する唯一の中間ワイルドカード形は対称なインフィックス *.X.* です。foo.*.bar は exact なリテラルマッチに落ちます。代わりに 2 つのルールか 引数句を使ってください。
はい。Shell.Execshell.exec は異なるツールです。Discovered tools タブから 名前をそのままコピーしてください。
上記の 5 つのいずれでもない形は exact マッチとして扱われます — それは実際のツール名に 単にマッチしないため、予期しないものにマッチするのではなく、ルールが決して発火しません。 コンソールは保存時にルールを検証します。

関連

ツール許可リスト

グロブを使って既知のセットを許可し、それ以外を deny。

引数の検証

グロブに JSONPath 引数句を AND する。

ルールスキーマ

ルールのすべてのフィールドを 1 か所で。
完全なマッチング言語 — 判定、サーフェス、egress リスト、シーケンス — については、 ファイアウォールルールを参照してください。プレーンが 初めて?ファイアウォールの概要から始めてください。