mcpField
O
Onchain Agent Wallets

Onchain Agent Wallets

本地服务
three.ws金融数据93 周前更新

关于 Onchain Agent Wallets

Onchain Agent Wallets 是面向 Solana 的 MCP 服务,可向 Agent 授予有额度限制的支出权限,而不必交出所有者密钥。链上代币委托限制支出,本地规则还可限制收款方、设置到期时间和确认门槛。

主要功能

  1. 01委托有链上上限的支出额度
  2. 02设置单笔和滚动每日限额
  3. 03限制收款方和 x402 主机
  4. 04暂停、撤销或提取资金
  5. 05查看余额和支出审计记录

适用场景

  1. 01为研究 Agent 提供有限的 API 支出额度
  2. 02要求较大转账经过确认
  3. 03撤销 Agent 额度并收回资金
  4. 04检查 Agent 支出及被拒交易

MCP 相关

该 MCP 服务提供创建和注资 Agent 钱包、设置防护规则、付款、管理委托及查看支出的工具。所有者操作可返回未签名交易,由所有者的钱包签名。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"nirholas-onchain-agent-wallets": {
"command": "npx",
"args": [
"-y",
"@three-ws/onchain-agent-wallets"
],
"env": {
"OWNER_SECRET_KEY": "<OWNER_SECRET_KEY>",
"OAW_NETWORK": "<OAW_NETWORK>",
"SOLANA_RPC_URL": "<SOLANA_RPC_URL>",
"OAW_STATE_DIR": "<OAW_STATE_DIR>",
"REQUIRE_CONFIRM": "<REQUIRE_CONFIRM>"
}
}
}
}
启动命令npx -y @three-ws/onchain-agent-wallets
需要配置的环境变量
OWNER_SECRET_KEY密钥Owner secret key, base58 or a JSON byte array. Optional: without it every owner action is returned as an unsigned transaction for Phantom, Solflare, Backpack, or a Ledger to sign.
OAW_NETWORKCluster: mainnet or devnet. Defaults to mainnet. State is kept per network, so a devnet rehearsal never touches mainnet agents.
SOLANA_RPC_URLHTTPS Solana RPC endpoint. Defaults to the public endpoint for the configured network; bring your own (Helius / Quicknode / Triton) for production.
OAW_STATE_DIRWhere agent keypairs, guardrails, and the spend ledger are stored. Defaults to ~/.onchain-agent-wallets, written 0600 inside a 0700 directory.
REQUIRE_CONFIRMRefuse to broadcast anything that moves value until the call is re-issued with confirm:true. Default true.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@three-ws/onchain-agent-wallets0.1.1

工具

14

收录的工具列表 · 更新于 2 周前

参数类型必填说明
idstring是用于命名 Agent 的短标识,仅限小写字母、数字和连字符。将用作链上金库种子。
mintstring否要支出的 SPL mint。默认为 USDC(主网上为 EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v)。
dailystring否防护规则:滚动 24 小时内的最高支出额,单位为代币。
labelstring否供你自己参考的易读名称。
ownerstring否你的钱包地址。省略时使用已配置的 OWNER_SECRET_KEY。传入此参数可将密钥保留在此设备之外,并在你的钱包中签名。
per_txstring否防护规则:单笔支出的最高金额,单位为代币。
secretstring否仅用于本次调用的所有者密钥,会覆盖 OWNER_SECRET_KEY。
confirmboolean否设为 true 才会实际构建并广播。否则仅返回摘要。
fee_solstring否发送给 Agent 的 SOL,用于支付其自身的交易手续费。默认值为 "0.02"。这是 Agent 自己持有的唯一金额。
allowancestring是链上额度上限,单位为整数代币(例如 "100")。未经新的批准,Agent 永远不能支出超过此额度的金额。
expires_atstring否防护规则:ISO 时间戳。超过此时间后,所有支出都会被拒绝。
allow_hostsarray否防护规则:仅允许通过 x402 向这些主机付款。包含子域名。为空表示不限制。
agent_secretstring否复用现有 Agent 密钥对(base58 或 JSON 数组),而不是生成新密钥对。
confirm_overstring否防护规则:超过此金额的支出需要人类明确设置 confirm:true。
allow_recipientsarray否防护规则:仅允许向这些地址转账。为空表示不限制。

