跳转到主要内容
“rug-pull”(抽地毯)是这样一个 MCP 服务器:它在你批准它之后更改 它的工具定义——把一个受信任的工具重新定义为做某件新事,或者悄悄 添加一个。OrcaRouter 在 schema 层抓住这一点:它为每个服务器声明的 工具集建立基线,并在每一次加载时重新核查,因此漂移 fail closed 而不是悄悄提供被更改的工具。 本页是按服务器 schema 状态的参考,以及每个状态对流量意味着什么。

1. 基线指纹

在首次接触时,网关计算服务器声明工具集的一个规范哈希,并把它 作为批准的基线存储:
  • 该哈希覆盖每个工具的 name、description 和输入 JSON schema —— 恰好是一次 rug-pull 会改动的那个面(一个工具获得一个外泄参数, 或者一个被武器化用于提示注入的描述,都会翻转哈希)。
  • 它是与顺序无关的:一个服务器重新排序它的工具列表,或者重新 排序一个 schema 内的键,不会看起来像一次变化。只有一次真正的 定义变化才会移动哈希。
在每一次后续探测上,网关重新哈希活的工具并把它们与已存储的基线 比较。这是一个按服务器的检查——它不依赖于你编写的任何规则。

2. schema 状态生命周期

每个已注册服务器携带一个 schema_status。这些状态以及它们如何 影响该服务器的工具是否被提供:
Status含义工具被提供?
(未建立基线)首次使用——尚无基线记录。发现姿态:是(trust-on-first-use——当前 schema 被捕获为基线)。严格姿态:否——见下方 pending
verified活的 schema 匹配批准的基线。
changed检测到漂移——活的 schema 不同于基线。否——fail closed
pending一个在严格(无 trust-on-first-use)姿态下未建立基线的服务器——等待批准。否——fail closed
quarantined一名管理员已挂起该服务器。否——fail closed
三个 closed 状态——changedpendingquarantined——都会阻止 服务器的工具通过网关被提供。verified 总是提供;一个未建立基线的 服务器只在发现姿态(trust-on-first-use)下提供,而在严格姿态下被挂为 pending。漂移永不悄悄通过。

3. 漂移时会发生什么

当一次重新核查发现活的 schema 不再匹配基线时:
1

状态翻转为 changed

服务器的 schema_status 变为 changed,并记录漂移时间戳。
2

工具停止被提供

网关 fail closed:那个服务器的工具被从统一 MCP 面中扣下,因此 一个智能体无法调用那些被更改的定义。
3

控制台把它浮现出来

该漂移出现以供审查,因此一名管理员可以把新工具集与批准的那个比较。
4

重新建立基线或隔离

一名管理员批准新 schema(重新建立基线——当前工具集成为新的 verified 基线)或隔离该服务器。在这两者之一发生之前,服务器 保持 closed。

4. 重新批准一个已漂移的服务器

重新建立基线是一次单独的调用(或控制台操作):
POST /api/workspace/firewall/mcp_servers/:id/approve_schema
需要 Developer 角色。它把活的工具集记录为新的批准基线,并把 服务器返回到 verified。(隔离一个服务器是一个单独的操作,用于 你判断这次变化是有敌意的时——approve_schema 只重新建立基线到 verified。)该操作被写入审计轨迹。
只有在你审查过 diff 之后才重新批准。在不核查的情况下批准一个 已漂移的 schema 会击溃这个控制——它告诉 OrcaRouter 那些新的 (可能恶意的)工具定义是受信任的。

5. 这落在哪里

Schema 漂移检测是 rug-pull 防御的 schema 层的一半;另一半是 mcp 面上每次调用的评估(每一次 tools/call 都在派发时对照你的策略 核查)。两者一起覆盖”定义变了”和”这次特定调用是危险的”。

Rug-pull 防御

完整的 rug-pull 图景——schema 基线加每次调用的评估。

MCP 安全总览

MCP 网关、技能和凭据。

MCP 工具投毒

这个状态机所防御的威胁。

MCP 审计事件

监控 schema 变化和网关决策。