
MCPサーバー向けセキュリティゲートウェイ。ツールごとのポリシー適用、Ed25519署名付き監査レシート、シャドウモードログを備える。AIエージェントのアクセス制御のために、Cedar、OPA、Cerbosの外部ポリシーエンジンをサポート。
⚠️ このリポジトリは移動しました。 アクティブな開発は ScopeBlind/scopeblind-gateway で継続しています。
この個人フォークは正規リポジトリより古い可能性があります。Issue、プルリクエスト、最新コードについては組織リポジトリをご使用ください。
MCPサーバー向けセキュリティゲートウェイ。デフォルトでシャドウモードのログ、ツールごとのポリシー、オプションのローカルEd25519レシート、検証しやすい監査出力。
現在のCLIパス: 任意のstdio MCPサーバーを透過プロキシとしてラップします。シャドウモードではすべての tools/call リクエストをログに記録し、すべてを通過させます。ポリシーファイルを追加してツールごとのルールを適用します。protect-mcp init を実行してローカル署名鍵と設定を生成すると、ゲートウェイは署名済みレシートも出力できるようになります。
# Wrap an existing OpenClaw / MCP config into a usable pack
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe
# Shadow mode — log every tool call, enforce nothing
npx protect-mcp -- node my-server.js
# Generate keys + config template for local signing
npx protect-mcp init
# Shadow mode with local signing enabled
npx protect-mcp --policy protect-mcp.json -- node my-server.js
# Enforce mode
npx protect-mcp --policy protect-mcp.json --enforce -- node my-server.js
# Export an offline-verifiable audit bundle
npx protect-mcp bundle --output audit.json
protect-mcp は、MCPクライアントとサーバーの間にstdioプロキシとして配置されます。
MCP Client ←stdin/stdout→ protect-mcp ←stdin/stdout→ your MCP server
tools/call JSON-RPC リクエストをインターセプトし、以下を行います:
block、rate_limit、min_tier などのツールごとのポリシールールを適用するその他のMCPメッセージ (initialize、tools/list、通知) は透過的に通過します。
stderr に [PROTECT_MCP] として出力されますsigning.key_path) で実行すると生成され、.protect-mcp-receipts.jsonl に保存され、http://127.0.0.1:9876/receipts で公開されますnpx @veritasacta/verify でレシートやバンドルを検証できますこれらは本番展開やユーザーへの説明の前に重要です:
npx protect-mcp -- ... の単純なパスでは自動的に有効になりません。 そのパスではシャドウモードで決定をログに記録します。ローカル署名を行うには、npx protect-mcp init を実行し、生成されたポリシーファイルを使用してゲートウェイを起動してください。unknown にデフォルト設定します。ただしホストインテグレーションがプログラム的にアドミッションAPIを呼び出す場合は除きます。{
"default_tier": "unknown",
"tools": {
"dangerous_tool": { "block": true },
"admin_tool": { "min_tier": "signed-known", "rate_limit": "5/hour" },
"read_tool": { "require": "any", "rate_limit": "100/hour" },
"*": { "rate_limit": "500/hour" }
},
"signing": {
"key_path": "./keys/gateway.json",
"issuer": "protect-mcp",
"enabled": true
},
"credentials": {
"internal_api": {
"inject": "env",
"name": "INTERNAL_API_KEY",
"value_env": "INTERNAL_API_KEY"
}
}
}
ツール名は完全一致で、"*" をワイルドカードのフォールバックとして使用します。
claude_desktop_config.json に追加:
{
"mcpServers": {
"my-protected-server": {
"command": "npx",
"args": [
"-y", "protect-mcp",
"--policy", "/path/to/protect-mcp.json",
"--enforce",
"--", "node", "my-server.js"
]
}
}
}
同様のパターン — サーバーコマンドを protect-mcp でラップして置き換えます。
protect-mcp [options] -- <command> [args...]
protect-mcp init
Commands:
init Ed25519鍵ペアと設定テンプレートを生成
status 決定統計とローカルパスポートIDを表示
digest ローカルの人間可読サマリーを生成
receipts 最近の保存済み署名レシートを表示
bundle オフライン検証可能な監査バンドルをエクスポート
Options:
--policy <path> ポリシー/設定JSONファイル
--slug <slug> ログ/レシート用のサービス識別子
--enforce 強制モードを有効にする(デフォルト: シャドウ)
--verbose デバッグログを有効にする
--help ヘルプを表示
ライブラリは、デフォルトのCLIパスにまだ配線されていないプリミティブも公開しています:
import {
ProtectGateway,
loadPolicy,
evaluateTier,
meetsMinTier,
resolveCredential,
initSigning,
signDecision,
queryExternalPDP,
buildDecisionContext,
createAuditBundle,
} from 'protect-mcp';
これらは、以下のような機能を追加したい場合に使用します:
すべてのツールコールは構造化JSONを stderr に出力します:
[PROTECT_MCP] {"v":2,"tool":"read_file","decision":"allow","reason_code":"observe_mode","policy_digest":"none","mode":"shadow","timestamp":1710000000}
署名が設定されている場合、署名済みレシートが続いて出力されます:
[PROTECT_MCP_RECEIPT] {"v":2,"type":"decision_receipt","algorithm":"ed25519","kid":"...","issuer":"protect-mcp","issued_at":"2026-03-22T00:00:00Z","payload":{"tool":"read_file","decision":"allow","policy_digest":"...","mode":"shadow","request_id":"..."},"signature":"..."}
CLIで検証: npx @veritasacta/verify receipt.json
ブラウザで検証: scopeblind.com/verify
パッケージは自己完結型監査バンドルのヘルパーを提供します:
{
"format": "scopeblind:audit-bundle",
"version": 1,
"tenant": "my-service",
"receipts": ["..."],
"verification": {
"algorithm": "ed25519",
"signing_keys": ["..."]
}
}
自分で収集した署名済みレシートを createAuditBundle() でラップして使用します。
protect-mcp に同梱 — それぞれが実際の攻撃を防止します:
npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js
完全なOWASP Agentic Top 10 マッピング: scopeblind.com/docs/owasp
OPA、Cerbos、Cedar(AWS AgentCore)、および汎用HTTPエンドポイントをサポート:
{
"policy_engine": "hybrid",
"external": {
"endpoint": "http://localhost:8181/v1/data/mcp/allow",
"format": "cedar",
"timeout_ms": 200,
"fallback": "deny"
}
}
npx @veritasacta/verify --self-testMITライセンス — 制限なく自由に使用、変更、配布、および構築できます。
scopeblind.com · npm · GitHub · IETFドラフト
| フィールド | 値 | 説明 |
|---|
block | true | このツールを明示的にブロックする |
require | "any", "none" | 基本的なアクセス要件 |
min_tier | "unknown", "signed-known", "evidenced", "privileged" | ホストがアドミッション状態を設定する場合に必要な最小ティア |
rate_limit | "N/unit" | レート制限(例:"5/hour"、"100/day") |
| ポリシー | インシデント | OWASPカテゴリ |
|---|
clinejection.json | CVE-2025-6514: MCP OAuthプロキシハイジャック(437K環境) | A01, A03 |
terraform-destroy.json | 自律型Terraformエージェントが本番環境を破壊 | A05, A06 |
github-mcp-hijack.json | 細工されたGitHub Issueによるプロンプトインジェクション | A01, A02, A03 |
data-exfiltration.json | アウトバウンドツール悪用によるエージェントデータ窃取 | A02, A04 |
financial-safe.json | 不正な金融取引 | A05, A06 |