详细介绍

onchain-agent-wallets

GitHub stars License Last commit PRs welcome AI agent friendly

为 AI Agent 提供一个真正的 Solana 钱包,而无需交出你的资金。

这是一个 MCP 服务,为任何 Agent 提供可支配额度,而不是私钥。资金仍留在你拥有的账户中。Agent 获得一项由 SPL Token 程序在链上设定上限的委托,并受到你控制的防护规则约束,还可以从该额度中支付 x402 API 费用。你只需一条指令即可撤销委托,并收回资金,无需征求 Agent 同意。

这里的一切都是真实的:真实的 SPL Token 委托、真实的 Solana、真实的 x402 结算。

阅读概览 · npm

此项目解决的问题

如今所有“Agent 钱包”的工作方式都一样:生成一个密钥对,交给 Agent,然后其中的一切就都归 Agent 所有。没有额度上限、没有允许列表、没有有效期,也无法收回,除非抢在 Agent 转移资金之前动手。人们只能让钱包里几乎不存钱,但这样 Agent 就什么实用的事情也做不了。

额度是一种更早出现、也更好的解决方案。资金永远不会转到 Agent 手中。Agent 只获得使用其中一部分资金的权限,而区块链会强制执行额度限制。

工作原理

   YOU (Phantom, Solflare, Ledger)
    │  owns the vault, holds the money, can revoke or withdraw at any time
    ▼
  ┌──────────────────────────────────────────┐
  │  vault token account                     │   derived from your address:
  │  owner    = you                          │   createWithSeed(you, "oaw1:<agent>")
  │  balance  = 500 USDC                     │
  │  delegate = the agent  ← capped at 100   │   SPL Token enforces this number
  └──────────────────────────────────────────┘
    ▲
    │  may spend up to the cap, and not one unit more
   AGENT (its own keypair, holds only fee SOL)

两个相互独立的防护层为你提供保护:

  1. 链上。 SPL Token 程序会检查 Agent 签名的每笔转账是否超过 delegated_amount,并在每次支出时扣减该额度。我们的代码无法提高额度。一次 revoke 操作即可将额度设为零。这是标准 Token 程序自带的功能,无需信任新的合约。
  2. 本地。 在此服务签署任何内容之前,都会应用你的规则:单笔交易上限、滚动 24 小时支出上限、收款方允许列表、x402 主机允许列表、有效期、暂停,以及强制要求人工确认的金额阈值。

Agent 自己的密钥对中只存有少量用于支付手续费的 SOL。即使密钥泄露,风险范围也仅限于剩余额度,而 revoke_agent_wallet 可通过一笔交易将其关闭。

安装

npm install -g @three-ws/onchain-agent-wallets
# or run it ad hoc
npx -y @three-ws/onchain-agent-wallets

设置

Claude Code:

claude mcp add onchain-agent-wallets -- npx -y @three-ws/onchain-agent-wallets

Cursor 或任何 MCP 客户端(mcp.json):

{
	"mcpServers": {
		"onchain-agent-wallets": {
			"command": "npx",
			"args": ["-y", "@three-ws/onchain-agent-wallets"],
			"env": {
				"OAW_NETWORK": "mainnet"
			}
		}
	}
}

启动时无需密钥。所有者操作会返回一笔未签名交易,供你的钱包签署;之后由 send_signed_transaction 广播。如果你希望由此服务代你签署,请设置 OWNER_SECRET_KEY。

