Back to Browse

Aeron Wallet MCP Server

FinanceUse Caution2.3MCP RegistryLocal
Free

Server data from the Official MCP Registry

Non-custodial agent wallet for Robinhood Chain. Pays x402 requests in USDG.

About

Non-custodial agent wallet for Robinhood Chain. Pays x402 requests in USDG.

Security Report

2.3
Use Caution2.3Critical Risk

Valid MCP server (2 strong, 4 medium validity signals). 8 known CVEs in dependencies (1 critical, 5 high severity) Package registry verified. Imported from the Official MCP Registry.

9 files analyzed · 9 issues found

Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.

Permissions Required

This plugin requests these system permissions. Most are normal for its category.

file_system

Check that this permission is expected for this type of plugin.

Unverified package source

We couldn't verify that the installable package matches the reviewed source code. Proceed with caution.

What You'll Need

Set these up before or after installing:

https://rpc.mainnet.chain.robinhood.comOptional

Environment variable: RPC_URL

4663Optional

Environment variable: CHAIN_ID

0x5fc5360d0400a0fd4f2af552add042d716f1d168Optional

Environment variable: USDG_ADDRESS

~/.aeron/walletOptional

Environment variable: AERON_WALLET_DIR

unset. Overrides the stored key.Optional

Environment variable: AERON_WALLET_KEY

unset. Binds the whole process to one session.Optional

Environment variable: AERON_WALLET_SESSION

How to Install

Add this to your MCP configuration file:

{
  "mcpServers": {
    "io-github-aeronlabs-aeron-wallet": {
      "env": {
        "RPC_URL": "your-rpc-url-here",
        "CHAIN_ID": "your-chain-id-here",
        "USDG_ADDRESS": "your-usdg-address-here",
        "AERON_WALLET_DIR": "your-aeron-wallet-dir-here",
        "AERON_WALLET_KEY": "your-aeron-wallet-key-here",
        "AERON_WALLET_SESSION": "your-aeron-wallet-session-here"
      },
      "args": [
        "-y",
        "aeron-wallet"
      ],
      "command": "npx"
    }
  }
}

Documentation

View on GitHub

From the project's GitHub README.

aeron-wallet

A non-custodial wallet for agents. It holds USDG on Robinhood Chain and pays 402 Payment Required responses on its own, so an agent can call a metered API without a card, an account, or a human in the loop.

Ships two ways: a CLI, and an MCP server for Claude and other MCP clients.

Quickstart

npx -y aeron-wallet address

That prints your wallet address and creates a key on first run. Send USDG to that address, then pay for a call:

npx -y aeron-wallet pay https://inference.aeron.sh/v1/chat/completions \
  '{"model":"deepseek/deepseek-chat","messages":[{"role":"user","content":"hi"}]}'

The wallet reads the 402 challenge, checks it against your budget caps, signs an EIP-3009 transfer, and retries the request with the payment attached. You do not need ETH: the facilitator relays the transaction and pays gas.

Commands

CommandWhat it does
addressPrint the wallet address. Creates the key if none exists.
balanceETH and USDG balances, read from chain.
pay <url> [json]Call an x402 endpoint, paying if it answers 402.
historyThe last 10 payments, from the local log.
session createMint a scoped session: hosts, budget, per-call cap, expiry.
session listEvery session, what it spent, and whether it is still live.
session revoke <id>Kill a session. It stops paying on its next call.
mcpRun as an MCP server over stdio. The default with no arguments.

Install it in an agent

Claude Code

/plugin marketplace add aeronlabs/aeron-wallet
/plugin install aeron-wallet@aeronlabs

Cursor

Add to Cursor

Gemini CLI

gemini extensions install https://github.com/aeronlabs/aeron-wallet

VS Code

code --add-mcp '{"name":"aeron-wallet","command":"npx","args":["-y","aeron-wallet","mcp"]}'

Anything else that speaks MCP

{
  "mcpServers": {
    "aeron-wallet": {
      "command": "npx",
      "args": ["-y", "aeron-wallet", "mcp"]
    }
  }
}

