Sports Hub

41 proveedores de API deportivas, 396 herramientas: puntuaciones, estadísticas, cuotas, esports, ajedrez, automovilismo y más.

Documentación

Sports Hub

Sports Hub MCP Server

npm version npm downloads CI License

41 Providers 410 Tools MCP Registry

macOS Linux Windows Node.js TypeScript

Un servidor MCP unificado que agrega 42 proveedores de API deportivas en un solo servicio. 410 herramientas que cubren resultados, estadísticas, cuotas, esports, deportes universitarios, ajedrez, automovilismo, boxeo, AFL y más en más de 70 deportes.

Cada proveedor funciona de forma independiente. Solo necesitas claves de API para los proveedores que uses. Las claves faltantes no bloquean el inicio: las herramientas devuelven un error cuando se las llama sin su clave.

Funciona con: Claude ChatGPT Cursor Windsurf Zed Continue Cline

Demo

mcp-sports-hub demo

Resultados de la NBA, cuotas de la Premier League, H2H de tenis: todo desde un único servidor MCP.

Compatibilidad

Plataformas

SOEstado
macOSCompatible
LinuxCompatible
WindowsCompatible

Clientes MCP

ClienteEstadoNotas
Claude DesktopCompatibleAplicación de escritorio de Anthropic
Claude Code (CLI)Compatibleclaude mcp add
CursorCompatibleMCP integrado
Windsurf (Codeium)CompatibleMCP integrado
Continue.devCompatibleAsistente de IA de código abierto
ClineCompatibleExtensión de VS Code
ZedCompatibleMCP integrado
ChatGPT DesktopCompatibleAplicación de escritorio de OpenAI
Gemini CLICompatibleCLI de Google
Cualquier cliente MCPCompatibleTransporte Stdio + HTTP/SSE

Utiliza el transporte stdio del MCP SDK. Funciona con cualquier LLM (Claude, GPT, Gemini, Llama, Mistral, etc.).

Requisitos: Node.js 18+, npm.

Proveedores (32)

Funcionan al instante: sin clave de API, sin registro (19 proveedores, ~165 herramientas)

Estos proveedores funcionan de inmediato. Solo compila y ejecuta.

PrefijoProveedorCoberturaHerramientasNotas
espn_ESPNMás de 20 deportes10No oficial: puede fallar
nhl_NHL Web APINHL13Sin documentar pero estable
mlb_MLB Stats APIMLB/MiLB13Oficial, sin documentar
f1_Jolpica F1Fórmula 1 (1950+)13Mantenido por la comunidad
openf1_OpenF1Telemetría en vivo de F112Solo fines de semana de carrera
openliga_OpenLigaDBFútbol alemán10Enfoque en la Bundesliga
sportsdb_TheSportsDBMás de 40 deportes13Clave de prueba automática, marcas de agua
ncaa_NCAA APIDeportes universitarios8Límite de 5 solicitudes/s
sportsrc_SportSRCFútbol, baloncesto, MMA + transmisiones7V1 gratuita, V2 requiere clave de pago
lichess_LichessAjedrez (usuarios, mejores jugadores, transmisiones, puzzle diario)7~20 solicitudes/seg/IP
chesscom_Chess.comAjedrez (perfiles, estadísticas, clubes, clasificaciones)7Limita llamadas en paralelo
squiggle_SquiggleAFL (Liga Australiana de Fútbol)6Se requiere UA honesto
motogp_MotoGPMotoGP/Moto2/Moto3/MotoE7No oficial: puede fallar
formulae_Formula EFórmula E7No oficial: puede fallar
nascar_NASCARNASCAR Cup/Xfinity/Truck3Fuentes CDN no oficiales
opendota_OpenDotaAnálisis de Dota 21160 solicitudes/min, 50k/mes
sleeper_SleeperFantasy de la NFL10~1000 solicitudes/min
euroleague_EuroLeagueBaloncesto EuroLeague + EuroCup6Fuentes sin clave
footballdata_uk_Football-Data.co.ukResultados históricos de fútbol + cuotas2CSV, más de 25 ligas

