Zero-auth MCP server that reads Uniswap V1/V2/V3 reserves directly on-chain
Three well-named tools with clear, domain-specific descriptions (avg 180 chars). All tools have input schemas with typed parameters and descriptions. Naming follows verb_noun pattern (get_v*_reserves). Descriptions explain WHAT each tool does and WHEN to use it. However, output schemas are not documented, LLMs cannot predict return structure. No error handling guidance, no parameter constraints (e.g., fee must be one of 100|500|3000|10000), and no mention of prerequisites (RPC endpoint availability). Token symbol resolution is mentioned but not formalized as an enum. Missing idempotency and retry guidance for read-only operations.
Reads the on-chain ETH/token reserves of a token's Uniswap V1 exchange. Uniswap V1 pairs are always ETH<->token. `token` is a mainnet ERC20 contract address or a known symbol (e.g. "USDC", "DAI", "WBTC").
Reads the on-chain reserves of a Uniswap V2 pair via getReserves(). `token_a`/`token_b` are mainnet ERC20 contract addresses or known symbols (e.g. "WETH", "USDC").
Reads the on-chain reserves (pool token balances) of Uniswap V3 pool(s). `token_a`/`token_b` are mainnet ERC20 contract addresses or known symbols. `fee` is the fee tier in hundredths of a bip (e.g. 3000 = 0.3%); if omitted, all standard fee tiers (100, 500, 3000, 10000) are checked and every pool that exists is returned.
Output schemas not documented. LLMs cannot predict return structure (dict fields, types, nested objects). Breaks downstream tool chaining and forces agents to guess field names.
get_v3_reserves 'fee' parameter accepts any integer but should be constrained to enum [100, 500, 3000, 10000]. Free-form integers invite invalid values; enum makes valid options self-documenting.
No error handling guidance. If RPC endpoint is down, token address is invalid, or pair does not exist, LLMs receive raw errors with no recovery path. Should return actionable messages like 'Token not found. Verify address or try a known symbol (USDC, DAI, WBTC).'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | 2026-07-28+ | v2 |
Token symbol resolution (USDC → address) is mentioned in descriptions but not formalized. Should document that both 'USDC' and '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48' are accepted, or provide a separate resolve_token tool for discovery.
All tools are read-only but lack idempotency or retry guidance. Should document that these are safe to retry and have no side effects, enabling confident agent retry logic.