An MCP server for AI agents to automate trading strategies on Uniswap DEX across multiple blockchains
The server defines 2 tools with explicit schemas and descriptions. Both tools have well-structured input parameters with types and descriptions, meeting the baseline for a functional MCP server. However, there are significant gaps in output documentation, error handling guidance, and parameter validation that prevent a higher score. The tool names are clear and action-oriented (getPrice, executeSwap), and parameter descriptions include context about chain IDs and token address formats. The main issues are: (1) no documented output schema for either tool, callers cannot know what fields to expect; (2) missing error handling guidance that would help LLMs recover from failures; (3) no confirmation/dry-run pattern for the irreversible executeSwap tool; (4) parameters lack explicit constraints (e.g., chainId enum values, slippageTolerance min/max bounds); (5) the amountIn/amountOut parameters are optional but their mutual exclusivity and relationship to tradeType is not clearly stated in descriptions.
Execute a swap on Uniswap with optimal multi-hop routing
Get a price quote for a Uniswap swap, supporting multi-hop routes
Output schemas not documented. Both tools return JSON responses, but neither has a documented schema specifying which fields are present, their types, or when they may be absent. LLMs cannot plan downstream calls without knowing what data they receive.
No error handling guidance. Tools may fail (e.g., 'No route found', zero balance, unsupported chainId, invalid token address), but error messages are raw exceptions without recovery hints. LLMs need to know: is this retryable? Should I ask the user? What's the fix?
No confirmation/dry-run for irreversible executeSwap. This tool modifies state on-chain (sends a real transaction). Agents can make mistakes. Missing a pre-execution confirmation or dry-run pattern risks accidental fund loss.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 55 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Parameter constraints not fully specified. chainId is a number with no enforced enum, description lists valid values but nothing prevents passing 999. amountIn/amountOut are optional strings with no format or range constraints. slippageTolerance has default 0.5 but no min/max bounds. deadline defaults to 20 with no units validation.
Mutual exclusivity of amountIn/amountOut not clearly documented. Both are optional, and parameter descriptions say 'required for exactIn/exactOut trades', but this is buried in descriptions and not enforced. An LLM could pass both or neither without explicit validation error.
getPrice description says 'Get a price quote' but does not specify what structure is returned or when to call it. Is it for discovery only? For planning? Can the LLM use its output directly in executeSwap? Missing context.