mcpField
D
drift — mandate enforcement for AI agents

drift — mandate enforcement for AI agents

远程服务
drift.rta.lat安全0今天更新

关于 drift — mandate enforcement for AI agents

drift 是一个 MCP 服务,可在 AI Agent 执行操作前,将其与已签署的授权条件核对。它按固定顺序检查六类规则,但只作出是否允许的判断,不执行操作或验证签名。

主要功能

  1. 01检查金额和币种限制
  2. 02核对收款方与受众
  3. 03执行有效期限制
  4. 04按意图限制操作
  5. 05检查操作序列并生成报告
  6. 06按判定顺序解释规则

适用场景

  1. 01在 Agent 提交付款前进行检查
  2. 02防止收款方或币种被替换
  3. 03依据授权条件审查一系列操作

MCP 相关

drift 向 MCP 客户端提供 `drift_check`、`drift_session` 和 `drift_explain`。这些工具可将单项操作或操作序列与授权条件核对并解释规则,但不会执行操作或验证授权签名。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://drift.rta.lat/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

3
参数类型必填说明
actionobject是拟议操作。
action.atinteger是操作拟发生的时间,Unix 秒数。
action.intentstring是Agent 声称自己正在执行的操作。不可信。
action.audiencestring是付款将支付给的受众。
action.currencystring是此付款的 ISO-4217 代码。
action.payee_idstring是Agent 即将使用的收款方。
action.amount_minorinteger是以最小货币单位表示的金额,与 max_amount_minor 使用相同的单位比例。
mandateobject是正在执行的已签署授权。请将其视为只读输入。
mandate.audiencestring是授权中绑定的商户受众 URI。
mandate.currencystring是ISO-4217 代码,例如 USD。
mandate.payee_idstring是授权中指定的确切收款方。
mandate.valid_frominteger是包含起始时刻,Unix 秒。
mandate.valid_untilinteger是包含结束时刻,Unix 秒。
mandate.allowed_intentsarray是允许的意图。留空表示允许任何意图。
mandate.max_amount_minorinteger是以最小货币单位表示的支出上限,例如 10000 = 100.00 USD。仅限整数。

详细介绍

drift

M8ven Score Listed on mcpservers.org

持续强制执行 AI Agent 的授权。 每项操作都会在发生之前,而不是仅在签署时,根据已签署的授权进行检查。

pip install drift          # or: pip install -e .
python3 -m drift.http_server --http 8080

问题所在

Agent 获得一项授权:向谁付款、支付多少、使用哪种货币,以及授权有效期至何时。 AP2 仅在签署时验证一次授权。之后,Agent 便自行行动,不再有任何机制将其约束在授权范围内。

这件事确实重要,AP2 Python SDK 本身就提供了实测证据:

verify_chain documents:
  "enforcing expected_aud / expected_nonce on the terminal hop when provided"

but kb_sd_jwt.verify calls verify_expected_claims only when typ in TYP_TERMINAL,
and a kb+sd-jwt+kb token — which the SDK itself produces whenever the payload
carries a cnf — falls into TYP_INTERMEDIATE:

  hop type      : kb+sd-jwt+kb
  aud in token  : https://attacker.example/ap2
  expected_aud  : https://honest-merchant.example/ap2
  ACCEPTED a token with the wrong audience.

Agent 信任其管理支出权限的协议,却不会检查该权限是否被替换。drift 会检查。

检查内容

#规则可发现的问题
1amount超出限额——最常见的越权形式
2payee收款方错误
3audience付款被转给其他人
4currency货币被替换
5window超出有效期
6intent意图不在允许列表中

默认策略为拒绝。规则按固定顺序运行,因此拒绝时会指出最重要的原因,而不是偶然出现的问题。

MCP 工具

工具用途
drift_check根据授权检查单项操作
drift_session检查一系列操作,并获取包含链指纹的报告
drift_explain按应用顺序展示规则

不使用 SSE,不使用有状态会话,也不使用 HTTP 框架。仅使用标准库。

示例

from drift import Mandate, Drift, Action

m = Mandate(
    payee_id="shop", audience="https://merchant.example/ap2",
    max_amount_minor=10_000, currency="USD",
    valid_from=1_700_000_000, valid_until=1_700_086_400,
    allowed_intents=("buy",),
)
d = Drift(m)
verdict, rule = d.submit(Action(
    intent="buy", payee_id="shop", audience="https://merchant.example/ap2",
    amount_minor=99_999, currency="USD", at=1_700_000_060,
))
print(verdict, rule)   # DENY amount

明确说明限制

  • 不会验证授权签名。 这是 AP2 的职责。drift 在签名验证之后,从决策层面进行检查。
  • 不会执行操作。 它负责决策;调用方负责执行。
  • 不保留状态。 会话作为参数传入。无状态意味着没有攻击面,也不会因复制部署而产生差异。
  • 无法辨别真实情况与意图。 intent 来自 Agent,是不可信输入。drift 会限制损害,但不会验证意图。

如果 Agent 同时控制 intent 和 amount,它可以在两者上撒谎。弥补这一缺口是 attest 的职责:attest 事后提供证明,drift 事前限制范围。两者相辅相成。

在你的 Agent 中使用

{
  "mcpServers": {
    "drift": { "url": "https://drift.rta.lat/mcp" }
  }
}

我们的 Agent 就是通过这段代码调用此服务的。工具:drift_check(单项操作)、drift_session(一系列操作)、drift_explain(六条规则及其存在的原因)。每天免费检查 100 次,之后通过 x402 按次收费 $0.005。

许可证

Apache-2.0。

评论

支持 Markdown

第一次接触 MCP?

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

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