关于 presign-guard wallet
presign-guard wallet 是面向 AI Agent 的 MCP 钱包服务,可在设定预算内支付 x402、MPP API 费用并发送代币。它通过签名检查、超限审批和付款响应检查控制风险。
主要功能
- 01按交易和每日预算限制支出
- 02支付 x402 与 MPP API 费用
- 03发送 USDC、ETH、POL 和 BNB
- 04签名前检查交易与地址风险
- 05超限时通过 Telegram 或仪表板审批
- 06检查付费 API 响应中的注入内容
适用场景
- 01让 Agent 在预算内调用付费 API
- 02通过手机审批超出限额的支付
- 03检查外部文本是否包含提示词注入
MCP 相关
作为 MCP 服务向兼容客户端提供钱包状态、服务搜索、支付、转账、文本检查和暂停支出等工具。可连接本地运行的钱包,亦可使用远程连接器。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://wallet.fizzl.eu/mcpclaude mcp add --transport http fizzl13-presign-guard-wallet https://wallet.fizzl.eu/mcp{"mcpServers":{"fizzl13-presign-guard-wallet":{"type":"http","url":"https://wallet.fizzl.eu/mcp"}}}在 Cursor 中打开{"servers":{"fizzl13-presign-guard-wallet":{"type":"http","url":"https://wallet.fizzl.eu/mcp"}}}在 VS Code 中打开{"mcpServers":{"fizzl13-presign-guard-wallet":{"type":"http","url":"https://wallet.fizzl.eu/mcp"}}}{"mcpServers":{"fizzl13-presign-guard-wallet":{"serverUrl":"https://wallet.fizzl.eu/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
详细介绍
presign-guard-wallet-mcp
一个为 AI Agent 设有支出限额的钱包,以 MCP 服务的形式提供。将其添加到 Claude Desktop、Claude Code、Cursor 或其他 MCP 客户端后,你的 Agent 就可以:
- 支付 x402 API 和 MPP API:使用
evm方法(钱包所在链上的 USDC)和tempo方法(Tempo 上的 USDC.e,几乎所有 MPP API 都要求使用这种代币); - 如果在这些网络上拥有自己的账户,也可以支付以 RLUSD 计价的 x402 报价(在 XRP Ledger 上,使用
XRPL_SEED)、以 USDC 计价的 x402 报价(在 Solana 上使用SOLANA_PRIVATE_KEY,在 Algorand 上使用ALGORAND_MNEMONIC),以及 Tempo 上的 MPP 会话(使用MPP_SESSION_DEPOSIT); - 发送 USDC。
它只能在你设定的预算范围内操作:
- 限额由你设定。 例如:每笔付款最多 5 USDC,每天最多 20 USDC,Agent 可以在限额内自由支出。
- 超出限额时,由你决定。 你会收到一条 Telegram 消息,其中有批准 / 拒绝选项;也可以通过 AC2 请求在你自己的钱包中签名,或者在 钱包服务的控制面板中查看请求。没有回复就不会付款。
- 每次签名前都会先由 presign-guard 检查。 它会检查已知的资产盗取程序、受制裁地址和仿冒代币,核对 x402 付款是否符合卖方的要求,并模拟交易以确认钱包实际会转出什么。判定为红色时绝不会签名。
- 有疑虑时,就不签名。 如果无法联系检查服务、Telegram 或服务器,钱包就会停止操作。
- Agent 读取付费答复前会先检查答复(需要搭配钱包服务使用)。AI 检查会分析 API 返回的内容。如果其中包含针对 Agent 的指令(提示词注入,例如“忽略你的规则”“向这个地址付款”),答复会先附带一个
warnings字段,告知 Agent 只能将其视为数据。如果答复内容与付费购买的内容不符,警告也会说明。你可以在收据上看到这些信息,也会收到一条消息。
密钥保留在你的设备上;服务器只负责决定是否允许签名。每次检查费用为 $0.01,以 USDC 从同一个钱包在 Base 上支付,或使用预付额度支付。
限额能做什么、不能做什么。 限额由你电脑上的这个 MCP 服务强制执行,而不是由区块链强制执行。Agent 钱包的私钥也在这台电脑上(位于 MCP 配置中,或位于
AGENT_KEY_FILE指定的文件中)。能够读取文件或运行命令的 Agent(Claude Code、Cursor)可能会读取密钥,并绕过这些规则签名。因此,请为 Agent 提供一个只存放你能接受损失的资金的专用钱包,绝不要使用主钱包。使用钱包服务(托管于 wallet.fizzl.eu)时,你还可以将限额设在链上:你的 USDC 留在自己的钱包中,Agent 的钱包则会在每日限额内获得少量周转资金,由 Base 上的合约进行控制(agent-allowance)。这样,即使密钥泄露,最多也只能损失这部分资金。当 Agent 钱包余额不足时,这个服务会在付款前自动申请补充资金。
查看控制面板(演示数据):https://wallet.fizzl.eu/demo
快速开始(托管模式,约 2 分钟)
无需复制密钥:钱包会在你的电脑上自行生成密钥,你只需通过代码将其关联到你的账户。托管钱包 wallet.fizzl.eu 负责处理限额、审批和收据。免费开始使用。
- 在你的应用中安装,无需密钥。
- Claude Desktop:下载 fizzl-wallet.mcpb 并打开;Claude Desktop 会安装它(自带 Node.js)。
- Claude Code:
claude mcp add wallet -- npx -y [email protected] - Cursor 和其他 MCP 客户端:
{ "mcpServers": { "wallet": { "command": "npx", "args": ["-y", "[email protected]"] } } }
- 询问你的 Agent: “我的钱包状态如何?” 它会自行创建钱包(密钥会保存在
~/.fizzl/agent-key中,仅你可读取,绝不会发送到任何地方),并回复一个链接和一个 10 分钟内有效的代码。 - 打开链接,使用电子邮件、通行密钥、Xaman 或你的钱包登录 wallet.fizzl.eu, 然后输入代码。 为 Agent 命名。钱包会自动为钱包服务获取密钥;无需重启。
- 向 Agent 的钱包存入几美元的 USDC(仪表板上有相应按钮)。大多数调用的费用不超过 1 美分。然后询问类似 “找一个天气 API 并获取阿姆斯特丹的天气预报” 这样的问题。它会找到付费 API,在你的限额内付款,并向你显示收据。
然后在仪表板上连接 Telegram,以便在金额超过限额时通过手机审批;再点击 测试我的设置,查看还有哪些设置尚未完成。
更想自己粘贴密钥?在仪表板中,依次选择 Agents → Add agent,即可查看已填入密钥、适用于你应用的设置。更想自己运行所有内容?请参阅下方的设置。
在 ChatGPT、网页版或手机上的 Claude,或 Grok 中使用
这些应用无法运行本地 MCP 服务,因此会改用远程连接器:添加自定义连接器,URL 为 https://wallet.fizzl.eu/mcp,然后登录你的 Fizzl 钱包。应用随后可以搜索付费 API 并发起付款请求,但不会自行付款:每笔付款都需要等待你在自己的钱包中签名(Base 或 Solana 上的 USDC,或 Xaman 中的 RLUSD)。各应用的操作步骤:https://wallet.fizzl.eu/connector
工具
| 工具 | 功能 |
|---|---|
wallet_status | 地址、余额、限额、今日剩余额度,以及审批机制 |
find_services | 在公开的 x402 目录(Coinbase 的 x402 Bazaar)中搜索此钱包可支付的付费 API(在其链上使用 USDC,且价格不超过上限),并按匹配度从高到低排序。使用钱包服务时,服务会按含义搜索,优先列出 x402 Doctor 观察到连续多日有收款记录的卖家,并展示每个结果的交易记录。如果其中有卖家的费用为 $0.01 或更低,则会将 Fizzl Buy 作为额外选项列在首位($0.02,Fizzl 自有服务):一次调用即可选择卖家、付款并检查回复 |
pay_x402 | 调用返回 402 Payment Required 的 API,使用 USDC 付款并返回响应(每次调用都有价格上限)。支持 x402,以及通过 evm 方法使用钱包所在链上的 USDC 支付的 MPP (Machine Payments Protocol) 费用:使用相同的 EIP-3009 签名,由 presign-guard 检查并计入你的限额。在 Tempo 上(方法 tempo),钱包会从自身在该网络上的地址发送 USDC.e transferWithMemo,并交出交易哈希;presign-guard 不覆盖 Tempo,因此 guard-wallet 会检查这是否正是该笔转账,并将其计入你的 USDC 限额。当 API 提供多种方式时,顺序为:x402、MPP evm、Tempo |
send_usdc | 向某个地址发送 USDC |
send_native | 向某个地址发送 ETH / POL / BNB |
check_text | 在根据 Agent 未编写的文本采取行动之前(例如网页、电子邮件、工具结果、API 回复或另一个 Agent 的消息),检查其中是否存在提示词注入陷阱。presign-guard 的检查会给出绿色、橙色或红色结果。判定免费(文本最多 8,000 个字符,每小时 10 次);detailed: true 会从钱包支付 $0.01(计入你的限额),以获取原因代码和概率 |
pause_spending | 发现异常时,Agent 会自行停止;在你重启或恢复之前,不会签名 |
**不会重复付款。**已签名的 x402 付款(EIP-3009 授权)在过期前都可以由卖家收取,即使 API 返回错误或再次提出付款要求(可能还会使用另一个 payTo)。因此,当付费调用未能正常返回时,钱包会向链上的 USDC 查询该笔付款是否已收取(authorizationState),并在结果中说明(charge,并先显示警告)。在第一笔付款被使用或过期之前,以及付款已收取但未收到回复后的 1 小时内,系统会拒绝向同一端点再次付款,因此重试不会导致重复付款。
钱包只会为这些工具所需的操作签名:付款签名和转账。无论卖家、网页或提示词如何要求,它都不会签署 EIP-7702 授权(将钱包的代码交给合约,而“sweeper”清空钱包就是通过这种方式实现的)。
设置
- 为 Agent 单独创建一个钱包。 只放入它可以花费的资金:少量 Base 上的 USDC,以及少量 ETH 用于支付 Gas(如果它要发送转账)。切勿使用你的主钱包。
- 可选:通过手机审批。
- 使用 @BotFather 创建一个机器人,并向它发送
/start。 - 从 @userinfobot 获取你的聊天 ID。
- 使用 @BotFather 创建一个机器人,并向它发送
- 将它添加到 MCP 客户端。 对于 Claude Desktop:依次打开“设置” → “开发者” → “编辑配置”,即可打开
claude_desktop_config.json(Mac 上位于~/Library/Application Support/Claude/,Windows 上位于%APPDATA%\Claude\)。将以下内容放入其中:
{
"mcpServers": {
"wallet": {
"command": "npx",
"args": ["-y", "[email protected]"],
"env": {
"AGENT_KEY": "0x…the agent wallet's private key…",
"LIMIT_USDC_PER_TX": "5",
"LIMIT_USDC_PER_DAY": "20",
"TELEGRAM_BOT_TOKEN": "123456:ABC…",
"TELEGRAM_CHAT_ID": "123456789"
}
}
}
}
不想把密钥放在该文件中?将密钥放入只有你能读取的文件中,并设置 "AGENT_KEY_FILE": "/full/path/to/that/file",以替代 AGENT_KEY。
对于 Claude Code,密钥会在提示时输入到文件中(不会显示,也不会出现在 shell 历史记录或 Claude 的配置中):
mkdir -p ~/.fizzl && (umask 077; printf 'Agent wallet key: '; stty -echo; read -r k; stty echo; echo; printf '%s\n' "$k" > ~/.fizzl/agent-key)
claude mcp add wallet -e AGENT_KEY_FILE=$HOME/.fizzl/agent-key -e LIMIT_USDC_PER_TX=5 -e LIMIT_USDC_PER_DAY=20 -- npx -y [email protected]
固定版本(@0.29.0),如上所示:如果不指定版本,npx -y 会在每次启动时获取最新版本,而该代码可以读取密钥。发布版本通过 GitHub Actions 发布,并带有 npm provenance;npm audit signatures 会对此进行验证。
然后向你的 Agent 提出请求,例如:“检查我的钱包,然后获取 https://ichimoku-signal.fizzl.eu/signal/BTC-USDT 上的 BTC 信号”。
或者让它自行查找服务:“找一个价格低于 $0.10 的比特币趋势信号付费 API,并购买一次”。Agent 会使用 find_services 搜索 x402 目录,选择一项服务,并使用 pay_x402 在你的限额内付款。
所有 Agent 共用一个预算
运行 钱包服务,并在其控制面板上创建一个 Agent 密钥。它提供:
- 所有 Agent 共用一条价格规则和一个每日预算;
- 在控制面板和 Telegram 上审批;
- 活动日志。
然后使用以下变量替代 LIMIT_* 和 TELEGRAM_*:
"env": {
"AGENT_KEY": "0x…",
"WALLET_SERVER_URL": "https://your-wallet-server.example",
"WALLET_SERVER_KEY": "awk_…"
}
配置
| 变量 | |
|---|---|
AGENT_KEY | Agent 自有钱包的私钥(64 个十六进制字符,可带或不带 0x)。如果未设置,钱包会通过代码关联:它会自行生成密钥,每个工具都会返回一个代码,供你在钱包服务的控制面板中输入 |
AGENT_KEY_FILE | 用于替代 AGENT_KEY:存放密钥的文件路径(支持 ~/),这样密钥既不会出现在客户端配置中,也不会留在 shell 历史记录中。请确保只有你能读取此文件(chmod 600);否则服务端会发出警告。XRPL_SEED_FILE、ALGORAND_MNEMONIC_FILE 和 SOLANA_PRIVATE_KEY_FILE 也同样适用 |
LIMIT_USDC_PER_TX、LIMIT_USDC_PER_DAY | USDC 限额(付款和转账合并计算)。必须设置限额或使用钱包服务 |
LIMIT_NATIVE_PER_TX、LIMIT_NATIVE_PER_DAY | 原生币限额;如果未设置,发送原生币需要审批 |
ALLOW_LIST | 可选:仅允许向这些收款方、支出方和合约操作,使用逗号分隔(0x、XRPL r… 或 Algorand 地址,逐一检查);向其他对象付款或签名需要你的审批,就像超过限额的金额一样。使用钱包服务时,请在那里设置允许列表 |
TELEGRAM_BOT_TOKEN、TELEGRAM_CHAT_ID | 通过 Telegram 进行审批;如果未设置这些变量(或 AC2),任何超过限额的操作都会被拒绝 |
AC2_OWNER | 用于替代 Telegram:通过 AC2 使用你自己的钱包签名进行审批(Algorand Foundation 为 Agent 向所有者请求审批而设的协议)。填写你的 Algorand 地址:只有该地址的签名才能批准,且签名后的审批会与付款一同保存。需要在同一台计算机上运行 AC2 服务(ac2-cli),并与你的钱包配对(ac2 pair);如果服务未运行,任何超过限额的操作都不会签名。AC2_APPROVALS=on 会改用已配对钱包的地址。如果服务的 socket 不在 ~/.ac2/ac2d.sock,请设置 AC2_DAEMON_SOCKET |
WALLET_SERVER_URL、WALLET_SERVER_KEY | 使用钱包服务替代上述设置 |
FIZZL_DIR | 未设置 AGENT_KEY 时:钱包存放 agent-key 和(关联后)wallet-server.json 的位置(默认为 ~/.fizzl)。如果在一台计算机上运行多个 Agent,请为每个 Agent 使用单独的目录 |
LINKING | off:未设置 AGENT_KEY 时,不通过代码关联;服务端会以设置模式启动(列出其工具,并说明如何为每个工具添加密钥) |
CHAIN | base(默认)、ethereum、optimism、arbitrum、polygon 或 bsc |
MAX_PAYMENT_USD | 单次 pay_x402 调用可产生的最高费用(默认为 1);这是限额之外的额外上限 |
X402_DISCOVERY_URL | x402 目录,find_services 会在其中搜索(默认为 Coinbase 的 Bazaar discovery API) |
PRESIGN_CREDIT_KEY | 使用预付额度支付 $0.01 的检查费用(pgc_…) |
MANDATE / MANDATE_FILE | 可选:所有者签署的支出授权(x402 authority 草案),格式为 JSON { mandate, alg: "Ed25519", sig },或指向该授权的文件路径。之后,x402 付款会在此授权下进行(nonce 会携带其绑定信息),presign-guard 会拒绝任何超出授权范围的付款(超过 perPayment 或 cap、收款方或代币不同、已过期)。wallet_status 会显示此授权。使用钱包服务且未设置 MANDATE 时,会使用所有者在控制面板中为此 Agent 设置的授权(从服务端获取;服务端也会保存累计金额) |
RPC_URL | 你为该链使用的 RPC |
TEMPO | 设置为 off 可禁止在 Tempo 上付款(默认开启:MPP tempo 费用使用 Tempo 上的 USDC.e 支付,来自同一地址;请在该地址存入一些 USDC.e,它也会支付约 $0.001 的费用) |
TEMPO_CHAIN | 4217(Tempo,默认)或 42431(Moderato 测试网,使用 pathUSD 付款) |
TEMPO_RPC_URL | 你自己的 Tempo RPC(默认为 https://rpc.tempo.xyz) |
XRPL_SEED | 可选:Agent 自有 XRP Ledger 账户的种子(s…,单独账户,仅存入允许其支出的资金)。启用后,可在 XRP Ledger 上使用 RLUSD 支付 x402 报价,包括通过 t54 的 facilitator(XRPL AI Hub)进行支付。只会支付 Ripple 发行的 RLUSD,绝不会支付 XRP;此类付款计入 USDC 限额,每笔 Payment 都会先由 presign-guard 检查;如果某个 API 同时提供两种付款方式,会优先使用你链上的 USDC。账户需要有 RLUSD 信任线、RLUSD,以及少量用于支付费用的 XRP。授权模式下不会使用 |
SOLANA_PRIVATE_KEY | 可选:Agent 自有 Solana 账户(以 base58 编码的密钥,如钱包导出格式,或 solana-keygen 文件中的字节数组;单独账户,仅存入允许其支出的资金)。启用后,可在 Solana 上使用 USDC 支付 x402 报价:只会对 Agent 向卖方转账 USDC 的交易签名(无需 SOL,因为卖方的 facilitator 会支付网络费用);签名前,presign-guard 会检查交易(指令和模拟结果);此类付款计入 USDC 限额。如果某个 API 同时提供两种付款方式,会优先使用你链上的 USDC。授权模式下不会使用。需要 presign-guard-wallet 0.16+ |
SOLANA_NETWORK | mainnet(默认)或 devnet |
SOLANA_RPC_URL | 你自己的 Solana RPC(默认为公共 mainnet 或 devnet 节点) |
ALGORAND_MNEMONIC | 可选:Agent 自有 Algorand 账户(25 个单词的助记词;单独账户,仅存入允许其支出的资金)。启用后,可在 Algorand 上使用 USDC 支付 x402 报价:只会对 Agent 向卖方转账 USDC 的交易签名(绝不使用 ALGO,也不会执行关闭或重新设钥操作);卖方的 facilitator 会支付网络费用;此类付款计入 USDC 限额。如果某个 API 同时提供两种付款方式,会优先使用你链上的 USDC。账户必须已选择加入 USDC(ASA 31566704)。授权模式下不会使用。需要 presign-guard-wallet 0.12+ |
ALGORAND_NETWORK | mainnet(默认)或 testnet |
ALGORAND_ALGOD_URL | 你自己的 algod 节点(默认为 AlgoNode 的免费节点) |
MPP_SESSION_DEPOSIT | 可选:启用在 Tempo 上支付 MPP 会话(例如 presign-guard):首次调用某项服务时,会使用此存款金额(USDC.e)开通支付通道,之后每次调用都使用签名凭证,不会为每次调用单独发起交易;存款用完后,会按相同金额补充。每笔存款在签名时计入 USDC 限额;凭证只能支出已存入的金额。只要 API 提供会话,就会使用此功能。close_sessions 会关闭通道并退回未花完的存款。需要 presign-guard-wallet 0.11+ |
MPP_SESSION_FILE | 保存重启后仍需保留的未关闭通道的位置(默认为 ~/.presign-guard-wallet/mpp-sessions.json) |
XRPL_NETWORK | mainnet(默认)或 testnet |
XRPL_WS_URL | 你自己的 XRPL 节点(默认为 wss://xrplcluster.com) |
AGENT_LABEL | Telegram 和 AC2 审批请求中显示的名称(默认为 mcp-agent) |
| 一个 Telegram 机器人一次只能服务一个正在运行的服务,并且不能设置 webhook。要让一个机器人运行多个 Agent,请使用钱包服务。 |
使用代码关联
如果没有 AGENT_KEY(或 AGENT_KEY_FILE),钱包会自行完成设置:
- 首次调用工具时,钱包会在
~/.fizzl/agent-key(或FIZZL_DIR)中生成 Agent 钱包密钥,该密钥只有你可以读取。如果那里已有密钥,则会使用现有密钥。 - 钱包会仅凭该钱包的地址向钱包服务(
WALLET_SERVER_URL,默认为https://wallet.fizzl.eu)申请代码。输入代码之前,每个工具都会返回关联链接和代码。 - 登录控制面板后,输入代码并为 Agent 命名。系统会自动填入 Agent 的地址。
- 钱包会使用只有它持有的秘密令牌进行轮询,只向钱包服务获取一次密钥,将其保存在密钥旁边的
wallet-server.json中,之后无需重启即可正常工作。下次启动时,它会读取这两个文件。
没有该令牌,单凭代码毫无用处;代码和令牌的有效期都为 10 分钟。要在控制面板中移除 Agent,或将其关联到另一个账户?删除 wallet-server.json,然后再次查询钱包状态。
收据
每笔付款都会附带付款用途:pay_x402 的 URL,以及 Agent 提供的 reason(如果有)。使用钱包服务时,这些信息会显示在每笔付款的收据上,还包括:
- 金额和收款方;
- presign-guard 的签名判定;
- 批准记录;
- x402 结算信息;
- Agent 收到的返回内容:API 的响应(最多 16,000 个字符),以纯文本形式显示在收据上。
Telegram 批准请求也会说明付款用途。请在演示中查看收据:点击“Purchases”下方的购买记录。
拒绝操作时
工具会返回 Agent 可读取并转告你的错误。例如:
Not done (over_limit): 8 USDC is over the limit of 5 per transaction (denied by the owner);Not done (red): not signed: red (known_drainer)。Not done (orange): not signed: orange (SIMULATION_FAILS):模拟显示交易会失败,因此不会发送。
另有提供
- presign-guard-wallet:为你自己的 viem 代码提供相同的防护。
- presign-guard-agentkit:适用于 Coinbase AgentKit Agent。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。