针对MCP工具定义悄然变更的风险,构建Trust Cop安全Agent系统,在工具被批准后持续监控其定义变化,防范供应链级别的安全威胁。
AI agents 正在变得越来越有用,因为它们现在可以通过 Model Context Protocol (MCP) 这样的系统来调用工具。但这引出了一个我们无法停止思考的问题:
如果一个已经被你的 agent 信任的工具,在被批准之后悄然发生了变化,该怎么办?
这个问题促使我们构建了 Trust Cop —— 一个基于 TrueForge 构建的 MCP 安全 agent。
当 agent 使用 MCP 工具时,工具的定义本身就是其可信度的基础。
假设一个工具最初看起来是这样的:
text summarize_pr Input: pr_number Purpose: Summarize a pull request
就这么简单。但如果这个定义日后发生了变化呢?也许突然冒出了一个新参数:
或者描述和注解在无人察觉的情况下发生了改变。
agent 不应该仅仅因为旧版本被批准过,就默认新版本是安全的。这正是我们想要填补的空白。我们的出发点很简单:
一次批准 ≠ 永久信任。
Trust Cop 是一个 AI 驱动的安全 agent,它与我们构建的自定义 MCP server Guardian 协同工作。整个系统由三部分组成:
┌─────────────────────┐
│ TrueForge │
│ Trust Cop │
└──────────┬───────────┘
│
▼
┌─────────────────────┐
│ Guardian │
│ Baseline + Drift │
│ Detection + Audit │
└──────────┬───────────┘
│
▼
┌─────────────────────┐
│ Target MCP Server │
│ MCP Tools │
└─────────────────────┘
Guardian 首次发现一个工具时,会保存一个已批准的基线 — 名称、描述、输入 schema、注解,全部保存。
之后,Guardian 会对该定义进行指纹识别,定期将实时版本与之核对。如果有变化,Guardian 就会标记差异,并将工具移入:
text blocked_pending_review
这才是关键:一 个发生变化的工具绝不会在无人察觉的情况下溜到 agent 那里。
为了演示,我们启动了两 个目标 MCP server — v1 和 v2 — 并演示了当一个变成另一个时会发生什么。Guardian 在其下一个轮询周期中检测到了变化。
两个变更示例:
get_open_prs — 修改了描述,并悄然删除了其 readOnlyHint 注解summarize_pr 的输入 schema,添加了一个可选的 debug 参数Guardian 将两者都记录为 drift 事件,正如预期。
Guardian 标记 drift 后,Trust Cop 会询问有哪些待处理项,并收到类似这样的返回:
text Tool: summarize_pr Status: blocked_pending_review
Detected changes: inputSchema changed...
Trust Cop 会用通俗的语言解释发生了什么变化,并请人类来做决定。这一步由 TrueForge 内置的人工审批机制支持 — 在人做出判断之前,任何安全敏感的操作都不会发生。
如果变更被拒绝,Guardian 会保持该工具的阻止状态,并记录这个决定。
流程简要概括:
Tool approved
↓
Tool definition changes
↓
Guardian detects drift
↓
Tool is blocked
↓
Trust Cop reviews the change
↓
Human decision
↓
┌───────────────┐
│ │
DENY │ APPROVE
↓ ↓
Remain blocked │ Restore
最坏的情况,agent 只是暂时无法使用某个工具。但这比另一种失败模式要好得多 — agent 信任了不该信任的东西。
坦白说,TrueForge 让我们免于从零开始构建整个 agent 运行时。它处理了:
这意味着我们可以把时间花在真正重要的地方 — 构建 Guardian 和 drift 治理逻辑 — 而不是重复造底层的轮子。
我们不希望安全决策在 agent 继续运行后就蒸发掉。所以 Guardian 保留了一份所有操作的审计日志:
drift_detecteddrift_denieddrift_approved这给了我们一条清晰的纸质轨迹,记录了什么发生了变化、被做了什么决定 — 这对安全工具来说非常重要。你希望能够回溯查看究竟发生了什么,而不是仅仅信任它"做了"。
我们最大的认识是:工具安全不仅仅关乎工具做什么 — 还关乎你是否能长期信任它的定义。这是两个不同的问题,而人们很容易只想到第一个。
我们还坚信,安全边界需要存在于 agent 本身之外。Trust Cop 可以推理情况并做出解释,但实际执行的是 Guardian。把它们分开,你会得到更稳固的东西:
Agent reasoning + Security enforcement + Human approval = More controlled agent behavior
我们的计划中有以下几点:
Agents 正在变得越来越自主,但这不意味着信任应该变成一次设置、永久遗忘的东西。Trust Cop 背后的理念其实很简单:
如果一个被信任的工具变了,停下来问一下。
TrueForge 给了我们运行时和交互层,Guardian 给了我们实际监控并控制 drift 的安全边界 — 两者结合,让我们得以构建出一个小型但真正有用的 MCP 工具治理安全工作流。
信任应该是你不断检查的东西,而不是你永久假设的东西。
Built with: TrueForge · TypeScript · Model Context Protocol (MCP) · Node.js · Guardian MCP server · TrueForge human approval workflow.