Consejo: Usa SPORTS_HUB_PROVIDERS=free para cargar solo estos 19 proveedores (~165 herramientas).

Nivel gratuito con clave de API: requiere registro, sin tarjeta de crédito (23 proveedores, ~245 herramientas)

El registro toma 1-2 minutos. Todas las claves son gratuitas.

PrefijoProveedorCoberturaHerramientasLímite gratuitoObtener clave
pandascore_PandaScoreEsports (13 títulos)141000 solicitudes/hRegístrate
apifootball_API-FootballFútbol (más de 960 ligas)15100 solicitudes/díaRegístrate
apisports_API-Sports9 deportes10100 solicitudes/día/deporteRegístrate
apitennis_API-TennisTenis (ATP/WTA/ITF)12100 solicitudes/díaRegístrate
bdl_BallDontLieNBA/NFL/MLB/NHL10Nivel básicoRegístrate
cricket_CricketDataCríquet10100 solicitudes/díaRegístrate
entitycricket_Entity SportCríquet (más de 250 competiciones)12Plan gratuitoRegístrate
footballdata_football-data.orgFútbol (12 ligas)1110 solicitudes/minRegístrate
sportmonks_SportmonksFútbol123000 solicitudes/hRegístrate
sportsdata_SportsDataIO9 deportes121000 solicitudes/mesRegístrate
odds_The Odds APICuotas de más de 70 deportes9500 solicitudes/mesRegístrate
oddsio_Odds-API.ioCuotas de 34 deportes10Cuenta gratuitaRegístrate
sgo_Sports Game OddsCuotas de más de 55 ligas10PruebaRegístrate
lumify_LumifyCuotas, splits + análisis de apuestas con IA (8 deportes)14Clave de prueba gratuitaRegístrate
mma_Fighting TomatoesMMA8200 solicitudes/mesRegístrate
livegolf_Live Golf APIGolf (PGA/DP World)8Nivel gratuitoRegístrate
isports_iSportsAPIFútbol/Baloncesto (Asia)10Nivel gratuitoRegístrate
sportdevs_SportDevsRugby/Voleibol/Balonmano12PruebaRegístrate
msf_MySportsFeedsNFL/NBA/MLB/NHL12Gratuito no comercialRegístrate
golfcourse_GolfCourseAPIMás de 30 000 campos de golf6300 solicitudes/díaRegístrate
cfbd_College Football DataFútbol americano universitario NCAA141000 solicitudes/mesRegístrate
boxing_Boxing Data APIBoxeo profesional (boxeadores/combates/títulos)8100 solicitudes/mesRegístrate
highlightly_HighlightlyResúmenes multideporte + cuotas6100 solicitudes/díaRegístrate

Los proveedores con claves faltantes no bloquean el servidor: solo devuelven un error cuando se los llama. Registra claves de forma incremental según las necesites.

Instalación

Rápida (npx, sin instalación)

npx mcp-sports-hub

npm global

npm install -g mcp-sports-hub
mcp-sports-hub

Desde el código fuente

git clone https://github.com/lacausecrypto/mcp-sports-hub.git
cd mcp-sports-hub
npm install
npm run build

Registro MCP

Este servidor está publicado en el Registro MCP oficial como io.github.lacausecrypto/sports-hub. Los clientes MCP que admiten el registro pueden descubrirlo e instalarlo automáticamente.

Modos de transporte

Stdio (predeterminado: Claude Desktop, Cursor, etc.)

npx mcp-sports-hub

HTTP/SSE (clientes remotos, aplicaciones web, integraciones personalizadas)

# Via flag
npx mcp-sports-hub --http

# Via env
SPORTS_HUB_HTTP=1 SPORTS_HUB_PORT=3000 npx mcp-sports-hub

Endpoints:

  • POST /mcp — Protocolo MCP (HTTP transmisible con SSE)
  • GET /health — Verificación de salud ({"status":"ok","providers":19,"sessions":0,"mode":"session"})

