内容
<p align="center">
<img src="docs/assets/icon.svg" width="96" height="96" alt="cMCP"/>
</p>
# cMCP:机密MCP运行时
### 强制执行MCP工具策略,防止篡改
<p align="center">
<a href="https://agentrust-io.github.io/cmcp">
<img src="https://img.shields.io/badge/Documentation-agentrust--io.github.io%2Fcmcp-7c3aed?style=for-the-badge" alt="文档" height="36">
</a>
</p>
<p align="center">
<strong>
<a href="#快速开始">快速开始</a> ·
<a href="#工作原理">架构</a> ·
<a href="#配置">配置</a> ·
<a href="#命令行参考">命令行</a> ·
<a href="CHANGELOG.md">更新日志</a>
</strong>
</p>
[](https://github.com/agentrust-io/cmcp/actions/workflows/ci.yml) [](LICENSE) [](https://pypi.org/project/cmcp-runtime/) [](https://scorecard.dev/viewer/?uri=github.com/agentrust-io/cmcp) [](https://discord.gg/9JWNpH7E)
> **开发者预览版** - 将于2026年6月23日 confidential Computing Summit发布。可能在v1.0版本之前存在破坏性变更。
您的代理调用Snowflake、Salesforce等多个API。是什么阻止它在其中一个调用中泄露客户的数据?如果监管机构要求,您能否证明它没有?
---
## 问题
代理调用工具。策略引擎说允许。工具调用继续。
这些都不能证明策略引擎本身没有被破坏。仅靠软件的MCP治理无法保证:
- 磁盘上的Cedar策略是运行的策略。 rogue管理员可以在批准后替换软件包;哈希检查在管理员控制的同一操作系统中运行。
- 允许/拒绝决定在内存中没有被翻转。供应链CVE在评估器中运行在与攻击者相同的地址空间中。
- 审计日志反映实际发生的情况。任何拥有软件签名密钥的参与者都可以在事后重建有效的审计链。
管理工具调用的控制平面必须在它无法被被管控的进程访问的地方运行。
在Trusted Execution Environment(TEE)中运行的硬件证明策略执行,用于MCP工具调用。每个工具调用都被拦截,根据Cedar策略包进行评估,并由在TEE中运行的策略引擎强制执行。策略包哈希被测量到硬件证明报告中,在任何代码运行之前。
与基于隧道的连接解决方案不同,cMCP运行时在TEE中处理工具调用的负载。连接提供商看到的是加密数据,而不是明文。离开enclave的唯一东西是签名的TRACE声明。
---
## 快速开始
```bash
pip install cmcp-runtime
```
创建`cmcp-config.yaml`:
```yaml
attestation:
provider: auto
enforcement_mode: advisory
policy_bundle_path: ./policies/
catalog_path: ./catalog.json
```
启动网关:
```bash
CMCP_DEV_MODE=1 cmcp start --config cmcp-config.yaml
```
进行工具调用:
```bash
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](docs/quickstart.md)了解完整的快速入门:Cedar策略、工具目录、第一个TRACE声明和验证(无需硬件TEE)。
---
## 工作原理
1. 代理将每个工具调用发送到cMCP网关,而不是直接发送到MCP服务器。
2. 网关在启动时将Cedar策略包哈希测量到硬件证明报告中。在此测量之前不会运行任何代码。
3. 每个传入的工具调用都由在TEE中运行的Cedar策略引擎评估。结果是允许、拒绝或编辑。调用及其决定被追加到硬件密封的审计链中。
4. 在会话结束时,网关生成一个TRACE声明:一个签名的、硬件证明的工件,记录了哪些工具运行、哪个策略决定了每个调用以及完整的审计链。验证者无需信任操作员即可检查此声明。
```
代理 -> cMCP运行时 -> Cedar策略引擎(TEE)-> 工具
|
GatewayClaim(TRACE配置文件)
+-- trace.eat_profile
+-- trace.runtime.platform + measurement
+-- trace.policy.bundle_hash
+-- trace.cnf.jwk (Ed25519确认密钥)
+-- 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远程认证服务(NRAS) |
| `opaque` _(显式选择)_ | OPAQUE机密运行时 | 高 | 设置`OPAQUE_ATTESTATION_URL`;不在自动检测链中(存根:detect()返回False,尚未实现) |
提供商自动检测:`SEV-SNP -> TDX -> TPM -> 软件`。`opaque`通过`OPAQUE_ATTESTATION_URL`显式选择,并且永远不会自动选择。
```python
from cmcp_gateway.config import TEEProvider
# 自动检测(默认)
# attestation.provider: auto -> sev-snp -> tdx -> tpm -> software
# 显式硬件选择
# attestation.provider: sev-snp
# Opaque Managed Runtime(仅显式选择)
# OPAQUE_ATTESTATION_URL=https://... cmcp start --config cmcp-config.yaml
```
---
## 强制执行模式
| 模式 | 行为 | 用例 |
|---|---|---|
| `enforcing` | 策略拒绝返回HTTP 403;调用不转发 | 生产 |
| `advisory` | 策略拒绝记录;调用继续 | 首次部署,策略调整 |
| `silent` | 策略被评估但不记录或阻止 | 基线 |
默认为`enforcing`。在`cmcp-config.yaml`中设置`enforcement_mode: advisory`以使用 advisory 模式。
---
## 配置
`cmcp-config.yaml`完整参考:
```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: policy/ # directory containing .cedar files and manifest.json
catalog_path: catalog.json # approved tool catalog
listen_addr: "0.0.0.0:8443"
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令牌才能进行所有传入请求 |
| `OPAQUE_ATTESTATION_URL` | 启用Opaque Managed Runtime认证(显式选择) |
---
## 命令行参考
| 命令 | 标志 | 描述 |
|---|---|---|
| `cmcp start` | `--config PATH`(必需) | 启动网关 |
| `cmcp validate-config` | `--config PATH`(必需) | 验证`cmcp-config.yaml`而无需启动 |
| `cmcp validate-bundle` | `--bundle-path PATH`(必需), `--expected-hash sha256:<hex>`(必需) | 验证Cedar软件包哈希 |
---
## TRACE声明
`GatewayClaim`是审计员、监管机构或下游验证者提供的证明单位。它按会话(或按调用,可配置)生成,并使用TEE绑定的密钥签名。
| 字段 | 描述 |
|---|---|
| `trace.eat_profile` | EAT配置文件URI:`tag:agentrust.io,2026:trace-v0.1` |
| `trace.runtime` | TEE平台和硬件测量,记录在enclave启动时 |
| `trace.policy.bundle_hash` | 加载启动时的Cedar软件包的SHA-256;更改任何策略文件都会更改此值 |
| `trace.cnf.jwk` | Ed25519公钥绑定到TEE签名密钥 |
| `gateway.audit_chain` | 哈希链审计日志根和提示;无需重放个别条目即可验证 |
| `signature` | Ed25519 over canonical JSON的完整声明体(RFC 8785) |
使用`cmcp_verify`库进行验证,无需信任操作员。验证者检查签名是否与TEE绑定的密钥、策略包哈希与批准的值以及审计链的一致性。
查看[docs/spec/verification-library.md](docs/spec/verification-library.md)和[TRACE specification](https://agentrust.io/trace-spec)以获取完整的验证协议。
---
## 标准对齐
| 标准 | 覆盖范围 |
|---|---|
| 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](SECURITY.md)获取漏洞报告和响应SLA。查看[LIMITATIONS.md](LIMITATIONS.md)获取明确的范围边界,包括Phase 1未关闭的剩余风险。
---
## 文档
| 页面 | 描述 |
|---|---|
| [docs/quickstart.md](docs/quickstart.md) | 从零到第一个TRACE声明,耗时不到30分钟 |
| [docs/configuration.md](docs/configuration.md) | 完整的配置参考,包含所有字段和默认值 |
| [docs/SPEC.md](docs/SPEC.md) | 产品规格:问题分类、架构、覆盖矩阵 |
| [docs/spec/threat-model.md](docs/spec/threat-model.md) | STRIDE分析、对手模型、剩余风险 |
| [docs/spec/cedar-policy.md](docs/spec/cedar-policy.md) | Cedar策略语言参考和模式 |
| [docs/testing/benchmarks.md](docs/testing/benchmarks.md) | 每个TEE提供商的延迟和吞吐量基准 |
---
## 贡献
[CONTRIBUTING.md](CONTRIBUTING.md) · [GOVERNANCE.md](GOVERNANCE.md) · [讨论](https://github.com/agentrust-io/cmcp/discussions)
加入[Discord](https://discord.gg/9JWNpH7E)社区。
在生产中使用cMCP?将您的组织添加到[ADOPTERS.md](ADOPTERS.md)。
---
## 许可证
MIT - 查看[LICENSE](LICENSE)。