WAIaaS Wallet
Self-hosted crypto wallet daemon for AI agents. Send transactions, manage DeFi positions, enforce spending limits — without exposing private keys to agents....
Like a lobster shell, security has layers — review code before you run it.
License
Runtime requirements
Install
npm i -g @waiaas/cliSKILL.md
WAIaaS Wallet — Self-Hosted Wallet for AI Agents
Your private keys should never live inside your agent process. If your agent is compromised, the attacker gets the keys. WAIaaS separates key custody into an isolated daemon with a policy engine that limits what any agent session can do.
What is WAIaaS?
WAIaaS (Wallet-as-a-Service for AI Agents) is a self-hosted local daemon that manages crypto wallets on behalf of AI agents. Unlike cloud wallet services (Coinbase CDP, Privy, Circle), WAIaaS runs entirely on your machine — no third-party API keys, no custodial risk.
Why use WAIaaS instead of raw keypairs?
| Approach | Key exposure | Spending limits | Human approval | Kill switch |
|---|---|---|---|---|
| Raw keypair in agent | Agent process holds key | None | None | Kill process |
| Cloud WaaS (CDP, Privy) | Third-party holds key | Varies | Varies | API call |
| WAIaaS | Isolated daemon holds key | Per-token, per-tx, cumulative | SIWE/SIWS/WalletConnect | Instant via Admin UI |
Key features
- Self-hosted: Local daemon, no third-party dependency
- Policy engine: Default-deny, token whitelist, per-token spending limits, cumulative caps
- Owner approval: High-value transactions require human signature (SIWE/SIWS/WalletConnect/D'CENT)
- Multi-chain: EVM (Ethereum, Base, Arbitrum, Polygon, Optimism) + Solana in one daemon
- 59+ MCP tools: Wallet ops, DeFi (swap/lend/stake/bridge/perp), NFT, x402, ERC-4337, ERC-8004
- Kill switch: Instantly freeze any wallet from Admin UI or API
- RPC proxy: Use as
--rpc-urlfor Forge, Hardhat, ethers.js — every tx goes through policy engine
Quick Start
1. Install and start the daemon
npm install -g @waiaas/cli
waiaas init # Create data directory + config.toml
waiaas start # Start daemon (sets master password on first run)
waiaas quickset --mode mainnet # Create wallets + MCP sessions in one step
The quickset command creates Solana + EVM wallets automatically, issues MCP session tokens, and outputs a ready-to-use MCP config snippet.
For testing, use waiaas quickset --mode testnet to create Solana Devnet + EVM Sepolia wallets.
2. Configure spending policies (recommended before connecting agents)
Set up spending limits and token whitelists via Admin UI at http://127.0.0.1:3100/admin. WAIaaS uses default-deny policy — agents cannot transact until policies are configured. This ensures human oversight before any agent gains financial capabilities.
3. Connect MCP server
Pass the session token via environment variable (do not hardcode tokens in config files):
# Set session token as environment variable
export WAIAAS_SESSION_TOKEN="<session-token-from-quickset>"
# Then configure OpenClaw MCP
openclaw config set mcpServers.waiaas.command "npx"
openclaw config set mcpServers.waiaas.args '["@waiaas/mcp"]'
openclaw config set mcpServers.waiaas.env.WAIAAS_SESSION_TOKEN "\${WAIAAS_SESSION_TOKEN}"
Or auto-register with all wallets:
waiaas mcp setup --all
Security note: Store session tokens in environment variables or a secrets manager, not in plaintext config files. Session tokens are time-limited JWTs and can be revoked from the Admin UI at any time.
Available MCP Tools (59+)
Wallet Management
connect_info— Self-discovery: wallets, policies, capabilities. Call this first.get_balance— Wallet balance (native + USD)get_address— Public addressget_assets— All held assets (native + tokens)get_wallet_info— Chain, address, environment, networksget_tokens— Registered tokens for a networkresolve_asset— Resolve CAIP-19 asset ID to metadata
Transactions
send_token— Send native (SOL/ETH) or tokens (ERC-20/SPL)call_contract— Call whitelisted smart contractsapprove_token— Approve spender (requires APPROVED_SPENDERS policy)send_batch— Atomic multi-instruction transaction (Solana)sign_transaction— Sign without broadcastingsign_message— Personal sign or EIP-712 typed datasimulate_transaction— Dry-run with policy evaluation, no side effectsencode_calldata— Encode EVM function call to hex
Transaction History
list_transactions— Outgoing transaction history (paginated)get_transaction— Single transaction detailslist_incoming_transactions— Incoming transfers (paginated, filterable)get_incoming_summary— Period-based incoming summary (daily/weekly/monthly)
DeFi (via Action Providers)
- Swap: Jupiter (Solana), 0x (EVM), DCent Aggregator
- Bridge: LI.FI cross-chain, Across Protocol
- Lending: Aave V3 (EVM), Kamino (Solana)
- Staking: Lido (ETH), Jito (SOL)
- Yield: Pendle yield trading
- Perp: Drift (Solana), Hyperliquid (10 tools)
- Prediction: Polymarket (8 tools)
NFT
list_nfts— List owned NFTs (ERC-721/1155/Metaplex)get_nft_metadata— NFT metadata and attributestransfer_nft— Transfer NFT (requires approval tier)
Advanced
x402_fetch— HTTP 402 automatic paymentwc_connect/wc_status/wc_disconnect— WalletConnect pairingbuild_userop/sign_userop— ERC-4337 Account Abstractionerc8004_*— ERC-8004 Trustless Agent identityerc8128_*— ERC-8128 Signed HTTP Requestsget_rpc_proxy_url— EVM RPC proxy for Forge/Hardhat/ethers.jslist_credentials/list_offchain_actions— Credential vault and off-chain history
Example Workflows
Check balance and send tokens
You: What's my wallet balance?
Agent: [calls connect_info, then get_balance]
> Your wallet holds 2.5 ETH ($4,250) and 1,000 USDC on Base.
You: Send 100 USDC to 0xAlice...
Agent: [calls simulate_transaction first, then send_token]
> Simulated: 100 USDC transfer, fee ~$0.02, policy tier AUTO_SIGN.
> Transaction sent! TX: 0xabc... (confirmed in 2s)
DeFi operations
You: Swap 500 USDC for ETH on Base
Agent: [calls action_0x_swap_quote, then action_0x_swap_execute]
> Swapped 500 USDC → 0.29 ETH via 0x aggregator. TX: 0xdef...
You: Supply 1 ETH to Aave on Arbitrum
Agent: [calls action_aave_supply]
> Supplied 1 ETH to Aave V3 on Arbitrum. Current APY: 2.1%. TX: 0xghi...
x402 automatic payment
You: Fetch the premium API at https://api.example.com/data
Agent: [calls x402_fetch — auto-pays if 402 response]
> Paid 0.01 USDC via x402. Response: { "data": ... }
Security Model
WAIaaS enforces a 3-layer security model:
- Session authentication: Agents use time-limited JWT session tokens. No master password exposure.
- Policy engine: Default-deny. Configure ALLOWED_TOKENS, CONTRACT_WHITELIST, SPENDING_LIMIT, RATE_LIMIT per wallet.
- Owner approval + Kill switch: High-value transactions require human signature. Instant wallet freeze via Admin UI.
Transaction tiers:
AUTO_SIGN— Within policy limits, auto-approvedTIME_DELAY— Delayed execution with notificationAPPROVAL— Requires owner wallet signature (SIWE/SIWS/WalletConnect)BLOCKED— Denied by policy
Links
- Website: https://waiaas.ai
- GitHub: https://github.com/minhoyoo-iotrust/WAIaaS
- npm:
@waiaas/cli,@waiaas/sdk,@waiaas/mcp - Docker:
waiaas/daemon:latest - Admin UI:
http://127.0.0.1:3100/admin(after daemon start)
Files
1 totalComments
Loading comments…
