mcpField
S
scopeblind-mcp

scopeblind-mcp

本地服务
github.com/tomjwxf安全1129 周前更新

关于 scopeblind-mcp

scopeblind-mcp 的 README 介绍了 `protect-mcp`,这是用于控制和观察 MCP 工具调用的本地 stdio 代理,适合希望为现有服务添加逐工具策略和可审计决策记录的团队;仓库说明开发已转至 ScopeBlind/scopeblind-gateway。

主要功能

  1. 01影子模式记录并放行工具调用
  2. 02逐工具阻止和速率限制策略
  3. 03最低层级策略检查
  4. 04可选 Ed25519 签名回执
  5. 05结构化决策日志
  6. 06离线验证回执

适用场景

  1. 01执行策略前先观察工具调用
  2. 02阻止或限制指定 MCP 工具的调用频率
  3. 03为审计记录可验证的决策
  4. 04代理现有的 stdio MCP 服务

MCP 相关

该网关位于 MCP 客户端与现有 stdio MCP 服务之间,拦截 `tools/call` 请求并透传其他 MCP 消息。影子模式会记录并放行调用;配置策略后可执行逐工具规则。

配置

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

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

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

安装包
npmscopeblind-mcp1.0.2

工具

4

收录的工具列表 · 更新于 2 周前

参数类型必填说明
urlstring是要扫描的 API 端点 URL(例如 https://api.example.com/v1/signup)

详细介绍

⚠️ 此仓库已迁移。 活跃开发现已在 ScopeBlind/scopeblind-gateway 继续。

此个人分支可能落后于规范仓库。请使用组织仓库提交问题、拉取请求并获取最新代码。

protect-mcp

MCP 服务的安全网关。默认以影子模式记录日志,支持逐工具策略、可选的本地 Ed25519 回执,以及便于验证的审计输出。

当前 CLI 路径: 将任意 stdio MCP 服务包装为透明代理。在影子模式下,它会记录每个 tools/call 请求,并允许所有请求通过。添加策略文件即可执行逐工具规则。运行 protect-mcp init 以生成本地签名密钥和配置,这样网关也能生成签名回执。

快速开始

# Wrap an existing OpenClaw / MCP config into a usable pack
npx @scopeblind/passport wrap --runtime openclaw --config ./openclaw.json --policy email-safe

# Shadow mode — log every tool call, enforce nothing
npx protect-mcp -- node my-server.js

# Generate keys + config template for local signing
npx protect-mcp init

# Shadow mode with local signing enabled
npx protect-mcp --policy protect-mcp.json -- node my-server.js

# Enforce mode
npx protect-mcp --policy protect-mcp.json --enforce -- node my-server.js

# Export an offline-verifiable audit bundle
npx protect-mcp bundle --output audit.json

功能说明

protect-mcp 作为 stdio 代理,位于 MCP 客户端和服务之间:

MCP Client ←stdin/stdout→ protect-mcp ←stdin/stdout→ your MCP server

它会拦截 tools/call JSON-RPC 请求,并:

  • 影子模式(默认):记录每次工具调用,并允许所有请求通过
  • 强制模式:应用逐工具策略规则,例如 block、rate_limit 和 min_tier
  • 可选的本地签名:配置签名后,会在结构化日志旁生成 Ed25519 签名回执

所有其他 MCP 消息(initialize、tools/list、通知)都会透明传递。

当前提供的功能

  • 逐工具策略——阻止破坏性工具、限制高成本工具的调用频率,并附加最低层级要求
  • 结构化决策日志——每项决策都会通过 stderr 输出,并带有 [PROTECT_MCP]
  • 可选的本地签名回执——使用包含 signing.key_path 的策略运行时生成,保存到 .protect-mcp-receipts.jsonl,并可通过 http://127.0.0.1:9876/receipts 访问
  • 离线验证——使用 npx @veritasacta/verify 验证回执或数据包
  • 无需账户——本地密钥、本地策略、本地进程

当前功能边界

在部署或向用户介绍前,请注意以下重要事项:

  • 直接使用 npx protect-mcp -- ... 时不会自动签名。 该路径会以影子模式记录决策。要启用本地签名,请运行 npx protect-mcp init,然后使用生成的策略文件启动网关。
  • 基于层级的策略检查已可用,但默认 CLI/stdio 路径尚未接入清单准入。 除非主机集成通过编程方式调用准入 API,否则 CLI 会将会话层级默认为 unknown。
  • 凭证配置目前会验证基于环境变量的凭证引用,并在日志/回执中记录凭证标签。 向任意 stdio 工具注入通用的逐调用凭证,需要适配器支持;默认代理路径不会执行此操作。
  • 外部 PDP 适配器和审计数据包辅助工具已作为导出工具提供。 它们尚未完全接入默认 CLI 路径。

策略文件

{
  "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"
    }
  }
}
策略规则
字段值描述
blocktrue明确阻止此工具
require"any"、"none"基本访问要求
min_tier"unknown"、"signed-known"、"evidenced"、"privileged"主机设置准入状态时所需的最低层级
rate_limit"N/unit"速率限制(例如 "5/hour"、"100/day")

