MCP server for Avantis decentralized trading platform on Base chain, enabling trading position management, price feeds, and wallet operations
The server provides 10 tools with mostly complete input schemas and descriptions. Strengths: all tools have descriptions (ranging 50-800+ chars), input parameters are typed with Zod schema definitions visible in schema/index.ts, and many parameters have defaults and descriptions. Weaknesses: (1) descriptions lack actionable context about when to use each tool vs alternatives; (2) no output schemas documented for any tool, LLMs cannot infer what fields are returned; (3) no error handling guidance or recovery paths defined; (4) several high-risk tools (open_trade, close_trade) lack confirmation/dry-run patterns despite IRREVERSIBLE risk classification; (5) parameter descriptions are repetitive and sometimes unclear (e.g., '_type' parameter in open_trade uses confusing numeric string encoding '0'/'1'/'2'); (6) no tool annotations present (readOnlyHint, destructiveHint, idempotentHint); (7) response field naming inconsistencies not validated against tool parameters.
Close an existing trading position partially or completely by specifying the trading pair, position index, and optionally the USDC amount to close. If no amount is specified, the entire position will be closed using all available collateral. Allows flexible position management with partial closures or full position closure.
Retrieve ETH and USDC balances for the current user's wallet address on Arbitrum network. Returns both native ETH balance and USDC token balance with proper decimal formatting.
Get the latest trading history for a user's wallet address. Returns recent closed positions with details like PnL, leverage, fees, and trade information from the Avantis API.
Get comprehensive data for all available trading pairs including symbol, asset type, open status, leverages, pair index, fees, and open interest. Returns detailed information about all supported trading pairs on the platform.
Get ongoing trades and pending limit orders for a trader with real-time PnL calculations. Returns active positions and pending orders from the Multicall contract, including current prices and individual position profit/loss calculations. If no trader address is provided, uses the authenticated user's address.
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields. For example, open_trade likely returns a position ID that close_trade needs, but this dependency is invisible.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present. open_trade and close_trade are marked IRREVERSIBLE but lack confirmation patterns or dry-run support. Agents cannot safely reason about which operations are reversible.
Error handling is absent. No error messages guide LLM recovery. For example, if open_trade fails due to insufficient collateral or invalid leverage, the agent cannot self-correct without explicit error classification and actionable guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 75 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 51 | - | v1 |
Get the current market price for any supported asset pair through Pyth oracle. Returns real-time price data for trading pairs like BTC/USD, ETH/USD, etc. The asset parameter should be in the format 'ASSET/USD' (e.g., 'BTC/USD', 'ETH/USD').
Say hello
Open a new trading position on any supported trading pair (e.g., BTC/USD, ETH/USD) with customizable parameters: USDC collateral amount, leverage multiplier, take profit and stop loss levels, trade direction (long/short), order type (market for immediate execution, limit for specific price, or stop for trigger price), and slippage tolerance. Supports both immediate market orders and pending orders with specific execution prices.
Modify an existing trading position by adding or withdrawing collateral. Specify the trading pair, position index, amount in USDC, and type (0 to add collateral, 1 to withdraw collateral).
Update the take profit (TP) and stop loss (SL) levels for an existing trading position. Specify the trading pair, position index, and new TP/SL price levels.
Parameter descriptions lack constraint metadata. E.g., '_type' in open_trade says "'0' for market order, '1' for limit..." but these should be an enum (market|limit|stop) or numeric enum with named constants. String encoding '0'/'1'/'2' is error-prone and wastes LLM context parsing.
Tool descriptions lack action-oriented context. 'Open a new trading position...' lists parameters but does not explain WHEN to use this vs update_margin, what prerequisites exist (e.g., wallet must have balance), or what the return value contains. Descriptions should guide tool selection.
Response field naming cannot be verified, no output schemas provided. Risk: get_positions may return 'trader_address' but open_trade expects 'trader' as a parameter; mismatched naming forces the LLM to infer field mappings.
No pagination declared for get_history and get_positions. If these return large lists, responses could blow context windows. Descriptions should specify max result limits and whether pagination is supported.