使用说明
支付机器人mcp
MCP服务器 PayBot --通过模型上下文协议为AI代理提供支付工具。
安装
npm install paybot-mcp paybot-sdk
获取API密钥
PAYBOT_API_KEY 如果没有它,每个工具调用都会以401失败。获得钥匙的最快方法是 PayBotClient.signup() 呼叫(来自 paybot-sdk)反对主持人 https://api.paybotcore.com:
node -e "import('paybot-sdk').then(async ({ PayBotClient }) => {
const a = await PayBotClient.signup('you@example.com', 'a-strong-password', { botId: 'my-agent' });
console.log(a.apiKey); // pb_live_... — printed ONLY once, save it now
})"
此单个调用注册您的操作员帐户,创建API密钥, 并注册bot (botId).将打印好的钥匙放入 PAYBOT_API_KEY 在下面的MCP配置中,并重用与相同的bot id PAYBOT_BOT_ID.
笔记:
- 钥匙已打印 仅一次 --安全存放;以后无法检索。
- 因为
signup()已注册您的机器人,呼叫paybot_register具有相同bot id的工具返回409 ALREADY_EXISTS.使用paybot_register仅供 额外的 机器人。 - 完整的身份验证流(登录、额外的API密钥、自托管协助器):请参阅 paybot sdk自述→ 获取API密钥.
使用Claude Desktop
增添 claude_desktop_config.json:
{
"mcpServers": {
"paybot": {
"command": "npx",
"args": ["paybot-mcp"],
"env": {
"PAYBOT_API_KEY": "pb_...",
"PAYBOT_FACILITATOR_URL": "https://api.paybotcore.com",
"PAYBOT_BOT_ID": "my-agent"
}
}
}
}
使用Claude代码
{
"mcpServers": {
"paybot": {
"command": "npx",
"args": ["paybot-mcp"],
"env": {
"PAYBOT_API_KEY": "pb_...",
"PAYBOT_BOT_ID": "my-agent"
}
}
}
}
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
PAYBOT_API_KEY |
PayBot API密钥(请参阅 获取API密钥) | (必填) |
PAYBOT_FACILITATOR_URL |
主持人服务器URL | https://api.paybotcore.com |
PAYBOT_BOT_ID |
默认机器人标识符 | mcp-agent |
PAYBOT_WALLET_KEY |
用于真实支付的钱包私钥 | (可选) |
PAYBOT_ENABLE_DEMO_TOOLS |
注册受管理的模拟演示工具(delete_database, annotate_record).必须完全正确 true. |
false 关 |
如果 PAYBOT_API_KEY 如果未设置或为空,服务器仍会启动(因此MCP握手成功),但会在启动时向stderr打印警告,并且每次工具调用都会失败并出现身份验证错误,直到配置密钥为止。省略 PAYBOT_WALLET_KEY 将底层SDK保持在模拟模式(无链上结算)。
可用工具
| 工具 | 说明 |
|---|---|
paybot_pay |
付款(默认为USDC;支持备用令牌+幂等性) |
paybot_balance |
检查信任级别、支出限制和剩余预算 |
paybot_history |
查看最近的付款历史记录和审计事件 |
paybot_register |
向主持人注册一个新的机器人程序(可选幂等性密钥) |
paybot_list_networks_and_tokens |
发现支持的网络和令牌(离线,无API密钥) |
paybot_health_extended |
延长主持人健康状况(状态/版本/正常运行时间+额外) |
paybot_set_spending_limit |
设置每笔交易/每日/每小时的限额和收件人分配列表 |
paybot_commission_inspect |
检查佣金摘要和可过滤的分类账 |
paybot_pool_create |
创建一个具有可选共享资金的进程内机器人池 |
paybot_pool_allocate |
将机器人添加到池中,可以选择通过国库支付 |
paybot_pool_revoke |
从池中删除机器人 |
paybot_pool_status |
报告资金池和每个机器人的支出计数器 |
paybot_pay
| 参数 | 类型 | 注释 |
|---|---|---|
amount |
string | 美元金额(例如。, "0.05") |
recipient |
string | 收件人钱包地址(0x...) |
resource |
string | 您所支付内容的URL或描述 |
botId? |
string | 机器人标识符(默认为env) |
network? |
string | 网络CAIP-2 ID(默认值:Base Sepolia) |
token? |
string | 令牌自动收报机(默认值 USDC);例如。 USDC, EURC, DAI |
idempotencyKey? |
string | 使用相同键重复调用将返回缓存结果 |
薪酬平衡
| 参数 | 类型 | 注释 |
|---|---|---|
botId? |
string | 机器人标识符(默认为env) |
paybot_历史
| 参数 | 类型 | 注释 |
|---|---|---|
botId? |
string | 机器人标识符(默认为env) |
limit? |
number | 要返回的最大事件数(默认值:10) |
paybot_register
| 参数 | 类型 | 注释 |
|---|---|---|
botId |
string | 唯一机器人标识符 |
trustLevel? |
number | 初始信任级别0-5(默认值:1) |
idempotencyKey? |
string | 使用相同键重复注册返回缓存结果 |
paybot_list_networks_and_tokes
只读发现。不需要API密钥,并且不进行任何网络调用。表面 只有 公共 开放核心注册表——运营商专用主网地址为 从未显示(例如,EURC仅宣传其Base Sepolia测试网部署)。
没有参数。
paybot_健康_扩展
| 参数 | 类型 | 注释 |
|---|---|---|
botId? |
string | 机器人标识符(默认为env) |
退货 status, version, uptime, timestamp,加上任何额外的字段
主持人报告。
paybot_set_spending_limit
收紧代理人自身的限制。主持人强制执行操作员上限 并可能拒绝政策之外的放松尝试。
| 参数 | 类型 | 注释 |
|---|---|---|
botId? |
string | 机器人标识符(默认为env) |
maxTransactionUsd? |
number | 每笔交易的最高美元 |
maxDailySpendUsd? |
number | 每天最大美元支出 |
maxTransactionsPerHour? |
number | 每小时最大交易量 |
allowedRecipients? |
string[] | 收件人地址允许列表 |
paybot_任务_检查
| 参数 | 类型 | 注释 |
|---|---|---|
botId? |
string | 机器人标识符(默认为env) |
status? |
enum | 按以下条件筛选分类账 pending |
startDate? |
string | 分类账开始日期(ISO 8601) |
endDate? |
string | 分类账结束日期(ISO 8601) |
limit? |
number | 最大分类账条目数(默认值:50) |
offset? |
number | 分类账分页偏移 |
paybot_pool_create
为此MCP会话创建进程内机器人池。财务会计是 记忆中;主持人仍然是权威的极限。
| 参数 | 类型 | 注释 |
|---|---|---|
poolId |
string | 此池的标识符(用于分配/撤销/状态) |
sharedDailyLimitUsd? |
number | 所有机器人的可选共享每日支出上限 |
paybot_pool_allocate
| 参数 | 类型 | 注释 |
|---|---|---|
poolId |
string | 池标识符 |
botId |
string | 要添加到池中的机器人标识符 |
trustLevel? |
number | 初始信任级别0-5 |
pay? |
object | 可选 { amount, recipient, resource, network?, token? } 以机器人身份付款 |
paybot_pool_revoke
| 参数 | 类型 | 注释 |
|---|---|---|
poolId |
string | 池标识符 |
botId |
string | 要删除的机器人标识符 |
paybot_pool_status
| 参数 | 类型 | 注释 |
|---|---|---|
poolId |
string | 池标识符 |
受控工具(之前决定/之后证明)
PayBot MCP可以包装 任何 工具——不仅仅是支付——所以这是一个危险的决定 在运行之前通过策略,一个不可逆的呼叫会暂停一个指定的人的呼叫 批准,每个结果都会在核心中留下明显的、可重放的痕迹 审计链。这是MCP工具调用的终止开关+黑匣子记录器。
运作原理
registerGovernedTool(server, def, client, opts) 是一个高级注册商。
每个包裹呼叫:
- 构建一个 行动意图 —
verb=工具名称,target_ref一 注册商在args上提供提取器(不透明、从不原始PII),params_hash=参数的规范(密钥排序)JSON的SHA-256,actor.subject_ref=配置的机器人id,channel: 'mcp'; - 调用核心
POST /actions/govern; - 根据判决采取行动:
- 允许 → 运行该工具,并附加
executed: params_hash=…, result_hash=…到输出,以便跟踪绑定意图→ 执行; - 否认 → does 不 奔跑;返回闸门原因;
- 待定 → (默认值
block模式)民意调查GET /approvals/:id与后退 直至批准/拒绝/过期或approvalTimeoutMs(默认120秒);上 批准它 重新验证params_hash与 需要获得批准 动作造型 在执行之前(TOCTU+交叉路线防御),然后运行 一次。 (return模式交还approval_id相反。)
- 允许 → 运行该工具,并附加
通过ACTION途径批准——强制执行,而不仅仅是建议。 暂停的动作 通过批准/拒绝
POST /actions/approvals/:id/approve(或.../deny) — 不 付款/approvals/:id/approve路由,其授权路径尝试 和解。审批行是 共享A5a商店,所以支付路线 approve仍然将其翻转为APPROVED因此,拦截器确实如此 不 信任一个赤裸裸的decision === 'APPROVED'.付款审批流程始终运行 结算并撰写state(SETTLE_FAILED/RESUME_CONTEXT_UNAVAILABLE对于一个动作);行动路线永远不会确定,并写“否”stateThe 拦截器执行 仅 当已批准的行 无结算state--礼物state被视为付款途径索赔和通话 失败关闭WRONG_APPROVAL_ROUTE(处理程序从不运行)。这将关闭 交叉路线危险,即一个人批准他们认为是付款的东西会 否则,授权代理人采取不可逆转的行动。
成本和寿命
治理增加 每个受管呼叫一次网络往返 (/actions/govern).
A. pending 行动中 block 模式仅在以下情况下保持打开状态 stdio会话
生命 --MCP stdio服务器是单会话,因此结束的会话会丢弃一个
阻塞等待。操作员从第二个终端(卷曲/仪表板)获得批准,
就像HITL支付演示一样。
安全属性
- 失败关闭。 如果治理无法实现(网络错误、超时、5xx、,
畸形身体)不可逆或未知的动作 拒绝
(
GOVERNANCE_UNREACHABLE)——一个遥不可及的州长从不默默地允许。 A.reversible工具可设置failOpen: true(仅演示方便;忽略 不可逆动词)。 - 风险等级由注册商(操作员代码)设置,而不是由模型设置。 一 代理不能自行声明其破坏性工具“可逆”
- 没有原始参数离开进程。 只有
params_hash以及提取器target_ref被送到核心;原始参数(连接字符串、PII)保持不变 当地。 - 没有旁路。 治理在注册时应用。注册的服务器 原始工具不受定义的约束——我们控制包装的东西,并制造 没有人声称拦截一切。
演示工具(默认关闭)
集 PAYBOT_ENABLE_DEMO_TOOLS=true 注册两个 嘲笑 受管工具:
| 工具 | 风险等级 | 效果 |
|---|---|---|
delete_database |
不可逆 | 模拟 --什么也不碰;暂停等待人工批准,然后返回一个标记的模拟确认 |
annotate_record |
可逆 | 模拟 --证明允许路径;直接流过 |
已发布的MCP服务器不得发布 delete_database 每个人的工具
代理,因此除非明确标记,否则这些将保持关闭状态 true.
看 docs/runbooks/governed-action-demo.md
对于精确录制的演示脚本(government→ 待定→ 批准→ 模拟执行→
可重放的审计证明)。
程序化使用
import { createMcpServer } from 'paybot-mcp/server';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = createMcpServer();
const transport = new StdioServerTransport();
await server.connect(transport);