跳转到主要内容
当一个智能体在一打 MCP 工具上放任运行时,事后要紧的问题从来不是 “这一个工具安全吗”——而是”那个智能体实际调用了什么、防火墙 决定了什么、哪条规则做出了那次调用。“OrcaRouter 从一个地方回答 这个问题:mcp 审计日志MCP 网关mcp 面上评估的每一次 tools/call 都落为一个防火墙事件—— 判定、工具、匹配的规则,以及发出它的智能体运行——因此你可以实时 监控一次会话或事后重建它。 本页是读取那条轨迹的聚焦操作指南。关于网关本身、判定词汇和规则 DSL,参见 防火墙防火墙:MCP 服务器
这里的每一次读取都从控制台(或使用你的会话/访问令牌的 REST API——UserAuth)配置,并受角色门控。只有 /v1/* 中继调用和防火墙 网关路由才携带 sk-orca-... 样式的密钥。

1. mcp 审计日志记录什么

每一次 MCP 工具调用在 mcp 面上产生一个防火墙事件。该事件携带 你回答”谁调用了什么、策略做了什么”所需的内容——以及它不该携带的 东西没有(工具参数被脱敏,见 §4)。
verdictallow / audit / deny / sanitize / pending_approval / observe)、surface(这里是 mcp)、policy_namerule_label 和一个人类可读的 reason。一个 quarantine 标志标记一个因为归属 技能 处于隔离模式而被挂起的调用。
tool_name(带命名空间的 <server>.<tool>)、skill_name(当调用 可归因于一个已注册技能时)、model_nametoken_name
agent_run_idconversation_idrequest_id——你用来给一次 会话的调用分组,或从一个请求向下钻取到它扇出的每一次调用的键。
一个 gap 标志标记一个你附加的策略看到但没有规则匹配observe 模式调用——已发现工具视图用来浮现你的策略尚未覆盖的 工具的信号。

2. 读取信息流

控制台中的 Events 标签页是主视图。要以编程方式拉取同样的数据,用 你的访问令牌列出事件并过滤到 mcp 面:
# 控制台路由(UserAuth)。读取事件需要 Developer+。
curl "https://api.orcarouter.ai/api/workspace/firewall/events?surface=mcp&verdict=deny,pending_approval" \
  -H "Authorization: Bearer <your-access-token>"
verdict 过滤器接受单个值或一个逗号分隔的集合(上面的”拒绝 + 挂起” 预设)。一个样本事件:
{
  "created_at": 1700000000,
  "surface": "mcp",
  "tool_name": "github.create_issue",
  "verdict": "deny",
  "policy_name": "Coding agent",
  "rule_label": "no writes to prod org",
  "reason": "rule matched: no writes to prod org",
  "agent_run_id": "run_8f3a",
  "model_name": "claude-sonnet-4-5",
  "token_name": "ci-agent"
}
要重建一个请求的完整扇出——一个单一中继请求下模型调用的每一个 工具——按 request id 向下钻取:
curl "https://api.orcarouter.ai/api/workspace/firewall/events/by-request/<request_id>" \
  -H "Authorization: Bearer <your-access-token>"
要一个会话级别的汇总而不是原始行,访问 GET /api/workspace/firewall/events/aggregate?group_by=run(或 group_by=session)——每个智能体运行一行,带按判定的细分、不同的 工具和首次/最后出现。trace 端点 (/trace/runs/trace/by-run)重建该运行的调用树。

3. 服务器治理审计行

每次调用的事件告诉你智能体做了什么。第二条更小的轨迹告诉你 对一个服务器的治理做了什么——而那是 rug-pull 故事所在之处。 当一次探测发现一个已注册服务器声明的工具集已漂移,而一名管理员 重新建立基线或隔离它时,那个决策被写入工作区审计日志:
审计动作何时写入
firewall_mcp_schema_changed一次探测发现活的工具集从批准的那个漂移了。
firewall_mcp_schema_approved一名管理员重新建立基线到新工具集。
firewall_mcp_schema_quarantined一名管理员隔离(并禁用)一个已漂移的服务器。
每一行携带服务器 id、名称和工具数量——绝不携带工具参数或凭据。这是 Rug-pull 防御 背后的取证轨迹: 一个你周一批准的服务器无法在周五悄悄长出一个 shell.exec 工具而 不在这里留下一行。
防火墙策略规则设置的变更在这些之外写它们自己的审计行。 当一个平台管理员做出更改时,它还落入中央管理员审计日志 (GET /api/admin/audit-logs,仅管理员);一个普通成员的编辑留在 工作区轨迹中。

4. 参数默认被脱敏

事件流被构建为可由你的团队读取而不泄露密钥。工具调用参数永不被 逐字存储——一个事件至多携带一个被封顶、被脱敏的 args_summary, 而用于异常分组的原始参数哈希永不离开服务器。
因为事件携带那个被净化的参数快照,事件、聚合和 trace 端点被门控为 Developer+——一个 Viewer 角色的成员可以读取 策略和已发现工具,但不能读取另一个成员的 工具调用来源。相应地规划你的角色。

5. 实时监控:异常

事后读取是一半;另一半是在事情正在发生时被告知。异常信息流监视 MCP(和每一个其他面)以发现从工作区学习到的基线偏离的行为——对照 一个 hour-of-week 画像的速率和成本激增、重试循环和新颖的工具路径—— 并在你不编写一条规则的情况下把它们浮现出来。
# 异常信息流对任何 Member 开放。
curl "https://api.orcarouter.ai/api/workspace/firewall/anomalies?window=5m" \
  -H "Authorization: Bearer <your-access-token>"
一个嘈杂的信号可以被打盹(至多 7 天),让它停止挤占信息流而不被 永久静音。异常读取是 Member-开放的——比事件流更宽——因为它携带 信号,而不是参数。
把这个信息流与 shadow 模式 配对:把一个收紧的 策略以仅审计推出,在事件流中观察本会发生的拒绝 (reason[shadow] would … 为前缀),并在信息流安静后提升它。

6. 保留与擦除

防火墙事件自动过期——它们不是一个永久存储,它们是一个滚动的监控 窗口。工作区审计行(§3 中的服务器治理轨迹) 保留至多 180 天。并且当一个用户被删除时,宽限期-然后-清除的 循环级联穿过防火墙事件和匹配,因此一个离开的用户的工具调用轨迹 不会逗留。
数据驻留和保留控制住在 合规 平面。 mcp 审计日志继承工作区的保留姿态;你不按服务器配置它。

7. 下一步去哪里

MCP 安全总览

整个 MCP 治理面——网关、判定、技能、出站。

Rug-pull 防御

§3 中的漂移事件,端到端:检测、重新建立基线、隔离。

允许列表 MCP 工具

把审计日志所示的内容变成一个默认拒绝的策略。

防火墙:MCP 服务器

完整的字段与路由参考。
对这个模型还不熟悉?参见 OrcaRouter 如何检查 了解 事件在评估路径中的哪里被发出,以及 过度代理权 了解一份干净的审计 轨迹帮助你尽早抓住的威胁。