Sports Hub
41 provedores de API esportivos, 396 ferramentas: placares, estatísticas, odds, esports, xadrez, automobilismo e mais.
Documentação
Sports Hub MCP Server
Um servidor MCP unificado que agrega 42 provedores de APIs esportivas em um único serviço. 410 ferramentas cobrindo placares, estatísticas, odds, e-sports, esportes universitários, xadrez, automobilismo, boxe, AFL e muito mais em mais de 70 esportes.
Cada provedor funciona de forma independente. Você só precisa de chaves de API para os provedores que utiliza. Chaves ausentes não bloqueiam a inicialização — as ferramentas retornam um erro quando chamadas sem a chave correspondente.
Demonstração

Placar da NBA, odds da Premier League, confronto direto no tênis — tudo a partir de um único servidor MCP.
Compatibilidade
Plataformas
| SO | Status |
|---|---|
| macOS | Suportado |
| Linux | Suportado |
| Windows | Suportado |
Clientes MCP
| Cliente | Status | Observações |
|---|---|---|
| Claude Desktop | Suportado | Aplicativo desktop da Anthropic |
| Claude Code (CLI) | Suportado | claude mcp add |
| Cursor | Suportado | MCP integrado |
| Windsurf (Codeium) | Suportado | MCP integrado |
| Continue.dev | Suportado | Assistente de IA de código aberto |
| Cline | Suportado | Extensão do VS Code |
| Zed | Suportado | MCP integrado |
| ChatGPT Desktop | Suportado | Aplicativo desktop da OpenAI |
| Gemini CLI | Suportado | CLI do Google |
| Qualquer cliente MCP | Suportado | Transporte Stdio + HTTP/SSE |
Usa o transporte stdio do MCP SDK. Funciona com qualquer LLM (Claude, GPT, Gemini, Llama, Mistral, etc.).
Requisitos: Node.js 18+, npm.
Provedores (32)
Funciona instantaneamente — sem chave de API, sem cadastro (19 provedores, ~165 ferramentas)
Esses provedores funcionam imediatamente. Basta compilar e executar.
| Prefixo | Provedor | Cobertura | Ferramentas | Observações |
|---|---|---|---|---|
espn_ | ESPN | 20+ esportes | 10 | Não oficial — pode falhar |
nhl_ | NHL Web API | NHL | 13 | Não documentado, mas estável |
mlb_ | MLB Stats API | MLB/MiLB | 13 | Oficial, não documentado |
f1_ | Jolpica F1 | Fórmula 1 (1950+) | 13 | Mantido pela comunidade |
openf1_ | OpenF1 | Telemetria ao vivo da F1 | 12 | Apenas fins de semana de corrida ao vivo |
openliga_ | OpenLigaDB | Futebol alemão | 10 | Foco na Bundesliga |
sportsdb_ | TheSportsDB | 40+ esportes | 13 | Chave de teste automática, marcas d'água |
ncaa_ | NCAA API | Esportes universitários | 8 | Limite de 5 req/s |
sportsrc_ | SportSRC | Futebol, basquete, MMA + transmissões | 7 | V1 gratuito, V2 requer chave paga |
lichess_ | Lichess | Xadrez (usuários, melhores jogadores, transmissões, quebra-cabeça diário) | 7 | ~20 req/seg/IP |
chesscom_ | Chess.com | Xadrez (perfis, estatísticas, clubes, rankings) | 7 | Limita chamadas paralelas |
squiggle_ | Squiggle | AFL (Liga Australiana de Futebol) | 6 | UA honesta necessária |
motogp_ | MotoGP | MotoGP/Moto2/Moto3/MotoE | 7 | Não oficial — pode falhar |
formulae_ | Formula E | Fórmula E | 7 | Não oficial — pode falhar |
nascar_ | NASCAR | NASCAR Cup/Xfinity/Truck | 3 | Feeds CDN não oficiais |
opendota_ | OpenDota | Análises de Dota 2 | 11 | 60 req/min, 50k/mês |
sleeper_ | Sleeper | Fantasy NFL | 10 | ~1000 req/min |
euroleague_ | EuroLeague | Basquete EuroLeague + EuroCup | 6 | Feeds sem chave |
footballdata_uk_ | Football-Data.co.uk | Resultados históricos de futebol + odds | 2 | CSV, 25+ ligas |
Dica: Use
SPORTS_HUB_PROVIDERS=freepara carregar apenas esses 19 provedores (~165 ferramentas).
Nível gratuito com chave de API — cadastro necessário, sem cartão de crédito (23 provedores, ~245 ferramentas)
O registro leva de 1 a 2 minutos. Todas as chaves são gratuitas.
| Prefixo | Provedor | Cobertura | Ferramentas | Limite Gratuito | Obter Chave |
|---|---|---|---|---|---|
pandascore_ | PandaScore | E-sports (13 títulos) | 14 | 1000 req/h | Cadastre-se |
apifootball_ | API-Football | Futebol (960+ ligas) | 15 | 100 req/dia | Cadastre-se |
apisports_ | API-Sports | 9 esportes | 10 | 100 req/dia/esporte | Cadastre-se |
apitennis_ | API-Tennis | Tênis (ATP/WTA/ITF) | 12 | 100 req/dia | Cadastre-se |
bdl_ | BallDontLie | NBA/NFL/MLB/NHL | 10 | Nível básico | Cadastre-se |
cricket_ | CricketData | Críquete | 10 | 100 req/dia | Cadastre-se |
entitycricket_ | Entity Sport | Críquete (250+ competições) | 12 | Plano gratuito | Cadastre-se |
footballdata_ | football-data.org | Futebol (12 ligas) | 11 | 10 req/min | Cadastre-se |
sportmonks_ | Sportmonks | Futebol | 12 | 3000 req/h | Cadastre-se |
sportsdata_ | SportsDataIO | 9 esportes | 12 | 1000 req/mês | Cadastre-se |
odds_ | The Odds API | Odds de 70+ esportes | 9 | 500 req/mês | Cadastre-se |
oddsio_ | Odds-API.io | Odds de 34 esportes | 10 | Conta gratuita | Cadastre-se |
sgo_ | Sports Game Odds | Odds de 55+ ligas | 10 | Avaliação | Cadastre-se |
lumify_ | Lumify | Odds, divisões + análise de apostas com IA (8 esportes) | 14 | Chave de avaliação gratuita | Cadastre-se |
mma_ | Fighting Tomatoes | MMA | 8 | 200 req/mês | Cadastre-se |
livegolf_ | Live Golf API | Golfe (PGA/DP World) | 8 | Nível gratuito | Cadastre-se |
isports_ | iSportsAPI | Futebol/Basquete (Ásia) | 10 | Nível gratuito | Cadastre-se |
sportdevs_ | SportDevs | Rugby/Vôlei/Handebol | 12 | Avaliação | Cadastre-se |
msf_ | MySportsFeeds | NFL/NBA/MLB/NHL | 12 | Gratuito para uso não comercial | Cadastre-se |
golfcourse_ | GolfCourseAPI | 30 mil+ campos de golfe | 6 | 300 req/dia | Cadastre-se |
cfbd_ | College Football Data | Futebol americano universitário (NCAA) | 14 | 1000 req/mês | Cadastre-se |
boxing_ | Boxing Data API | Boxe profissional (lutadores/lutas/títulos) | 8 | 100 req/mês | Cadastre-se |
highlightly_ | Highlightly | Melhores momentos multi-esportes + odds | 6 | 100 req/dia | Cadastre-se |
Provedores com chaves ausentes não bloqueiam o servidor — eles apenas retornam um erro quando chamados. Registre chaves incrementalmente conforme precisar.
Instalação
Rápida (npx — sem instalação)
npx mcp-sports-hub
npm global
npm install -g mcp-sports-hub
mcp-sports-hub
A partir do código-fonte
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 no Registro MCP oficial como io.github.lacausecrypto/sports-hub. Clientes MCP que suportam o registro podem descobri-lo e instalá-lo automaticamente.
Modos de Transporte
Stdio (padrão — Claude Desktop, Cursor, etc.)
npx mcp-sports-hub
HTTP/SSE (clientes remotos, aplicativos web, integrações 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 transmissível com SSE)GET /health— Verificação de integridade ({"status":"ok","providers":19,"sessions":0,"mode":"session"})
Suporta CORS e gerenciamento de sessões multi-cliente via cabeçalho mcp-session-id. Porta padrão: 3000.
Cada cliente recebe sua própria sessão, criada em initialize e endereçada posteriormente pelo seu ID de sessão. Construir uma sessão custa ~90 ms para o preset de 165 ferramentas free, pago uma vez por cliente em vez de por requisição. Sessões ociosas são removidas.
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 é adequado para várias réplicas atrás de um balanceador de carga sem roteamento fixo. Ele paga o custo de construção em cada chamada, então prefira sessões para uma única instância.
⚠ Segurança: O modo HTTP vincula-se a
127.0.0.1(loopback) por padrão. DefinirSPORTS_HUB_HOST=0.0.0.0expõe um endpoint MCP sem autenticação para toda a sua rede — qualquer pessoa que consiga alcançá-lo pode usar suas chaves de API configuradas. A proteção contra rebinding de DNS apenas bloqueia ataques originados de navegadores, não clientes diretos. Só exponha atrás de um proxy reverso com autenticação/TLS.SPORTS_HUB_CORS_ORIGINSdeve listar origens explícitas (um*literal é rejeitado).
Hospedado (Smithery)
Um Dockerfile e um smithery.yaml estão incluídos para hospedagem em contêiner no Smithery. O endpoint hospedado serve o preset free sem chave, então os clientes se conectam sem configuração. A implantação define SPORTS_HUB_DNS_REBINDING_PROTECTION=0 porque o proxy do Smithery encaminha um cabeçalho Host que não é de localhost.
SPORTS_HUB_DNS_REBINDING_PROTECTION=0desativa a verificação de Host/Origem (ela está ativada por padrão). Defina-a apenas quando o servidor estiver atrás de um proxy confiável que controla o roteamento — nunca para um servidor diretamente acessível por navegadores em localhost.
Configuração
Variáveis de Ambiente
Defina apenas as chaves dos provedores que você deseja:
# 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
Tamanho da resposta e o parâmetro fields
As APIs esportivas retornam objetos muito amplos, e cada byte que uma ferramenta retorna é gasto da janela de contexto do modelo. Uma única listagem de equipe no estilo espn_get_scoreboard tem ~300 KB de JSON, dos quais a parte que qualquer pessoa quer tem menos de 3 KB.
Toda ferramenta aceita um parâmetro opcional fields: uma lista separada por vírgulas de nomes de chaves para manter, correspondida em qualquer profundidade. Ramos que não correspondem a nada são descartados, e uma chave correspondida mantém todo o seu 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
Se fields não corresponder a nada, a ferramenta informa isso e lista as chaves de nível superior que viu, em vez de retornar um objeto vazio.
As respostas também são limitadas. Acima do limite, as listas mais longas no payload são encurtadas até caber (para que o JSON ainda seja analisável) e uma nota informa quantos itens foram descartados.
SPORTS_HUB_MAX_RESULT_BYTES=40000 # default; serialized bytes per tool result
Claude Desktop
Locais dos arquivos de configuração:
- 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"
}
}
}
}
Caminho no Windows: "args": ["C:/Users/you/mcp-sports-hub/dist/index.js"]
Inclua apenas variáveis de ambiente dos provedores que você precisa. Omita env completamente para provedores somente gratuitos.
Claude Code (CLI)
claude mcp add sports-hub node /absolute/path/to/mcp-sports-hub/dist/index.js
Ou em .claude/settings.json:
{
"mcpServers": {
"sports-hub": {
"command": "node",
"args": ["/absolute/path/to/mcp-sports-hub/dist/index.js"],
"env": {
"PANDASCORE_TOKEN": "your-token"
}
}
}
}
Filtragem de Provedores
Por padrão, apenas o preset gratuito é carregado (19 provedores, ~165 ferramentas — sem necessidade de chaves de API). Use SPORTS_HUB_PROVIDERS para alterar o que é carregado:
# 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
| Preset | Provedores | Ferramentas | Precisa de chaves? |
|---|---|---|---|
free (padrão) | 19 provedores sem chave (espn, nhl, mlb, f1, openf1, openliga, sportsdb, ncaa, sportsrc, lichess, chesscom, squiggle, motogp, formulae, nascar, opendota, sleeper, euroleague, footballdatauk) | ~165 | Não |
all | todos os 42 provedores | 410 | Sim (para provedores que exigem chave) |
chess | lichess, chesscom | 14 | Não |
us-major | espn, nhl, mlb, ncaa, cfbd, bdl, msf, nascar, sleeper | ~93 | Alguns |
soccer | espn, apifootball, footballdata, sportmonks, openliga, sportsrc, footballdatauk, highlightly | ~73 | Alguns |
f1 | f1, openf1 | 25 | Não |
motorsport | f1, openf1, motogp, formulae, nascar | ~42 | Não |
esports | pandascore, opendota | 25 | Alguns |
odds | odds, oddsio, sgo, lumify | 43 | Sim |
cricket | cricket, entitycricket | 22 | Sim |
golf | livegolf, golfcourse | 14 | Alguns |
Cache
Todas as respostas GET são armazenadas em cache na memória por 60 segundos por padrão. Isso protege contra chamadas duplicadas e desperdício de limite de taxa. Configure com:
SPORTS_HUB_CACHE_TTL=120 # seconds (0 to disable)
A chave de cache inclui um resumo dos cabeçalhos de autenticação da solicitação, então duas chaves de API nunca leem as entradas uma da outra. Solicitações idênticas concorrentes são agrupadas em uma única chamada upstream, e um 404/410 é lembrado brevemente (SPORTS_HUB_NEGATIVE_CACHE_TTL, padrão 30s) para que um ID errado não seja buscado novamente em loop.
Limites de taxa e novas tentativas
Respostas 429 e 5xx são repetidas com backoff exponencial, respeitando Retry-After quando o upstream envia um. Erros de cliente (4xx diferentes de 408/425/429) e timeouts não são repetidos.
SPORTS_HUB_MAX_RETRIES=2 # extra attempts after the first (0 disables)
SPORTS_HUB_RETRY_BASE_MS=300 # backoff base; doubles per attempt
Na configuração do Claude Desktop:
"env": {
"SPORTS_HUB_PROVIDERS": "us-major",
"THE_ODDS_API_KEY": "your-key"
}
Nomenclatura de Ferramentas
Todas as ferramentas seguem {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 e Prompts MCP
Além das ferramentas, o servidor expõe:
Recursos (catálogos legíveis, sem chamada de API):
sportshub://providers— o catálogo completo de provedores (prefixo, nome, cobertura, chave necessária)sportshub://presets— todos os presets e os provedores que eles carregamsportshub://provider/{key}— detalhes para um provedor (com autocompletar de chave)
Prompts (fluxos de trabalho curados por comando de barra sobre as 410 ferramentas):
whats-on-today·compare-odds {event}·motorsport-weekend {series}·league-standings {league}·team-deep-dive {team}·f1-race {season} {round}
Todas as ferramentas são anotadas com readOnly / idempotent para que os clientes possam pular prompts de confirmação.
Arquitetura
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 provedor exporta register(server). As chaves são verificadas no momento da chamada, não na inicialização.
Contribuindo
- Faça um fork do repositório
- Crie
src/providers/my-api.tsexportandoregister(server: McpServer) - Prefixe os nomes das ferramentas:
myapi_get_something - Importe e chame em
src/index.ts npm run buildpara verificar- Envie um PR
Licença
MIT