⚠️ 此仓库已迁移。 后续开发请移至 ScopeBlind/scopeblind-gateway。
此个人分支可能落后于官方仓库。请使用组织仓库提交问题、拉取请求并获取最新代码。
MCP 服务器安全网关。默认以影子模式记录日志,支持按工具策略、可选的本地 Ed25519 签名收据,以及便于验证的审计输出。
当前 CLI 路径: 将任何 stdio MCP 服务器包装为透明代理。在影子模式下,它会记录所有 tools/call 请求并放行所有内容。添加策略文件以实施按工具规则。运行 protect-mcp init 生成本地签名密钥和配置,以便网关也能输出签名收据。
# 将现有的 OpenClaw / MCP 配置包装成可用包
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe
# 影子模式 — 记录每次工具调用,不强制任何策略
npx protect-mcp -- node my-server.js
# 生成密钥 + 配置模板用于本地签名
npx protect-mcp init
# 影子模式并启用本地签名
npx protect-mcp --policy protect-mcp.json -- node my-server.js
# 强制模式
npx protect-mcp --policy protect-mcp.json --enforce -- node my-server.js
# 导出可离线验证的审计包
npx protect-mcp bundle --output audit.json
protect-mcp 作为 stdio 代理位于您的 MCP 客户端和服务器之间:
MCP 客户端 ←stdin/stdout→ protect-mcp ←stdin/stdout→ 您的 MCP 服务器
它拦截 tools/call JSON-RPC 请求,并执行以下操作:
block、rate_limit 和 min_tier所有其他 MCP 消息(initialize、tools/list、通知)均透明传递。
[PROTECT_MCP] 前缀输出到 stderrsigning.key_path 的策略运行时生成,持久化到 .protect-mcp-receipts.jsonl,并通过 http://127.0.0.1:9876/receipts 暴露npx @veritasacta/verify 验证收据或包在推广或向用户介绍前,请注意以下几点:
npx protect-mcp -- ... 路径上不会自动启用。 该路径会在影子模式下记录决策。如需本地签名,请先运行 npx protect-mcp init,然后使用生成的策略文件启动网关。unknown,除非主机集成通过编程方式调用准入 API。{
"default_tier": "unknown",
"tools": {
"dangerous_tool": { "block": true },
"admin_tool": { "min_tier": "signed-known", "rate_limit": "5/hour" },
"read_tool": { "require": "any", "rate_limit": "100/hour" },
"*": { "rate_limit": "500/hour" }
},
"signing": {
"key_path": "./keys/gateway.json",
"issuer": "protect-mcp",
"enabled": true
},
"credentials": {
"internal_api": {
"inject": "env",
"name": "INTERNAL_API_KEY",
"value_env": "INTERNAL_API_KEY"
}
}
}
工具名称精确匹配,"*" 用作通配符回退。
添加到 claude_desktop_config.json:
{
"mcpServers": {
"my-protected-server": {
"command": "npx",
"args": [
"-y", "protect-mcp",
"--policy", "/path/to/protect-mcp.json",
"--enforce",
"--", "node", "my-server.js"
]
}
}
}
相同模式 — 将服务器命令替换为 protect-mcp 进行包装。
protect-mcp [options] -- <command> [args...]
protect-mcp init
命令:
init 生成 Ed25519 密钥对 + 配置模板
status 显示决策统计信息和本地 passport 身份
digest 生成本地人类可读摘要
receipts 显示最近持久化的签名收据
bundle 导出可离线验证的审计包
选项:
--policy <path> 策略/配置 JSON 文件
--slug <slug> 用于日志/收据的服务标识符
--enforce 启用强制模式(默认:影子)
--verbose 启用调试日志
--help 显示帮助
该库还暴露了尚未集成到默认 CLI 路径的原语:
import {
ProtectGateway,
loadPolicy,
evaluateTier,
meetsMinTier,
resolveCredential,
initSigning,
signDecision,
queryExternalPDP,
buildDecisionContext,
createAuditBundle,
} from 'protect-mcp';
如果您需要添加以下功能,可以使用这些原语:
每次工具调用都会向 stderr 输出结构化 JSON:
[PROTECT_MCP] {"v":2,"tool":"read_file","decision":"allow","reason_code":"observe_mode","policy_digest":"none","mode":"shadow","timestamp":1710000000}
配置签名后,会跟随一个签名收据:
[PROTECT_MCP_RECEIPT] {"v":2,"type":"decision_receipt","algorithm":"ed25519","kid":"...","issuer":"protect-mcp","issued_at":"2026-03-22T00:00:00Z","payload":{"tool":"read_file","decision":"allow","policy_digest":"...","mode":"shadow","request_id":"..."},"signature":"..."}
使用 CLI 验证:npx @veritasacta/verify receipt.json
在浏览器中验证:scopeblind.com/verify
该包导出了一个用于自包含审计包的辅助工具:
{
"format": "scopeblind:audit-bundle",
"version": 1,
"tenant": "my-service",
"receipts": ["..."],
"verification": {
"algorithm": "ed25519",
"signing_keys": ["..."]
}
}
使用 createAuditBundle() 围绕您自己收集的签名收据。
与 protect-mcp 一起提供 — 每个包可阻止一次真实攻击:
npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js
完整的 OWASP 代理十大映射:scopeblind.com/docs/owasp
支持 OPA、Cerbos、Cedar (AWS AgentCore) 以及通用 HTTP 端点:
{
"policy_engine": "hybrid",
"external": {
"endpoint": "http://localhost:8181/v1/data/mcp/allow",
"format": "cedar",
"timeout_ms": 200,
"fallback": "deny"
}
}
npx @veritasacta/verify --self-testMIT — 可自由使用、修改、分发和构建,无限制。
scopeblind.com · npm · GitHub · IETF 草案
| 字段 | 值 | 描述 |
|---|
block | true | 显式阻止此工具 |
require | "any", "none" | 基本访问要求 |
min_tier | "unknown", "signed-known", "evidenced", "privileged" | 如果主机设置了准入状态,则所需的最低层级 |
rate_limit | "N/unit" | 速率限制(例如 "5/hour"、"100/day") |
| 策略 | 事件 | OWASP 类别 |
|---|
clinejection.json | CVE-2025-6514:MCP OAuth 代理劫持(43.7 万个环境) | A01, A03 |
terraform-destroy.json | 自主 Terraform 代理销毁生产环境 | A05, A06 |
github-mcp-hijack.json | 通过精心构造的 GitHub Issue 进行提示注入 | A01, A02, A03 |
data-exfiltration.json | 代理通过滥用出站工具窃取数据 | A02, A04 |
financial-safe.json | 未经授权的金融交易 | A05, A06 |