Agentic AQUA
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| lw_generate_mnemonicA | Generate a new BIP39 seed phrase for creating a Liquid wallet |
| lw_import_mnemonicA | Import a wallet from a BIP39 seed phrase (creates both Liquid and Bitcoin wallets from the same seed) |
| lw_import_descriptorB | Import a watch-only wallet from a CT descriptor |
| lw_export_descriptorA | Export the CT descriptor for a wallet (for watch-only import elsewhere) |
| lw_balanceA | Get wallet balance for all assets (L-BTC, USDT, etc.) |
| lw_addressB | Generate a receive address. Also returns qr_code_path: a PNG QR of the address — display it to the user so they can scan it. |
| lw_transactionsC | Get transaction history |
| lw_sendB | Send L-BTC to an address |
| lw_send_assetC | Send a Liquid asset (USDT, etc.) to an address |
| lw_sweepA | Sweep the entire L-BTC balance (or full balance of a specific Liquid asset) to one address. Fee is deducted from the inputs — leaves 0 sats of the targeted balance in the wallet. Use this whenever the user says 'send all', 'sweep', 'drain', 'empty wallet', or 'move everything' on Liquid. Asset sweep note: with |
| lw_tx_statusA | Get the status of a Liquid transaction. Accepts a txid or a Blockstream explorer URL (e.g. https://blockstream.info/liquid/tx/abc123...) |
| lw_list_walletsB | List all wallets |
| lw_list_assetsA | List known Liquid assets (asset_id, ticker, name, precision). Use this to resolve asset IDs for lw_send_asset without a prior balance query. |
| delete_walletA | Delete a wallet and all its cached data. IMPORTANT: The agent MUST check balances and ask for user confirmation before calling this tool. Use the 'delete_wallet' prompt for the safe workflow. |
| btc_balanceB | Get Bitcoin wallet balance in Satoshis |
| btc_addressA | Generate a Bitcoin receive address (bc1...). Also returns qr_code_path: a PNG QR of the address — display it to the user so they can scan it. |
| btc_transactionsA | Get Bitcoin transaction history |
| btc_sendC | Send BTC to an address |
| btc_sweepA | Sweep the entire Bitcoin balance to one address. Fee is deducted from the inputs — leaves 0 sats in the wallet. Use this whenever the user says 'send all', 'sweep', 'drain', 'empty wallet', or 'move everything' on Bitcoin. |
| btc_import_descriptorA | Import a watch-only Bitcoin wallet from a BIP84 descriptor. ONLY imports Bitcoin — to monitor the same seed's Liquid wallet, the user must separately import its CT descriptor with lw_import_descriptor (different derivation path + SLIP-77 key). |
| btc_export_descriptorA | Export the Bitcoin BIP84 descriptors + xpub for a wallet. ONLY returns Bitcoin — for the Liquid CT descriptor (different derivation path + SLIP-77 blinding key), use lw_export_descriptor. |
| unified_balanceA | Get balance for both Bitcoin and Liquid networks (unified wallet) |
| lightning_receiveA | Generate a Lightning invoice to receive L-BTC into a Liquid wallet (~1-2 min after payment). Limits: 100 – 25,000,000 Sats. Also returns qr_code_path: a PNG QR of the invoice — display it to the user so they can scan it. |
| lightning_sendA | Pay a Lightning invoice or Lightning Address using L-BTC from a Liquid wallet (reverse submarine swap). Fees: ~0.1% + miner fees. Limits: 100 – 25,000,000 Sats. |
| lightning_transaction_statusA | Check the status of a Lightning swap (send or receive). For receive: auto-claims L-BTC when settled. For send: checks Boltz status and retrieves preimage when claimed. |
| lightning_decodeA | Decode a BOLT11 Lightning invoice without paying it. Returns amount_sats (null for zero-amount invoices), description/message, and expiry_seconds. |
| changelly_list_currenciesA | List the currencies Changelly supports (Changelly's own asset id format). Useful for discovery; the agentic-aqua surface only enables the curated USDt-Liquid ↔ USDt-on-{ethereum,tron,bsc,solana,polygon} pairs for actual swaps. |
| changelly_quoteA | Get a fixed-rate Changelly quote for a USDt-Liquid ↔ USDt-on-X swap. Provide exactly one of deposit_amount or settle_amount as a decimal string. Use BEFORE changelly_send to confirm the price with the user. |
| changelly_sendA | Send USDt-Liquid out via a Changelly fixed-rate swap. Gets a quote, creates the order, and broadcasts the deposit from the local wallet. Refund address is set automatically (the wallet's own Liquid address). ALWAYS call changelly_quote first and confirm the price with the user. |
| changelly_receiveA | Receive USDt-Liquid via a Changelly variable-rate swap. Returns a deposit address on the source chain — the external sender pays to it. Settles to the wallet's Liquid address as USDt-Liquid. STRONGLY RECOMMEND passing external_refund_address. Also returns qr_code_path: a PNG QR of the deposit address — display it to the user so they can scan it. |
| changelly_statusA | Check the status of a Changelly swap order. Returns is_final / is_success / is_failed booleans. State machine: new → waiting → confirming → exchanging → sending → finished. Failure: failed, refunded, expired, overdue. |
| sideswap_server_statusA | Fetch SideSwap server status: live fees, minimum amounts, and hot-wallet balances. Call this BEFORE recommending a peg or swap so values reflect current SideSwap state. |
| sideswap_peg_quoteB | Quote the receive amount for a SideSwap peg (BTC ↔ L-BTC) at current fees (0.1% + ~286 sats Liquid claim fee on peg-in). Returns send_amount, recv_amount, fee_amount. |
| sideswap_peg_inA | Initiate a SideSwap peg-in (BTC → L-BTC). Returns a Bitcoin deposit address; the user (or btc_send) must send BTC to it. After 2 BTC confirmations (~20 min hot path; up to ~17 hours cold path for very large amounts), L-BTC arrives in the Liquid wallet. Recommended over a swap-market trade for amounts ≥ ~0.01 BTC: lower fee (0.1% vs 0.2%) at the cost of waiting. ALWAYS call sideswap_recommend first for large amounts so the user understands the trade-off. |
| sideswap_peg_outB | Initiate a SideSwap peg-out (L-BTC → BTC) and broadcast the L-BTC send. After 2 Liquid confirmations (~2 min) and the federation BTC sweep (typically 15–60 min total), BTC arrives at the user's Bitcoin address. Fees: 0.1% + Bitcoin network fee. Standard way to move L-BTC back to Bitcoin mainchain. |
| sideswap_peg_statusA | Check the status of a SideSwap peg order (peg-in or peg-out). Returns confirmations progress (X/Y), tx_state, lockup_txid, payout_txid when complete. |
| sideswap_recommendA | Recommend a peg vs an instant swap-market trade for a BTC ↔ L-BTC conversion. Surfaces the trade-off (lower fee but slower) and warns when the amount exceeds SideSwap's hot-wallet liquidity. ALWAYS call this for large conversions before initiating a peg. |
| sideswap_list_assetsC | List Liquid assets that SideSwap supports for atomic swaps (e.g. L-BTC, USDt, EURx, MEX, DePix). |
| sideswap_quoteA | Get a read-only price quote for a SideSwap Liquid asset swap (e.g. L-BTC ↔ USDt). Provide exactly one of send_amount or recv_amount. Use this BEFORE sideswap_execute_swap so the user can confirm the price. |
| sideswap_execute_swapA | Execute a Liquid atomic swap on SideSwap. Both directions are supported via send_bitcoins: True = L-BTC → asset (default), False = asset → L-BTC. The PSET returned by SideSwap is verified locally against the agreed quote BEFORE signing — the swap is aborted if the wallet's net balance change does not exactly match (refusing to sign protects against a hostile server). The fee tolerance is pinned to L-BTC, so on the asset → L-BTC direction the asset side is checked at strict equality. Order is persisted at every step for crash recovery. ALWAYS call sideswap_quote first and confirm the price with the user before invoking this tool. |
| sideswap_swap_statusA | Get persisted status of a SideSwap atomic asset swap. Once the swap is broadcast, pass the txid to lw_tx_status to track on-chain confirmations. |
| sideshift_list_coinsA | List the coins and networks SideShift supports for cross-chain swaps. Use to discover valid (coin, network) IDs for the other sideshift_* tools. |
| sideshift_pair_infoA | Get rate, min, and max for a SideShift pair (e.g. USDt-Liquid → USDt-Tron). Returns decimal-string rate / min / max in deposit-coin units. |
| sideshift_quoteA | Request a fixed-rate SideShift quote (~15 min TTL). Provide exactly one of deposit_amount or settle_amount as a decimal string. Use BEFORE sideshift_send to confirm the quote with the user. |
| sideshift_sendA | Send funds out via SideShift. Gets a fixed-rate quote, creates the shift, and broadcasts the deposit from the local wallet. Deposit chain MUST be 'bitcoin' or 'liquid'. Both legs must be in the curated allowlist (USDt on ethereum/tron/bsc/solana/polygon/liquid, or BTC on bitcoin) — mirrors AQUA Flutter's supported pairs. Set SIDESHIFT_ALLOW_ALL_NETWORKS=1 to bypass. A refund address is set automatically (the wallet's own deposit-chain address). For non-L-BTC Liquid assets (e.g. USDt-Liquid), the Liquid asset_id is auto-resolved from |
| sideshift_receiveA | Receive into the local wallet via a SideShift variable-rate shift. Returns a deposit address on the deposit chain — the user (or external sender) sends to it from any wallet. Settle chain MUST be 'bitcoin' or 'liquid'. Both legs must be in the curated allowlist (USDt on ethereum/tron/bsc/solana/polygon/liquid, or BTC on bitcoin) — mirrors AQUA Flutter's supported pairs. Set SIDESHIFT_ALLOW_ALL_NETWORKS=1 to bypass. STRONGLY RECOMMEND passing external_refund_address (the deposit-side sender's address) so a stuck shift can refund automatically. Also returns qr_code_path: a PNG QR of the deposit address — display it to the user so they can scan it. |
| sideshift_statusA | Check the status of a SideShift shift order. Returns the shift record plus is_final / is_success / is_failed booleans. |
| sideshift_recommendA | Recommend SideSwap vs SideShift for a cross-asset conversion. SideSwap when both legs are on Bitcoin/Liquid (atomic, lower fees); SideShift when at least one leg is on a non-Liquid chain (custodial, covers 30+ chains). |
| wapupay_exchange_ratesA | Get WapuPay's current exchange rates (e.g. USDT/ARS). Public — no login or API key. |
| wapupay_quoteA | Preview the USDT cost, fee, and exchange rate for an ARS payment without creating an order. Call BEFORE wapupay_create_order to confirm the price. Pass alias to validate the bank alias/CBU/CVU (see valid_cbu_alias in the response). |
| wapupay_create_orderA | Create a WapuPay order and get a Liquid USDT funding address. Creates the tentative (freezing the quote) and issues funding instructions. Returns address_destination (Liquid), asset_id (USDT), funding_amount_usdt, total_amount_usdt, total_funding_amount_base_units, funding_expires_at and a QR. Pay the TOTAL with lw_send_asset (amount = total_funding_amount_base_units); WapuPay then makes a P2P payer settle ARS to the bank account. Does NOT broadcast the payment itself — confirm the quote with the user first via wapupay_quote. |
| wapupay_fund_orderA | Issue (or re-issue) Liquid USDT funding instructions for an existing order. Use to recover an order created without funding, or to refresh the funding address before it expires. Returns the funding address + QR. |
| wapupay_order_statusA | Check a WapuPay P2P order's status (re-read from WapuPay). Returns is_final / is_success / is_failed. States: CREATED → FUNDING_ISSUED → EXECUTED. Terminals: EXPIRED, SETTLED_TO_BALANCE, FAILED.If it contains a |
| wapupay_ordersA | List locally-tracked WapuPay direct-fiat orders (recovery records on this device), most recent first — distinct from wapupay_transactions (WapuPay's server-side view). Each record carries the orchestrated swap's txids (funding/executed) and status for local tracking. |
| wapupay_transactionsA | List WapuPay transactions (scoped to the WapuPay account/key). |
| wapupay_transactionA | Get a single WapuPay transaction by id (UUID or numeric). It can be a funding (crypto), an executed fiat transfer or a refund (crypto) transaction. |
| wapupay_spending_limitA | Get the WapuPay account/key's monthly spending limit (USDT), based on KYC tier. |
| wapupay_provision_accountA | Provision a WapuPay API key via the user's JAN3 account so the other WapuPay tools work. Use when the user wants WapuPay but has no API key set. Requires a prior JAN3 login for the email (either flow: jan3_login then jan3_verify, or jan3_login_start then jan3_login_complete); calls the AQUA backend with that session, then stores the returned key locally (0o600) for all wapupay_* tools — the raw key is never returned, only a masked preview. The AQUA backend issues a fresh key on every call and invalidates the previous one (no grace period), so this only calls the backend when no key is configured yet: if one already exists (env var or stored) it is a no-op (already_configured=true) and never invalidates a working key. |
| qr_decodeA | Decode a QR code from an image file and return the raw string content. Supports Bitcoin addresses, Liquid addresses, Lightning invoices (BOLT11), and Lightning addresses. |
| jan3_loginA | Default JAN3 login (free, email-OTP): the backend emails a 6-digit OTP to the user's address. Prefer this over the paid captchaless fallback (jan3_login_start). Follow up with jan3_verify. |
| jan3_verifyA | Verify the OTP emailed by jan3_login and persist the JAN3 session for that email (multi-account, 0o600). Ask the user for the 6-digit code from their email. The result's next_step cues you to offer the user the Lightning Address opt-in (jan3_enable_lightning_address). |
| jan3_login_startA | Fallback JAN3 login (paid captchaless) — use only when the free jan3_login email-OTP flow isn't available for the account. Step 1: crafts a signed L-BTC tx funding AQUA's vault for the CAPTCHALESS_LOGIN price, POSTs it to /api/v2/auth/login/, and the server emails an OTP. Then call jan3_login_complete. |
| jan3_login_completeA | Step 2 of the paid captchaless login. Exchanges the OTP for JWT tokens and saves the session to ~/.aqua/jan3/{email}.json (0o600). Only token previews are echoed back — never the full tokens. The result's next_step cues you to offer the user the Lightning Address opt-in (jan3_enable_lightning_address). |
| jan3_session_infoA | Return non-sensitive info about a persisted JAN3 session (base_url, created_at, captcha_exempt, token previews). |
| jan3_list_sessionsA | List all persisted JAN3 sessions (metadata only, no tokens). |
| jan3_logoutB | Delete a persisted JAN3 session file. Idempotent. |
| jan3_user_infoA | Get the AQUA account profile (email, ln_username, fingerprint, feature flags). The ln_username field is the user's full Lightning Address as returned by the backend — surface it verbatim, never append a domain. Carries the LN-address state (ln_address_toggled, new_addresses_needed, fingerprint). When LN-address is active this auto-tops-up the unused-address pool (best-effort, under ln_address_pool). Requires a prior JAN3 login for the email. |
| jan3_enable_lightning_addressA | Enable or disable the user's Lightning Address. Ask the user first: enabling means JAN3/AQUA delivers inbound Lightning payments to their Lightning Address by handing out a batch of Liquid receive addresses this tool registers (received BTC lands on those stored Liquid addresses). On enable, the pool is populated immediately (best-effort, under ln_address_pool). Requires a prior JAN3 login. |
| jan3_rebind_walletA | Re-bind the account's Lightning Address to a different local wallet (the only path that passes override_fingerprint). DESTRUCTIVE: it moves inbound Lightning delivery to wallet_name and stops delivery to the previously-bound wallet. Use when the account is bound to a wallet you no longer have (new seed, old JAN3 account) or to switch which wallet receives funds. TWO-STEP HANDSHAKE — do NOT pass confirm=true first: (1) call with confirm=false to get a non-mutating preview (ln_username, current_fingerprint->new_fingerprint, warning), SHOW the warning and get explicit user consent; (2) only then call with confirm=true to execute. The ln_username shown is the Lightning Address (a user@domain), it isn't the account login email, never substitute one for the other.already_bound=true means it was a no-op. Requires a prior JAN3 login. |
| jan3_ln_check_usernameA | Check whether a Lightning username is free before buying it. Call before jan3_purchase_ln_username to avoid paying for a username that's already taken. Requires an active JAN3 session for the email. |
| jan3_purchase_ln_usernameA | Purchase / update the Lightning username for a JAN3 account with an on-chain payment (fund in L-BTC or USDt). TWO-STEP, do NOT pass confirm=true first: (1) call with confirm=false (default) to get a price quote WITHOUT spending — the server locks the price on that order; it returns display_amount (already formatted for the user, e.g. '2000 Sats' for L-BTC or '1.50 USDT' for USDt), amount_base_units (technical), amount, asset_ticker, payment_id and expires_at; SHOW display_amount to the user and get explicit consent; (2) only then call with confirm=true — it funds exactly the quoted order (same payment_id and amount) and errors if the quote expired (re-quote and re-confirm). When telling the user the price, use display_amount verbatim — never surface the raw amount/amount_base_units. Check availability first with jan3_ln_check_username. Requires an active JAN3 session (either flow). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| create_new_wallet | Create a new wallet with seed and optional at-rest password |
| import_seed | Import an existing wallet from a seed phrase |
| show_balance | Show my wallet balance (both networks by default) |
| bitcoin_balance | Show only Bitcoin balance |
| liquid_balance | Show only Liquid balance (all assets) |
| generate_address | Generate an address to receive funds |
| show_transactions | View transaction history |
| send_bitcoin | Send Bitcoin to an address |
| send_liquid | Send L-BTC or other Liquid asset |
| transaction_status | Check transaction status |
| list_wallets | Show all my wallets |
| export_descriptor | Export descriptor for watch-only wallet |
| delete_wallet | Safely delete a wallet with balance check and seed backup reminder |
| pay_lightning | Pay a Lightning invoice using Liquid Bitcoin (via Boltz submarine swap) |
| usdt_cross_chain_send | Send USDt-Liquid out to USDt on another chain via Changelly (e.g. USDt-Liquid → USDt-Tron). Walks through quote, confirmation, and broadcast. |
| usdt_cross_chain_receive | Receive USDt-Liquid from USDt on another chain via Changelly (e.g. USDt-Tron → USDt-Liquid). Returns a deposit address for the external sender. |
| peg_in | Move BTC to Liquid (BTC → L-BTC) via SideSwap peg-in |
| peg_out | Move L-BTC to Bitcoin (L-BTC → BTC) via SideSwap peg-out |
| swap_assets | Quote a Liquid asset swap (e.g. L-BTC ↔ USDt) via SideSwap (read-only) |
| cross_chain_send | Send funds from Liquid or Bitcoin to another chain via SideShift (e.g. USDt-Liquid → USDt-Tron, L-BTC → ETH) |
| cross_chain_receive | Receive funds from another chain into Liquid or Bitcoin via SideShift (e.g. USDt-Tron → USDt-Liquid, ETH → L-BTC) |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Quick Start Guide | Getting started with Agentic AQUA wallet management |
| Network Reference | Bitcoin and Liquid network details, address formats, and differences |
| Security Best Practices | How to safely manage wallets and private keys |
| What is WapuPay? | WapuPay overview: automated P2P ARS payouts funded with USDT on Liquid |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/jan3dev/agentic-aqua'
If you have feedback or need assistance with the MCP directory API, please join our Discord server