详细分析 ▾
运行时依赖
版本
MIT许可证,OWASP覆盖,事件策略
安装命令
点击复制技能文档
此技能的功能
此技能通过protect-mcp包装OpenClaw代理的MCP工具调用,添加:
- 影子模式 — 记录每个工具调用并附带签名收据(默认不阻止任何操作)
- 每工具策略 — 阻止、限速或要求审批特定工具
- 签名收据 — Ed25519签名、JCS规范化每个决策的证明
- 信任层级 — 可用于高级配置,按验证过的记录限制工具访问
- 本地每日摘要 — 人类可读的代理活动摘要
任何平台都可以记录其代理的行为。很少有平台能让您在不信任它们的情况下验证这些日志。
何时使用此技能
在以下情况下使用此技能:
- 您想知道代理在您不在时做了什么
- 您需要签名、可篡改的代理行为证明以用于合规或审计
- 您想阻止危险工具(delete_database、send_email_as_ceo、rm_rf)
- 您想对昂贵或 risky 的操作进行限速
- 您想要代理活动的每日摘要
何时不使用此技能
- 您只想要基本的OpenClaw内置允许列表(这些对简单情况很有效)
- 您不需要签名加密证明(只要日志,不要收据)
设置
快速路径(推荐)
如果您已有OpenClaw配置先生成带passport的包装包:
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe
这会写入:
wrapped-config.jsonmanifest.jsonpassport.bundle.jsonprotect-mcp.jsonkeys/gateway.jsonVERIFY.md
将wrapped-config.json中的mcpServers条目复制到您的OpenClaw配置中。
首次运行(生成签名密钥+默认策略)
npx protect-mcp init
这会创建:
keys/gateway.json— Ed25519签名密钥对(在当前目录)protect-mcp.json— 默认影子模式策略(记录一切,不阻止任何操作)
包装您的MCP服务器
对于代理使用的每个MCP服务器,通过protect-mcp包装它。在您的OpenClaw MCP配置中:
之前:
{
"mcpServers": {
"filesystem": {
"command": "node",
"args": ["filesystem-server.js"]
}
}
}
之后:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["protect-mcp", "--policy", "protect-mcp.json", "--", "node", "filesystem-server.js"]
}
}
}
就是这样。每个工具调用现在都会产生签名收据。
应用策略包
要从影子模式切换到强制模式,复制策略模板并添加--enforce:
# 复制策略模板
cp policies/email-safe.json protect-mcp.json
然后更新您的MCP配置参数以包含--enforce:
"args": ["protect-mcp", "--policy", "protect-mcp.json", "--enforce", "--", "node", "server.js"]
请参阅policies/目录了解预建模板。
命令
当用户要求您执行这些操作时,请执行它们:
"显示我的passport" / "我的代理身份是什么?"
npx protect-mcp status
显示输出,包括:
- 总决策数(允许/拒绝/限速)
- 活动时间范围
- 使用最多的工具
- 看到的信任层级
"你今天做了什么?" / "显示我的每日报告"
npx protect-mcp digest --today
显示本地摘要,包括:
- 采取的行动(允许、阻止、等待审批)
- 使用的工具及频率
- 信任层级状态
- 被阻止的工具及原因
"显示我的收据" / "证明你做了什么"
npx protect-mcp receipts --last 20
显示最近20个决策,包括工具名称、决策和时间戳。
"为什么那个被阻止了?"
当工具调用被阻止或限速时,解释:
- 哪个策略规则触发了阻止
- 代理的当前信任层级
- 使用该工具需要什么层级
- 如何请求审批或更改策略
审批流程
当protect-mcp阻止具有策略中require_approval: true的高风险操作时,它返回:
REQUIRES_APPROVAL: The tool "send_email" requires human approval before execution. Tell the user you need their approval to use "send_email" and will retry when granted. Do NOT retry this tool call until the user explicitly approves it.
当您收到此响应时:
- 告诉用户:"我需要您的批准才能使用[tool_name]。是否继续?"
- 等待用户响应批准。
- 当用户批准时,通过运行以下命令授予批准:
# 一次性批准(仅限于此特定请求): curl -s -X POST http://127.0.0.1:9876/approve -H 'Content-Type: application/json' -d '{"request_id":"REQUEST_ID","tool":"TOOL_NAME","mode":"once","nonce":"NONCE"}'
# 始终允许此工具(会话范围,24小时TTL): curl -s -X POST http://127.0.0.1:9876/approve -H 'Content-Type: application/json' -d '{"tool":"TOOL_NAME","mode":"always","nonce":"NONCE"}'
将REQUEST_ID、TOOL_NAME和NONCE替换为REQUIRES_APPROVAL响应中的值。
- 授予批准后,重试原始工具调用。现在它会成功。
当用户拒绝时:
告诉他们该操作被阻止并解释被阻止的内容。
检查当前批准:
curl -s http://127.0.0.1:9876/approvals
策略包
policies/目录中提供预建策略:
| 包 | 功能 |
|---|---|
shadow.json | 记录一切,不阻止任何操作(默认) |
web-browsing-safe.json | 限速浏览,要求表单审批,阻止JS |
email-safe.json | 自由读取,要求发送审批,阻止删除 |
strict.json | 阻止除读取外的所有操作(只读模式) |
验证
每个收据都可以独立验证。MIT许可的验证器无需信任ScopeBlind。
快速测试(不需要收据)
npx @veritasacta/verify --self-test
获取要验证的收据
当protect-mcp运行时,收据可从本地HTTP状态服务器获取:
# 获取最新的收据 curl -s http://127.0.0.1:9876/receipts/latest | jq -r '.receipt' > receipt.json
# 获取所有最近的收据 curl -s http://127.0.0.1:9876/receipts | jq -r '.receipts[0].receipt' > receipt.json
如果本地状态服务器不可用,使用持久化的收据文件:
tail -n 1 .protect-mcp-receipts.jsonl > receipt.json
验证收据
# 从状态获取公钥(显示在"Passport Identity"下) npx protect-mcp status
# 使用公钥验证 npx @veritasacta/verify receipt.json --key
验证器检查针对公钥的Ed25519签名。无API调用,无账户,无ScopeBlind服务器参与。