Four tools: get_address, get_balance, pay, history. An unbound server also gets create_session, list_sessions, and revoke_session.

Sessions

A session is a scope you can hand to an agent without handing over the wallet. It names the hosts that may be paid, a total budget, a per-call cap, and an expiry:

aeron-wallet session create --host inference.aeron.sh --budget 0.25 --ttl 2h

That prints a token, once. Bind a server to it and every call through that server inherits the scope:

{
  "mcpServers": {
    "aeron-wallet": {
      "command": "npx",
      "args": ["-y", "aeron-wallet", "mcp"],
      "env": { "AERON_WALLET_SESSION": "<token>" }
    }
  }
}

A bound server deliberately has no session tools. An agent that could mint itself a wider session would not be contained by one. It also cannot reach a host outside the scope: the wallet refuses before the request goes out, so an agent talked into paying an attacker's endpoint never contacts it.

Revoking takes effect on the next call, including for a server already running, because the scope is re-read every time rather than captured at startup.

aeron-wallet pay --session <token> <url> applies a scope to a single call.

Sessions narrow the wallet; they never widen it. The caps below still apply underneath, so a $5 session on a $1/day wallet spends $1 a day.

Your key

The key is generated on your machine on first run and written to ~/.aeron/wallet/key with 0600 permissions. It never leaves the machine and nobody else can derive your address. Every install creates a different wallet.

Two consequences worth planning for:

  • Ephemeral containers. If $HOME is wiped between runs, the wallet regenerates and any USDG left on the old address is stranded. Mount a volume for ~/.aeron, set AERON_WALLET_DIR to a path that persists, or supply the key yourself with AERON_WALLET_KEY.
  • Hot wallet. The key sits unencrypted on disk so an agent can sign without a prompt. Keep the balance small. Fund it the way you would top up a prepaid card, not the way you would fund savings.

Budget caps

The wallet refuses to sign above either cap, so a loop cannot drain it.

VariableDefaultMeaning
MAX_PER_CALL_USD0.05Largest single payment.
DAILY_CAP_USD1Total for the current UTC day.

What a result means

A request that comes back 4xx is not one situation, it is three, and they differ in the only way that matters: whether the money left the wallet. The signal is the settlement receipt — a service that settled returns X-PAYMENT-RESPONSE with a transaction hash, and one that did not, does not.

statusChargedWhat happened
settledyesThe service answered. reason is set only in the bad case below.
rejectednoHTTP 402. The service refused the payment; the authorization is unspent.
failednoThe service returned an error and declined to charge — usually its own upstream failed.

The case worth naming: a settled row with a reason means the money moved and nothing came back. That is the only outcome where the wallet is out of pocket for nothing, so it is reported as itself rather than folded in with refusals that cost nothing.

Only settled counts against DAILY_CAP_USD. A refusal and an upstream failure leave the balance untouched, so neither eats into the cap.

reason quotes the service's own message when it gave one, instead of a generic phrase — an agent operator reading a log needs to know whether to retry, top up, or fix the seller.

Configuration

VariableDefault
RPC_URLhttps://rpc.mainnet.chain.robinhood.com
CHAIN_ID4663
USDG_ADDRESS0x5fc5360d0400a0fd4f2af552add042d716f1d168
AERON_WALLET_DIR~/.aeron/wallet
AERON_WALLET_KEYunset. Overrides the stored key.
AERON_WALLET_SESSIONunset. Binds the whole process to one session.

Releases

Published from a tag by GitHub Actions using npm trusted publishing, so no long-lived npm token exists to leak and every tarball carries a provenance attestation: proof of the commit and workflow it was built from. Verify with npm audit signatures after installing.

Where payments go

Payments settle on Robinhood Chain mainnet in USDG through the Aeron facilitator at x402.aeron.sh. The wallet works with any x402 endpoint on the same network, not only Aeron's.

More at aeron.sh/wallet.

Reviews

No reviews yet

Be the first to review this server!