mcpField
P
protect-mcp

protect-mcp

本地服务
github.com/scopeblind安全93 天前更新

关于 protect-mcp

protect-mcp 为 AI Agent 工具调用提供本地 Cedar 策略评估和签名决策记录,适用于需要审查或约束工具调用的开发者。它可作为 MCP 网关或通过编码 Agent 钩子接入,并支持本地验证记录。

主要功能

  1. 01Cedar 策略评估与调用拦截
  2. 02Shadow 与强制执行模式
  3. 03Ed25519 签名决策记录
  4. 04独立验证签名和记录链
  5. 05MCP、HTTP 网关及 Agent 钩子接入

适用场景

  1. 01在工具调用边界阻止未授权操作
  2. 02先以 Shadow 模式检查调用再启用拦截
  3. 03为策略决定生成可验证的签名记录
  4. 04通过 MCP 工具调用策略评估器

MCP 相关

可置于 MCP 客户端与工具服务之间,评估并记录经过网关的调用;也可将策略评估器作为 MCP 服务提供工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"tomjwxf-protect": {
"command": "npx",
"args": [
"-y",
"protect-mcp"
]
}
}
}
启动命令npx -y protect-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmprotect-mcp0.5.3

工具

4

收录的工具列表 · 更新于 3 天前

参数类型必填说明
toolstring是正在评估的工具名称,例如 "Bash"、"Write"、"send_email"。
inputobject否工具的参数。可在策略中通过 context.input.* 访问(例如 context.input.command)。
policystring是内联 Cedar 策略源。将 MCP::Tool::call 用作 action,将 Tool::"<name>" 用作 resource。

详细介绍

protect-mcp

为 AI Agent 工具调用实施本地策略管控并生成签名决策回执。

npm version Monthly npm downloads Node.js compatibility Package checks MIT license

开发者页面 · 快速开始 · Agent 设置 · 策略包 · 示例记录 · 集成与贡献 · 文档 · 参与贡献

将网关放在 MCP 客户端与其工具服务之间,或在编码 Agent 中使用其钩子。检查 Cedar 策略,启用强制执行,并保留签名决策记录。本地评估和验证无需 ScopeBlind 账户,也不会发送决策遥测数据。

  • 在工具边界实施管控。 在 fail-closed 模式下,Cedar 会在缺少策略、引擎出错或评估出错时拒绝请求。MCP 包装器默认处于影子模式;准备好拦截时,使用 --enforce。
  • 检查签名内容。 Ed25519 回执包含决策和策略摘要。@veritasacta/verify 会根据你信任的公钥检查这些字节。
  • 从现有工具开始。 使用 MCP stdio、HTTP 网关或编码 Agent 钩子。可选的托管协作有独立的权限和数据流。

网关只覆盖经由它路由的调用。它不是操作系统沙箱,签名回执也不能证明某项操作已经执行,或没有操作被遗漏。安全策略介绍了边界和报告流程。

查看结果

一次真实的本地运行:评估两个拟议调用,为决策签名,验证回执,然后修改一个已签名的决策并再次检查。

五步结果摘要:读取操作获准,拟议的强制推送遭拒;两个决策均已签名,其回执均通过验证;修改后的拒绝决策未通过签名验证。没有执行任何拟议的工具调用。

观看 14 秒演示

同样五个步骤的动态结果摘要,基于捕获的 CLI 输出。

文字演示与复现步骤 · 捕获的结果

不使用 Agent 试用

在新目录中使用 Node.js 22 和 npm。安装固定版本的网关和验证器:

mkdir protect-mcp-demo
cd protect-mcp-demo
npm init -y
npm install --save-exact [email protected] @veritasacta/[email protected]

此示例会评估两个拟议调用并为决策签名。它不会执行任何工具,也不会运行 git push。安装完成后的所有操作都在本地进行。

# Create a starter policy and a private signing key.
npx --no-install protect-mcp init --starter

# A normal read is allowed; a force-push to main is denied (exit 2).
npx --no-install protect-mcp evaluate --policy ./protect.cedar --tool Read --input '{"path":"README.md"}'
npx --no-install protect-mcp evaluate --policy ./protect.cedar --tool Bash --input '{"command":"git push --force origin main"}' || test "$?" -eq 2

# Evaluate again at signing time and record both decisions, in order.
npx --no-install protect-mcp sign --cedar builtin:starter --tool Read --input '{"path":"README.md"}' --key ./protect-mcp.key --receipts ./receipts
npx --no-install protect-mcp sign --cedar builtin:starter --tool Bash --input '{"command":"git push --force origin main"}' --key ./protect-mcp.key --receipts ./receipts

# Take only the public key from the key you generated, not from the receipt.
PROTECT_MCP_PUBLIC_KEY=$(node -p 'JSON.parse(require("fs").readFileSync("protect-mcp.key", "utf8")).publicKey')
npx --no-install verify --replay-chain ./receipts/receipts.jsonl --key "$PROTECT_MCP_PUBLIC_KEY" --json

# Change the signed deny to allow. The original receipt log stays intact.
node -e 'const fs=require("fs");const r=JSON.parse(fs.readFileSync("receipts/receipts.jsonl","utf8").trim().split("\n")[1]);r.payload.decision="allow";fs.writeFileSync("tampered.json",JSON.stringify(r))'
npx --no-install verify tampered.json --key "$PROTECT_MCP_PUBLIC_KEY" --json || test "$?" -eq 1

