cMCP: Confidential MCP Runtime
在 TEE 内部强制执行 MCP 工具策略,受其治理的 agent 无法触及
开发者预览版 - 于 2026 年 6 月 23 日在机密计算峰会上发布。在 v1.0 之前可能存在破坏性变更。请参阅 STATUS.md 了解当前发布的具体内容以及路线图上的规划。
cMCP(Confidential MCP Runtime)是运行 MCP 的安全、机密方式:一个开源网关,在硬件可信执行环境(TEE)内强制执行 MCP 工具调用策略。 每个工具调用都会被拦截,针对 Cedar 策略包进行评估,并在其管辖进程无法触及的地方强制执行。每个会话都会生成一个签名的 TRACE Claim,验证者可以在不信任操作者的情况下对其进行检查;当网关在 TEE 中运行时,该 Claim 经过硬件证明,在软件模式下则仅经过签名。如果您正在寻找 MCP 的安全版本,这就是它的 AgenTrust 运行时。
TL;DR - 将您的 agent 指向 cMCP Gateway。它在 TEE 内针对 Cedar 策略评估每个工具调用,阻止或脱敏策略拒绝的内容,并输出一个防篡改的 TRACE Claim 作为证明。运行
pip install cmcp-runtime即可在无需硬件的情况下以软件模式启动。
您的 agent 调用 Snowflake、Salesforce 以及十几个 API。是什么阻止它在其中一次调用中泄露客户数据?如果监管机构询问,您能证明它没有泄露吗?
问题
代理调用一个工具。策略引擎返回允许。工具调用得以执行。
以上任何一点都无法证明策略引擎本身未被攻破。仅基于软件的 MCP 治理无法保证:
- 磁盘上的 Cedar 策略与实际执行的策略一致。恶意管理员可在审批后替换策略包;哈希检查运行在管理员所控制的同一操作系统内。
- 允许/拒绝决策未在内存中被篡改。评估器中的供应链 CVE 与攻击者运行在同一地址空间。
- 审计日志反映了实际发生的情况。任何持有软件签名密钥的一方均可事后重建有效的审计链。
治理工具调用的控制平面必须运行在其所治理进程无法触及的位置。
针对 MCP 工具调用的硬件证明策略执行。每个工具调用均被拦截,对照 Cedar 策略包进行评估,并由运行在可信执行环境(TEE)内的策略引擎强制执行。策略包的哈希值在任何代码执行前即被测量并纳入硬件证明报告。
与基于隧道的连接解决方案不同,cMCP 运行时在 TEE 内部处理工具调用负载。连接提供方看到的是密文,而非明文。唯一离开隔离区的是签名的 TRACE 声明。
快速入门
pip install cmcp-runtime
创建 cmcp-config.yaml:
attestation:
provider: auto
enforcement_mode: advisory # advisory eases first-run tuning; the default is `enforcing`
listen_addr: "127.0.0.1:8443" # pin loopback: dev mode runs without a bearer token
policy_bundle_path: ./policies/
catalog_path: ./catalog.json
listen_addr 在此处并非可选。CMCP_DEV_MODE=1 故意跳过了
bearer token 要求,以便您可以快速尝试,并且在已发布的
0.3.0 版本中,默认绑定为 0.0.0.0:8443,因此省略它会在您机器上的所有接口上
启动一个未认证的网关。后续版本
默认绑定到回环地址,并且如果没有
CMCP_BEARER_TOKEN,则拒绝绑定非回环地址,但显式指定它,配置在两者中都是正确的。
启动网关:
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"}}}'
更喜欢引导版?agentrust-io.com/quickstart
在笔记本电脑上,无需硬件且无需注册,约十分钟即可走完相同路径:安装、编写一条 Cedar forbid 规则、观察工具调用在到达上游前返回 403
POLICY_DENY,然后验证签名回执。
请参阅 docs/quickstart.md 获取完整指南:Cedar 策略、工具目录、首个 TRACE Claim 以及验证(无需硬件 TEE)。
工作原理
- 代理将每个工具调用发送至 cMCP Gateway,而非直接发送至 MCP 服务器。
- 启动时,网关将 Cedar 策略包哈希测量至硬件证明报告中。在此测量之前不运行任何代码。
- 每个传入的工具调用由运行在 TEE 内部的 Cedar 策略引擎进行评估。结果为允许、拒绝或脱敏。该调用及其决策被追加至硬件密封的审计链中。
- 会话结束时,网关生成 TRACE Claim:一个经过签名和硬件证明的工件,记录了哪些工具运行、哪个策略决定了每次调用,以及完整的审计链。验证者无需信任操作员即可检查此工件。
Agent -> cMCP Runtime -> Cedar Policy Engine (TEE) -> Tool
|
GatewayClaim (TRACE Profile)
+-- trace.eat_profile
+-- trace.runtime.platform + measurement
+-- trace.policy.bundle_hash
+-- trace.cnf.jwk (Ed25519 confirmation key)
+-- gateway.audit_chain (root/tip/length)
+-- signature (Ed25519 over canonical 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 (v0.2) | NVIDIA H100/H200/Blackwell (CC 模式) | 高 | NVIDIA Remote Attestation Service (NRAS) |
opaque (可选) | OPAQUE Confidential Runtime | 不适用 (尚未实现) | 占位符:从自动检测中排除;显式选择它会引发未实现错误 |
提供商自动检测探测顺序:azure-cvm -> tpm -> sev-snp -> tdx。第一个 detect() 成功的提供商将被选中。opaque 是一个尚未实现的占位符:它被排除在自动检测之外,显式选择它会引发 ATTESTATION_PROVIDER_NOT_IMPLEMENTED 而不是静默跳过。如果未检测到任何硬件提供商,网关仅在 CMCP_DEV_MODE=1(一种非证明的纯软件回退)下启动,否则拒绝启动。
from cmcp_runtime.config import TEEProvider
# Auto-detect (default)
# attestation.provider: auto -> azure-cvm -> tpm -> sev-snp -> tdx
# (software-only is used only under CMCP_DEV_MODE=1)
# Explicit hardware selection
# attestation.provider: sev-snp
# OPAQUE Managed Runtime (opt-in only; not yet implemented)
# OPAQUE_ATTESTATION_URL=https://... cmcp start --config cmcp-config.yaml
执行模式
| 模式 | 行为 | 使用场景 |
|---|---|---|
enforcing | 策略拒绝返回 HTTP 403;调用不会被转发 | 生产环境 |
advisory | 策略拒绝会被记录日志;调用继续执行 | 首次部署,策略调优 |
silent | 策略会被评估,但不会记录日志或阻止 | 基线测试 |
默认值为 enforcing。在 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 # attestation freshness window (default: 24 hours)
staleness_policy: fail_closed # fail_closed | warn_only
expected_measurement: ~ # pin a specific PCR/measurement (optional)
policy_bundle_path: policies/ # directory containing .cedar files and manifest.json
catalog_path: catalog.json # approved tool catalog
listen_addr: "127.0.0.1:8443" # tokenless dev mode is loopback-only; set CMCP_BEARER_TOKEN before binding wider
max_response_size_bytes: 2097152 # 2 MB default
policy_reload_interval_seconds: 0 # 0 = disabled; restart required to update policy
环境变量:
| 变量 | 效果 |
|---|---|
CMCP_DEV_MODE=1 | 使用纯软件 TEE 提供者;无需硬件 |
CMCP_BEARER_TOKEN | 要求所有入站请求携带此 bearer token |
OPAQUE_ATTESTATION_URL | 启用 OPAQUE Managed Runtime 证明(显式选择加入) |
CLI 参考
| 命令 | 标志 | 描述 |
|---|---|---|
cmcp start | --config PATH (required) | 启动网关 |
cmcp validate-config | --config PATH (required) | 验证 cmcp-config.yaml 而不启动 |
cmcp validate-bundle | --bundle-path PATH (required), --expected-hash sha256:<hex> (required) | 在部署前验证 Cedar bundle 哈希 |
cmcp verify | CLAIM_FILE (required); --policy-hash, --catalog-hash, --max-age, --trusted-key, --audit-bundle, --agent-manifest, --agent-manifest-trust-anchor | 验证已签名的 TRACE Claim(签名、模式、新鲜度、审计链和固定哈希) |
TRACE 声明
GatewayClaim 是交付给审计员、监管机构或下游验证者的证明单元。它按会话(或按调用,可配置)生成,并使用一个永不离开 TEE 的密钥进行签名。
| 字段 | 描述 |
|---|---|
trace.eat_profile | EAT 配置文件 URI:tag:agentrust-io.com,2026:trace-v0.2 |
trace.runtime | 在飞地启动时记录的 TEE 平台和硬件度量值 |
trace.policy.bundle_hash | 启动时加载的 Cedar 捆绑包的 SHA-256 值;更改任何策略文件都会改变此值 |
trace.cnf.jwk | 绑定到 TEE 签名密钥的 Ed25519 公钥 |
trace.tool_transcript | 由审计链派生的按调用视图:hash(绑定到审计链顶端)、call_count,以及保护隐私的 entries(工具名称、数据类别、决策) |
gateway.audit_chain | 哈希链审计日志的根和顶端;无需重放单个条目即可验证 |
signature | 对完整声明主体的规范 JSON 进行的 Ed25519 签名(RFC 8785) |
(此表是最常用字段的摘要。)
使用 cmcp_verify 库进行验证不需要信任操作员。验证者将签名与 TEE 绑定密钥进行比对,将策略捆绑包哈希与批准的值进行比对,并检查审计链的内部一致性。
规范性模式为 schemas/trace-claim.schema.json,docs/quickstart.md 展示了一个完整示例。请参阅 docs/spec/verification-library.md 和 TRACE 规范 了解完整的验证协议。
标准对齐
| 标准 | 覆盖范围 |
|---|---|
| OWASP Agentic AI Top 10 | MCP10(通过工具调用导致的数据泄露),MCP02(未授权工具),MCP08(可证明的治理),MCP04(供应链) |
| NIST SP 800-207 | TEE 内部的政策决策点;不对工作负载身份进行隐式信任 |
| EU AI Act Art. 12, 15 | 逐决策审计记录(Art. 12);基于 TEE 的网络安全控制(Art. 15) |
| DORA Art. 9 | 证明链;通过 gateway.audit_chain 进行审计日志保留 |
| RATS/EAT RFC 9711 | GatewayClaim 是一个 EAT;eat_profile 字段标识 TRACE 配置文件 |
安全
| 工具 | 检查内容 |
|---|---|
| ruff | 每个 PR 的风格和导入检查 |
| bandit | 每个 PR 的 Python 安全检查 |
| pip-audit | 每个 PR 的依赖项漏洞扫描 |
| mypy | 每个 PR 的静态类型检查 |
| CodeQL | Python SAST,安全扩展查询,每周执行 |
| OpenSSF Scorecard | 每周评分,SARIF 上传 |
参见 SECURITY.md 了解漏洞报告及响应 SLA。参见 LIMITATIONS.md 了解明确的范围边界,包括 APM 负载捕获、运行时配置注入以及 P4.1 供应链(typosquat)的残留风险,这些风险在第一阶段中未关闭。
文档
| 页面 | 描述 |
|---|---|
| docs/quickstart.md | 从零到首个 TRACE Claim 不到 30 分钟 |
| docs/configuration.md | 包含所有字段和默认值的完整配置参考 |
| docs/SPEC.md | 产品规格说明:问题分类、架构、覆盖矩阵 |
| docs/spec/threat-model.md | STRIDE 分析、对手模型、残余风险 |
| docs/spec/cedar-policy.md | Cedar 策略语言参考和模式 |
| docs/testing/benchmarks.md | 每个 TEE 提供商的延迟和吞吐量基准测试 |
常见问题解答
什么是 cMCP?
cMCP(Confidential MCP Runtime)是一个开源网关,它在硬件可信执行环境(TEE)内强制执行 MCP 工具调用策略。它拦截每次工具调用,根据 Cedar 策略包对其进行评估,执行决策(允许、拒绝或脱敏),并将该调用记录在硬件密封的审计链中。
cMCP 与纯软件 MCP 治理有何不同?
纯软件治理在操作员或供应链 CVE 可触及的同一操作系统中运行策略引擎,因此无法证明所执行的策略是经过批准的版本,也无法证明决策未在内存中被篡改。cMCP 在 TEE 内部运行策略引擎,并在任何代码运行之前将 Cedar 包哈希值测量到硬件证明报告中,因此控制平面无法被其治理的进程触及。
我需要特殊硬件来试用它吗?
不需要。设置 CMCP_DEV_MODE=1 以使用纯软件 TEE 提供者,并在没有硬件 TEE 的情况下运行完整的快速入门。硬件提供者(TPM、AMD SEV-SNP、Intel TDX、OPAQUE)用于生产环境。
什么是 TRACE Claim?
TRACE Claim(一个 GatewayClaim)是每个会话生成的经过签名和硬件证明的工件。它记录了哪些工具运行了、哪个策略决定了每次调用、Cedar 包哈希值以及审计链,并使用从未离开 TEE 的 Ed25519 密钥进行签名。验证者使用 cmcp_verify 库对其进行检查,而无需信任操作员。
支持哪些 TEE 提供者?
TPM 2.0 / vTPM、AMD SEV-SNP 和 Intel TDX,NVIDIA GPU 机密计算计划在 v0.2 中推出,OPAQUE Confidential Runtime 可作为显式选择加入项使用。自动检测顺序为 Azure 机密虚拟机,然后是 TPM 2.0 / vTPM,然后是 AMD SEV-SNP,然后是 Intel TDX;纯软件提供者仅在 CMCP_DEV_MODE=1 下使用。
cMCP 采用什么许可证?
MIT。
贡献指南
CONTRIBUTING.md · GOVERNANCE.md · Discussions
加入我们的 Discord 社区。
在生产环境中使用 cMCP?请将您的组织添加到 ADOPTERS.md。
许可证
MIT - 参见 LICENSE.