MCP Agent Firewall
MCP Agent Firewall
Model Context Protocol (MCP) 2026-07-28 トラフィックのための決定論的セキュリティゲートウェイ。
エージェント/MCP クライアントとリモート MCP サーバーの間に位置し、信頼境界の両側を強制します:
実行前: プロトコル整合性、決定論的ポリシー、ピン留めされたツールスキーマ、署名付きの人間による承認
実行後: レスポンス側の資格情報 DLP、制限付き検査、明示的な非信頼コンテンツのラベル付け、プライバシーを最小化した出力監査
セキュリティの判断は LLM に委ねられることはありません。
現在のマイルストーン — v0.5.0
v0.5 ではレスポンス側の出力封じ込めが追加されました。
承認されたツール呼び出しも、信頼できる出力を生成するとは想定されなくなりました。すべてのアップストリームレスポンスは、呼び出し元に返される前に検査されます。シークレット/資格情報に似た出力はブロックされ、プロンプトインジェクションに似たテキストにはフラグが付き、通過したすべてのアップストリームコンテンツには非信頼のラベルが明示的に付けられます。
agent / MCP client
|
v
MCP header/body integrity
|
v
deterministic policy
|
+--> DENY ------------------------------> stop
|
v
pinned tool catalog + JSON Schema
|
v
signed human approval when required
|
v
mcp.upstream.dispatch [CLIENT span]
|
v
upstream MCP server
|
| UNTRUSTED OUTPUT
v
mcp.output.inspect
|
+--> credential / secret -------------> BLOCK 502 / -32046
|
+--> malformed / binary / oversized --> BLOCK 502 / -32046
|
+--> prompt-injection signal ----------> FLAG + pass through
|
+--> clean ----------------------------> pass through
|
v
explicit untrusted-content headers
|
v
agent / MCP client
Parallel controls:
- privacy-minimized request + output SQLite audit
- low-cardinality OpenTelemetry metrics
- optional OTLP HTTP exportRelated MCP server: AgentGuard MCP Server
レスポンス側の封じ込め
資格情報/シークレット DLP
決定論的な出力スキャナーは、認識された資格情報マテリアルをブロックします。これには以下が含まれます:
access_token、refresh_token、api_key、private_key、authorization、password、secretなどの構造化されたシークレットを含むキーと関連バリアントPEM 秘密鍵マテリアル
Bearer 資格情報
AWS アクセスキー ID
GitHub スタイルのトークン
OpenAI スタイルの
sk-資格情報JWT 形式の資格情報文字列
ブロックされたアップストリームレスポンスは、ファイアウォールが生成した JSON-RPC エラーに置き換えられます:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32046,
"message": "Upstream MCP response blocked by output containment",
"data": {
"action": "block",
"signals": ["sensitive_key"],
"untrusted": true
}
}
}ブロックされたレスポンスボディはエラー内には表示されません。
プロンプトインジェクションへの対応
出力プロンプトインジェクション正規表現はシグナルであり、セキュリティ上の決定権を持つものではありません。
たとえば、「ignore previous instructions(以前の指示を無視する)」のようなコンテンツは、ブロック対象になるシークレットシグナルが含まれていなければ通過が許可されます。ただし、呼び出し元には次の情報が渡されます:
Mcp-Firewall-Untrusted-Content: true
Mcp-Firewall-Output-Inspection: flagged
Mcp-Firewall-Output-Signals: prompt_injection_signalクリーンな出力であっても、次の情報が提供されます:
Mcp-Firewall-Untrusted-Content: true
Mcp-Firewall-Output-Inspection: cleanこれにより、ツールによって返されたデータと信頼された指示との違いが保たれます。
フェイルクローズドなレスポンス境界
出力検査では以下をブロックします:
JSON として宣言されているにもかかわらず解析できない内容
非 UTF-8 のバイナリ出力
MAX_RESPONSE_BYTES(既定 262,144 バイト)を超えるレスポンス32 レベルを超える深さの JSON
10,000 ノードを超える JSON トラバーサル
{ または [ で始まる UTF-8 出力は、アップストリームサーバーがうつ場合であっても非 JSON メディアタイプを宣言している場合でも JSON としてパースされるため、構造化キー DLP の単純なコンテンツタイプによる回避を防ぎます。
現時点での制限: httpx はサイズチェックを行う前にアップストリームレスポンスをバッファリングします。そのため、この制限は検査/返却の動作を制約しますが、ストリーミング時のネットワークメモリ制約にはまだなっていません。
プライバシーを最小化した出力監査
GET /v1/audit/output は、リクエスト監査と同様に X-Operator-Token 制御によって保護されています。
出力監査レコードには以下のみが含まれます:
タイムスタンプ
メソッド/ツール名
clean、flagged、blockedのいずれかの結果固定語彙のシグナル名
レスポンスの SHA-256
レスポンスのバイト長
生のアップストリームレスポンスボディは出力監査に永続化されることはありません。
OpenTelemetry による可観測性
セキュリティ関連のスパンは以下を含みます:
mcp.firewall.requestmcp.policy.evaluatemcp.schema.validatemcp.approval.issuemcp.approval.verifymcp.approval.consumemcp.upstream.dispatchmcp.output.inspect
低カーディナリティなメトリクス:
メトリクス | ディメンション |
|
|
|
|
|
|
|
|
|
|
ツール名とリクエストハッシュはトレース専用であり、メトリクスのディメンションには含まれません。トレース文字列はサニタイズされ、長さが制限されています。生のリクエスト引数、レスポンスボディ、承認レシート、ID、認証トークンはテレメトリから除外されます。
v0.1–v0.4 から引き継がれたリクエスト側の制御
MCP-Protocol-Version、Mcp-Method、Mcp-Nameの整合性チェックデフォルト拒否の決定論的ツールポリシー
シェル/コマンド/資格情報スタイルのツールに対する明示的拒否パターン
影響の大きい送信/作成/更新/削除/購入/転送/デプロイ系ツールに対する人間の承認
ネストされたシークレットキー、保護パス、文字列サイズ、数値のリクエスト制約
正規表現にセキュリティ権限を与えないプロンプトインジェクションシグナル
SHA-256 でピン留めされた信頼ツールカタログ
JSON Schema 2020-12 の引数検証
信頼された
x-mcp-header/Mcp-Param-*ボディヘッダー検証HMAC-SHA256 の短時間有効な一回限り承認レシート
呼び出し元の認可をアップストリームに転送しない
プロセス単位のレート制限と上限付きリクエストボディ
W3C TraceContext の抽出 + 生成されたアップストリーム伝播
オプションの OTLP HTTP トレース/メトリクスエクスポート
セットアップ
UPSTREAM_MCP_URL=https://your-mcp-server.example/mcp
MAX_BODY_BYTES=65536
MAX_RESPONSE_BYTES=262144
APPROVAL_SIGNING_KEY=<random-secret-at-least-32-bytes>
APPROVAL_ISSUER_TOKEN=<operator-only-token>
APPROVAL_DEFAULT_TTL_SECONDS=300
APPROVAL_MAX_TTL_SECONDS=900
TRUSTED_TOOL_CATALOG_PATH=./config/trusted_tools.example.json
TRUSTED_TOOL_CATALOG_SHA256=<canonical-catalog-sha256>
AUDIT_READ_TOKEN=<operator-only-token>
OTEL_ENABLED=false
OTEL_SERVICE_NAME=mcp-agent-firewall
OTEL_EXPORTER_OTLP_ENDPOINT=すべてのゲートを実行
pip install -e ".[dev]"
ruff check app tests scripts
pytest -q
python scripts/run_benchmark.py --fail-on-unsafe
python scripts/run_approval_benchmark.py
python scripts/run_schema_benchmark.py
python scripts/run_observability_benchmark.py
python scripts/run_output_benchmark.py
docker build -t mcp-agent-firewall:test .検証済み v0.5 回帰テストの結果
v0.5 実装について GitHub Actions で検証済み:
pytest テスト 74 件合格
ポリシー安全性ベンチマーク: 32/32 の完全判定一致
ポリシー安全性ベンチマーク: 安全でない誤受理 0 件、誤ブロック 0 件
署名付き承認セキュリティベンチマーク: 11/11 合格
署名付き承認セキュリティベンチマーク: 安全でない誤受理 0 件
信頼済みスキーマ / MCP ヘッダーベンチマーク: 12/12 合格
信頼済みスキーマ / MCP ヘッダーベンチマーク: 安全でない誤受理 0 件、誤ブロック 0 件
可観測性プライバシー / 伝播ベンチマーク: 14/14 合格
可観測性ベンチマーク: テレメトリの漏洩検出 0 件
出力封じ込めベンチマーク: 11/11 合格
出力封じ込めベンチマーク: 安全でない誤受理 0 件
Ruff: 合格
Docker ビルド: 合格
出力封じ込めベンチマークは、クリーンなパススルー、構造化シークレットキー、PEM 秘密鍵、Bearer 資格情報、GitHub スタイル資格情報、プロンプトインジェクションシグナル、不正な JSON、バイナリ出力、レスポンスサイズ上限、誤解を招くコンテンツタイプ、元の内容を表示しない公開検査メタデータをカバーしています。
可観測性ベンチマークは、実際の FastAPI/MCP リクエストを通じて、W3C 親コンテキスト、ポリシー/スキーマ/承認/出力スパン、制限付きメトリクスのディメンション、生成されたアップストリームトレース伝播、出力の非信頼ラベル付け、取得したテレメトリ内に注入を検出しないことを検証します。シークレットセンチネルが注入されていないことも確認します。
これらは合成回帰テストであり、本番環境での普遍的なセキュリティや、資格情報/プロンプトインジェクションの完全な検出を保証するものではありません。
信頼境界、制御、および残存リスクについては、docs/THREAT_MODEL.md を参照してください。
今後のマイルストーン
キー ID と限定された期間でバックアップした承認署名キーのローテーション
ストリーミングレスポンスサイズの強制と、オプションの安全なコンテンツタイプ許可リスト
マルチレプリカ展開のための共有 レプレイ/レートリミット 状態
ピン留めカタログに対するライブ アップストリーム
tools/listのドリフト検出決定論的なローカルフォールバックを備えたオプションの OPA/Rego バックエンド
実 MCP トレースから導出された敵対的コーパス
This server cannot be deployed
Maintenance
Related MCP Connectors
Security firewall for AI agents — scans MCP calls for injection, secrets, and risks.
MCP enforcement layer that intercepts AI agent actions and blocks rule violations before execution.
Security & DLP proxy for MCP: tool-poisoning scans, PII redaction on tool args/results. Beta.
- gatewayOAuthai.sealgate
MCP gateway with runtime security policy, tool-call-level control, and audit of agent actions.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceGoverns AI agent HTTP requests with policy enforcement, security scanning, and audit logging via MCP.MIT
- FlicenseNot gradedqualityBmaintenanceProvides a secure MCP boundary for AI agents, intercepting and validating tool calls, redacting secrets, and requiring human approval for sensitive actions with a tamper-evident audit trail.-
- AlicenseNot gradedqualityFmaintenanceEnables transparent security for any MCP server by intercepting tool calls, blocking prompt injection attempts, masking PII in responses, and writing immutable audit logs.1,667 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnforces MCP security by proxying between AI agents and MCP servers, scanning tools and results for prompt injection, enforcing allow/deny policies, redacting sensitive arguments, and logging all traffic.248 PyPIMIT