An MCP server for AI agents to interact with Aerodrome Finance DEX on Base chain
This server has moderate definition quality with inconsistent tool documentation. Tool names follow verb_noun conventions well (getTokenInfo, getPoolInfo, executeSwap), and descriptions are present for all 11 tools. However, critical gaps exist: (1) Parameter descriptions are minimal or generic, most lack actionable constraints, ranges, or format guidance; (2) No output schemas are documented anywhere in the code, forcing LLMs to infer response structures; (3) No error handling guidance beyond basic HTTP responses; (4) Parameter dependency documentation is missing (e.g., how 'stable' param affects which pools are queried, or what happens if tokenA/tokenB don't exist); (5) Security parameters like WALLET_PRIVATE_KEY are passed via environment but no clear documentation of permission scopes or audit trails. The server handles 9 read-only tools and 2 write tools (executeSwap, addLiquidity), but write tool descriptions lack confirmation/dry-run patterns. Per-tool inspection reveals that while naming is solid, descriptions average ~70 chars (below the 194-char baseline for A+ tools), and no parameter has format constraints like min/max for amounts, enum validation for stable flag, or regex patterns for addresses.
Add liquidity to an Aerodrome pool
Execute a token swap on Aerodrome Finance
Get a list of all pools on Aerodrome (limited to first 100)
Get pool address for a token pair
Get information about a liquidity pool on Aerodrome
Get a price quote for swapping tokens with detailed route information
Get a price quote using REST API format
No output schemas documented. LLMs cannot infer what fields are returned from any tool, making downstream composition and error handling impossible. E.g., getPoolInfo returns {address, tokenA, tokenB, liquidity, fee, ...?}, entirely opaque to agents.
Parameter descriptions lack actionable constraints. E.g., 'Amount to swap (in human-readable format)' for amountIn provides no guidance on precision, minimum, maximum, or decimal places. No min/max bounds, no enum constraints for 'stable', no validation rules for token addresses (should be checksummed Ethereum addresses).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 47 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 44 | 2024-11-05+ | v1 |
Get a simple price quote for direct token swaps
Get information about the Aerodrome Finance MCP service
Get information about a token on Base chain
Get the balances of specified tokens for the wallet
Write operations (executeSwap, addLiquidity) lack confirmation/dry-run patterns or any indication of irreversibility. LLMs have no safeguard against accidental fund transfers or liquidity burns. No mention of slippage, reversal mechanics, or how to undo failed operations.
No error classification or recovery guidance. Errors are returned as generic HTTP responses with no indication of whether to retry, ask user, or escalate. E.g., if executeSwap fails mid-transaction, the agent does not know: was the swap partially applied? Is it safe to retry? Should the user be notified?
Redundant quote tools (getQuote, getQuoteSimple, getQuoteRest) create naming confusion. LLMs must reason about subtle differences (simple vs complex routing, REST format vs JSON-RPC) with insufficient documentation. Should consolidate to a single getQuote with optional routing_complexity param.
Parameter dependencies undocumented. E.g., 'stable' flag behavior is opaque, does it restrict pools to stable swaps only? What if no stable pool exists for a pair? Parameter descriptions do not explain conditional logic or fallback behavior.
No pagination return fields. getAllPools accepts 'limit' but does not describe return format (is there a total count? next_cursor? has_more boolean?). LLMs cannot determine if they retrieved partial results or need follow-up calls.
Tool composition gaps. getWalletBalances returns token balances but no chainable IDs. executeSwap accepts tokenIn/tokenOut as addresses, but no intermediate discovery tool clearly maps user intent ('swap AERO for USDC') to contract addresses. Agents must know addresses upfront or perform external lookup.
Security: WALLET_PRIVATE_KEY exposed in environment. While not a parameter, server.js logs 'WALLET_PRIVATE_KEY configured: Yes/No' which is a timing side-channel. No audit trail of swap/liquidity executions; no permission scopes declared; no rate limiting documented.
No idempotence guarantees for write tools. executeSwap and addLiquidity do not document whether repeated calls with identical params produce duplicate transactions or are safely retried. Critical for agent resilience.