Admite CORS y gestión de sesiones multicliente mediante el encabezado mcp-session-id. Puerto predeterminado: 3000.

Cada cliente obtiene su propia sesión, creada en initialize y direccionada posteriormente por su id de sesión. Crear una sesión cuesta ~90 ms para el preset de 165 herramientas free, pagado una vez por cliente en lugar de por solicitud. Las sesiones inactivas se eliminan.

SPORTS_HUB_MAX_SESSIONS=200   # concurrent sessions before new ones get a 503
SPORTS_HUB_SESSION_TTL=1800   # seconds a session may sit idle
SPORTS_HUB_STATELESS=1        # opt out: build a throwaway server per request

SPORTS_HUB_STATELESS=1 es adecuado para varias réplicas detrás de un balanceador de carga sin enrutamiento fijo. Paga el costo de construcción en cada llamada, así que prefiere sesiones para una sola instancia.

⚠ Seguridad: el modo HTTP se vincula a 127.0.0.1 (loopback) de forma predeterminada. Establecer SPORTS_HUB_HOST=0.0.0.0 expone un endpoint MCP sin autenticación a toda tu red: cualquiera que pueda alcanzarlo puede usar tus claves de API configuradas. La protección contra reenlace de DNS solo bloquea ataques de origen de navegador, no clientes directos. Solo expónlo detrás de un proxy inverso con autenticación/TLS. SPORTS_HUB_CORS_ORIGINS debe listar orígenes explícitos (un * literal se rechaza).

Alojado (Smithery)

Se incluyen un Dockerfile y un smithery.yaml para el alojamiento en contenedores en Smithery. El endpoint alojado sirve el preset sin clave free, por lo que los clientes se conectan sin configuración. El despliegue establece SPORTS_HUB_DNS_REBINDING_PROTECTION=0 porque el proxy de Smithery reenvía un encabezado Host que no es de localhost.

SPORTS_HUB_DNS_REBINDING_PROTECTION=0 desactiva la verificación de Host/Origin (está activada de forma predeterminada). Solo establécelo cuando el servidor se ejecute detrás de un proxy de confianza que controle el enrutamiento; nunca para un servidor directamente accesible por navegadores en localhost.

Configuración

Variables de entorno

Solo establece claves para los proveedores que quieras:

# Free — no key needed:
# ESPN, NHL, MLB, Jolpica F1, OpenF1, OpenLigaDB, NCAA, TheSportsDB (test key),
# SportSRC (V1), Lichess, Chess.com, Squiggle (AFL),
# MotoGP, Formula E, NASCAR, OpenDota, Sleeper

# Optional (defaults to test key)
export THESPORTSDB_API_KEY="your-key"          # https://www.thesportsdb.com/

# Requires free registration
export PANDASCORE_TOKEN="your-token"            # https://pandascore.co/
export API_SPORTS_KEY="your-key"                # https://api-sports.io/
export API_FOOTBALL_KEY="your-key"              # https://www.api-football.com/
export API_TENNIS_KEY="your-key"                # https://api-tennis.com/
export BALLDONTLIE_API_KEY="your-key"           # https://www.balldontlie.io/
export CRICKETDATA_API_KEY="your-key"           # https://cricketdata.org/
export ENTITY_SPORT_KEY="your-key"              # https://www.entitysport.com/
export FOOTBALL_DATA_API_KEY="your-key"         # https://www.football-data.org/
export SPORTMONKS_API_KEY="your-key"            # https://www.sportmonks.com/
export SPORTSDATA_IO_KEY="your-key"             # https://sportsdata.io/
export THE_ODDS_API_KEY="your-key"              # https://the-odds-api.com/
export ODDS_API_IO_KEY="your-key"               # https://odds-api.io/
export SPORTS_GAME_ODDS_KEY="your-key"          # https://sportsgameodds.com/
export FIGHTING_TOMATOES_API_KEY="your-key"     # https://fightingtomatoes.com/
export LIVE_GOLF_API_KEY="your-key"             # https://livegolfapi.com/
export ISPORTSAPI_KEY="your-key"                # https://www.isportsapi.com/
export SPORTDEVS_API_KEY="your-key"             # https://sportdevs.com/
export GOLFCOURSE_API_KEY="your-key"            # https://golfcourseapi.com/
export MYSPORTSFEEDS_USER="your-user"           # https://www.mysportsfeeds.com/
export MYSPORTSFEEDS_PASS="your-pass"
export CFBD_API_KEY="your-key"                  # https://collegefootballdata.com/key
export LUMIFY_API_KEY="your-key"                # https://lumify.ai/

