Recon · API & MCP

Acceso programático de solo-lectura a los datos de inteligencia competitiva. Todo son endpoints GET; no hay escritura.

Autenticación

Pasa el API_TOKEN (definido en .env) por cabecera, de cualquiera de las dos formas:

Authorization: Bearer <API_TOKEN>
X-API-Key: <API_TOKEN>
Si API_TOKEN está vacío en el servidor, la vía token se deshabilita y solo entra la sesión del panel por cookie. La página /docs y /api/health son públicas; el resto exige token o sesión.

Endpoints base

MétodoRutaAuthQué devuelve
GET/api/healthpública{ ok: true } — prueba de conectividad
GET/api/dbtokenLista de colecciones con sus counts
GET/api/db/:collectiontokenFilas de una colección (paginado)
GET/api/export/:coll.:fmttokenDescarga .json o .csv de una colección

/api/db/:collection — parámetros

Respuesta: { collection, site, count, limit, offset, rows }.

Colecciones

presence
tournaments
leaderboard
caja
users
tournaments_liq
bots
activity
user_history

Endpoints analíticos

Vistas derivadas ya calculadas. Todas aceptan el token y el parámetro site.

RutaParamsQué devuelve
/api/presencesite, hoursSerie de conectados / mesas / manos
/api/heatmapsite, daysPromedio de conectados por hora×día (zona Caracas)
/api/tournaments/liquiditysiteHumanos vs bots e inscritos vs jugaron (no-show) por torneo
/api/bots-por-modosite% de bots por modo de juego
/api/tournaments/bot-by-hoursite% de bots por hora del día
/api/torneos-economiasite, daysPozos ofrecido/repartido, fees, nº torneos por día
/api/activitysite, limitPartidas/activos/nuevos por corrida de ranking
/api/whalessite, limitTop jugadores y su tendencia de actividad
/api/whale/:key/historysiteSerie temporal de un jugador
/api/users/statssitePadrón total + nuevos 24h / 7d
/api/users/newsite, days, limitÚltimos usuarios nuevos

Ejemplos (curl)

TOKEN=<API_TOKEN>   # está en tu .env

curl -s http://localhost:4000/api/health

curl -s -H "X-API-Key: $TOKEN" \
  http://localhost:4000/api/db

curl -s -H "X-API-Key: $TOKEN" \
  "http://localhost:4000/api/db/tournaments_liq?site=dominotrancao&limit=5"

curl -s -H "Authorization: Bearer $TOKEN" \
  "http://localhost:4000/api/tournaments/liquidity?site=dominotrancao"

MCP remoto (recomendado)

La propia API sirve el MCP. No hace falta clonar el repo ni instalar nada del proyecto: basta la URL y el token.

QuéValor
EndpointPOST https://161-97-121-214.sslip.io/mcp
TransporteStreamable HTTP, sin estado (GET/DELETE responden 405)
AuthEl mismo API_TOKEN de la API: Authorization: Bearer <API_TOKEN> o X-API-Key: <API_TOKEN>
ToolsLas mismas del MCP local, todas de solo lectura (lista abajo)
Sin token o con uno incorrecto responde 401. Si API_TOKEN está vacío en el servidor, /mcp queda cerrado (503). El token va siempre en una cabecera, nunca en la URL.
list_collections
query_collection
tournament_liquidity
bots_por_modo
bot_by_hour
torneos_economia
heatmap
activity
whales
presence_series
users_stats

Claude Code — Ubuntu / macOS (bash)

claude mcp add --transport http recon https://161-97-121-214.sslip.io/mcp \
  --header "Authorization: Bearer <API_TOKEN>"

Añade --scope user para tenerlo en todos tus proyectos. Comprueba con claude mcp list (debe salir ✓ Connected).

Claude Code — Windows (PowerShell)

claude mcp add --transport http recon https://161-97-121-214.sslip.io/mcp `
  --header "Authorization: Bearer <API_TOKEN>"

En cmd.exe va en una sola línea (o con ^ al final de cada línea en lugar de `).

Claude Desktop — Ubuntu

Requiere Node 18+ (para npx). Edita ~/.config/Claude/claude_desktop_config.json y agrega dentro de "mcpServers":

{
  "mcpServers": {
    "recon": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://161-97-121-214.sslip.io/mcp",
        "--header", "X-API-Key:${RECON_TOKEN}"
      ],
      "env": { "RECON_TOKEN": "<API_TOKEN>" }
    }
  }
}

Si usas nvm, Claude Desktop no ve tu PATH: pon la ruta completa, por ejemplo "command": "/home/<tu-usuario>/.nvm/versions/node/v22.14.0/bin/npx" (sácala con which npx). Reinicia Claude Desktop después de guardar.

Claude Desktop — Windows

Requiere Node 18+ instalado (nodejs.org). Abre %APPDATA%\Claude\claude_desktop_config.json (pégalo en la barra de Explorer, o en Claude Desktop: Settings › Developer › Edit Config) y agrega:

{
  "mcpServers": {
    "recon": {
      "command": "cmd",
      "args": [
        "/c", "npx", "-y", "mcp-remote",
        "https://161-97-121-214.sslip.io/mcp",
        "--header", "X-API-Key:${RECON_TOKEN}"
      ],
      "env": { "RECON_TOKEN": "<API_TOKEN>" }
    }
  }
}

Cierra Claude Desktop del todo (también desde la bandeja del sistema) y vuelve a abrirlo. Se usa X-API-Key en lugar de Authorization: Bearer … porque no lleva espacios: en Windows los espacios dentro de args se rompen.

Probar con curl

TOKEN=<API_TOKEN>
URL=https://161-97-121-214.sslip.io/mcp

# initialize -> debe traer "serverInfo":{"name":"recon",...}
curl -sS "$URL" -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'

# tools/list
curl -sS "$URL" -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'

# sin token -> 401
curl -i -X POST "$URL" -H "Content-Type: application/json" -d '{}'

Con interfaz gráfica: npx @modelcontextprotocol/inspector, transporte Streamable HTTP, la URL de arriba y la cabecera Authorization: Bearer <API_TOKEN>.

MCP local (desarrollo)

Alternativa por stdio para desarrollo: vive en mcp/, corre en tu máquina y llama a la API con el mismo token (como RECON_API_TOKEN). Usa exactamente las mismas tools que el remoto.

claude mcp add recon-local \
  --env RECON_API_TOKEN=<API_TOKEN> \
  --env RECON_API_BASE=http://localhost:4000 \
  -- node /ruta/al/repo/scrapper/mcp/server.js

Instalar una vez: cd mcp && npm install. Más detalle en mcp/README.md.