Directory

Uniswap (Free)

TradingFREERoutes in chatBase

Uniswap v3 + v4 on Base, free and non-gated: live quotes across every fee tier (QuoterV2), spot prices, pool state, and deterministic swap-transaction building the user signs. Builds only — never holds keys, never submits. Rate-limited. By Yeetful.

Routability

can the router discover, pick, and call it?
98/100Alinted 7/14/2026, 11:03:04 AM
Param schemas
100% · w25
Descriptions
100% · w20
Live probe
100% · w15
Planner test
100% · w30
Affordances
80% · w10
14 checks
  • schema · 7 endpoints are planner-eligible
  • schema · param-schema coverage 7/7 endpoints (100%)
  • schema · typed params 19/19
  • schema · required flags present
  • description · 7/7 endpoint descriptions carry real intent
  • description · capability tags: crypto-price, defi
  • description · 3 example queries
  • probe · https://uniswap-mcp.yeetful.com/mcp → HTTP 200
  • planner · "What's the best price to swap 10 USDC for ETH on Uniswap right now?" → picked + constructed (tools/call)
  • planner · "Show me all available fee tiers and liquidity for the WETH/USDC pool on Base." → picked + constructed (tools/call)
  • planner · "Build me a swap transaction to exchange 5 DAI for USDC that I can sign with my wallet." → picked + constructed (tools/call)
  • affordances · identity params documented for context vars ($USER_ADDRESS)
  • affordances · no escape-hatch tool — every uncovered filter needs a new endpoint (whack-a-mole)
  • affordances · signing hygiene: build-don't-execute language (or no signables)

Suggested fixes

  1. Consider ONE guarded general-query tool exposing the backend's native query language (see snapshot-free graphql_query) so long-tail intents need no new endpoints.
Fix it with Claude Code

Paste this into Claude Code inside the MCP’s repo — it carries the failing checks, the fix list, and the conventions the router grades against.

You are upgrading the MCP service "Uniswap (Free)" so an AI router can reliably discover, choose, and call its tools. Pantessa's Reason Router just graded it 98/100 (A). I'll point you at the service's codebase; audit it against the findings below and implement the fixes.

## Failing checks
affordances (80%):
  - no escape-hatch tool — every uncovered filter needs a new endpoint (whack-a-mole)

## Fixes, in priority order
1. Consider ONE guarded general-query tool exposing the backend's native query language (see snapshot-free graphql_query) so long-tail intents need no new endpoints.

## The conventions to build to (what the router needs)
- **Param schemas on every tool/endpoint**: name, type, required-vs-optional, and a description per param. A router refuses to construct calls it cannot validate — schema-less endpoints are invisible.
- **Descriptions that carry user intent**: write what a USER would ask ('crypto spot price by symbol — price of ETH, BTC…'), never what the URL is. Include 2–3 example queries.
- **One guarded escape hatch instead of endless params**: if the backend has a native query language (GraphQL/SQL), expose ONE read-only general-query tool with strict guardrails (single read-only operation, allowlisted root fields, depth + page-size caps, response truncation) and a compact schema card in the tool description (root fields + useful filters + one example). Long-tail intents then need no new endpoints.
- **Declare user-identity params**: any param that should be the CALLER's own address (their votes, follows, balances, orders) must say so in its description ('the user's own wallet address') so routers can inject identity server-side instead of guessing.
- **Server-side joins for the headline intent**: if answering the #1 user question takes two chained calls (e.g. resolve follows → filter proposals), add one param that does the join server-side.
- **Build, don't execute**: anything signable returns an UNSIGNED payload (typed data / tx template) for the user's own wallet. Never hold keys, never sign, never submit on the user's behalf.
- **Free tiers still need rate limiting**: no payment gate means no natural throttle.

Start by reading the tool/endpoint definitions and their input schemas, then apply the fixes smallest-first. After each change, restate which failing check it clears.