Windows (PowerShell):

$env:API_SPORTS_KEY = "your-key"
$env:PANDASCORE_TOKEN = "your-token"

Windows (cmd):

set API_SPORTS_KEY=your-key
set PANDASCORE_TOKEN=your-token

Tamaño de respuesta y el parámetro fields

Las API deportivas devuelven objetos muy amplios, y cada byte que devuelve una herramienta se gasta de la ventana de contexto del modelo. Una sola lista de equipos estilo espn_get_scoreboard es ~300 KB de JSON, de la cual la parte que cualquiera quiere es menos de 3 KB.

Cada herramienta acepta un parámetro opcional fields: una lista separada por comas de nombres de claves a conservar, coincidentes a cualquier profundidad. Las ramas que no coinciden con nada se descartan, y una clave coincidente conserva todo su valor.

// espn_get_teams { "sport": "basketball", "league": "nba" }
//   -> 297 KB

// espn_get_teams { "sport": "basketball", "league": "nba",
//                  "fields": "id,abbreviation,displayName,location" }
//   -> 2.9 KB, same 30 teams

Si fields no coincide con nada, la herramienta lo indica y lista las claves de nivel superior que sí vio, en lugar de devolver un objeto vacío.

Las respuestas también tienen un límite máximo. Por encima del límite, las listas más largas del payload se acortan hasta que quepan (para que el JSON aún se analice) y una nota informa cuántos elementos se descartaron.

SPORTS_HUB_MAX_RESULT_BYTES=40000   # default; serialized bytes per tool result

Claude Desktop

Ubicaciones de archivos de configuración:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/claude/claude_desktop_config.json
{
  "mcpServers": {
    "sports-hub": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-sports-hub/dist/index.js"],
      "env": {
        "PANDASCORE_TOKEN": "your-token",
        "API_SPORTS_KEY": "your-key",
        "THE_ODDS_API_KEY": "your-key"
      }
    }
  }
}

Ruta de Windows: "args": ["C:/Users/you/mcp-sports-hub/dist/index.js"]

Solo incluye variables de entorno para los proveedores que necesites. Omite env por completo para proveedores solo gratuitos.

Claude Code (CLI)

claude mcp add sports-hub node /absolute/path/to/mcp-sports-hub/dist/index.js

O en .claude/settings.json:

{
  "mcpServers": {
    "sports-hub": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-sports-hub/dist/index.js"],
      "env": {
        "PANDASCORE_TOKEN": "your-token"
      }
    }
  }
}

Filtrado de proveedores

De forma predeterminada, solo se carga el preset gratuito (19 proveedores, ~165 herramientas, sin necesidad de claves de API). Usa SPORTS_HUB_PROVIDERS para cambiar lo que se carga:

# Default — free providers only (no config needed)
npx mcp-sports-hub

# Load ALL 42 providers (410 tools)
SPORTS_HUB_PROVIDERS=all npx mcp-sports-hub

# Use a preset
SPORTS_HUB_PROVIDERS=us-major npx mcp-sports-hub

# Pick specific providers
SPORTS_HUB_PROVIDERS=espn,nhl,odds npx mcp-sports-hub

# Exclude from all (prefix with -)
SPORTS_HUB_PROVIDERS=-sportsdata,-mma npx mcp-sports-hub

Presets