变量默认值作用
OWNER_SECRET_KEY未设置所有者密钥,格式为 base58 或 JSON 字节数组。可选:不设置时,你可在 Phantom 中签署。
OAW_NETWORKmainnetmainnet 或 devnet。状态按网络分别保存。
SOLANA_RPC_URL公共端点你自己的 RPC。公共端点的速率限制很严格。必须使用 https。
OAW_STATE_DIR~/.onchain-agent-walletsAgent 密钥对、防护规则和支出记录的存储位置(权限为 0600,位于权限为 0700 的目录中)。
REQUIRE_CONFIRMtrue所有会转移价值的工具在没有 confirm:true 时都拒绝广播。

快速入门

为研究 Agent 提供 100 USDC 的支出额度,每笔交易最多 5,每天最多 20,并且只能用于一个 API:

create_agent_wallet
  id: "researcher"
  allowance: "100"
  per_tx: "5"
  daily: "20"
  allow_hosts: ["api.example.com"]
  confirm: true

fund_agent_wallet  id: "researcher"  amount: "500"  sol: "0.02"  confirm: true

现在,Agent 可以自行支出了:

pay_x402  id: "researcher"  url: "https://api.example.com/premium"  confirm: true
agent_pay id: "researcher"  to: "<address>"  amount: "2.50"  confirm: true

而你仍然掌握控制权:

agent_wallet_status  id: "researcher"      # live balances, remaining allowance, warnings
spend_log            id: "researcher"      # every spend AND every refusal, with reasons
set_guardrails       id: "researcher"  paused: true      # instant, free, no transaction
revoke_agent_wallet  id: "researcher"  withdraw: true  confirm: true   # on-chain kill switch

拒绝时会明确告知你触发了哪条规则:

{
	"ok": false,
	"error": "over_daily",
	"message": "20.5 would exceed the 20 daily cap (18 already spent)",
	"checks": [
		{ "check": "per_tx", "ok": true, "detail": "2.5 is within the 5 per-transaction cap" },
		{ "check": "daily", "ok": false, "detail": "20.5 would exceed the 20 daily cap (18 already spent)" }
	]
}

工具

托管(由你签名)

工具功能
create_agent_wallet生成 Agent 的密钥对、创建金库、委托有上限的额度并设置护栏。一次调用即可完成。
fund_agent_wallet将代币转入金库,并向 Agent 转入 SOL 以支付手续费。
approve_agent_allowance提高、降低或补充链上额度上限。此操作会替换之前的额度。
withdraw_from_vault取回资金。无论委托是否有效,均可操作。
revoke_agent_wallet紧急停止开关。可选择在同一笔交易中将余额全部转回。
send_signed_transaction广播由你的钱包签名的交易。

护栏

工具功能
set_guardrails设置 per_tx、daily、allow_recipients、allow_hosts、expires_at、confirm_over 和 paused。即时生效、免费,无需交易。

支出(由 Agent 签名)

工具功能
agent_pay在限额内向收款方发送代币。
pay_x402调用 x402 API,并从额度中付款。

可见性

工具功能
agent_wallet_status实时链上状态、护栏、24 小时和 7 天支出总额及警告。
list_agent_wallets列出所有 Agent 及其实时余额。
spend_log支出审计记录,包括拒绝记录。

部署

工具功能
deploy_agent_onchain为 Agent 铸造 Metaplex Agent Registry 身份,并将其付款地址写入链上属性。
export_agent_runtime导出在其他位置运行此 Agent 所需的 mcp.json 和身份卡。

护栏

规则效果执行方
allowanceAgent 在需要重新批准前可支出的总额SPL Token 程序,链上
vault balanceAgent 无法支出不存在的资金SPL Token 程序,链上
per_tx单笔支出的上限此服务
daily每滚动 24 小时的上限,根据本地账本计算此服务
allow_recipients仅允许向这些地址转账。留空表示不限制此服务
allow_hosts仅允许通过 x402 向这些主机付款。子域名继承规则。留空表示不限制此服务
expires_at超过此时间戳后拒绝所有支出此服务
confirm_over超过此金额的支出需要明确设置 confirm:true此服务
paused立即、免费地拒绝所有操作此服务

出问题时,这一区别至关重要。如果这台机器遭到入侵,本地规则可能被绕过,但链上额度仍然无法突破。因此,额度应设为足以让 Agent 工作的最小数额,并按需补充,而不是直接设为全部余额。

