mcpField
P
protect-mcp

protect-mcp

ローカル
github.com/scopeblindセキュリティ93 日前に更新

protect-mcp について

protect-mcpは、AIエージェントのツール呼び出しに対してローカルでCedarポリシーを評価し、署名付きの判断記録を作成します。MCPゲートウェイやコーディングエージェントのフックとして導入でき、記録もローカルで検証できます。

主な機能

  1. 01Cedarポリシー評価と呼び出しブロック
  2. 02シャドーモードと強制モード
  3. 03Ed25519署名付き判断記録
  4. 04署名と記録チェーンの独立検証
  5. 05MCP、HTTPゲートウェイ、エージェントフック連携

活用シーン

  1. 01ツール呼び出し境界で未承認の操作をブロック
  2. 02強制前にシャドーモードで呼び出しを確認
  3. 03ポリシー判断の検証可能な署名記録を作成
  4. 04MCPツール経由でポリシー評価器を呼び出す

MCP 対応

MCPクライアントとツールサーバーの間に配置し、経由する呼び出しを評価・記録できます。また、ポリシー評価器をMCPツールとして公開できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"tomjwxf-protect": {
"command": "npx",
"args": [
"-y",
"protect-mcp"
]
}
}
}
起動コマンドnpx -y protect-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmprotect-mcp0.5.3

ツール

4

掲載時のツール一覧 · 3 日前に更新

パラメーター型必須説明
toolstringはい評価対象のツール名。例:"Bash"、"Write"、"send_email"。
inputobjectいいえツールの引数。ポリシーでは context.input.* から参照できます(例:context.input.command)。
policystringはいインライン Cedar ポリシーソース。action として MCP::Tool::call を、resource として Tool::"<name>" を使用してください。

詳細

protect-mcp

AI エージェントのツール呼び出しに対するローカルポリシー適用と、署名付き判定レシート。

npm version Monthly npm downloads Node.js compatibility Package checks MIT license

開発者向けページ · クイックスタート · エージェントのセットアップ · ポリシーパック · サンプルレコード · インテグレーション · ドキュメント · コントリビュート

ゲートウェイをMCPクライアントとそのツールサーバーの間に配置するか、コーディングエージェントでフックを使います。 Cedarポリシーを確認して適用を有効にし、判定の署名付き記録を保管します。ローカルでの評価と検証にはScopeBlindアカウントは不要で、判定テレメトリーも送信されません。

  • ツール境界で適用します。 フェイルクローズモードでは、ポリシーがない場合、エンジンエラーまたは評価エラーが発生した場合、Cedarは拒否します。MCPラッパーのデフォルトはシャドウモードです。ブロックする準備ができたら--enforceを使います。
  • 署名内容を確認します。 Ed25519レシートには判定とポリシーダイジェストが含まれます。@veritasacta/verifyは、信頼する公開鍵を使ってバイト列を検証します。
  • 既存のツールから始められます。 MCP stdio、HTTPゲートウェイ、またはコーディングエージェントのフックを使います。オプションのホスト型コラボレーションには、独自の権限とデータフローがあります。

ゲートウェイが対象とするのは、ゲートウェイ経由でルーティングされた呼び出しです。OSサンドボックスではなく、署名付きレシートによってアクションが実行されたことや、アクションの漏れがなかったことが証明されるわけではありません。セキュリティポリシーでは、境界と報告プロセスについて説明しています。

結果を見る

実際のローカル実行では、提案された2つの呼び出しを評価して判定に署名し、レシートを検証した後、署名済みの判定を変更して再確認します。

5段階の結果の概要:読み取りは許可され、提案されたforce-pushは拒否され、両方の判定に署名され、レシートは検証され、変更された拒否の署名検証は失敗します。提案されたツールは実行されません。

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

キャプチャしたCLI出力に基づく、同じ5段階の結果のアニメーション概要。

テキストによるウォークスルーと再現手順 · キャプチャした結果

エージェントなしで試す

新しいディレクトリで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。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。