PreajusteProveedoresHerramientas¿Necesita claves?
free (predeterminado)19 proveedores sin clave (espn, nhl, mlb, f1, openf1, openliga, sportsdb, ncaa, sportsrc, lichess, chesscom, squiggle, motogp, formulae, nascar, opendota, sleeper, euroleague, footballdatauk)~165No
alltodos los 42 proveedores410Sí (para proveedores que requieren clave)
chesslichess, chesscom14No
us-majorespn, nhl, mlb, ncaa, cfbd, bdl, msf, nascar, sleeper~93Algunas
soccerespn, apifootball, footballdata, sportmonks, openliga, sportsrc, footballdatauk, highlightly~73Algunas
f1f1, openf125No
motorsportf1, openf1, motogp, formulae, nascar~42No
esportspandascore, opendota25Algunas
oddsodds, oddsio, sgo, lumify43Sí
cricketcricket, entitycricket22Sí
golflivegolf, golfcourse14Algunas

Caché

Todas las respuestas GET se almacenan en caché en memoria durante 60 segundos por defecto. Esto protege contra llamadas duplicadas y desperdicio de límite de tasa. Configurar con:

SPORTS_HUB_CACHE_TTL=120  # seconds (0 to disable)

La clave de caché incluye un resumen de los encabezados de autenticación de la solicitud, por lo que dos claves API nunca leen las entradas del otro. Las solicitudes idénticas concurrentes se combinan en una sola llamada ascendente, y un 404/410 se recuerda brevemente (SPORTS_HUB_NEGATIVE_CACHE_TTL, por defecto 30s) para que un ID incorrecto no se vuelva a buscar en un bucle.

Límites de tasa y reintentos

Las respuestas 429 y 5xx se reintentan con retroceso exponencial, respetando Retry-After cuando el upstream envía uno. Los errores de cliente (4xx distintos de 408/425/429) y los tiempos de espera no se reintentan.

SPORTS_HUB_MAX_RETRIES=2        # extra attempts after the first (0 disables)
SPORTS_HUB_RETRY_BASE_MS=300    # backoff base; doubles per attempt

En la configuración de Claude Desktop:

"env": {
  "SPORTS_HUB_PROVIDERS": "us-major",
  "THE_ODDS_API_KEY": "your-key"
}

Nomenclatura de herramientas

Todas las herramientas siguen {provider}_{action}:

espn_get_scoreboard        — Live scores (ESPN)
nhl_get_standings          — NHL standings
mlb_get_game_boxscore      — MLB box score
f1_get_race_results        — F1 results (1950+)
openf1_get_laps            — F1 live telemetry
pandascore_get_lives       — Live esports matches
apifootball_get_fixtures   — Soccer fixtures (960+ leagues)
odds_get_odds              — Betting odds (70+ sports)
sportsrc_get_xg_stats      — Expected goals (xG)

Recursos y prompts de MCP

Además de las herramientas, el servidor expone:

Recursos (catálogos legibles, sin llamada API):

  • sportshub://providers — el catálogo completo de proveedores (prefijo, nombre, cobertura, clave requerida)
  • sportshub://presets — todos los preajustes y los proveedores que cargan
  • sportshub://provider/{key} — detalles para un proveedor (con autocompletado de clave)

Prompts (flujos de trabajo de comandos de barra seleccionados sobre las 410 herramientas):

  • whats-on-today · compare-odds {event} · motorsport-weekend {series} · league-standings {league} · team-deep-dive {team} · f1-race {season} {round}

Todas las herramientas están anotadas con readOnly / idempotent para que los clientes puedan omitir los avisos de confirmación.

Arquitectura