工具名称必须完全匹配,"*" 可用作通配回退。

MCP 客户端配置

Claude Desktop

添加到 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"
      ]
    }
  }
}
Cursor / VS Code

使用相同模式——将服务命令替换为用于包装该服务的 protect-mcp。

CLI 选项

protect-mcp [options] -- <command> [args...]
protect-mcp init

Commands:
  init              Generate Ed25519 keypair + config template
  status            Show decision stats and local passport identity
  digest            Generate a local human-readable summary
  receipts          Show recent persisted signed receipts
  bundle            Export an offline-verifiable audit bundle

Options:
  --policy <path>   Policy/config JSON file
  --slug <slug>     Service identifier for logs/receipts
  --enforce         Enable enforcement mode (default: shadow)
  --verbose         Enable debug logging
  --help            Show help

编程接口

该库还提供了尚未接入默认 CLI 路径的基础功能:

import {
  ProtectGateway,
  loadPolicy,
  evaluateTier,
  meetsMinTier,
  resolveCredential,
  initSigning,
  signDecision,
  queryExternalPDP,
  buildDecisionContext,
  createAuditBundle,
} from 'protect-mcp';

如果要添加以下功能,请使用这些接口:

  • 在会话开始前进行清单准入
  • 外部 PDP(OPA、Cerbos 或通用 HTTP webhook)
  • 自定义的凭证代理集成
  • 围绕自有回执存储导出审计数据包

决策日志与回执

每次工具调用都会向 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() 处理你自行收集的签名回执。

理念

  • 先采用影子模式。 在执行任何管控之前,先了解 Agent 在做什么。
  • 回执胜过仅限仪表板的日志。 签名产物应可独立验证。
  • 严格限定声明范围。 默认的 CLI 路径目前尚未实现长期架构将支持的所有功能。
  • 基于现有身份验证机制构建。 无需为了增加管控和证据而彻底替换现有技术栈。

以事件为锚点的策略包

与 protect-mcp 一起发布 — 每个策略包都能防范真实攻击:

策略事件OWASP 类别
clinejection.jsonCVE-2025-6514:MCP OAuth 代理劫持(437K 个环境)A01、A03
terraform-destroy.json自主 Terraform Agent 摧毁生产环境A05、A06
github-mcp-hijack.json通过精心构造的 GitHub issue 实施提示词注入A01、A02、A03
data-exfiltration.jsonAgent 通过滥用出站工具窃取数据A02、A04
financial-safe.json未经授权的金融交易A05、A06
npx protect-mcp --policy node_modules/protect-mcp/policies/clinejection.json -- node server.js

完整的 OWASP Agentic Top 10 映射:scopeblind.com/docs/owasp

BYOPE:外部策略引擎

支持 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"
  }
}

标准与知识产权

  • IETF Internet-Draft:draft-farley-acta-signed-receipts-00 — 用于机器对机器访问控制的签名决策回执
  • 专利状态:4 项澳大利亚临时专利正在申请中(2025-2026),涵盖可配置披露的决策回执、工具调用网关、Agent 清单和可移植身份
  • 验证:采用 MIT 许可证 — npx @veritasacta/verify --self-test

许可证

MIT — 可免费使用、修改、分发和改编,不受限制。

scopeblind.com · npm · GitHub · IETF Draft

评论

支持 Markdown

第一次接触 MCP?

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

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