Audit before you build: if a fix describes a capability the service ALREADY provides (e.g. an escape hatch or identity param that exists but the grader missed), do NOT duplicate it — say so, skip it, and note it back as a likely router-side scoring gap on Pantessa rather than an MCP deficiency. Only change what this service actually controls.

Tools

7
  • POST/mcp/quotestart here
    via Yeetful (free)uniswap-mcp.yeetful.com

    Live exact-in swap quote across every Uniswap v3 fee tier on Base (QuoterV2, no indexer lag). Returns buy amount, best fee tier, gas estimate, all tiers.

    3 parameters
    • sellTokenstringbodyrequired

      sellToken — symbol (USDC, WETH, UNI…) or 0x address on Base.

    • buyTokenstringbodyrequired

      buyToken — symbol (USDC, WETH, UNI…) or 0x address on Base.

    • amountstringbodyrequired

      Human sell amount, e.g. "100" or "0.05".

  • POST/mcp/price
    via Yeetful (free)uniswap-mcp.yeetful.com

    Current spot price for a token pair from the most liquid Uniswap v3 pool on Base. Both directions returned.

    2 parameters
    • baseTokenstringbodyrequired

      baseToken — symbol (USDC, WETH, UNI…) or 0x address on Base.

    • quoteTokenstringbodyrequired

      quoteToken — symbol (USDC, WETH, UNI…) or 0x address on Base.

  • POST/mcp/pool_info
    via Yeetful (free)uniswap-mcp.yeetful.com

    Uniswap pool state for a pair on Base: v3 pools per fee tier + canonical hookless v4 pools (liquidity, sqrtPrice, tick).

    2 parameters
    • tokenAstringbodyrequired

      tokenA — symbol (USDC, WETH, UNI…) or 0x address on Base.

    • tokenBstringbodyrequired

      tokenB — symbol (USDC, WETH, UNI…) or 0x address on Base.

  • POST/mcp/build_swap
    via Yeetful (free)uniswap-mcp.yeetful.com

    Build the exact swap transaction to sign: fresh quote → min-out with slippage bound → SwapRouter02 calldata + approve step + dry-run. Recipient is always the payer. Nothing signed or submitted.

    6 parameters
    • sellTokenstringbodyrequired

      sellToken — symbol (USDC, WETH, UNI…) or 0x address on Base.

    • buyTokenstringbodyrequired

      buyToken — symbol (USDC, WETH, UNI…) or 0x address on Base.

    • amountstringbodyrequired

      Human sell amount.

    • fromstringbodyrequired

      Payer's wallet address (always the recipient) — the USER's own address ("$USER_ADDRESS").

    • slippageBpsnumberbody

      Slippage bound in bps (optional).

    • deadlineSecnumberbody

      Tx deadline in seconds, 30–3600 (optional).

  • POST/mcp/build_wrap
    via Yeetful (free)uniswap-mcp.yeetful.com

    Build an ETH → WETH deposit transaction to sign.

    2 parameters
    • amountstringbodyrequired

      Human ETH amount.

    • fromstringbodyrequired

      Payer's wallet address — the USER's own address ("$USER_ADDRESS").

  • POST/mcp/build_unwrap
    via Yeetful (free)uniswap-mcp.yeetful.com

    Build a WETH → ETH withdraw transaction to sign.

    2 parameters
    • amountstringbodyrequired

      Human WETH amount.

    • fromstringbodyrequired

      Payer's wallet address — the USER's own address ("$USER_ADDRESS").

  • POST/mcp/convert_amount
    via Yeetful (free)uniswap-mcp.yeetful.com

    Convert a human token amount to atoms (decimals read on-chain). Utility for composing calls to other protocols.

    2 parameters
    • tokenstringbodyrequired

      token — symbol (USDC, WETH, UNI…) or 0x address on Base.

    • amountstringbodyrequired

      Human amount to convert.