预期结果:先是 allow,然后是 deny;两个原始回执签名及其链接均通过验证;修改后的回执会报告 invalid_signature。请妥善保管 protect-mcp.key。要验证他人的记录,请通过独立可信渠道获取其预期公钥。

验证器的退出代码为 0:有效、1:无效、2:未检查/出错。验证结果无效不一定意味着遭到篡改:预期公钥错误也会导致验证失败。链重放会检查提供的链接,但无法证明你已收到完整历史记录。

CI 会使用打包后的候选版本和固定的已发布验证器运行此完整示例。请参阅验证与发布。

连接你的 Agent

选择与宿主和所需覆盖范围相匹配的集成方式。 安装指导技能不会启用强制执行。doctor 会检查本地配置;请通过实际执行一次允许的调用和一次被阻止的调用,确认所选路径。

对于 Claude Code 插件,请先准备并启动本地 gate,然后在项目中安装(Claude Code 2.1.295 或更高版本):

claude plugin install protect-mcp --marketplace ScopeBlind/scopeblind-gateway --scope project

gate 不可用时,插件会阻止路由的工具调用。请选择插件或独立项目钩子,避免同一次调用被记录两次。

用例从这里开始
包装现有 MCP 服务MCP 设置和从影子模式到强制执行的工作流
Claude Code 强制执行插件插件设置和本地 gate
Claude Code 项目钩子钩子设置
Cursor 项目预览版显式设置、工具映射和宿主检查
ChatGPT / Codex 助手预览版设置指南和无害的验证演示,不含钩子
现有的 Claude 目录指导插件已发布的插件源码,与强制执行分开
将策略评估器作为 MCP 工具调用作为 MCP 服务运行的 gate
托管 HTTP 网关HTTP 部署说明

宿主兼容性和发布状态区分了适配器测试与真实宿主验证。Cursor 和助手软件包是预览版,并未列入公开目录。独立钩子格式修复已在 0.32.4 中发布;其变更日志列出了每种格式的变更内容。仅设置格式标志,并不能证明 Codex、Gemini 或 Hermes 集成可正常工作。

对于现有 MCP 服务,请在与上方示例不同的目录中初始化其配置,然后使用服务命令运行包装器:

npx --yes [email protected] init
npx --yes [email protected] --policy ./protect-mcp.json -- node your-mcp-server.js

这会以影子模式启动。请先检查已观察到的调用和策略,再添加 --enforce。wrap 会输出客户端配置并退出;它不是启动命令。完整设置说明。

入门 shell 规则会检查命令文本。这些规则可提供有用的防护,但可能遗漏其他命令写法,也可能匹配无害的引号文本。依赖这些规则之前,请先阅读入门策略的覆盖范围和局限。

集成与贡献

项目关联方式
Microsoft AI Agents for Beginners教育资源贡献。 protect-mcp 的维护者编写了第 18 课,介绍如何签名、验证和串联 Agent 回执。
Cedar for Agents上游贡献。 贡献了 WASM 绑定,以便 JavaScript 和 TypeScript 使用 Cedar 的 Rust MCP 架构生成器。
wshobson/agents下游集成。 提供 protect-mcp 插件,包含 Claude Code 策略和回执钩子。
TRACE互操作性检查。 发布 Acta 决策回执测试数据;我们的验证器会根据固定快照报告验证结果。

来源、版本和检查覆盖范围。

从 0.31 升级

0.32.0 关闭了几种绕过门控的方式。其中一些会改变启动方式:

  • --http 监听 127.0.0.1,除 GET /health 外的每个请求都需要 Authorization: Bearer <token>。为网关以及调用它的客户端或入口设置相同的 PROTECT_MCP_HTTP_TOKEN(至少 32 个字符)。只有在确实需要将端口暴露给本机以外时, 才使用 --host。
  • 配置了签名但密钥缺失或无法读取时,--enforce 会拒绝启动;对于获准但无法签署其回执的调用,也会拒绝执行。
  • 使用 --cedar 和 --policy 时,两者都会生效:调用必须获得 Cedar 许可,并通过该文件的 block、require_approval、速率限制和 min_tier 检查。签名和凭据也由该文件提供。
  • 控制面板只接受来自其自身页面的更改,该页面带有每次启动时生成的令牌。
  • 签名密钥以 0600 权限写入 0700 权限的文件夹。对于早期版本生成的密钥,请运行 chmod 600 keys/gateway.json;完成前,网关会发出警告。
  • POST /approve 上的一次性批准会指定确切操作:网关打印的 Request ID,以及 tool:payload_hash。批准 nonce 只会显示在网关的 stderr 中。

每项更改详见更新日志。

文档

参与贡献

可从范围明确的待帮助任务开始: 一次真实主机捕获、 另一种干净的软件包运行环境,或 一份经过测试的策略示例。

欢迎提交错误报告、最小复现示例、文档修正和兼容性测试。有关设置和检查,请参阅 CONTRIBUTING.md;有关维护工作,请参阅 GOVERNANCE.md。请通过 SECURITY.md 私下报告漏洞, 不要在公开议题中报告。

共享一致性测试语料库 记录了不同回执生成方的兼容性结果。测试语料库通过,只能作为范围有限的互操作性证据, 并不代表获得了安全认证。

采用 MIT 许可证;详见 LICENSE 和现有的专利声明。 由 ScopeBlind 的 Tom Farley 维护。回执格式: Acta 独立 Internet-Draft。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。