AI・機械学習
Show HN: cMCP、AIエージェントのツール呼び出しを拒否し、署名付きレシートを取得
Show HN: cMCP, deny an AI agent's tool call and get a signed receipt (github.com)
要約
cMCP(Confidential MCP Runtime)は、AIエージェントが自身のツール呼び出しポリシーを改変できないように、ハードウェアのトラステッド実行環境(TEE)内でMCPゲートウェイを実行する安全な方法です。各ツール呼び出しは傍受され、Cedarポリシーに基づいて評価・強制され、その結果は改ざん不可能なTRACE Claimとして署名されます。これにより、エージェントが機密データを漏洩しないことを証明し、規制当局の要求にも対応できます。
全文翻訳
cMCP: Confidential MCP Runtime
TEE内でMCPツールポリシーを強制し、それが管理するエージェントがアクセスできないようにします。
クイックスタート · アーキテクチャ · 設定 · CLI · チェンジログ
開発者プレビュー - 2026年6月23日にConfidential Computing Summitでローンチされました。v1.0の前に破壊的な変更がある可能性があります。本日出荷されるものとロードマップ上のものについては、STATUS.mdを参照してください。
cMCP(Confidential MCP Runtime)は、MCPを実行するための安全で機密性の高い方法です。MCPは、ハードウェアのトラステッド実行環境(TEE)内でMCPツール呼び出しポリシーを強制するオープンソースゲートウェイです。すべてのツール呼び出しは傍受され、Cedarポリシーバンドルに対して評価され、それが管理するプロセスがアクセスできない場所で強制されます。各セッションは、オペレーターを信頼せずに検証者がチェックできる署名付きTRACE Claimを生成します。ゲートウェイがTEEで実行される場合はハードウェアで、ソフトウェアモードの場合は署名のみでアテステーションされます。安全なMCPバージョンを探しているなら、これがAgenTrustランタイムです。
要するに – エージェントをcMCPゲートウェイに向けます。これは、TEE内でCedarポリシーに基づいてすべてのツール呼び出しを評価し、ポリシーが拒否したものをブロックまたは編集し、改ざん不可能なTRACE Claimを証拠として発行します。pip install cmcp-runtimeを実行し、ハードウェア不要のソフトウェアモードで開始します。
エージェントがSnowflake、Salesforce、多数のAPIを呼び出します。それらの呼び出しの1つで顧客データを漏洩するのを何が止めますか?規制当局が尋ねた場合、それが漏洩しなかったことを証明できますか?
問題
エージェントがツールを呼び出します。ポリシーエンジンは許可と判断します。ツール呼び出しが実行されます。これらのいずれも、ポリシーエンジン自体が侵害されなかったことを証明しません。
ソフトウェアのみのMCPガバナンスでは、以下を保証できません。
ディスク上のCedarポリシーが実行されたポリシーであること。承認後、不正な管理者がバンドルを入れ替えることができます。ハッシュチェックは、管理者が制御するのと同じOS内で実行されます。
許可/拒否の決定がメモリ内で反転されなかったこと。
評価ツールにおけるサプライチェーンCVEが、攻撃者と同じアドレス空間で実行されること。
監査ログが実際に何が起こったかを反映していること。
ソフトウェア署名キーを保持するどの当事者も、後から有効な監査チェーンを再構築できること。
ツール呼び出しを管理するコントロールプレーンは、それが管理するプロセスから到達できない場所で実行される必要があります。
ハードウェアでアテステーションされたポリシー強制によるMCPツール呼び出し。
すべてのツール呼び出しは傍受され、Cedarポリシーバンドルに対して評価され、トラステッド実行環境(TEE)内で実行されているポリシーエンジンによって強制されます。ポリシーバンドルのハッシュは、コードが実行される前にハードウェアアテステーションレポートに測定されます。トンネルベースの接続ソリューションとは異なり、cMCPランタイムはTEE内でツール呼び出しペイロードを処理します。接続プロバイダーはプレーンテキストではなく暗号文を見ます。エンクレーブから出る唯一のものは、署名付きTRACEクレームです。
クイックスタート
pip install cmcp-runtime
cmcp-config.yamlを作成します。
attestation:
provider: auto
enforcement_mode: advisory # advisoryは初回実行時の調整を容易にします。デフォルトは`enforcing`です。
policy_bundle_path: ./policies/
catalog_path: ./catalog.json
ゲートウェイを開始します。
CMCP_DEV_MODE=1 cmcp start --config cmcp-config.yaml
ツール呼び出しを行います。
curl -X POST http://localhost:8443/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"salesforce.contacts","arguments":{"query":"Acme Corp"},"_cmcp":{"session_id":"s1","workflow_id":"demo-agent"}}}'
完全なウォークスルーについては、docs/quickstart.mdを参照してください。Cedarポリシー、ツールカタログ、最初のTRACE Claim、および検証(ハードウェアTEEは不要)が含まれています。
仕組み
エージェントは、MCPサーバーに直接ではなく、すべてのツール呼び出しをcMCPゲートウェイに送信します。起動時に、ゲートウェイはCedarポリシーバンドルのハッシュをハードウェアアテステーションレポートに測定します。この測定前にコードは実行されません。受信する各ツール呼び出しは、TEE内で実行されているCedarポリシーエンジンによって評価されます。結果は許可、拒否、または編集です。呼び出しとその決定は、ハードウェアでシールされた監査チェーンに追加されます。セッションの最後に、ゲートウェイはTRACE Claimを生成します。これは、どのツールが実行されたか、各呼び出しを決定したポリシー、および完全な監査チェーンを記録する、署名付きでハードウェアでアテステーションされた成果物です。検証者はオペレーターを信頼せずにこれをチェックします。
エージェント -> cMCPランタイム -> Cedarポリシーエンジン (TEE) -> ツール | ゲートウェイクレーム (TRACEプロファイル)
+-- trace.eat_profile
+-- trace.runtime.platform
+ measurement
+-- trace.policy.bundle_hash
+-- trace.cnf.jwk (Ed25519確認キー)
+-- gateway.audit_chain (root/tip/length)
+-- signature (Ed25519を正規化されたJSONに対して)
ハードウェアプロバイダー
プロバイダー | プラットフォーム | 保証 | メモ
TPM | TPM 2.0 / vTPM (Azure, AWS, GCP Trusted Launch) | 中 | ローカルTPMクォート
SEV-SNP | AMD SEV-SNP (Azure DCasv5, AWS C6a Nitro) | 高 | AMD KDS
TDX | Intel TDX (Azure DCedsv5, GCP C3) | 高 | Intel PCS
GPU-CC | NVIDIA H100/H200/Blackwell (CCモード) | 高 | NVIDIA Remote Attestation Service (NRAS)
OPAQUE | (オプトイン) | OPAQUE Confidential Runtime | n/a (まだ実装されていません) | プレースホルダー: 自動検出から除外されています。明示的に選択すると、実装されていませんエラーが発生します。
プロバイダーの自動検出プローブ順序: azure-cvm -> tpm -> sev-snp -> tdx。最初にdetect()が成功したプロバイダーが選択されます。opaqueはまだ実装されていないプレースホルダーです。自動検出から除外されており、明示的に選択すると、サイレントにフォールスルーするのではなく、ATTESTATION_PROVIDER_NOT_IMPLEMENTEDエラーが発生します。ハードウェアプロバイダーが検出されない場合、ゲートウェイはCMCP_DEV_MODE=1(アテステーションされないソフトウェアのみのフォールバック)でのみ起動し、それ以外の場合は起動を拒否します。
from cmcp_runtime.config import TEEProvider
# 自動検出 (デフォルト)
# attestation.provider: auto -> azure-cvm -> tpm -> sev-snp -> tdx
# (ソフトウェアのみはCMCP_DEV_MODE=1でのみ使用されます)
# 明示的なハードウェア選択
# attestation.provider: sev-snp
# OPAQUEマネージドランタイム (オプトインのみ; まだ実装されていません)
# OPAQUE_ATTESTATION_URL=https://...
cmcp start --config cmcp-config.yaml
強制モード
モード | 動作 | ユースケース
enforcing | ポリシーが拒否した場合、HTTP 403を返します。呼び出しは転送されません。 | 本番
advisory | ポリシーが拒否された場合、ログに記録されます。呼び出しは続行されます。 | 初回デプロイ、ポリシー調整
silent | ポリシーは評価されますが、何もログに記録されたりブロックされたりしません。 | ベースライン設定
デフォルトはenforcingです。advisoryモードを使用するには、cmcp-config.yamlでenforcement_mode: advisoryを設定してください。
設定
cmcp-config.yaml 完全リファレンス:
attestation:
provider: auto # auto | tpm | sev-snp | tdx | opaque | software-only
enforcement_mode: enforcing # enforcing | advisory | silent
validity_seconds: 86400 # アテステーションの鮮度ウィンドウ (デフォルト: 24時間)
staleness_policy: fail_closed # fail_closed | warn_only
expected_measurement: ~ # 特定のPCR/測定値をピン留めする (オプション)
policy_bundle_path: policies/ # .cedarファイルとmanifest.jsonを含むディレクトリ
catalog_path: catalog.json # 承認済みツールカタログ
listen_addr: "0.0.0.0:8443"
max_response_size_bytes: 2097152 # デフォルト2MB
policy_reload_interval_seconds: 0 # 0 = 無効; 更新には再起動が必要
環境変数:
変数 | 効果
CMCP_DEV_MODE=1 | ソフトウェアのみのTEEプロバイダーを使用します。ハードウェアは不要です。
CMCP_BEARER_TOKEN | すべてのインバウンドリクエストでこのベアラートークンを要求します。
OPAQUE_ATTESTATION_URL | OPAQUEマネージドランタイムアテステーションを有効にします (明示的なオプトイン)。
CLIリファレンス
コマンド | フラグ | 説明
cmcp start | --config PATH (必須) | ゲートウェイを開始します。
cmcp validate-config | --config PATH (必須) | ゲートウェイを開始せずにcmcp-config.yamlを検証します。
cmcp validate-bundle | --bundle-path PATH (必須), --expected-hash sha256:<hex> (必須) | デプロイ前にCedarバンドルのハッシュを検証します。
cmcp verify | CLAIM_FILE (必須); --policy-hash, --catalog-hash, --max-age, --trusted-key, --audit-bundle, --agent-manifest, --agent-manifest-trust-anchor | 署名付きTRACE Claim (署名、スキーマ、鮮度、監査チェーン、およびピン留めされたハッシュ) を検証します。
TRACE Claim
GatewayClaimは、監査者、規制当局、または下流の検証者に渡される証拠の単位です。セッションごと(または設定可能であれば呼び出しごと)に生成され、TEEから決して出ないキーで署名されます。
フィールド | 説明
trace.eat_profile | EATプロファイルURI: tag:agentrust-io.com,2026:trace-v0.2
trace.runtime | TEEプラットフォームとハードウェア測定値r