
Purser
io.github.ahmad-codex由 GitHub 账号 ahmad-codex 发布v0.1.2更新于 Nov 3, 2026
面向AI代理的钱包,具备链上支出限额,超出限额需所有者批准
AI 翻译由 AI 模型根据下方的原文描述翻译,可能有误。
原文描述
Wallet for AI agents with on-chain spending limits and owner approval over the limit
概览
Purser 的本地 MCP 服务;无需登录;STDIO。
暂无 AI 概览:以下信息来自注册中心条目和服务本身。
安装
在 SourceWeft 中
- 打开 控制台中的 Purser,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
Purser
[ci] [License: MIT] [Solidity 0.8.28] [ERC-4337 v0.7] [MCP]
Give an AI agent a wallet without giving it your keys.
Purser is an ERC-4337 smart account where each agent gets its own session key with a policy: which contracts and functions it may call, how much it may spend per payment and per day, and until when. Payments inside the policy go through on their own. Anything over the limits waits for you to approve. An MCP server lets Claude, Cursor or any MCP client use the wallet, and a console shows budgets, spending and pending approvals as they happen.
Why
Agents are starting to pay for things: API credits, compute, data, subscriptions. Today that usually means one of two bad options:
- Hand the agent a private key. One prompt injection or bug away from an empty wallet.
- Approve every payment by hand. Safe, and it defeats the point of an agent.
Purser sits in between. The limits live in the contract, so they hold even if the agent, the server it runs on, or its key is compromised. The worst a leaked agent key can do is spend the rest of the current budget at allowed places, and burn some ETH on gas, until you revoke it or freeze the account, which takes one transaction. (A gas budget per key is on the roadmap.)
What's inside
How it works
- The owner grants an agent a session key with a policy: an allow-list of
(contract, function)pairs, a per-transaction cap and a per-period budget for each token (ETH or ERC-20), and a validity window. - The agent calls MCP tools such as
send_ethorcall_contract. The server dry-runs the call against the policy, signs a user operation with the session key and submits it. - The account checks the signature, the window, the allow-list and the per-transaction caps
during validation, so a disallowed operation fails before it costs anything. Budgets need
the block time, which ERC-4337 forbids in validation, so they are enforced in
executeUserOp. - Over the limit? The server turns it into an approval request. When the owner approves, the operation carries both the session signature and the owner's signature, and it runs without using the agent's budget. An approval raises the amount, never the scope: the allow-list still applies.
- The owner can revoke a key or freeze the whole account at any time. A revoke or freeze earlier in the same bundle still stops a later agent operation.
Try it in one command
You need Docker. Nothing to clone, nothing to install:
The container starts a local chain, deploys the EntryPoint, the factory and a fresh account with a seeded agent, and starts the MCP server and the console. Open http://localhost:8787 and watch: ten seconds later the agent story plays in the terminal while the console updates live.
The agent pays a merchant, pays in a token, buys from a shop contract, tries a payment over the limit (the approval request appears in the console), gets approved, is refused for a recipient that is not on its allow-list, and is stopped by the kill switch. Then the wallet stays up for your own agent. Everything uses Anvil's public development keys and is gone when you press Ctrl+C.
From a clone, docker compose up runs the same stack as separate services, and
docker compose run --rm demo plays the story against it.
Connect your own agent
With the demo running, point any MCP client at http://localhost:8787/mcp:
Then ask Claude: "Check the wallet status, then pay the merchant 0.01 ETH for API credits." Try "pay the merchant 0.3 ETH" to see an approval request show up in the console. docs/mcp-clients.md covers Claude Desktop, Cursor and stdio.
MCP tools
Each payment tool returns one of: done (with the transaction hash and the budget left), waiting for the owner (with the request id), or refused (with a reason the model can act on).
The policy
Granting a key again replaces its whole policy; old permissions do not leak into the new one.
Contracts
Built on the eth-infinitism reference EntryPoint v0.7 and OpenZeppelin 5. The factory deploys through the deterministic CREATE2 proxy, so it has the same address on every chain with the canonical EntryPoint.
Tests. 41 unit tests through a real EntryPoint, fuzz tests that check random payment and time sequences against a model of the budget, and invariant tests (about 16,000 random calls per run) for three properties: an agent never spends more than its budget per period without approval, a revoked key never moves funds again, and the policy never changes behind the owner's back. Slither runs in CI. See docs/security.md for the threat model.
Deployments. See docs/deployments.md.
Repository layout
Development
No Foundry installed? contracts/forge.sh forge test runs it from the official Docker image, and
scripts/local-up.sh falls back to Docker on its own.
To deploy to Base Sepolia or Sepolia, see docs/deployments.md: one script, and a faucet drip of under 0.01 ETH covers everything.
Status
Early, version 0.1.2. Not audited. Use testnets, and do not put real funds in an account you have
not reviewed yourself. What is planned next is in ROADMAP.md, and issues labelled
good first issue are a good place to start contributing.
Contributing
See CONTRIBUTING.md. Security reports go through private advisories, not issues.
License
来源:README.md,提交 088ec08
工具
0版本历史
1- v0.1.2最新Nov 3, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分