src/
├── index.ts                    # Imports + registers all 42 providers; transports
├── shared/
│   ├── http.ts                 # fetchJson, fetchText, buildUrl, toolResult, errorResult
│   │                           #   + retry/backoff, coalescing, keyed cache
│   ├── catalog.ts              # provider catalog + presets (single source of truth)
│   ├── annotations.ts          # central read-only annotations + titles
│   ├── tool-pipeline.ts        # central `fields` param, size cap, empty-result hints
│   ├── projection.ts           # field projection used by the pipeline
│   ├── slim.ts                 # strips $schema boilerplate from tools/list
│   ├── resources.ts            # MCP resources (provider/preset catalogs)
│   └── prompts.ts              # MCP prompts (curated workflows)
└── providers/
    ├── espn.ts                 #  10 tools — no key
    ├── nhl.ts                  #  13 tools — no key
    ├── mlb-stats.ts            #  13 tools — no key
    ├── jolpica-f1.ts           #  13 tools — no key
    ├── openf1.ts               #  12 tools — no key
    ├── openligadb.ts           #  10 tools — no key
    ├── golfcourse.ts           #   6 tools — GOLFCOURSE_API_KEY
    ├── thesportsdb.ts          #  13 tools — optional key
    ├── pandascore.ts           #  14 tools — PANDASCORE_TOKEN
    ├── api-football.ts         #  15 tools — API_FOOTBALL_KEY
    ├── api-sports.ts           #  10 tools — API_SPORTS_KEY
    ├── api-tennis.ts           #  12 tools — API_TENNIS_KEY
    ├── balldontlie.ts          #  10 tools — BALLDONTLIE_API_KEY
    ├── cricketdata.ts          #  10 tools — CRICKETDATA_API_KEY
    ├── entity-sport-cricket.ts #  12 tools — ENTITY_SPORT_KEY
    ├── football-data.ts        #  11 tools — FOOTBALL_DATA_API_KEY
    ├── sportmonks.ts           #  12 tools — SPORTMONKS_API_KEY
    ├── sportsdata-io.ts        #  12 tools — SPORTSDATA_IO_KEY
    ├── the-odds-api.ts         #   9 tools — THE_ODDS_API_KEY
    ├── odds-api-io.ts          #  10 tools — ODDS_API_IO_KEY
    ├── sports-game-odds.ts     #  10 tools — SPORTS_GAME_ODDS_KEY
    ├── lumify.ts               #  14 tools — LUMIFY_API_KEY
    ├── fighting-tomatoes.ts    #   8 tools — FIGHTING_TOMATOES_API_KEY
    ├── live-golf.ts            #   8 tools — LIVE_GOLF_API_KEY
    ├── isportsapi.ts           #  10 tools — ISPORTSAPI_KEY
    ├── sportdevs.ts            #  12 tools — SPORTDEVS_API_KEY
    ├── mysportsfeeds.ts        #  12 tools — MYSPORTSFEEDS_USER/PASS
    ├── sportsrc.ts             #   7 tools — V1 free, V2 needs paid key (not exposed)
    ├── ncaa.ts                 #   8 tools — no key
    ├── cfbd.ts                 #  14 tools — CFBD_API_KEY
    ├── lichess.ts              #   7 tools — no key
    ├── chess-com.ts            #   7 tools — no key
    ├── squiggle.ts             #   6 tools — no key
    ├── motogp.ts               #   7 tools — no key
    ├── formula-e.ts            #   7 tools — no key
    ├── nascar.ts               #   3 tools — no key
    ├── opendota.ts             #  11 tools — no key
    ├── sleeper.ts              #  10 tools — no key
    ├── euroleague.ts           #   6 tools — no key
    ├── football-data-uk.ts     #   2 tools — no key (CSV)
    ├── boxing.ts               #   8 tools — BOXING_DATA_API_KEY
    └── highlightly.ts          #   6 tools — HIGHLIGHTLY_API_KEY

Cada proveedor exporta register(server). Las claves se verifican en el momento de la llamada, no al inicio.

Contribuciones

  1. Haz un fork del repositorio
  2. Crea src/providers/my-api.ts exportando register(server: McpServer)
  3. Prefija los nombres de las herramientas: myapi_get_something
  4. Importa y llama en src/index.ts
  5. npm run build para verificar
  6. Envía un PR

Licencia

MIT