メインコンテンツへスキップ
エージェントがツールを呼び出すとき、それが渡す引数は、それを生成したプロンプトと 同じくらいリスクがあります — command フィールドに落とされた sk-… キー、body に貼り付けられた顧客の SSN、リクエストヘッダー内の内部トークン。ファイアウォールの sanitize 判定は、その素材をツール呼び出しの引数内で捕捉し、型付きのリダクション トークンで置き換え、クリーニングされた呼び出しを転送します — そのためアクションは 依然として実行されますが、シークレットはゲートウェイを決して離れません。
「ツール出力をサニタイズ」は呼び出し引数を意味し、ツール結果ではありません。 人々はサニタイズ tool output を検索し、ファイアウォールがツールが返すものを スクラブすることを期待します。sanitize 判定はツール結果を触りません — エージェントが ツール呼び出しに送り込む引数をリダクトします。ツールやモデルが返すテキストを スクリーニングする必要がある場合、それはファイアウォールの sanitize ルールではなく、 ガードレールの出力ステージの仕事です。
これはファイアウォールのマッチング言語のひとつの判定です。完全なセットについては 判定ルールリファレンスを 参照してください;このページはサニタイズを作成し推論するための焦点を絞ったガイドです。

1. サニタイズが行うこと — そして決して触らないもの

verdict: sanitize のルールは、呼び出しがディスパッチされる前にツール呼び出しの 引数に対してリダクションエンジンを実行します。各マッチは正規のトークンで 置き換えられ、呼び出しはクリーニングされた引数で進みます — ツールは依然として実行 されますが、生のシークレットなしでです。

リダクトする

モデルが発行した tool_call または MCP tools/call の JSON 引数commandbodyheaders、シークレットや PII が落ちた任意の文字列フィールド。

決してリダクトしない

ツールが返すコンテンツ、プロンプト、モデルのレスポンステキスト。サニタイズは 引数専用のリダクタです。テキストのスクリーニングは ガードレールの関心事です。
リダクタは各マッチを型付きトークンで置き換えます:プリセットマッチは [redacted:<preset>] になり(例:[redacted:openai_key])、カスタムパターンマッチは [redacted:custom] になります。引数の形は保たれます — 機密の部分文字列のみが変わり ます — そのため有効な JSON を期待するツールは依然として有効な JSON を受け取ります。

2. 組み込み検出器プリセット

サニタイズルールは 1 つ以上のプリセット(よく知られたシークレット/PII の形) および/またはカスタム正規表現パターンを名指しします。組み込みプリセット:
プリセット捕捉するもの
aws_access_keyAWS アクセスキー id(AKIA… / ASIA… + 16 文字)
aws_secret_key40 文字の AWS シークレット(境界認識)
openai_keysk- + 32 文字以上
anthropic_keysk-ant- + 40 文字以上
bearer_tokenBearer + 16 文字以上のトークン(キーワード保持)
emailメールアドレス
ssn_us3-2-4 形の US SSN
credit_cardLuhn チェックを通過する 13〜19 桁の連続
サニタイズルールは少なくとも 1 つのプリセットまたはカスタムパターンを宣言 しなければなりません — 空のサニタイザはルールを保存するときに拒否されます。 credit_card マッチはさらに Luhn チェックされるため、有効なカードではない同じ長さの 数字は過剰リダクトされるのではなく手を加えられないままになります。

3. 具体例 1 つ

これをコンソールのルールエディタで作成します。この例は、エージェントが発行する任意の http.* ツール呼び出しの引数から OpenAI キーと任意のメールをリダクトし、それから クリーニングされた呼び出しを転送します:
{
  "label": "strip secrets from http tool args",
  "stage": "response",
  "tool_name_glob": "http.*",
  "verdict": "sanitize",
  "sanitize_json": "{\"presets\":[\"openai_key\",\"email\"],\"custom\":[]}"
}
モデルが次のような呼び出しを発行すると:
{ "name": "http.post", "arguments": { "url": "…", "body": "key=sk-AAAA…BBBB user=jo@acme.com" } }
ゲートウェイは body を key=[redacted:openai_key] user=[redacted:email] に書き換えて 転送します — リクエストは依然として実行され、シークレットとアドレスはゲートウェイを 決して離れません。
ルールを response ステージ(モデルが発行した tool_calls)に固定するか、 ステージを空のままにして mcp サーフェスもカバーします。それらが呼び出し時の 引数を運ぶサーフェスであり、サニタイズがリダクトするものです。

4. inbound サーフェスでは、サニタイズは deny にエスカレートする

inbound サーフェスは、エージェントがリクエストで アドバタイズするツール — ツール定義まだ呼び出し時の引数を運ばない — を 評価します。そこにはリダクトするものが何もないため、inbound サーフェス上の sanitize 判定は deny にエスカレートします(フェイルクローズ):リクエストは リダクトされずに転送されるのではなく firewall_blocked でブロックされます。
inbound のツールアドバタイズメントをクリーニングすることを期待してサニタイズルールを 作成しないでください — それはブロックします。ツール定義をリクエストから消したい 場合は、明示的なdenyを使います。サニタイズは 実引数が存在する responsemcp サーフェスのために取っておいてください。

5. サニタイズ vs. シークレットを扱う他の方法

エージェントが漏らそうとしているシークレットに対して 3 つの層が作用できます — どこで選びます:
シークレットをツール呼び出しの引数から剥がし、それでも呼び出しを実行します。 アクションは正当だがエージェントがフィールドに機密のものを入れたときに使います。 引数層のみ。
呼び出しを完全に止めます。引数だけでなくアクションそのものが危険なときに使います。 これは inbound サーフェスでサニタイズがなるものでもあります。 ツールをブロックを参照。
Secrets Blocker と PII ガードレールは、 リクエストまたはレスポンスのテキストをスクリーニングします(出力ステージでは、 モデル生成コンテンツを含む)。それが「ツールやモデルが返すもの」の層です — サニタイズが行わないものです。
強制する前にテストする。 サニタイズは responsemcp サーフェスでライブ 呼び出しの引数を書き換えます。サニタイズルールはまず シャドウモードのもとで作成し、引数が実際に 書き換えられる前に期待どおりにマッチすることを確認するために events フィードを監視します。

6. サニタイズが証跡のどこに表示されるか

すべての判定と同様に、サニタイズ評価はファイアウォールイベントとして記録されます — events ログで判定、サーフェス、ツール、実行で フィルタ可能で、分析でロールアップされます。 シャドウモードでは、サニタイズ判定は(すべての 強制判定と同様に)audit に格下げされ、理由には [shadow] would … が前置されるため、 引数が実際に書き換えられる前に影響を測定できます。

次に進む場所

すべての判定

allow、audit、deny、sanitize、pending_approval、cap_cost。

引数の検証

引数のにあるもので呼び出しをマッチ — JSONPath 句文法。

ツールをブロック

アクションそのものが問題なら、呼び出し全体を deny。

ファイアウォール + ガードレール

ツールやモデルが返すテキストをスクリーニング — サニタイズがカバーしない層。
サニタイズが封じ込めを助ける脅威については、 データ持ち出し危険なツール呼び出しを参照してください。 判定の背後にある完全なルール文法については、 ファイアウォールルールリファレンスを参照してください。