DEX trading MCP server — autonomous token swaps on Base (Uniswap v3) & Solana (Jupiter) for AI agents
Strong tool naming (all verb_noun pattern) and comprehensive descriptions (avg 180 chars, within baseline 194). All 7 tools have input schemas with proper Zod validation and enum constraints for chain selection. Descriptions clearly state WHAT each tool does and WHEN to use it. However, output schemas are not explicitly documented in the source, responses are JSON-stringified but structure is inferred rather than formally declared. Error handling is present but minimal (generic try-catch). No tool annotations (readOnlyHint/destructiveHint) despite clear risk stratification (execute_swap is IRREVERSIBLE). Parameter descriptions are solid but lack format/range guidance for some fields (e.g., slippage_bps has min/max but no explanation of basis points in description text).
Execute a token swap on the DEX. Requires a wallet: set DEX_PRIVATE_KEY_BASE/DEX_PRIVATE_KEY_SOLANA or DEX_MNEMONIC. Always call get_swap_quote first to confirm the trade details. Returns the transaction hash and explorer URL.
Get a swap quote showing the expected output, price impact, route, and minimum received for a given trade. Always call this before execute_swap to verify the trade details. On Base uses Uniswap v3; on Solana uses Jupiter aggregator for optimal routing.
Get the token or native coin balance for any wallet address. For ERC20/SPL tokens provide the token contract/mint address. Omit token_address to get the native balance (ETH on Base, SOL on Solana). Omit wallet_address to use the configured wallet.
Get the current USD price of a token using on-chain DEX pricing. On Base, queries a USDC pair via Uniswap v3. On Solana, queries Jupiter price API. Use list_common_tokens to find token addresses.
Get the status of a transaction by hash. Returns confirmation status, block number, timestamp, gas used, and explorer URL.
Output schemas not formally documented. Responses are JSON-stringified but structure (fields, types, required vs optional) is not declared. LLMs cannot reliably extract fields for downstream tool chaining.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification. execute_swap is IRREVERSIBLE but not marked. Agents cannot distinguish safe reads from dangerous writes without parsing descriptions.
execute_swap lacks confirmation/dry-run pattern. Irreversible financial operations should support a preview step before execution to prevent agent mistakes.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Get the configured wallet address(es) used for trading. Returns addresses for all configured chains, or a specific chain if requested. Addresses are safe to share; private keys are never exposed.
List well-known tokens on the specified chain with their addresses, symbols, names, and decimals. Useful for finding token addresses to use in other tools.
Error handling is generic (try-catch with e.message). No recovery guidance. When get_token_balance fails, LLM receives 'Error fetching balance: ...' with no hint on whether to retry, check the wallet address, or call a different tool.
Parameter descriptions lack format/constraint details. slippage_bps has min/max in schema but description does not explain basis points (1 bps = 0.01%). deadline_minutes lacks guidance on typical values or consequences of short deadlines.