🔐 MCP见证
    ](https://pypi.org/project/mcp-witness/) 
每个AI决策的加密证明。 一个不可变、可验证的审计跟踪MCP服务器——因为“相信我兄弟”不符合SOC2。
pip install mcp-witness
mcp-witness quickstart✨ 为什么是mcp证人?
AI代理做出决策。监管机构会提出问题。mcp证人提供 密码证明 关于发生了什么、何时发生以及为什么发生的事情,包括哈希链完整性、Merkle树验证、Ed25519签名、外部信任锚定(RFC 3161 TSA严格模式,可选本地证明,结构验证的开放时间戳,IPFS),以及HIPAA、GDPR、SOC2等的合规预设。
| 功能 | mcp见证 | 标准日志记录 |
|---|---|---|
| 篡改检测 | ✅ SHA-256哈希链+默克尔树❌ 文本文件,易于编辑 | |
| O(log n)验证 | ✅ 带有自动回填功能的Merkle检查点 | ❌ 仅线性扫描 |
| 不可否认性 | ⚠️ Ed25519记录签名(需要持久密钥) | ❌ 没有 |
| 外部锚固 | ✅ TSA、比特币(OTS)、IPFS | ❌ 没有 |
| 合规预设 | ✅ HIPAA、GDPR、SOX、PCI DSS、FedRAMP、SOC2 | ❌ 手动配置 |
| PII/PHI编辑 | ✅ 加密哈希 | ❌ 纯文本或手册 |
GDPR删除权✅ witness_delete 带链条保护 | ❌ 破坏性删除 | |
| 法律等级证明 | ⚠️ RFC 3161时间戳(严格模式默认值;降级模式下的本地证明) | ❌ 没有 |
| 链条故障警报 | ✅ Webhook通知 | ❌ 无声的失败 |
| 多租户 | ✅ org_id隔离 | ❌ 没有 |
| 报告 | ✅ HTML+PDF合规报告 | ❌ 手册 |
| 仪表板 | ✅ 带有实时API的Web仪表板 | ❌ 没有 |
| 结构化日志记录 | ✅ JSON日志格式选项 | ❌ 非结构化 |
🔒 保证水平
| 级别 | 描述 | 当前 |
|---|---|---|
| ASSURANCE-1 | 尽力记录,无加密保证 | -- |
| ASSURANCE-2 | 哈希链+默克尔树,篡改EVIDENT,可配置锚定 | v0.6.0 |
| 保证-3 | 不可否认性(Ed25519)、严格锚定、静态加密、正式威胁模型 | 目标:v1.0 |
⚠️ 电流限制(v0.6.0→ v1.0)
锚定是异步的。 首先创建记录,然后在以下情况下锚定 检查点触发器 AnchorService在记录创建和检查点锚定之间, 记录存在时没有外部信任证明。使用 witness_attest 锚定个人 立即记录。
单节点存储。 SQLite(默认)和PostgreSQL后端是单实例。 没有内置的复制、集群或HA。定期备份数据库。 看 docs/backup.md.
静态加密需要配置。 合规预设参考AES-256-GCM 但默认情况下加密不处于活动状态。集 MCP_WITNESS_DEK 启用 字段级信封加密。没有它,敏感字段将以明文形式存储 JSON。
不可否认性需要持久密钥。 Ed25519签名已实现,但默认为 转换为临时(每个进程)密钥。集 MCP_WITNESS_SIGNING_KEY 固定为32字节 用于跨会话验证不可否认性的十六进制密钥。
看 安全.md 对于完整的威胁模型。
🚀 30秒快速入门
# Install
pip install mcp-witness
# One command: init + serve
mcp-witness quickstart
# ✅ Database ready: ~/.mcp-witness/witness.db
# 📋 Next Steps:
# 1. Configure signing: export MCP_WITNESS_SIGNING_KEY=$(openssl rand -hex 32)
# 2. Configure HMAC: export MCP_WITNESS_HMAC_KEY=$(openssl rand -hex 32)
# 3. Start dashboard: mcp-witness dashboard
# 4. Add to Claude: claude mcp add witness -- mcp-witness serve
# Or go step-by-step:
mcp-witness init # Initialize database
mcp-witness serve # Start MCP server
# Check system health
mcp-witness stats # Chain statistics
mcp-witness verify # Chain integrity check
mcp-witness dashboard # Web dashboard on :9090
mcp-witness report # Generate compliance reportClaude桌面集成
{
"mcpServers": {
"witness": {
"command": "mcp-witness",
"args": ["serve"],
"env": {
"MCP_WITNESS_DB": "~/.mcp-witness/witness.db",
"MCP_WITNESS_HMAC_KEY": "",
"MCP_WITNESS_SIGNING_KEY": "",
"MCP_WITNESS_CHECKPOINT_INTERVAL": "1000",
"MCP_WITNESS_AUTO_ANCHOR": "false",
"MCP_WITNESS_WEBHOOK_URL": "https://alerts.example.com/witness",
"MCP_WITNESS_LOG_FORMAT": "json"
}
}
}
}🛠️ CLI参考
mcp-witness quickstart One-command init + serve with next steps
mcp-witness serve Start the MCP server
mcp-witness init Initialize database
mcp-witness verify [--fast] Verify hash chain integrity
mcp-witness stats Chain health dashboard
mcp-witness export [--output] Export audit report
mcp-witness report [--format] Generate HTML/PDF compliance report
mcp-witness proof SEQUENCE Merkle proof for a record
mcp-witness search QUERY Full-text search across audit records
mcp-witness checkpoints List Merkle checkpoints
mcp-witness dashboard Start web dashboard (default :9090)
mcp-witness anchors create ID Anchor to TSA/Bitcoin/IPFS
mcp-witness anchors verify ID Verify external anchor receipts🛠️ MCP工具(共17个)
| 工具 | 说明 |
|---|---|
witness_record | 将AI操作记录到不可变的审计跟踪中 |
witness_verify | 验证哈希链完整性(检测篡改) |
witness_verify_fast | 使用Merkle检查点进行O(logn)验证 |
witness_query | 按会话、演员、工具、时间搜索记录 |
witness_chain | 获取会话的完整决策链 |
witness_stats | 获取审计跟踪统计数据和运行状况 |
witness_health | 检查数据库连接、签名状态、锚点、版本 |
witness_attest | 来自外部权威机构的RFC 3161时间戳 |
witness_export | 导出合规报告记录 |
witness_delete | GDPR删除权(数据编辑,链保留) |
witness_search | 跨推理/输入/输出数据的全文搜索 |
witness_checkpoints | 列出Merkle检查点 |
witness_anchor | 将检查点锚定到TSA/比特币/IPFS |
witness_verify_anchors | 验证外部锚收据 |
witness_proof | 获得单个记录的Merkle证明 |
witness_backfill | 为现有记录创建检查点 |
witness_configure_compliance | 应用HIPAA/GDSGVO/SOX/FedRAMP/SOC2/PCI DSS预设 |
🏛️ 合规预设
一个命令。完全合规基线。
# Via MCP tool:
witness_configure_compliance(preset="hipaa")
# → 6-year retention, auto-redacts 12 PHI fields, requires attestation
witness_configure_compliance(preset="gdpr")
# → Right-to-erasure support, consent records, 12 PII fields redacted
witness_configure_compliance(preset="soc2")
# → 1-year retention, API key redaction, quarterly audit schedule| 预设 | 保留 | 自动重置 | 证明 | 不可变 |
|---|---|---|---|---|
| HIPAA | 6年 | 12个PHI字段 | ✅ 必填 | -- |
| GDPR | 按目的 | 12个PII字段 | ✅ 必需 | 删除权 |
| SOX | 7年 | 7个金融领域 | ✅ 必填 | ✅ 是的 |
| FedRAMP | 3年 | 6个CUI领域 | ✅ 必填 | -- |
| SOC 2 | 1年 | 7个字段 | ✅ 必填 | -- |
| PCI DSS | 1年 | 7个卡字段 | ✅ 必填 | -- |
📊 运作原理
哈希链+默克尔树+Ed25519签名
Records: [R0] → [R1] → [R2] → ... → [R999] → [R1000] → ...
✍️🔑 ✍️🔑 ✍️🔑 ✍️🔑 ✍️🔑
Ed25519 Ed25519 Ed25519 Ed25519 Ed25519
↓
[Checkpoint #1]
Merkle Root: abc123
Covers: records 0-999
↓
[External Anchors]
🕐 TSA (RFC 3161)
₿ OpenTimestamps
🌐 IPFS
Merkle Tree: root_hash
/ \
hash_01 hash_23
/ \ / \
h_0 h_1 h_2 h_3
↓ ↓ ↓ ↓
R0:R0h R1:R1h R2:R2h R3:R3h每条记录 使用Ed25519进行不可否认性签名(如果未配置,则自动生成签名密钥)。
篡改检测: 更改任何记录→ 其哈希值发生了变化→ 签名无效→ 默克尔根变化→ 检查点无效→ 外部锚点证明了真正的根何时存在。
GDPR删除权: witness_delete 为空数据字段,但保留哈希链——记录可以在不破坏完整性验证的情况下进行编辑。
验证性能
| 记录 | 全链 | 带检查点 |
|---|---|---|
| 1000 | ~100ms | ~100ms |
| 10000 | ~1s | ~100ms |
| 100000 | ~10s | ~1s |
| 1000000 | ~100秒 | ~10秒 |
单个记录: O(对数n) 具有Merkle证明(vs O(n)线性扫描)。
🔒 安全
- SHA-256哈希链 使用空字节分隔符以防止冲突攻击
- Ed25519记录签名 --自动生成的临时密钥,可通过env-var配置
- HMAC密钥保护 --可选的服务器端机密使哈希值不可重新计算
- RFC 3161 TSA锚定 --法定等级时间戳(严格模式;降级模式下的本地认证)
- 开放时间戳 --结构验证(完整的比特币确认需要外部OTS客户端)
- IPFS内容寻址 --带网关验证的CIDv0/CIDv1计算
- 域分离的Merkle树 --防止第二次预映像攻击
- 原子事务 —
BEGIN IMMEDIATE防止比赛条件和链叉 - 速率限制 --可配置令牌桶(数据库支持)
- 基于角色的访问控制 --基于角色的只读审计部署访问控制
- 错误清理 --堆栈跟踪永远不会泄露给客户端
- 路径遍历保护 --导出仅限于允许的目录
- 幂等性 --基于nonce的重放攻击防御,每行TTL清理
- Webhook警报 --POST到链上可配置URL的完整性失败
- 结构化日志记录 --用于生产监控的可选JSON日志格式
看 贡献.md 安全披露政策。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_WITNESS_DB | ~/.mcp-witness/witness.db | SQLite数据库的路径 |
MCP_WITNESS_DATABASE_URL | -- | PostgreSQL URL;启用PG后端 |
MCP_WITNESS_DEK | 临时 | 32字节十六进制AES-256-GCM数据加密密钥 |
MCP_WITNESS_HMAC_KEY | -- | 32字节十六进制HMAC密钥,用于哈希链保护 |
MCP_WITNESS_SIGNING_KEY | 临时 | 用于记录签名的32字节十六进制Ed25519种子 |
MCP_WITNESS_REQUIRE_PERSISTENT_KEY | false | 签名密钥短暂时拒绝启动 |
MCP_WITNESS_JWT_PUBLIC_KEY | -- | JWT身份验证的十六进制编码Ed25519公钥 |
MCP_WITNESS_JWT_MAX_AGE | 3600 | JWT令牌最长使用时间(秒) |
MCP_WITNESS_API_KEYS | -- | 逗号分隔 key:role 成对(管理员/审计员/作家) |
MCP_WITNESS_ALLOW_ANON_WRITES | false | 设置API密钥时允许未经验证的写入访问 |
MCP_WITNESS_RATE_LIMIT | 1000 | 令牌桶大小和充值率(记录/秒) |
MCP_WITNESS_EXPORT_DIR | cwd | 目录导出仅限于 |
MCP_WITNESS_WEBHOOK_URL | -- | POST链完整性警报的URL |
MCP_WITNESS_CHECKPOINT_INTERVAL | 1000 | 每个Merkle检查点的记录 |
MCP_WITNESS_AUTO_ANCHOR | false | 自动锚定每个检查点 |
MCP_WITNESS_ANCHOR_STRICT | true | 将锚定提供程序故障视为错误 |
MCP_WITNESS_SHUTDOWN_TIMEOUT | 30 | 等待SIGTERM上的飞行中写入的秒数 |
MCP_WITNESS_METRICS_HOST | 127.0.0.1 | Prometheus指标服务器的绑定地址 |
MCP_WITNESS_METRICS_PORT | 9091 | Prometheus度量服务器端口 |
MCP_WITNESS_LOG_FORMAT | text | 日志格式: text 或 json |
MCP_WITNESS_ORG_ID | -- | 每条记录上印有组织标识符 |
TSA_URL | FreeTSA | RFC 3161时间戳授权URL |
PINATA_API_KEY / PINATA_API_SECRET | -- | IPFS锚定的Pinata证书 |
OTS_SERVER | -- | 打开时间戳服务器URL |
PG_MIN_CONNECTIONS / PG_MAX_CONNECTIONS | 2 / 10 | asyncpg池大小 |
🧪 发展
git clone https://github.com/edwiniac/mcp-witness.git
cd mcp-witness
pip install -e ".[dev]"
pytest -v # 251 unit tests
pytest --ignore=tests/test_storage_pg.py # Skip PG (needs PostgreSQL)CI/CD管道
| 职位 | 描述 |
|---|---|
| 棉绒 | ruff+黑色格式检查 |
| 测试 | Python 3.10、3.11、3.12中的251个测试,覆盖率≥65% |
| 测试postgres | Postgres 16上的12个PostgreSQL集成测试 |
| 安全 | pip审计漏洞扫描 |
| 建造 | 包装构建+烟雾测试 |
🗺️ 路线图
- \[x\] 核心哈希链(v0.1.0)
- \[x\] Merkle检查点+外部锚定(v0.2.0)
- \[x\] CLI+合规预设+安全强化(v0.3.0)
- \[x\] PostgreSQL后端(v0.5.0)
- \[x\] Ed25519记录签名+不可否认性(v0.6.0)
- \[x\] GDPR删除权+模式迁移(v0.6.0)
- \[x\] 带有实时API(v0.6.0)的Web仪表板
- \[x\] HTML+PDF合规报告(v0.6.0)
- \[x\] 结构化JSON日志记录(v0.6.0)
- \[x\] 多租户(v0.6.0)
- \[x\] 链故障时的Webhook警报(v0.6.0)
- \[x\] 全文搜索(v0.6.0)
- \[\]流媒体架构(Kafka/NATS)
- \[\]AWS KMS/云HSM签名
- \[\]Grafana/Prometheus指标端点
- \[\]自定义锚点提供者的插件系统
📄 许可证
麻省理工学院——见 许可证
👤 作者
埃德温·伊萨克 --AI工程师\ · 电子邮件
