MCP server for Aqua0 Helm autonomous agent: real market snapshots, AI-driven portfolio decisions, on-chain execution via Circle wallets, and Aqua0 SwapVM integration.
aqua0-helm exposes 10 tools with explicit schemas and descriptions. Naming follows verb_noun patterns (market_snapshot, decide, prepare_join, run_tick). Descriptions are substantive (100-250 chars), explaining WHAT and WHEN. However, parameter descriptions are sparse or missing entirely, most params lack guidance on format, constraints, or valid ranges. Output schemas are undocumented; callers cannot predict response structure. Error handling is minimal; tools throw generic errors without recovery guidance. Security is a concern: helm.signup and helm.run_tick perform irreversible on-chain operations but lack confirmation patterns or dry-run support. Composition is reasonable, tools chain logically (signup → set_mandate → run_tick → dashboard), but parameter naming inconsistencies (userId vs user, chainId vs chain) create friction.
Deep Aqua0 integration: prepare an LP commitment to an existing admin-curated Aqua0 strategy. The agent's risk-on allocation path. Returns EIP-712 typed data for the agent's SCA wallet to sign (Aqua0 validates strategy exists/active/on-chain/not-orphaned + balance).
Quotable Aqua0 SwapVM strategies on a chain, filtered by Aqua0's real invariants (non-zero reserves + admin-curated maker). Live api.aqua0.xyz.
Execute a REAL Aqua0 SwapVM swap on Base Sepolia and settle it on-chain. The treasury wallet is the taker: resolves a committed-liquidity strategy's order from public bytecode, quotes, prepares calldata, mints+approves the mock input token, sends the swap, and returns the on-chain tx hash + received amount (read from Transfer logs). Proves the full Aqua0 execution leg end-to-end. Optional targetHashPrefix pins a specific strategy.
Read a user's recent decisions + NAV history (what the agent has done so far).
The agent's core decision: given a mandate, an LLM (RedPill/Claude) classifies the market regime and proposes a target allocation with written rationale; a deterministic guardrail clamps it to the mandate. Returns the raw decision and the mandate-safe target.
Output schemas undocumented. Tools return complex objects (snapshot, decision, safeTarget, strategies, NAV history) but callers cannot predict field names, types, or nesting. LLMs must infer structure from trial-and-error.
Parameter descriptions missing or minimal. chainId, user, strategyHash, token, amount, targetHashPrefix lack guidance on format, constraints, or valid ranges. LLMs cannot validate inputs before calling.
Irreversible operations lack confirmation or dry-run. helm.signup (provisions real wallet + drips USDC), helm.run_tick (executes on-chain swaps), and aqua0.swap (sends real tx) can cause financial loss if LLM makes mistakes. No confirmation_request pattern.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Live market snapshot (real Coinbase BTC/ETH price + 24h realized-vol proxy + USYC APY).
Unified USDC NAV for a wallet across Arc (native USDC) + Aqua0 chains, computed from real on-chain balances.
Kick off ONE full autonomous tick for a user (real market -> RedPill decision -> mandate guardrail -> planner -> real on-chain execution -> NAV). Returns immediately because the full loop (LLM + on-chain) takes 1-3 min; poll helm.dashboard to see the recorded decision + NAV. Requires helm.signup + helm.set_mandate first.
Set the user's mandate (goal + risk limits). The agent runs unattended under this mandate.
Provision a real Circle developer-controlled SCA wallet for a user and seed it with a real on-chain Arc USDC drip from the treasury. Returns the agent wallet address.
Error handling is generic. Tools throw 'Error(message)' without categorizing as retryable, user-fixable, or fatal. No recovery guidance. LLM cannot decide whether to retry, ask user, or abort.
Parameter naming inconsistency. Some tools use userId, others use user; some chainId, others chain. Inconsistent naming forces LLM to reason about field mappings and increases error likelihood.