protect-mcp について
protect-mcpは、AIエージェントのツール呼び出しを制御するローカルポリシーゲートウェイです。MCPクライアントとツールサーバーの間、またはコーディングエージェントのフックで利用でき、Cedarポリシーを評価してEd25519署名付きの決定レシートを生成します。
主な機能
- 01Cedarポリシーによる呼び出し評価
- 02ポリシーエラー時のデフォルト拒否
- 03シャドウモードと強制実行
- 04Ed25519署名付きレシートの発行
- 05公開鍵による決定記録の検証
- 06MCP、HTTP、エージェントフック接続
活用シーン
- 01既存のMCPサーバー前でツール呼び出しを確認
- 02呼び出しを観察してからポリシーで遮断
- 03エージェントの決定記録を確認・検証
- 04フックでコーディングエージェントの呼び出しを制限
MCP 対応
既存のツールサーバーをMCPゲートウェイでラップするほか、ポリシー評価ツールをMCPサーバーとして公開できます。ゲートウェイはstdioとHTTPに対応し、シャドウモードで開始します。強制実行を有効にするとポリシーに基づいて呼び出しを遮断します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 2 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| tool | string | はい | 評価対象のツール名。例:"Bash"、"Write"、"send_email"。 |
| input | object | いいえ | ツールの引数。ポリシーでは context.input.* から参照できます(例:context.input.command)。 |
| policy | string | はい | インライン Cedar ポリシーソース。action として MCP::Tool::call を、resource として Tool::"<name>" を使用してください。 |
詳細
protect-mcp
AI エージェントのツール呼び出しに対するローカルポリシー適用と、署名付き判定レシート。
開発者向けページ · クイックスタート · エージェントのセットアップ · ポリシーパック · サンプルレコード · インテグレーション · ドキュメント · コントリビュート
ゲートウェイをMCPクライアントとそのツールサーバーの間に配置するか、コーディングエージェントでフックを使います。 Cedarポリシーを確認して適用を有効にし、判定の署名付き記録を保管します。ローカルでの評価と検証にはScopeBlindアカウントは不要で、判定テレメトリーも送信されません。
- ツール境界で適用します。 フェイルクローズモードでは、ポリシーがない場合、エンジンエラーまたは評価エラーが発生した場合、Cedarは拒否します。MCPラッパーのデフォルトはシャドウモードです。ブロックする準備ができたら
--enforceを使います。 - 署名内容を確認します。 Ed25519レシートには判定とポリシーダイジェストが含まれます。@veritasacta/verifyは、信頼する公開鍵を使ってバイト列を検証します。
- 既存のツールから始められます。 MCP stdio、HTTPゲートウェイ、またはコーディングエージェントのフックを使います。オプションのホスト型コラボレーションには、独自の権限とデータフローがあります。
ゲートウェイが対象とするのは、ゲートウェイ経由でルーティングされた呼び出しです。OSサンドボックスではなく、署名付きレシートによってアクションが実行されたことや、アクションの漏れがなかったことが証明されるわけではありません。セキュリティポリシーでは、境界と報告プロセスについて説明しています。
結果を見る
実際のローカル実行では、提案された2つの呼び出しを評価して判定に署名し、レシートを検証した後、署名済みの判定を変更して再確認します。

14秒のウォークスルーを見る