x402

pay_x402 会先在不付款的情况下探测端点,以便在资金转移前确定价格,并让护栏依据实际金额进行检查。随后,它会从金库中向 Agent 补入恰好所需的金额,完成付款,再让 Agent 的余额归零。

以下情况会拒绝付款:

  • 使用的链不是 Solana(no_solana_option)
  • 网络集群不匹配,例如使用 devnet 钱包支付 mainnet 价格(wrong_cluster)
  • 付款代币与额度的计价代币不一致(asset_mismatch)
  • 金额超过 max_price,即独立于现有护栏的单次调用上限(over_max_price)

如果端点不收费,内容会正常返回,且不会产生任何支出。

Agent 无法执行的操作

  • 无论收到什么提示词,都不能超出额度。额度由代币程序决定,而非模型。
  • 不能转移保险库、关闭保险库或更改其所有者。它不是所有者。
  • 不能阻止你提现,也不能阻止撤销授权。
  • 不能提高自己的额度。只有由所有者签名的 approve 才能做到这一点。
  • 不能触及你钱包中的其他任何资产。保险库是一个独立账户,只持有你存入其中的资产。

此行为已在 test/token-delegation.test.mjs 中得到验证。该测试会在进程内运行真实的 SPL Token 程序,并断言:剩余额度为 60 时,尝试支出 61 会在链上失败,而保险库中仍有 460。

在 devnet 上免费演练

OAW_NETWORK=devnet npx -y @three-ws/onchain-agent-wallets

状态按网络分别保存,因此在 devnet 上演练绝不会触及你的 mainnet Agent。

将其用作库

此托管模型基于纯粹的 @solana/web3.js 和 @solana/spl-token,无需 MCP 即可使用:

import { createVaultInstructions, readVault, spendableUnits } from '@three-ws/onchain-agent-wallets/lib/vault';

const { vault, instructions } = await createVaultInstructions({
	connection,
	owner: ownerPubkey,
	agentId: 'researcher',
	mint: usdcMint,
	delegate: agentPubkey,
	allowance: 100_000_000n, // 100 USDC
	decimals: 6,
});
// sign `instructions` with the owner, then:
const state = await readVault({ connection, vault });
console.log(spendableUnits(state)); // what the agent may spend right now

如果你想在其他运行时中使用相同规则,@three-ws/onchain-agent-wallets/lib/policy 可单独导出防护栏引擎。

测试

npm test

运行防护栏单元测试、x402 选择测试,以及针对真实 SPL Token 程序的委托集成测试。

相关项目

  • @three-ws/metaplex-agent-mcp 会将 Agent 身份铸造到 Metaplex Agent Registry 中。deploy_agent_onchain 将其用作库,而其 prepare_agent_mint 则是通过浏览器钱包进行铸造的途径。
  • three.ws 是这些 Agent 获得面孔、头像和家园的地方。

许可证

请参阅 LICENSE。

支持此项目

如果 onchain-agent-wallets 为你节省了时间,欢迎**在 GitHub 上为其点星**。星标能帮助其他开发者和 AI Agent 找到值得信赖的代码仓库,而且只需点击一下。

认识可能会用到它的人?在 X 上发布 · 分享到 Bluesky · 分享到 LinkedIn · 提交到 Hacker News · 分享到 Reddit

也为 AI Agent 而构建

编码 Agent 和 LLM 工具可直接读取此代码仓库:AGENTS.md、llms.txt、llms-full.txt。将 https://github.com/nirholas/onchain-agent-wallets 提供给 Agent,它就能获得所需的上下文。

同一作者的更多项目

贡献者

贡献者

Star 历史记录

Star 历史图表

three.ws 的一部分

three.ws 是一个面向拥有 Solana 钱包的 3D AI Agent 的平台,提供虚拟形象、技能市场、x402 支付和七十多个 MCP 服务。@three-ws/onchain-agent-wallets 是其中的一个软件包。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。