Sports Hub
41 proveedores de API deportivas, 396 herramientas: puntuaciones, estadísticas, cuotas, esports, ajedrez, automovilismo y más.
Documentación
Sports Hub MCP Server
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.
Demo

Resultados de la NBA, cuotas de la Premier League, H2H de tenis: todo desde un único servidor MCP.
Compatibilidad
Plataformas
| SO | Estado |
|---|---|
| macOS | Compatible |
| Linux | Compatible |
| Windows | Compatible |
Clientes MCP
| Cliente | Estado | Notas |
|---|---|---|
| Claude Desktop | Compatible | Aplicación de escritorio de Anthropic |
| Claude Code (CLI) | Compatible | claude mcp add |
| Cursor | Compatible | MCP integrado |
| Windsurf (Codeium) | Compatible | MCP integrado |
| Continue.dev | Compatible | Asistente de IA de código abierto |
| Cline | Compatible | Extensión de VS Code |
| Zed | Compatible | MCP integrado |
| ChatGPT Desktop | Compatible | Aplicación de escritorio de OpenAI |
| Gemini CLI | Compatible | CLI de Google |
| Cualquier cliente MCP | Compatible | Transporte 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.
| Prefijo | Proveedor | Cobertura | Herramientas | Notas |
|---|---|---|---|---|
espn_ | ESPN | Más de 20 deportes | 10 | No oficial: puede fallar |
nhl_ | NHL Web API | NHL | 13 | Sin documentar pero estable |
mlb_ | MLB Stats API | MLB/MiLB | 13 | Oficial, sin documentar |
f1_ | Jolpica F1 | Fórmula 1 (1950+) | 13 | Mantenido por la comunidad |
openf1_ | OpenF1 | Telemetría en vivo de F1 | 12 | Solo fines de semana de carrera |
openliga_ | OpenLigaDB | Fútbol alemán | 10 | Enfoque en la Bundesliga |
sportsdb_ | TheSportsDB | Más de 40 deportes | 13 | Clave de prueba automática, marcas de agua |
ncaa_ | NCAA API | Deportes universitarios | 8 | Límite de 5 solicitudes/s |
sportsrc_ | SportSRC | Fútbol, baloncesto, MMA + transmisiones | 7 | V1 gratuita, V2 requiere clave de pago |
lichess_ | Lichess | Ajedrez (usuarios, mejores jugadores, transmisiones, puzzle diario) | 7 | ~20 solicitudes/seg/IP |
chesscom_ | Chess.com | Ajedrez (perfiles, estadísticas, clubes, clasificaciones) | 7 | Limita llamadas en paralelo |
squiggle_ | Squiggle | AFL (Liga Australiana de Fútbol) | 6 | Se requiere UA honesto |
motogp_ | MotoGP | MotoGP/Moto2/Moto3/MotoE | 7 | No oficial: puede fallar |
formulae_ | Formula E | Fórmula E | 7 | No oficial: puede fallar |
nascar_ | NASCAR | NASCAR Cup/Xfinity/Truck | 3 | Fuentes CDN no oficiales |
opendota_ | OpenDota | Análisis de Dota 2 | 11 | 60 solicitudes/min, 50k/mes |
sleeper_ | Sleeper | Fantasy de la NFL | 10 | ~1000 solicitudes/min |
euroleague_ | EuroLeague | Baloncesto EuroLeague + EuroCup | 6 | Fuentes sin clave |
footballdata_uk_ | Football-Data.co.uk | Resultados históricos de fútbol + cuotas | 2 | CSV, más de 25 ligas |
Consejo: Usa
SPORTS_HUB_PROVIDERS=freepara 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.
| Prefijo | Proveedor | Cobertura | Herramientas | Límite gratuito | Obtener clave |
|---|---|---|---|---|---|
pandascore_ | PandaScore | Esports (13 títulos) | 14 | 1000 solicitudes/h | Regístrate |
apifootball_ | API-Football | Fútbol (más de 960 ligas) | 15 | 100 solicitudes/día | Regístrate |
apisports_ | API-Sports | 9 deportes | 10 | 100 solicitudes/día/deporte | Regístrate |
apitennis_ | API-Tennis | Tenis (ATP/WTA/ITF) | 12 | 100 solicitudes/día | Regístrate |
bdl_ | BallDontLie | NBA/NFL/MLB/NHL | 10 | Nivel básico | Regístrate |
cricket_ | CricketData | Críquet | 10 | 100 solicitudes/día | Regístrate |
entitycricket_ | Entity Sport | Críquet (más de 250 competiciones) | 12 | Plan gratuito | Regístrate |
footballdata_ | football-data.org | Fútbol (12 ligas) | 11 | 10 solicitudes/min | Regístrate |
sportmonks_ | Sportmonks | Fútbol | 12 | 3000 solicitudes/h | Regístrate |
sportsdata_ | SportsDataIO | 9 deportes | 12 | 1000 solicitudes/mes | Regístrate |
odds_ | The Odds API | Cuotas de más de 70 deportes | 9 | 500 solicitudes/mes | Regístrate |
oddsio_ | Odds-API.io | Cuotas de 34 deportes | 10 | Cuenta gratuita | Regístrate |
sgo_ | Sports Game Odds | Cuotas de más de 55 ligas | 10 | Prueba | Regístrate |
lumify_ | Lumify | Cuotas, splits + análisis de apuestas con IA (8 deportes) | 14 | Clave de prueba gratuita | Regístrate |
mma_ | Fighting Tomatoes | MMA | 8 | 200 solicitudes/mes | Regístrate |
livegolf_ | Live Golf API | Golf (PGA/DP World) | 8 | Nivel gratuito | Regístrate |
isports_ | iSportsAPI | Fútbol/Baloncesto (Asia) | 10 | Nivel gratuito | Regístrate |
sportdevs_ | SportDevs | Rugby/Voleibol/Balonmano | 12 | Prueba | Regístrate |
msf_ | MySportsFeeds | NFL/NBA/MLB/NHL | 12 | Gratuito no comercial | Regístrate |
golfcourse_ | GolfCourseAPI | Más de 30 000 campos de golf | 6 | 300 solicitudes/día | Regístrate |
cfbd_ | College Football Data | Fútbol americano universitario NCAA | 14 | 1000 solicitudes/mes | Regístrate |
boxing_ | Boxing Data API | Boxeo profesional (boxeadores/combates/títulos) | 8 | 100 solicitudes/mes | Regístrate |
highlightly_ | Highlightly | Resúmenes multideporte + cuotas | 6 | 100 solicitudes/día | Regí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. EstablecerSPORTS_HUB_HOST=0.0.0.0expone 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_ORIGINSdebe 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=0desactiva 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
| Preajuste | Proveedores | Herramientas | ¿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) | ~165 | No |
all | todos los 42 proveedores | 410 | Sí (para proveedores que requieren clave) |
chess | lichess, chesscom | 14 | No |
us-major | espn, nhl, mlb, ncaa, cfbd, bdl, msf, nascar, sleeper | ~93 | Algunas |
soccer | espn, apifootball, footballdata, sportmonks, openliga, sportsrc, footballdatauk, highlightly | ~73 | Algunas |
f1 | f1, openf1 | 25 | No |
motorsport | f1, openf1, motogp, formulae, nascar | ~42 | No |
esports | pandascore, opendota | 25 | Algunas |
odds | odds, oddsio, sgo, lumify | 43 | Sí |
cricket | cricket, entitycricket | 22 | Sí |
golf | livegolf, golfcourse | 14 | Algunas |
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 cargansportshub://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
- Haz un fork del repositorio
- Crea
src/providers/my-api.tsexportandoregister(server: McpServer) - Prefija los nombres de las herramientas:
myapi_get_something - Importa y llama en
src/index.ts npm run buildpara verificar- Envía un PR
Licencia
MIT