テキストによるウォークスルーと再現手順 · キャプチャした結果
エージェントなしで試す
新しいディレクトリでNode.js 22とnpmを使います。固定バージョンのゲートウェイと検証ツールをインストールします。
mkdir protect-mcp-demo
cd protect-mcp-demo
npm init -y
npm install --save-exact [email protected] @veritasacta/[email protected]
この例では、提案された2つの呼び出しを評価し、それぞれの判定に署名します。どちらのツールも実行せず、git pushも実行しません。インストール後の処理はすべてローカルで行われます。
# Create a starter policy and a private signing key.
npx --no-install protect-mcp init --starter
# A normal read is allowed; a force-push to main is denied (exit 2).
npx --no-install protect-mcp evaluate --policy ./protect.cedar --tool Read --input '{"path":"README.md"}'
npx --no-install protect-mcp evaluate --policy ./protect.cedar --tool Bash --input '{"command":"git push --force origin main"}' || test "$?" -eq 2
# Evaluate again at signing time and record both decisions, in order.
npx --no-install protect-mcp sign --cedar builtin:starter --tool Read --input '{"path":"README.md"}' --key ./protect-mcp.key --receipts ./receipts
npx --no-install protect-mcp sign --cedar builtin:starter --tool Bash --input '{"command":"git push --force origin main"}' --key ./protect-mcp.key --receipts ./receipts
# Take only the public key from the key you generated, not from the receipt.
PROTECT_MCP_PUBLIC_KEY=$(node -p 'JSON.parse(require("fs").readFileSync("protect-mcp.key", "utf8")).publicKey')
npx --no-install verify --replay-chain ./receipts/receipts.jsonl --key "$PROTECT_MCP_PUBLIC_KEY" --json
# Change the signed deny to allow. The original receipt log stays intact.
node -e 'const fs=require("fs");const r=JSON.parse(fs.readFileSync("receipts/receipts.jsonl","utf8").trim().split("\n")[1]);r.payload.decision="allow";fs.writeFileSync("tampered.json",JSON.stringify(r))'
npx --no-install verify tampered.json --key "$PROTECT_MCP_PUBLIC_KEY" --json || test "$?" -eq 1
期待される結果は、順にallow、denyです。元のレシート署名とレシート間のリンクはどちらも検証に成功し、変更されたレシートではinvalid_signatureが報告されます。protect-mcp.keyは非公開にしてください。他者の記録を検証する場合は、独立した信頼できるチャネルを通じて、その人の想定される公開鍵を入手してください。
検証ツールの終了コードは0:有効、1:無効、2:未確認/エラーです。無効という結果は、必ずしも改ざんを意味しません。想定される鍵が間違っている場合も、検証に失敗することがあります。チェーンの再生チェックでは提示されたリンクを確認しますが、履歴全体を受け取ったことが証明されるわけではありません。
CIでは、この例をパッケージ化された候補と固定バージョンの公開済み検証ツールに対して実行します。検証とリリースを参照してください。
エージェントを接続する
ホストと必要なカバレッジに合った統合を選択してください。
ガイダンススキルをインストールしても、適用が有効になるわけではありません。doctor はローカル設定を確認します。実際に許可される呼び出しとブロックされる呼び出しを行い、選択した経路を確認してください。
Claude Code プラグインの場合は、まずローカルゲートを準備して起動してから、プロジェクトにインストールしてください(Claude Code 2.1.295 以降)。
claude plugin install protect-mcp --marketplace ScopeBlind/scopeblind-gateway --scope project
ゲートを利用できない場合、このプラグインは経由するツール呼び出しをブロックします。同じ呼び出しが二重に記録されないよう、プラグインまたは単独のプロジェクトフックを選択してください。
| 用途 | こちらから開始 |
|---|---|
| 既存の MCP サーバーをラップする | MCP のセットアップとシャドーモードから適用へのワークフロー |
| Claude Code の適用プラグイン | プラグインのセットアップとローカルゲート |
| Claude Code のプロジェクトフック | フックのセットアップ |
| Cursor のプロジェクトプレビュー | 明示的なセットアップ、ツールのマッピング、ホストのチェック |
| ChatGPT / Codex アシスタントのプレビュー | セットアップガイダンスと無害な検証デモ。フックはありません |
| 既存の Claude ディレクトリガイダンスプラグイン | 公開済みプラグインのソース。適用機能とは別です |
| ポリシー評価器を MCP ツールとして呼び出す | MCP サーバーとしてのゲート |
| HTTP ゲートウェイをホストする | HTTP デプロイに関する注意事項 |
ホストの互換性とリリース状況では、アダプターのテストと実際のホストでの検証を区別しています。Cursor とアシスタントのパッケージはプレビュー版であり、公開ディレクトリには掲載されていません。単独フック形式の修正は 0.32.4 でリリースされます。変更履歴には、各形式での変更内容が記載されています。形式フラグだけでは、Codex、Gemini、Hermes との統合が機能することの証明にはなりません。
既存の MCP サーバーの場合は、上記の例とは別のディレクトリに設定を初期化し、サーバーのコマンドでラッパーを実行してください。
npx --yes [email protected] init
npx --yes [email protected] --policy ./protect-mcp.json -- node your-mcp-server.js
これはシャドーモードで起動します。--enforce を追加する前に、観測された呼び出しとポリシーを確認してください。wrap はクライアント設定を表示して終了します。起動コマンドではありません。セットアップ手順の全文。
スターター用のシェルルールはコマンドテキストを検査します。便利なガードレールですが、別のコマンド表記を見逃したり、無害な引用テキストに一致したりすることがあります。このルールに依存する前に、スターターポリシーの対象範囲と制限を確認してください。
統合と貢献
| プロジェクト | 接続 |
|---|---|
| Microsoft AI Agents for Beginners | 教育への貢献。 protect-mcp のメンテナーが、エージェントのレシートの署名、検証、連結についてのレッスン 18を執筆しました。 |
| Cedar for Agents | 上流への貢献。 Cedar の Rust MCP スキーマジェネレーターを JavaScript と TypeScript に公開するWASM バインディングを提供しました。 |
| wshobson/agents | 下流での統合。 Claude Code のポリシーフックとレシートフックを備えた protect-mcp プラグインを提供しています。 |
| TRACE | 相互運用性チェック。 Acta の判断レシートのフィクスチャを公開しています。当社の検証ツールは、固定されたスナップショットに対する結果を報告しています。 |
0.31 からのアップグレード
0.32.0 では、ゲートを回避する複数の方法を塞ぎました。その一部により、起動方法が変わります。
--httpは 127.0.0.1 でリッスンし、GET /healthを除くすべてのリクエストにAuthorization: Bearer <token>が必要です。同じPROTECT_MCP_HTTP_TOKEN(32 文字以上)を ゲートウェイと、それを呼び出すクライアントまたはイングレスに設定してください。 このマシンの外部にポートを公開する場合に限り、--hostを使用してください。--enforceは、署名が設定されているのにキーが存在しない、または読み取れない場合、 起動を拒否します。また、許可された呼び出しのレシートに署名できない場合も拒否します。--cedarと--policyを併用すると、両方が適用されます。呼び出しには Cedar の許可が必要で、 さらにそのファイルのblock、require_approval、レート制限、min_tierも満たす必要があります。 署名と認証情報はそのファイルから取得されます。- ダッシュボードが変更を受け付けるのは、起動ごとに発行されるトークンを持つ、 ダッシュボード自身のページからの変更のみです。
- 署名キーは 0700 のフォルダー内に 0600 で書き込まれます。以前のバージョンで作成されたキーには、
chmod 600 keys/gateway.jsonを実行してください。実行するまでゲートウェイが警告を表示します。 POST /approveでの一度限りの承認は、対象のアクションを厳密に指定します。 ゲートウェイが出力する Request ID とtool:payload_hashを指定してください。 承認 nonce はゲートウェイの stderr にのみ表示されます。
すべての変更については変更履歴をご覧ください。
ドキュメント
- ローカルゲートウェイガイド:ポリシー、フック、ダッシュボード、 認証情報、レシートの互換性。
- ホスト互換性:強制とガイダンスの違い、サポート対象ルート、 テスト範囲、リリース状況。
- レシートと開示のガイド:ローカル記録、選択的開示、任意のホスト型ダイジェストアンカリング。
- コマンドリファレンス。
- 再現可能なビジュアルデモ:記録された結果とレンダリングスクリプト。
- インテグレーションとコントリビューション:ソースへのリンク、バージョン、 公開済み相互運用性チェックの範囲。
- ホスト型コーディネーション:人間による個別の承認、 請求書サンドボックス、リポジトリレビューのワークフロー。
- リリース検証と来歴。
- バージョン別の変更。
コントリビューション
範囲を限定した協力者募集タスクから始めてください: 実際のホストでのキャプチャを 1 件、 別のクリーンパッケージでのランタイム確認を 1 件、または テスト済みポリシーレシピを 1 件。
バグ報告、最小限の再現例、ドキュメントの修正、互換性テストを歓迎します。セットアップとチェックについては CONTRIBUTING.mdを、メンテナンス体制については GOVERNANCE.mdをご覧ください。脆弱性は公開 issue ではなく、 SECURITY.mdを通じて非公開で報告してください。
共有適合性コーパスには、 レシート生成元間の互換性テスト結果が記録されています。コーパスに合格したことは、 範囲を限定した相互運用性の証拠であり、セキュリティ認証ではありません。
MIT ライセンスです。LICENSEと既存の特許に関する告知をご覧ください。 ScopeBlindにてTom Farleyがメンテナンスしています。レシート形式: Acta individual Internet-Draft。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。