Arb DEX

Precios de cripto en vivo entre DEX leídos del estado de los pools en cadena: precio por venue, profundidad de liquidez y spread bruto entre venues en BSC, Polygon, Arbitrum, Base, Avalanche y Optimism. Funciona sin clave, sin cuenta.

Documentación

arb-dex-mcp

Precios cripto en vivo entre DEX para tu agente de IA — precio de pool por venue, liquidez del pool y el spread bruto entre venues en 6 cadenas EVM, leídos directamente del estado on-chain del pool.

npm npm downloads provenance MCP Registry Indexed on TensorBlock MCP Index Listed on mcpservers.org license

Cadenas: BSC · Polygon · Arbitrum · Base · Avalanche · Optimism. Venues: PancakeSwap (v2 + v3), Uniswap v3, SushiSwap, QuickSwap, Biswap, ApeSwap, BaseSwap, Trader Joe, Pangolin — cada pool estilo v2 y cada nivel de comisión de v3 por separado, porque un pool del 1% con $12k y un pool del 0.01% con $19M no son la misma cotización.

Nada se modela, estima o rellena retroactivamente. Cada payload indica su propio número de bloque y lleva su propia nota de alcance, de modo que un agente que cita una cifra también tiene adjuntas las advertencias.

Funciona sin clave de API contra una instantánea pública gratuita por hora. Docs · npm


Inicio rápido

Nada que clonar o compilar. Tu cliente MCP descarga el paquete. Requiere 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"
      }
    }
  }
}

Reinicia Claude Desktop; las seis herramientas aparecen bajo el ícono de conectores. Elimina por completo el bloque env para ejecutar sin clave — el servidor igual se inicia y las herramientas de instantánea gratuita igual responden.

Claude Code

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

Sin clave:

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

Luego /mcp para confirmar que se conectó.

Cursor

~/.cursor/mcp.json (global) o .cursor/mcp.json (por proyecto):

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

Cursor → Settings → MCP muestra el servidor y sus herramientas una vez que el archivo se guarda.

Cualquier otro cliente MCP

Los mismos tres datos: comando npx, argumentos ["-y", "arb-dex-mcp"], transporte stdio, env opcional RAPIDAPI_KEY.


Pruébalo

Prompts reales y la forma real que devuelven. Los payloads a continuación se midieron en vivo el 2026-08-15; están recortados por ancho, pero nada está inventado.

1. "¿A cuánto se está negociando WBNB/USDT en cada venue de BSC ahora mismo?"

get_prices lee cada pool que contiene el par — pares v2 y cada nivel de comisión de v3 por separado — en un bloque indicado:

{
  "pair": "WBNB/USDT",
  "network": "bsc",
  "chainId": 56,
  "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:5",    "surface": "v3", "feeBps": 5,   "price": 610.6531, "tvlUsd": 4941099.44 },
    { "venue": "pancakeV3:25",   "surface": "v3", "feeBps": 25,  "price": 610.6304, "tvlUsd": 52534.35 },
    { "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 },
    "buyVenue": "-",
    "sellVenue": "-"
  },
  "liquidity": { "venues": 7, "totalTvlUsd": 80856857.67 },
  "source": "rpc"
}

Lee los dos números de spread uno contra el otro. El spread medio bruto es 43 bps — y el spread bruto capturable es 0. La cotización de 609.10 vive en un pool de $12k; el tamaño que realmente la ejecutaría mueve el precio más allá de la brecha antes de llegar. Una herramienta que reportara solo los 43 bps le estaría dando a un agente un número que no puede operar. Esta reporta ambos, y optimalInput es donde aterriza la honestidad.

2. "Muéstrame los spreads entre DEX en Base — ¿alguno es realmente capturable?"

get_spreads recorre toda una cadena y ordena por USD bruto al tamaño óptimo, no por puntos básicos de titular:

{
  "network": "base",
  "chainId": 8453,
  "scannedPairs": 11,
  "opportunities": [],
  "found": 0,
  "filters": { "minSpreadBps": 10, "minVenueTvlUsd": 1000, "minGrossUsd": 0.01, "limit": 5 },
  "ranking": "gross USD at the optimal trade size, NOT raw spread — a large spread with a tiny optimal size is not an opportunity",
  "scope": "GROSS cross-venue spread from live pool state, BEFORE gas, MEV and any slippage beyond the optimal size. Not a profit estimate and not trade advice. Venues below the liquidity floor are excluded because a spread against a dust pool is an artefact, not an opportunity.",
  "elapsedMs": 2847
}

found: 0 es una respuesta real y es la más común. Once pares escaneados, nada superó el umbral. Los venues con menos de $1,000 de TVL se descartan por completo. Cuando vuelven filas, cada una lleva capturable, warning y shallowestSideTvlUsd para que un número grande de puntos básicos no pueda engañar por sí solo. Esta herramienta le dirá a tu agente que no hay nada allí — que es el punto mismo de preguntarlo.

3. "¿Cuánto historial tiene realmente arb-dex y para qué cadenas?"

get_history_summary dimensiona el archivo antes de que lo consultes:

{
  "rows": 133,
  "rowsWithPairDetail": 103,
  "rowsByEra": { "digest-totals-only": 30, "top-list-pairs": 5, "full-sweep": 98 },
  "pairsTracked": 107,
  "firstAt": "2026-08-10T17:35:09.355Z",
  "lastAt":  "2026-08-15T20:54:34.417Z",
  "spanHours": 123.32,
  "chainsSeen": ["arbitrum", "avalanche", "base", "bsc", "optimism", "polygon"],
  "pairs": [
    { "chain": "polygon",  "pair": "WBTC/USDC", "observations": 103, "qualifiedObservations": 39 },
    { "chain": "bsc",      "pair": "BTCB/USDT", "observations": 99,  "qualifiedObservations": 15 },
    { "chain": "arbitrum", "pair": "ARB/USDC",  "observations": 98,  "qualifiedObservations": 0 }
  ]
}

