关于 Rein
Rein 是一个 MCP 服务,在抓取付费内容前,按支出策略检查 AI Agent 的 x402 付款。它面向需要管控付款、查看收据和追踪状态,同时不授予服务端策略管理权限的 Agent 运营者。
主要功能
- 01按策略检查 x402 抓取
- 02付款收据与结算状态
- 03Agent 策略和支出状态
- 04查看待人工处理的升级项
- 05用于失联监控的心跳
适用场景
- 01限制 Agent 对付费网址的支出
- 02检查付款决策和结算情况
- 03追踪等待人工批准的付款
MCP 相关
向 MCP 客户端提供抓取、状态、收据、升级项和心跳工具。只有抓取工具能转移资金;服务刻意不提供批准或策略管理功能。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @reinconsole/mcpREIN_AGENT_FILEPath to the rein-agent.json written by `npx @reinconsole/init` (engine URL, agent id, API key, wallet).REIN_ENGINE_URLPolicy engine base URL. Required unless REIN_AGENT_FILE is set.REIN_AGENT_IDThe one agent this server speaks for. Required unless REIN_AGENT_FILE is set.REIN_ENGINE_API_KEY密钥Bearer key for the engine, ideally an evaluate key narrowed to this agent.REIN_PAYER_PRIVATE_KEY密钥Agent wallet key. Omit for advisory mode: policy is checked, nothing is paid.REIN_NETWORK_PROFILEtestnet (default) or mainnet: which network's 402s this server will pay.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
@reinconsole/mcp
Rein 守卫,以 MCP 服务的形式运行。让任何支持 MCP 的执行环境连接到它,Agent 就能进行受支出策略管控的抓取:每个 x402 付费墙都会在资金支出前经过策略检查、记录收据并确保可观测。
Rein 是非托管式的。它管控 Agent 的支出权限,而非资金本身。
安装
最快的入门方式是使用免费的测试网沙盒——无需账户,也无需注册:
npx @reinconsole/init
它会在托管引擎上创建一个带有初始策略的 Agent(Base Sepolia,每次调用上限为 $0.004)、一个含少量测试 USDC 的测试钱包和 rein-agent.json,然后打印填入文件路径的以下配置:
{
"mcpServers": {
"rein": {
"command": "npx",
"args": ["-y", "@reinconsole/mcp"],
"env": { "REIN_AGENT_FILE": "/path/to/rein-agent.json" }
}
}
}
该文件提供引擎 URL、Agent ID、API 密钥和钱包,因此密钥不会出现在命令行或配置文件中。沙盒有效期为 7 天;运行 npx @reinconsole/init --claim 并使用 GitHub 或 Ethereum 钱包登录,即可保留沙盒。
使用你自己的引擎
使用变量而非文件,将其指向任意策略引擎:
{
"mcpServers": {
"rein": {
"command": "npx",
"args": ["-y", "@reinconsole/mcp"],
"env": {
"REIN_ENGINE_URL": "http://127.0.0.1:8787",
"REIN_AGENT_ID": "agt_01J..."
}
}
}
}
这是建议模式:付费墙会根据策略进行评估并报告,但不会实际付款。添加 REIN_PAYER_PRIVATE_KEY 即可结算获准的付款。
npx -p @reinconsole/policy-engine rein-policy-engine 会在本地 127.0.0.1:8787 上运行引擎;有关注册 Agent 和编写策略的信息,请参阅 @reinconsole/policy-engine。
服务启动后,会向 stderr 打印且仅打印一行内容。执行环境不会显示其他内容,因此如果缺少此行,说明服务未在运行,前面的任何输出都是原因:
[rein-mcp] 0.2.0 ready on stdio for agt_01J... via http://127.0.0.1:8787 (advisory -- no payer configured)
环境
| 变量 | 必填 | 含义 |
|---|---|---|
REIN_AGENT_FILE | 否 | npx @reinconsole/init 写入的 rein-agent.json 的路径。提供以下四个值;显式设置的任何变量都会覆盖对应字段。 |
REIN_ENGINE_URL | 是,除非已在文件中设置 | 策略引擎的基础 URL。 |
REIN_AGENT_ID | 是,除非已在文件中设置 | 此服务代表的唯一 Agent。绝不是工具参数。 |
REIN_ENGINE_API_KEY | 如果引擎启用了身份验证则需要 | 引擎的 Bearer 密钥。 |
REIN_PAYER_PRIVATE_KEY | 否 | Agent 钱包密钥。省略则进入建议模式:检查策略,但不付款。 |
REIN_NETWORK_PROFILE | 否 | testnet(默认)或 mainnet。此服务将为哪个网络的 402 付款;另一个网络会在生成签名之前被拒绝。未知值会导致启动失败。 |
REIN_MCP_TASK_ID | 否 | 默认任务归属信息,以便每任务预算可以限制此 Agent 的工作。 |
REIN_MCP_ESCALATION_WAIT_MS | 否 | 等待签名批准时,让工具调用保持未完成的时长。默认值为 0。 |
REIN_MCP_MAX_BODY_BYTES | 否 | 返回给模型的响应正文大小上限。默认值为 65536。 |
所有配置在启动时固定。工具调用无法访问此处的任何内容。
之所以需要 REIN_NETWORK_PROFILE,是因为引擎无法划定这条界线:它会将 Base 和 Base
Sepolia 映射到同一条链,因此允许其中一个的策略也会允许另一个,而供应商的 402 原本会
决定 Agent 的密钥在哪个网络上支出。默认值为 testnet,这意味着在 0.1.x 版本中支付了
mainnet 402 的安装,在明确将配置文件设为 mainnet 之前都会拒绝此类付款。
对于托管引擎,REIN_ENGINE_API_KEY 应为使用组织颁发、且权限范围缩小到此 Agent 的 evaluate 密钥:
POST /v1/keys
{ "name": "claude-desktop", "scopes": ["evaluate"], "orgId": "org_01J...", "agentIds": ["agt_01J..."] }
这就是桌面配置文件中该密钥的全部影响范围:它只能为此 Agent 提交意图,不能做其他任何事——不能操作同一组织中的其他 Agent,不能操作策略或密钥,也不能操作其他租户的任何内容。对于可自托管的单租户引擎,省略这两个字段即可,密钥的行为与以往完全相同。
工具
| 工具 | 只读 | 用途 |
|---|---|---|
rein_fetch | 否 | 获取 URL,仅在策略允许时付款。 |
rein_status | 是 | 此 Agent 受哪些规则约束,以及它遵守这些规则的情况。 |
rein_receipts | 是 | 它支付了哪些款项,以及这些款项是否已结算。 |
rein_escalations | 是 | 它有哪些付款正暂停等待人工处理。 |
rein_heartbeat | 否 | 报告 Agent 正常运行,以便进行失联监控。 |
rein_fetch 是唯一可以转移资金的工具,也是唯一不带 readOnlyHint 的工具。
权限边界
管道另一端的客户端就是 Agent——也就是受管控的对象。因此,工具可以执行 Agent 原本就能通过自己的 fetch 执行的任何操作,但不能扩大 Agent 自身的权限。
特意没有提供用于批准权限升级、编辑策略、冻结或解冻 Agent、创建 API 密钥或注册审批人的工具。在 Rein 中,审批是由已注册的审批人密钥对决策进行的 ed25519 签名;工具调用不是签名,而若工具调用可以代替签名,就会让持有管道的任何进程都拥有转移资金的权限。rein_escalations 从设计上就是只读的,而且测试会检查整个工具集,而非其中的示例,因此新增权限工具必须先导致测试失败。
一个服务也只代表一个 Agent。若允许调用方选择 Agent ID,就会把面向单个 Agent 的工具集变成跨 Agent 管理 API。
被拦截的付款是什么样的
策略拒绝会作为工具错误返回——fetch 并未执行;如果模型把它当作普通结果,就会把拒绝原因误当成它请求的数据。返回内容会附带详细信息,因为下一步该怎么做取决于具体的拒绝类型:
DENIED——最终拒绝。相同请求会以相同方式被拒绝。ESCALATED——已搁置,等待人工签署。轮询rein_escalations,或继续处理其他事项。Agent 无法通过任何调用批准它。ALLOWED_BUT_UNPAID——不是错误:策略已同意,但此服务运行在建议模式下,因此会返回未付款的 402。
编程式用法
import { createReinMcpServer } from '@reinconsole/mcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = createReinMcpServer({ engineUrl, agentId, payer });
await server.connect(new StdioServerTransport());
createToolContext 和 reinTools 也已导出,可用于在承载其他工具的服务中嵌入相同的工具。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。