MCP Agentic Wallet — open-source session management for x402
LocalAbout MCP Agentic Wallet — open-source session management for x402
MCP Agentic Wallet is an open-source library and reference implementation for session-based USDC payments by AI agents. It uses one-time EIP-2612 Permit authorization and on-chain settlement on Base.
Key features
- 01Create wallet-authorized sessions
- 02Verify EIP-2612 Permit signatures
- 03Settle USDC calls on Base
- 04Apply allowance and deadline caps
- 05Revoke sessions and limit rates
Use cases
- 01Add paid tool calls to an MCP server
- 02Authorize agent payments with a wallet session
- 03Settle MCP usage in USDC on Base
MCP support
The core library integrates with MCP servers to authenticate session tokens and settle paid tool calls. It is designed to work with any MCP server.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEMCP Agentic Wallet
Open-source EIP-2612 Permit-based wallet sessions for AI agents. The reference implementation for paid MCP servers — verify signatures, manage sessions, settle on-chain. No API keys. No recurring charges.
What This Is
A human connects their crypto wallet, signs a one-time EIP-2612 Permit (gasless — no transaction fee), and receives a session token. AI agents use this token in MCP requests to pay for tool calls with USDC on Base. The server settles each call on-chain via transferFrom.
No API keys. No recurring charges. No per-call wallet signatures. The permit is the policy.
This is the reference implementation used by mcpvot.xyz — an x402 payment facilitator for MCP servers. The open-source core (@mcp-agentic-wallet/core) is framework-agnostic and works with any MCP server or Next.js app.
Quick Start
1. Install the core library
npm install @mcp-agentic-wallet/core viem
2. Use in your MCP server
import { InMemoryStore, settleCall } from '@mcp-agentic-wallet/core';
const store = new InMemoryStore();
// In your MCP tool handler:
const token = req.headers.get('Session-Token');
const session = store.getSession(token);
if (!session) return new Response('Payment required', { status: 402 });
// Consume budget ($0.005 = 5000 atomic USDC units)
const result = store.consumeBudget(token, 5000n);
if (!result.ok) return new Response('Insufficient budget', { status: 402 });
// Settle on-chain
await settleCall(session.humanAddress, 5000n, {
treasuryAddress: process.env.TREASURY_ADDRESS!,
hotWalletKey: process.env.HOT_WALLET_PRIVATE_KEY,
});
return Response.json({ result: 'your data' });
3. Run the reference server
git clone https://github.com/MCPVOT/mcp-agentic-wallet.git
cd mcp-agentic-wallet
npm install
cp .env.example .env.local # Configure your treasury + hot wallet key
npm run dev
Visit http://localhost:3000/wallet to connect a wallet and authorize a session.
How It Works
Human Server Agent
│ │ │
│── connect wallet ──────────►│ │
│── sign EIP-2612 Permit ───►│ │
│ (gasless, 1-time) │── verify signature ──────►│ (on-chain)
│ │── submit permit() ────────►│ (on-chain, gas)
│ │── create session ──────────┐│
│◄─ return session token ─────│◄───────────────────────────┘│
│ │ │
│ │◄── Session-Token header ────│
│ │── consume budget ───────────┐│
│ │── transferFrom() ──────────►││ (on-chain, gas)
│ │── return tool data ─────────┘│
│ │◄──────────────────────────────│
Core Library (@mcp-agentic-wallet/core)
| Class/Function | Description |
|---|---|
InMemoryStore | Session store (in-memory, pluggable for KV/Redis) |
verifyPermit() | Verifies EIP-712 Permit signature on-chain via viem |
settleCall() | Executes transferFrom(human, treasury, amount) on Base |
submitPermit() | Submits the permit() transaction to USDC contract |
checkAllowance() | Reads on-chain USDC allowance for an owner→spender pair |
checkRateLimit() | Simple rate limiter (per-wallet) |
toSessionInfo() | Converts session to safe client-facing info (no permit signature) |
Security
See SECURITY.md for the full threat model.
Key features:
- EIP-712 signature verification — server verifies every permit signature on-chain before creating a session
- Allowance cap — max $100 USDC per session (configurable)
- Deadline cap — max 30 days
- Rate limiting — 5 authorizations per wallet per hour
- Session revocation — humans can revoke anytime
- Settlement debt tracking — sessions suspended after 3 failed settlements
- Spender verification — EIP-712 verification inherently checks
spender === treasury
Documentation
- ARCHITECTURE — system diagram, payment flow, design decisions
- MCP Integration — step-by-step guide for adding to any MCP server
- Security Policy — threat model, attack vectors, production checklist
- Contributing — dev setup, guidelines, PR process
- Donations — support the project
Tech Stack
- EIP-2612 (Permit) — gasless approval via typed data signature
- EIP-712 — typed data signing and verification
- USDC (FiatTokenV2) on Base Mainnet (chainId 8453)
- viem — TypeScript Ethereum library
- Next.js — reference server implementation
- Model Context Protocol — MCP 2025-11-25 spec
Use Case: iRacing + Blockchain
MCPVOT uses this wallet to power on-chain sim-racing events:
- Host creates event — deploys an escrow smart contract on Base with entry fee + prize pool
- Drivers connect wallet — sign EIP-2612 Permit via this library, get a session token
- Drivers pay entry fee —
transferFromsettles the entry to the escrow contract - Race happens in iRacing — server polls iRacing Data API for finish order
- Smart contract auto-disburses — verified winners receive USDC/SOL from the prize pool
The iRacing MCP tools (get_race_results, lookup_driver, search_hosted_races) are available at mcpvot.xyz and use the same session-token flow for payment.
Configuration
| Env Var | Required | Default | Description |
|---|---|---|---|
TREASURY_ADDRESS | Yes | — | Address that receives USDC payments |
HOT_WALLET_PRIVATE_KEY | Yes | — | EOA private key for gas (never commit to git!) |
BASE_RPC_URL | No | https://mainnet.base.org | Base Mainnet RPC |
NEXT_PUBLIC_TREASURY_ADDRESS | Yes | — | Treasury shown in wallet UI |
License
MIT — see LICENSE
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.