La cobertura es solo lo que se midió. Una brecha sigue siendo una brecha — rowsByEra dice cuánto detalle lleva cada era de filas, y ARB/USDC teniendo 98 observaciones pero 0 calificadas es el archivo diciéndote que ese par nunca ha superado el umbral de spread.


Herramientas

HerramientaQué respondeAcceso
get_chainsQué cadenas están cubiertas, sus IDs de cadena, tokens y venues DEXCualquier clave · sin clave devuelve solo la lista de cadenas, y lo dice
get_pairsQué es cotizable en una cadena: universo de tokens, venues, sintaxis de paresCualquier clave · sin clave devuelve el subconjunto medido, etiquetado como tal
get_pricesEl precio de un par en cada venue que tenga un pool para él, más reservas, TVL, nivel de comisión y el spread entre DEXCualquier clave
get_spreadsLas dislocaciones entre venues de toda una cadena, ordenadas por USD bruto al tamaño óptimoCualquier clave para live: true · sin clave sirve la instantánea gratuita por hora
get_history_summaryQué cubre el archivo de mediciones: filas, pares rastreados, cadenas vistas, alcance, retenciónCualquier clave (incluido el nivel gratuito)
get_historyLa serie por venue de precio/liquidez de un par y el spread bruto entre venues en 24h / 7d / 30dPlan PRO — ver Planes

Las dos herramientas de historial leen el archivo de mediciones propio del servicio, así que responden la pregunta que las herramientas en vivo no pueden: si una dislocación persistió o fue una sola muestra. El muestreo es aproximadamente por hora, y las brechas nunca se interpolan ni se rellenan. Llama a get_history_summary primero para ver qué alcance existe antes de pedir una ventana.

Lo que no hará

  • Los spreads son brutos — antes de gas, MEV y deslizamiento más allá del tamaño óptimo. No es una estimación de ganancia ni consejo de trading.
  • Nunca fabrica una fila. Sin clave, get_chains, get_pairs y get_spreads responden desde la superficie pública gratuita y cada una lleva un campo limitation que nombra exactamente qué agregaría una clave. get_prices, get_history_summary y get_history devuelven un error explícito de clave requerida con el enlace de registro en lugar de una respuesta más pobre disfrazada de completa.
  • No ejecuta operaciones, no retiene fondos ni toca una billetera. Son datos de mercado de solo lectura.
  • Este paquete no incluye credenciales de ningún tipo. La clave es tuya y permanece en tu configuración.

Obtén una clave

Las herramientas de pago llaman a la API a través de RapidAPI usando tu propia clave.

  1. Suscríbete — hay un nivel gratuito: https://rapidapi.com/donnydev/api/multi-chain-dex-prices-liquidity
  2. Copia tu X-RapidAPI-Key desde el panel de RapidAPI.
  3. Ponla en RAPIDAPI_KEY en la configuración anterior — nunca en código y nunca en un commit.

Planes

Cinco de las seis herramientas funcionan en el nivel gratuito. Solo la serie de historial por par está restringida:

PlanAgrega
BASIC ($0)Cotizaciones en vivo en cada cadena, más get_history_summary para que puedas dimensionar el archivo antes de comprarlo
PRO ($15/mes)get_history — la serie medida por venue para un par, ventana de 24h, 1000 llamadas/mes
ULTRA ($49/mes)Sin límite de ventana ni medidor de historial, más profundidad/deslizamiento y alertas de spread
MEGA ($149/mes)Paginación masiva sobre el archivo completo para tu propio almacén

Llamar a get_history por debajo de PRO devuelve un error explícito tier_required que nombra el plan y la URL de actualización — no falla silenciosamente ni devuelve una serie vacía.

Configuración

Variable de entornoPredeterminadoPropósito
RAPIDAPI_KEYTu clave de RapidAPI. Requerida para las herramientas de pago.
ARB_DEX_TIMEOUT_MS45000Tiempo de espera de solicitud. Un barrido completo de cadena en vivo es una lectura on-chain real y puede tomar ~30s.
ARB_DEX_FREE_BASE_URLorigen de producciónAnula el host de la superficie gratuita.
ARB_DEX_RAPIDAPI_HOSTmulti-chain-dex-prices-liquidity.p.rapidapi.comAnula el host de RapidAPI.

Configúralas en el bloque env de tu cliente MCP (ver las configuraciones anteriores). .env.example se incluye en el paquete y documenta las mismas variables para ejecuciones locales desde un clon.

Prueba

La suite de pruebas no está en el tarball de npm — ejecútala desde un clon:

git clone https://github.com/donnywin85/arb-dex-mcp.git
cd arb-dex-mcp && npm install

npm run selftest                    # keyless: exercises the free fallbacks
RAPIDAPI_KEY=... npm run selftest   # keyed: exercises the paid routes

La prueba inicia el servidor sobre stdio y llama a cada herramienta contra la API de producción real — nada está simulado. Afirma sobre valores en vivo (número de bloque, precios por venue, conteos de pares escaneados), así que una ejecución que pasa es evidencia de que la ruta de datos funciona de extremo a extremo.

Enlaces

Licencia

MIT — ver LICENSE.