protect-mcp 是为 Claude Code 工具调用提供密码学治理的插件,旨在补齐默认会话日志在审计方面的三处缺口:缺少策略执行、缺少防篡改证据、以及验证依赖运营方信任。
用途
Claude Code 会运行 Bash、Edit、Write、WebFetch 等强大工具。默认情况下没有审计轨迹、没有策略强制,也无法在事后证明当时做出了什么决定。protect-mcp 针对这些场景提供策略判定与签名回执。
主要能力
- Cedar 策略(AWS 开放授权引擎)在工具执行前评估每一次工具调用。Cedar 的 deny 为权威判定,会导致钩子以退出码 2 结束,Claude Code 随即完全阻断该工具调用。
- Ed25519 回执记录运行过的每个工具名称,并使用你的密钥签名。
- 通过 npx @veritasacta/verify 进行离线验证,无需服务器、账号,也无需信任运营方。
安装与配置
- 安装插件(会向项目添加钩子与技能): claude plugin install wshobson/agents/protect-mcp
- 创建 ./protect.cedar 策略文件(示例见资料)。插件会安装钩子。
- 创建签名密钥(protect-mcp 0.7.4 的 sign 不会创建它,已有密钥不会被替换): if [ ! -e ./protect-mcp.key ]; then d=$(mktemp -d) && npx protect-mcp@0.7.4 init --dir "$d" && mv "$d/keys/gateway.json" ./protect-mcp.key fi echo "/protect-mcp.key" >> .gitignore
- 正常使用 Claude Code,每次工具调用都会被策略评估并在 ./receipts/ 生成签名回执。
钩子配置由插件自带的 hooks/hooks.json 提供,包含 PreToolUse(在工具执行前评估策略)和 PostToolUse(在工具完成后签名并追加回执到 ./receipts/receipts.jsonl)。Claude Code 通过 stdin 以 JSON 传入钩子事件,不设置 TOOL_NAME 或 TOOL_INPUT 变量;evaluate.sh 从负载读取 tool_name 和 tool_input 并作为参数传给 protect-mcp,sign.sh 只读取 tool_name。可通过 PROTECT_MCP_POLICY、PROTECT_MCP_RECEIPTS、PROTECT_MCP_KEY 修改默认路径。当策略文件缺失时,PreToolUse 钩子会向 stderr 打印警告并允许该调用。
Cedar 策略要点
资料提供的示例策略允许只读工具(Read、Glob、Grep),允许经过白名单的 Bash 命令(如 git status、git diff、git log、git show、npm、ls、cat、echo、pwd、test),禁止命令串联、$ 展开、重定向、文件输出及 rm -rf,并允许项目路径内的 Write 与 Edit(路径为绝对路径),且禁止经由 .. 的路径。资料同时说明字符串匹配是尽力而为:like 检查原始字符串而非解析后的路径,npm* 允许会运行任意代码,因此其安全性取决于项目脚本。
验证方式
通过公钥验证回执: PUB=$(node -p 'JSON.parse(require("fs").readFileSync("./protect-mcp.key")).publicKey') npx @veritasacta/verify@0.9.2 --replay-chain ./receipts/receipts.jsonl --key "$PUB" 退出码 0 表示全部回执验证通过,1 表示某条回执失败(被篡改、密钥错误或行格式错误),2 表示文件无法读取。插件斜杠命令可在 Claude Code 内完成同样操作,如 /verify-receipt receipt.json 和 /audit-chain --last 20。
回执格式
每条回执是 receipts.jsonl 的一行,采用 Ed25519 签名(RFC 8032),签名字段以外的所有字段经 JCS 规范化(RFC 8785)。回执中不含公钥,需通过 --key 传入;也不含与前一条回执的链接,因此删除行无法被检测。
适用场景
AI 代理会做出影响资金、安全与权利的决定。在金融、医疗、受监管研究等合规场景中,可变更、未签名、绑定运营方的日志不足以作为证据,需要第三方无需信任你即可验证的防篡改证据。
相关标准与资源
Ed25519(RFC 8032)、JCS(RFC 8785)、Cedar(AWS 开放授权策略语言)、IETF 草案 draft-farley-acta-signed-receipts。npm 包为 protect-mcp,验证 CLI 为 @veritasacta/verify。
限制
protect-mcp 0.7.4 不记录工具输入或输出,回执间也无前向链接。关于收费、价格、平台支持等更多信息,暂未提供。