arb-dex-mcp

Live cross-DEX crypto prices for your AI agent — per-venue pool price, pool liquidity and the gross cross-venue spread on 6 EVM chains, read straight from on-chain pool state.

npm version npm downloads MCP Registry MIT license
BSCPolygonArbitrum BaseAvalancheOptimism

Venues: PancakeSwap (v2 + v3), Uniswap v3, SushiSwap, QuickSwap, Biswap, ApeSwap, BaseSwap, Trader Joe, Pangolin — every v2-style pool and every v3 fee tier separately, because a $12k 1% pool and a $19M 0.01% pool are not the same quote.

Nothing is modelled, estimated or backfilled. Every payload states its own block number and carries its own scope note, so an agent that quotes a figure also has the caveats attached to it. Works with no API key against a free hourly public snapshot.

Quickstart

Nothing to clone or build — your MCP client fetches the package. Requires Node 18+.

Claude Desktop

claude_desktop_config.json — macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\:

{
  "mcpServers": {
    "arb-dex": {
      "command": "npx",
      "args": ["-y", "arb-dex-mcp"],
      "env": {
        "RAPIDAPI_KEY": "your-rapidapi-key-here"
      }
    }
  }
}

Restart Claude Desktop; the six tools appear under the connectors icon. Drop the env block entirely to run keyless.

Claude Code

claude mcp add arb-dex --env RAPIDAPI_KEY=your-key -- npx -y arb-dex-mcp

# keyless
claude mcp add arb-dex -- npx -y arb-dex-mcp

Then /mcp to confirm it connected.

Cursor

~/.cursor/mcp.json (global) or .cursor/mcp.json (per project) — same JSON block as Claude Desktop above.

Any other MCP client

Command npx, args ["-y", "arb-dex-mcp"], transport stdio, optional env RAPIDAPI_KEY.

What comes back

Ask: "What is WBNB/USDT trading at on every BSC venue right now?" — measured live 2026-08-15, trimmed for width, nothing invented:

{
  "pair": "WBNB/USDT", "network": "bsc", "blockNumber": 116151268,
  "pricesByVenue": [
    { "venue": "pancake",       "surface": "v2", "feeBps": 25,  "price": 611.7347, "tvlUsd": 56834814.36 },
    { "venue": "biswap",        "surface": "v2", "feeBps": 10,  "price": 610.8278, "tvlUsd": 415733.94 },
    { "venue": "apeswap",       "surface": "v2", "feeBps": 20,  "price": 611.1244, "tvlUsd": 3659.06 },
    { "venue": "pancakeV3:1",   "surface": "v3", "feeBps": 1,   "price": 610.5684, "tvlUsd": 18596810.32 },
    { "venue": "pancakeV3:100", "surface": "v3", "feeBps": 100, "price": 609.1025, "tvlUsd": 12206.21 }
  ],
  "bestBuy":  { "venue": "pancakeV3:100", "price": 609.1025 },
  "bestSell": { "venue": "pancake",       "price": 611.7347 },
  "midSpreadBps": 43.22,
  "crossDex": { "grossSpreadBps": 0, "grossUsd": 0,
                "optimalInput": { "amount": 0, "token": "WBNB", "usd": 0 } },
  "liquidity": { "venues": 7, "totalTvlUsd": 80856857.67 }
}
Read the two spread numbers against each other. The raw mid spread is 43 bps and the gross capturable spread is 0. The 609.10 quote lives in a $12k pool; the size that would clear it moves the price past the gap before you get there. A tool that reported only the 43 bps would be handing an agent a number it cannot trade. This one reports both — optimalInput is where the honesty lands.

get_spreads returning "found": 0 is a real answer and it is the common one. Venues under $1,000 TVL are dropped outright, and ranking is by gross USD at the optimal size, never by headline basis points.

Tools

ToolWhat it answersAccess
get_chainsWhich chains are covered, their chain IDs, tokens and DEX venuesAny key · keyless returns the chain list only, and says so
get_pairsWhat is priceable on one chain: token universe, venues, pair syntaxAny key · keyless returns the measured subset, labelled
get_pricesOne pair's price at every venue holding a pool for it, plus reserves, TVL, fee tier and the cross-DEX spreadAny key
get_spreadsA whole chain's cross-venue dislocations, ranked by gross USD at the optimal sizeAny key for live: true · keyless serves the hourly snapshot
get_history_summaryWhat the measurement archive covers: rows, pairs tracked, chains seen, span, retentionAny key (free BASIC tier)
get_historyOne pair's per-venue price/liquidity series and gross spread over 24h / 7d / 30dPRO plan

What it will not do

Get a key

The paid tools call the API through RapidAPI using your own key. Five of the six tools work on the free tier — only the per-pair history series is gated.

PlanAdds
BASIC ($0)Live quotes on every chain, plus get_history_summary so you can size the archive before you buy it
PRO ($15/mo)get_history — the measured per-venue series for one pair, 24h window, 1000 calls/mo
ULTRA ($49/mo)No window limit and no history meter, plus depth/slippage and spread alerts
MEGA ($149/mo)Bulk paging over the complete archive for your own store

Subscribe on RapidAPI →

Configuration

Env varDefaultPurpose
RAPIDAPI_KEYYour RapidAPI key. Required for the paid tools.
ARB_DEX_TIMEOUT_MS45000Request timeout. A live full-chain sweep is a real on-chain read and can take ~30s.
ARB_DEX_FREE_BASE_URLproduction originOverride the free-surface host.
ARB_DEX_RAPIDAPI_HOSTmulti-chain-dex-prices-liquidity.p.rapidapi.comOverride the RapidAPI host.