Sports Hub

41 provedores de API esportivos, 396 ferramentas: placares, estatísticas, odds, esports, xadrez, automobilismo e mais.

Documentação

Sports Hub

Sports Hub MCP Server

npm version npm downloads CI License

41 Providers 410 Tools MCP Registry

macOS Linux Windows Node.js TypeScript

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.

Funciona com: Claude ChatGPT Cursor Windsurf Zed Continue Cline

Demonstração

mcp-sports-hub demo

Placar da NBA, odds da Premier League, confronto direto no tênis — tudo a partir de um único servidor MCP.

Compatibilidade

Plataformas

SOStatus
macOSSuportado
LinuxSuportado
WindowsSuportado

Clientes MCP

ClienteStatusObservações
Claude DesktopSuportadoAplicativo desktop da Anthropic
Claude Code (CLI)Suportadoclaude mcp add
CursorSuportadoMCP integrado
Windsurf (Codeium)SuportadoMCP integrado
Continue.devSuportadoAssistente de IA de código aberto
ClineSuportadoExtensão do VS Code
ZedSuportadoMCP integrado
ChatGPT DesktopSuportadoAplicativo desktop da OpenAI
Gemini CLISuportadoCLI do Google
Qualquer cliente MCPSuportadoTransporte 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.

PrefixoProvedorCoberturaFerramentasObservações
espn_ESPN20+ esportes10Não oficial — pode falhar
nhl_NHL Web APINHL13Não documentado, mas estável
mlb_MLB Stats APIMLB/MiLB13Oficial, não documentado
f1_Jolpica F1Fórmula 1 (1950+)13Mantido pela comunidade
openf1_OpenF1Telemetria ao vivo da F112Apenas fins de semana de corrida ao vivo
openliga_OpenLigaDBFutebol alemão10Foco na Bundesliga
sportsdb_TheSportsDB40+ esportes13Chave de teste automática, marcas d'água
ncaa_NCAA APIEsportes universitários8Limite de 5 req/s
sportsrc_SportSRCFutebol, basquete, MMA + transmissões7V1 gratuito, V2 requer chave paga
lichess_LichessXadrez (usuários, melhores jogadores, transmissões, quebra-cabeça diário)7~20 req/seg/IP
chesscom_Chess.comXadrez (perfis, estatísticas, clubes, rankings)7Limita chamadas paralelas
squiggle_SquiggleAFL (Liga Australiana de Futebol)6UA honesta necessária
motogp_MotoGPMotoGP/Moto2/Moto3/MotoE7Não oficial — pode falhar
formulae_Formula EFórmula E7Não oficial — pode falhar
nascar_NASCARNASCAR Cup/Xfinity/Truck3Feeds CDN não oficiais
opendota_OpenDotaAnálises de Dota 21160 req/min, 50k/mês
sleeper_SleeperFantasy NFL10~1000 req/min
euroleague_EuroLeagueBasquete EuroLeague + EuroCup6Feeds sem chave
footballdata_uk_Football-Data.co.ukResultados históricos de futebol + odds2CSV, 25+ ligas

Dica: Use SPORTS_HUB_PROVIDERS=free para 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.

PrefixoProvedorCoberturaFerramentasLimite GratuitoObter Chave
pandascore_PandaScoreE-sports (13 títulos)141000 req/hCadastre-se
apifootball_API-FootballFutebol (960+ ligas)15100 req/diaCadastre-se
apisports_API-Sports9 esportes10100 req/dia/esporteCadastre-se
apitennis_API-TennisTênis (ATP/WTA/ITF)12100 req/diaCadastre-se
bdl_BallDontLieNBA/NFL/MLB/NHL10Nível básicoCadastre-se
cricket_CricketDataCríquete10100 req/diaCadastre-se
entitycricket_Entity SportCríquete (250+ competições)12Plano gratuitoCadastre-se
footballdata_football-data.orgFutebol (12 ligas)1110 req/minCadastre-se
sportmonks_SportmonksFutebol123000 req/hCadastre-se
sportsdata_SportsDataIO9 esportes121000 req/mêsCadastre-se
odds_The Odds APIOdds de 70+ esportes9500 req/mêsCadastre-se
oddsio_Odds-API.ioOdds de 34 esportes10Conta gratuitaCadastre-se
sgo_Sports Game OddsOdds de 55+ ligas10AvaliaçãoCadastre-se
lumify_LumifyOdds, divisões + análise de apostas com IA (8 esportes)14Chave de avaliação gratuitaCadastre-se
mma_Fighting TomatoesMMA8200 req/mêsCadastre-se
livegolf_Live Golf APIGolfe (PGA/DP World)8Nível gratuitoCadastre-se
isports_iSportsAPIFutebol/Basquete (Ásia)10Nível gratuitoCadastre-se
sportdevs_SportDevsRugby/Vôlei/Handebol12AvaliaçãoCadastre-se
msf_MySportsFeedsNFL/NBA/MLB/NHL12Gratuito para uso não comercialCadastre-se
golfcourse_GolfCourseAPI30 mil+ campos de golfe6300 req/diaCadastre-se
cfbd_College Football DataFutebol americano universitário (NCAA)141000 req/mêsCadastre-se
boxing_Boxing Data APIBoxe profissional (lutadores/lutas/títulos)8100 req/mêsCadastre-se
highlightly_HighlightlyMelhores momentos multi-esportes + odds6100 req/diaCadastre-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. Definir SPORTS_HUB_HOST=0.0.0.0 expõ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_ORIGINS deve 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=0 desativa 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

PresetProvedoresFerramentasPrecisa 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)~165Não
alltodos os 42 provedores410Sim (para provedores que exigem chave)
chesslichess, chesscom14Não
us-majorespn, nhl, mlb, ncaa, cfbd, bdl, msf, nascar, sleeper~93Alguns
soccerespn, apifootball, footballdata, sportmonks, openliga, sportsrc, footballdatauk, highlightly~73Alguns
f1f1, openf125Não
motorsportf1, openf1, motogp, formulae, nascar~42Não
esportspandascore, opendota25Alguns
oddsodds, oddsio, sgo, lumify43Sim
cricketcricket, entitycricket22Sim
golflivegolf, golfcourse14Alguns

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 carregam
  • sportshub://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

  1. Faça um fork do repositório
  2. Crie src/providers/my-api.ts exportando register(server: McpServer)
  3. Prefixe os nomes das ferramentas: myapi_get_something
  4. Importe e chame em src/index.ts
  5. npm run build para verificar
  6. Envie um PR

Licença

MIT