PayPilot — AI Agent 支付副驾让 AI Agent 能自主花钱,同时让你随时知道它在花什么。Live Demo: https://dashboard-smoky-nine.vercel.appBuilt for Monad Blitz Hangzhou Hackathon — Agentic Payment Track这是什么当你把 AI Agent 接入真实世界,它需要花钱——调用付费 API、租 GPU 算力、买数据。但你不能给它一张无限额度的信用卡。PayPilot 是 Agent 和资产之间的那道门:Agent 通过 MCP 协议发起支付请求策略引擎实时审查每一笔:金额、收款方、类别、预算超过阈值的交易触发人工确认每一笔支付全链路写入审计日志Dashboard 实时可视化所有动态核心设计原则非托管 — 私钥永远在用户自己机器上,PayPilot 没有任何服务器存储你的私钥。Agent 原生 — 通过 MCP 协议接入,Claude Code / Codex / Manus 一行配置即用,Agent 看不到私钥,只能描述支付意图。策略优先 — 支付在执行前必须通过 9 道有序检查,任意一道失败直接拒绝。全链路可审计 — 每笔支付不管成功还是被拦截,都有完整的决策追踪记录。快速上手1. 安装依赖npm install
cd dashboard && npm install && cd ..2. 导入私钥(两种方式)方式一:Dashboard UI(推荐)启动服务后打开 http://localhost:5173,首次访问会看到设置页面,粘贴私钥即可。方式二:命令行npm run dev:cli -- import-key交互式输入,自动派生钱包地址并写入 .env。3. 启动服务# 终端 1:后端 API
npm run dev:dashboard
# 终端 2:前端 Dashboard
npm run dev:dashboard-ui
# 终端 3:MCP Server(供 AI Agent 调用)
npm run dev:mcp4. 接入 AI Agent把 .mcp.json 放到你的项目根目录,重启 Claude Code,它就能调用 PayPilot 的支付工具了。{
"mcpServers": {
"paypilot": {
"command": "node",
"args": ["dist/src/mcp-server.js"],
"env": {
"WALLET_ADDRESS": "你的钱包地址",
"MONAD_RPC_URL": "https://testnet-rpc.monad.xyz/",
"AGENT_WALLET_MODE": "onchain"
}
}
}
}策略引擎每一笔支付按顺序经过 9 道检查,第一道失败直接拒绝:顺序检查项说明1agent_existsAgent 是否在 agents.yaml 中注册2agent_activeAgent 是否未被撤销3session_key_validSession Key 是否在 TTL 有效期内4recipient_whitelist收款方地址是否在白名单5token_allowedToken 是否被允许6category_allowed支付类别是否未被屏蔽7per_tx_budget单笔金额是否超限8daily_budget是否超出今日预算9human_approval是否需要人工确认策略在 config/policy.yaml 中配置,Agent 级别的覆盖在 config/agents.yaml 中配置,修改后重启生效。# config/policy.yaml 示例
budget:
max_per_tx: 0.5 # 单笔上限 0.5 MON
daily_limit: 2 # 日限额 2 MON
weekly_limit: 10 # 周限额 10 MON
approval:
require_human_above: 0.3 # 超过 0.3 MON 需要人工确认
whitelist:
tokens:
- symbol: "MON"
address: "0x0000000000000000000000000000000000000000"
recipients:
- address: "0x27cec129c8e635498a0736840c0bab2c68a9bcb8"
name: "Monad Testnet Faucet"MCP 工具说明Agent 可以调用以下三个工具:request_payment参数:agentId, taskId, recipientAddress, tokenSymbol, amount, category, reason
返回:status (success/rejected/approval_required), txHash, receiptId, policyChecks
大额支付两步流程:先不带 confirm 调用获取 approval_required,用户确认后再带 confirm: true 执行。check_balance返回当前钱包余额快照,包含 MON 和所有 ERC-20 代币余额。list_receipts返回最近的支付记录,包含每笔的完整策略检查结果。运行演示脚本一键跑完 8 个策略边界场景:npm run demo场景预期结果0.1 MON API 调用✅ 自动放行0.4 MON 大额支付✅ 触发审批后放行1 MON 超单笔上限❌ per_tx_budget 拦截付款给未知地址❌ recipient_whitelist 拦截personal_transfer 类别❌ category_allowed 拦截临时 Agent 超自身上限❌ 被 Agent 级限额拦截0.05 MON infra 支付✅ 自动放行未注册 Agent 支付❌ agent_exists 第一关拦截项目结构PayPilot/
├── src/
│ ├── mcp-server.ts # MCP Server,暴露 3 个工具给 AI Agent
│ ├── payment.ts # 核心协调器,策略检查→审批→执行→写 receipt
│ ├── policy-engine.ts # 9 道策略检查
│ ├── onchain-mode.ts # 链上支付(viem → Monad 测试网)
│ ├── mock-mode.ts # Mock 模式(开发测试用)
│ ├── receipt.ts # 审计日志(JSON + Markdown)
│ ├── dashboard.ts # Dashboard REST API(Express, port 4030)
│ └── cli.ts # CLI 管理工具
├── dashboard/ # 前端 Dashboard(Vite + React + Tailwind)
├── scripts/
│ └── demo.ts # 8 场景自动化演示脚本
├── config/
│ ├── policy.yaml # 全局策略配置
│ └── agents.yaml # Agent 配置与权限
└── .mcp.json # MCP 接入配置
环境变量PRIVATE_KEY= # 钱包私钥(hex,不含 0x 前缀)
WALLET_ADDRESS= # 钱包地址(自动派生,import-key 后自动填入)
MONAD_RPC_URL=https://testnet-rpc.monad.xyz/
AGENT_WALLET_MODE=onchain # 或 mock(默认)开发阶段可以用 AGENT_WALLET_MODE=mock,不需要真实私钥,策略引擎完整运行,交易不上链。技术栈链上交互:viem + Monad 测试网(chainId 10143)Agent 协议:MCP SDK(@modelcontextprotocol/sdk)后端:Node.js + Express + TypeScript前端:Vite + React 18 + Tailwind CSS + SWR策略配置:YAML审计日志:本地 JSON + MarkdownRoadmap浏览器钱包签名(MetaMask/Rabby),私钥不经过后端Telegram / 微信通知审批加密 Keystore,密码保护静态存储多签 / Guardian 恢复流式支付 / 微支付