Skip to main content
Glama
nirholas

onchain-agent-wallets

by nirholas

onchain-agent-wallets

Dale a un agente de IA una cartera real de Solana sin darle tu dinero.

Un servidor MCP que le da a cualquier agente un límite de gasto en lugar de una clave privada. Los fondos permanecen en una cuenta que tú posees. El agente recibe una delegación que el programa SPL Token limita en cadena, más salvaguardas que tú controlas, más la capacidad de pagar APIs x402 con ese límite. Puedes revocarla con una sola instrucción y recuperar el dinero sin pedirle permiso al agente.

Nada aquí es simulado: delegaciones reales de SPL Token, Solana real, liquidación x402 real.

Lee la descripción general · npm

El problema que resuelve

Toda "cartera de agente" de hoy funciona igual: generas un par de claves, se lo das al agente, y ahora el agente tiene todo lo que hay en ella. No hay techo, ni lista blanca, ni caducidad, ni forma de recuperarla salvo competir con el agente para mover los fondos. La gente lo resuelve manteniendo casi nada en la cartera, lo que significa que el agente no puede hacer nada útil.

Un límite de gasto es la respuesta más antigua y mejor. El dinero nunca se mueve al agente. El agente obtiene permiso para gastar una parte, y la cadena hace cumplir esa parte.

Related MCP server: Slug Wallet

Cómo funciona

   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)

Dos capas independientes te protegen:

  1. En cadena. El programa SPL Token comprueba cada transferencia firmada por el agente contra delegated_amount y lo decrementa en cada gasto. Nuestro código no puede aumentarlo. Un solo revoke lo pone a cero. Esta es una característica estándar del programa de tokens, no un contrato nuevo en el que confiar.

  2. Local. Antes de que este servidor firme cualquier cosa, aplica tus reglas: límite por transacción, límite móvil de 24 horas, lista blanca de destinatarios, lista blanca de hosts x402, caducidad, pausa y un umbral de confirmación que obliga a un sí humano.

El propio par de claves del agente no contiene nada más que un poco de SOL para las comisiones. Si se filtra, el radio de explosión es el límite restante, y revoke_agent_wallet lo cierra en una sola transacción.

Instalación

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

Configuración

Claude Code:

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

Cursor, o cualquier cliente MCP (mcp.json):

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

No se requiere ninguna clave para empezar. Las acciones del propietario vuelven como una transacción sin firmar para que tu cartera la firme, que send_signed_transaction luego transmite. Si prefieres que este servidor firme por ti, establece OWNER_SECRET_KEY.

Variable

Valor por defecto

Qué hace

OWNER_SECRET_KEY

sin establecer

Clave del propietario, en base58 o como un array de bytes JSON. Opcional: sin ella, firmas en Phantom.

OAW_NETWORK

mainnet

mainnet o devnet. El estado se mantiene por red.

SOLANA_RPC_URL

endpoint público

Tu propio RPC. El público limita mucho la velocidad. Debe ser https.

OAW_STATE_DIR

~/.onchain-agent-wallets

Donde viven los pares de claves del agente, las salvaguardas y el libro de gastos (0600 en un directorio 0700).

REQUIRE_CONFIRM

true

Cada herramienta que mueve valor se niega a transmitir sin confirm:true.

Inicio rápido

Dale a un agente de investigación 100 USDC de poder de gasto, con un límite de 5 por transacción y 20 por día, y solo para una 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

El agente ahora gasta por su cuenta:

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

Y tú mantienes el control:

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

Una negativa te dice exactamente qué regla se activó:

{
	"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)" }
	]
}

Herramientas

Custodia (tú firmas)

Herramienta

Qué hace

create_agent_wallet

Genera el par de claves del agente, crea la bóveda, delega un límite, establece salvaguardas. Una sola llamada.

fund_agent_wallet

Mueve tokens a la bóveda y SOL al agente para sus comisiones.

approve_agent_allowance

Aumenta, reduce o rellena el techo en cadena. Reemplaza el límite anterior.

withdraw_from_vault

Recupera fondos. Funciona con o sin una delegación activa.

revoke_agent_wallet

El interruptor de apagado. Opcionalmente barre el saldo a casa en la misma transacción.

send_signed_transaction

Transmite una transacción que tu cartera firmó.

Salvaguardas

Herramienta

Qué hace

set_guardrails

per_tx, daily, allow_recipients, allow_hosts, expires_at, confirm_over, paused. Instantáneo, gratis, sin transacción.

Gasto (el agente firma)

Herramienta

Qué hace

agent_pay

Envía tokens a un destinatario, dentro de los límites.

pay_x402

Llama a una API x402, pagando desde el límite.

