Install
openclaw skills install waiaas-walletClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
Self-hosted crypto wallet daemon for AI agents. Send transactions, manage DeFi positions, enforce spending limits — without exposing private keys to agents. EVM + Solana unified API. 59+ MCP tools.
openclaw skills install waiaas-walletYour 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.
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.
| 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 |
--rpc-url for Forge, Hardhat, ethers.js — every tx goes through policy enginenpm 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.
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.
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.
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 metadatasend_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 hexlist_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)list_nfts — List owned NFTs (ERC-721/1155/Metaplex)get_nft_metadata — NFT metadata and attributestransfer_nft — Transfer NFT (requires approval tier)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 historyYou: 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)
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...
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": ... }
WAIaaS enforces a 3-layer security model:
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@waiaas/cli, @waiaas/sdk, @waiaas/mcpwaiaas/daemon:latesthttp://127.0.0.1:3100/admin (after daemon start)