SuperAPI AI 工具集

safenode-mcp-gateway

SafeNode MCP Gateway 是一个 MCP 代理,用于对每一次 MCP 工具调用实施策略管控。它位于 MCP 客户端(Claude Desktop、Claude Code、Cursor 等 MCP 主机)与已有的 MCP 服务器之间:tools/list 请求原样放行,模型看到的工具与之前完全一致;但每次 tools/call 都会先经 SafeNode 评估,拒绝的调用根本不会到达下游服务器。代理对 agent 透明,无需修改代码。客户端侧支持对请求参数进行脱敏(覆盖邮箱、Luhn 校验通过的信用卡号、美国 SSN、常见 API key 前缀、bearer token、PEM 私钥块等),并始终附带脱敏计数,以便服务端策略仍能感知敏感数据存在。默认 fail_closed:SafeNode 不可达时拒绝调用,可按服务器或按工具放宽。提供本地 JSONL 决策日志,无分析、无回传、无 postinstall 脚本。需要免费 API key(格式 sn_...),Node 18+,唯一运行时依赖 @modelcontextprotocol/sdk,MIT 许可。

访问官网

工具介绍

SafeNode MCP Gateway 是一个 MCP 代理(proxy),用于对每一次工具调用强制执行策略。相比以 MCP server 形式暴露 evaluate_action 工具的做法(模型可以选择不调用它,因而实际不构成强制),本代理位于 MCP 客户端与已有 MCP 服务器之间,tools/list 直接放行,使模型看到的工具集不变;每一次 tools/call 都先经 SafeNode 评估,被拒绝的调用完全不会到达下游服务器。使用它的 agent 无需修改代码,也不会感知到网关的存在。

主要能力与行为

  • 策略强制:每次工具调用先评估,拒绝以 MCP 工具错误形式返回,而非传输层失败,因此模型能看到原因并尝试其他方式,而不是让主机呈现不透明的崩溃。
  • failMode:决定 SafeNode 不可达时的行为。网关默认 fail_closed,而 SafeNode SDK 默认 fail_open,这一差异是有意为之:SDK 包装的是开发者自己的代码,而在网关前景的是它一无所知的任意 MCP 工具(文件系统写入、shell 命令、支付等),在 SafeNode 不可达时放行一切会违背安装它的意义。可按工具对只读工具放宽。降级决策记录到 stderr,并在决策日志中标记为 "degraded": true 且 traceId 为 null,因此永远不会被计为真实的策略决策。
  • 客户端脱敏:payloadMode 控制发送的参数。脱敏覆盖邮箱、Luhn 校验通过的信用卡、美国 SSN、供应商 API key 前缀(sk-、ghp_、xoxb-、AKIA、AIza)、bearer token 与 PEM 私钥块,值变为 [REDACTED:<type>]。
  • 脱敏计数:在发送脱敏后载荷的同时,网关始终发送被移除内容的计数。这一点是关键:SafeNode 服务端的 sensitive_data 规则针对载荷值匹配模式,若客户端擦除这些值却不告知,则“拒绝任何包含卡号的操作”这类策略会悄然开始放行——客户端隐私功能会反而禁用服务端安全控制。报告计数可弥补这一点:策略能对卡号的存在采取行动,而无需收到卡号。若使用带 patterns 的 sensitive_data,请搭配 redaction_metadata 规则。这些计数是自报的,只提高对诚实客户端的底线,不是针对恶意客户端的防御。
  • 数据外发范围:对每次工具调用,网关发送工具名、下游服务器名、会话 id、配置中的静态上下文,以及作为载荷的工具参数。网关只与两类对象通信:你所配置的下游 MCP 服务器与 SafeNode API。无分析、无回传、无 postinstall 脚本。
  • 本地决策日志:设置 logFile 可获得每个决策的 JSONL 记录,独立于服务端审计轨迹,从而在网络中断时仍保留 agent 尝试行为的证据。
  • 工具名冲突:若两个下游服务器导出同名工具,网关为每个工具加 <server>__ 前缀并记录警告。静默选一个赢家会把一个服务器的策略应用到另一个服务器的工具上,这属于安全缺陷而非外观问题。

使用方式

  1. 获取 API key:在 safenode.tech 免费获取,密钥形如 sn_...。
  2. 编写配置:safenode-gateway.json,把服务器直接从现有 MCP 客户端配置中取出。不要把 API key 写进该文件;在环境中设置 SAFENODE_API_KEY,其优先级高于配置,因此该文件可安全提交。
  3. 发送前先查看将被发送的内容:打印评估将要 POST 的精确 JSON body,不发网络请求,这是确认本机外发内容的最快方式。
  4. 将 MCP 客户端指向网关:Claude Desktop 的 claude_desktop_config.json、Claude Code 的 .mcp.json、Cursor 的 ~/.cursor/mcp.json(与 Claude Desktop 同形)。用这一条替换原有的服务器条目;网关会自行拉起它们,若两处都列出会重复运行每个服务器。

配置参考:failMode、payloadMode 与 context 可全局、按服务器或按工具设置,最具体者生效。tools.<name>.bypass: true 对单个工具完全跳过评估,调用将不经任何策略检查直接转发。

适用场景

  • 需要在不修改 agent 代码的情况下,对任意 MCP 工具调用施加统一安全策略。
  • 需要客户端侧敏感数据脱敏,同时保留服务端对敏感数据存在的策略判断能力。
  • 需要在网络中断时仍有本地决策记录。

限制与边界

  • 不是沙箱:它只决定调用是否被转发,不隔离下游服务器、不限制系统调用、也不限制该服务器在收到调用后能做什么。
  • 不是提示注入检测器:它评估动作,而非产生动作的推理。若 agent 被诱导删除某张表,它可以阻止删除,但不会告诉你 agent 被操纵了。
  • 不是离线:每次工具调用都需要与 SafeNode API 往返,没有本地策略评估。
  • 不能替代对底层服务器的范围限制:仍应给文件系统服务器传递可用的最小根目录。
  • 并非无副作用:每次评估都会被服务端记录并计入月度配额。
  • 每次受管工具调用会增加一次 SafeNode API 往返,默认预算 5000ms;被 bypass 的工具不增加。evaluate 端点的实测 p99 暂未公布,因为尚未在真实负载下测量。

运行与依赖 无参数运行会使用内置演示配置,代理一个自带的 echo 服务器,便于零配置观察代理工作。演示 key 为占位符,因此 tools/list 放行而任何真实工具调用会被 fail_closed 策略拒绝。真实使用需挂载自己的配置并提供 key,且 -i 是必需的,因为 MCP 通过 stdio 使用 JSON-RPC,不接 stdin 网关无从通信。需要 Node 18+,唯一运行时依赖为 @modelcontextprotocol/sdk。许可为 MIT。