Visibilidad

Herramienta

Qué hace

agent_wallet_status

Estado en cadena en vivo, salvaguardas, totales de 24h y 7d, y advertencias.

list_agent_wallets

Cada agente, con saldos en vivo.

spend_log

El rastro de auditoría, incluidas las negativas.

Despliegue

Herramienta

Qué hace

deploy_agent_onchain

Acuña al agente una identidad del Registro de Agentes de Metaplex con su dirección de pago en los atributos en cadena.

export_agent_runtime

El mcp.json y la tarjeta de identidad necesarios para ejecutar este agente en otro lugar.

Salvaguardas

Regla

Efecto

Aplicada por

límite

Total que el agente puede gastar antes de una nueva aprobación

Programa SPL Token, en cadena

saldo de la bóveda

El agente no puede gastar lo que no está allí

Programa SPL Token, en cadena

per_tx

Gasto máximo individual

este servidor

daily

Máximo por 24 horas móviles, calculado desde el libro local

este servidor

allow_recipients

Solo estas direcciones pueden recibir fondos. Vacío significa sin restricciones

este servidor

allow_hosts

Solo estos hosts pueden ser pagados vía x402. Los subdominios heredan. Vacío significa sin restricciones

este servidor

expires_at

Todo gasto se rechaza después de esta marca de tiempo

este servidor

confirm_over

Gastos por encima de esto necesitan un confirm:true explícito

este servidor

paused

Todo se rechaza, instantáneamente y gratis

este servidor

La distinción importa cuando algo sale mal. Si esta máquina se ve comprometida, las reglas locales pueden ser eludidas, pero el límite en cadena no. Por eso el límite debe ser el número más pequeño que permita al agente trabajar, recargado según sea necesario, en lugar de todo el saldo.

x402

pay_x402 sondea el endpoint sin pagar primero, para que el precio se conozca antes de que se mueva cualquier cosa y las salvaguardas vean el número real. Luego recarga al agente exactamente con esa cantidad desde la bóveda, paga y deja al agente vacío de nuevo.

Se niega a pagar:

  • en una cadena que no sea Solana (no_solana_option)

  • en el clúster equivocado, por ejemplo un precio de mainnet desde una cartera de devnet (wrong_cluster)

  • en un token en el que el límite no está denominado (asset_mismatch)

  • por encima de max_price, un techo por llamada independiente de las salvaguardas vigentes (over_max_price)

Si el endpoint no cobra, el contenido vuelve y no se gasta nada.

Lo que el agente no puede hacer

  • Gastar más que el límite, sin importar cómo se le pida. El programa de tokens decide eso, no el modelo.

  • Mover la bóveda, cerrarla o cambiar su propietario. No es el propietario.

  • Evitar que retires fondos o que revoques.

  • Aumentar su propio límite. Solo un approve firmado por el propietario hace eso.

  • Tocar cualquier otra cosa en tu cartera. La bóveda es una cuenta separada que contiene solo lo que pones en ella.

Probado en test/token-delegation.test.mjs, que ejecuta el programa SPL Token real en proceso y afirma que un gasto de 61 contra un límite restante de 60 falla en cadena, con 460 en la bóveda.

Ensaya gratis en devnet

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

El estado se mantiene por red, así que un ensayo en devnet nunca toca tus agentes de mainnet.

Úsalo como biblioteca

El modelo de custodia es @solana/web3.js y @solana/spl-token simples, usable sin 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 exporta el motor de salvaguardas por sí solo, si quieres las mismas reglas en un runtime diferente.

Pruebas

npm test

Ejecuta las pruebas unitarias de salvaguardas, las pruebas de selección x402 y la prueba de integración de delegación contra el programa SPL Token real.

Relacionado

  • @three-ws/metaplex-agent-mcp acuña identidades de agente en el Registro de Agentes de Metaplex. deploy_agent_onchain lo usa como biblioteca, y su prepare_agent_mint es la ruta de cartera de navegador para acuñar.

  • three.ws es donde estos agentes obtienen caras, avatares y un hogar.

Licencia

Ver LICENSE.

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server providing policy-gated Solana access for AI agents, with read-only operations and guarded transfers that require policy checks and simulation, returning unsigned transactions.
    7
    MIT

View all related MCP servers

Related MCP Connectors

  • Native Solana staking for AI agents. 26 MCP tools, one-shot signing, webhooks.

  • Solana token risk-scoring MCP server for AI trading agents with insider wallet cluster detection.

  • MCP server connecting AI agents to non-custodial staking data across 130+ networks.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nirholas/onchain-agent-wallets'

If you have feedback or need assistance with the MCP directory API, please join our Discord server