eliteprospects

CLI não oficial + servidor MCP para eliteprospects.com Recursos

Documentação

eliteprospects

Acesso não oficial aos dados de hóquei do eliteprospects.com — ligas, times, jogadores e equipe técnica — como saída estruturada em vez de HTML raspado.

Ele vem em duas formas apoiadas pelo mesmo núcleo TypeScript: uma ferramenta de linha de comando para navegar e pesquisar a partir do terminal (com --json para canalizar para outras ferramentas), e um servidor MCP que expõe as mesmas consultas a clientes MCP como o Claude. Sem chave de API e sem etapa de build.

Requisitos

  • Bun >= 1.0 (executa TypeScript nativamente — sem etapa de build)

Uso

# List all leagues
./bin/eliteprospects leagues

# Filter by country — accepts a 2- or 3-letter code (DK or DNK)
./bin/eliteprospects leagues --country DK

# Machine-readable output
./bin/eliteprospects leagues --json

# Show a single league: metadata, teams, and available seasons
./bin/eliteprospects leagues denmark-u18

# A specific season
./bin/eliteprospects leagues denmark-u18 --season 2024-2025

# Show a team by id: metadata, roster, and available seasons
./bin/eliteprospects teams 42107
./bin/eliteprospects teams 42107 --season 2024-2025

# Show a player's profile by id (bio, draft, current team)
./bin/eliteprospects players 8862

# Look a player up by name instead of id (renders only on a single match)
./bin/eliteprospects players --search "connor mcdavid"

# Show a staff member's profile by id (role, current team)
./bin/eliteprospects staff 14739

# Staff can be looked up by name too
./bin/eliteprospects staff --search "daniel rasmussen"

# Search by name (across players, staff, teams, leagues)
./bin/eliteprospects search "connor mcdavid"

# Limit search to one type (--player, --staff, --team, --league)
./bin/eliteprospects search rasmussen --staff

# Help
./bin/eliteprospects help

search é a forma de encontrar um id para alimentar os outros comandos. Ele retorna uma coluna TYPE para que o id de um resultado possa ser usado com players, staff, teams ou leagues conforme apropriado. Para o caso comum de consultar uma única pessoa, players/staff também aceitam --search <name>, que executa a busca por você e renderiza o perfil quando há exatamente uma correspondência (gerando erro e listando os candidatos quando há várias).

Jogadores e equipe técnica são comandos separados porque são namespaces de id separados: o jogador 14739 e o membro da equipe 14739 são pessoas diferentes. Uma pessoa pode ter tanto um perfil de jogador quanto um de equipe técnica (por exemplo, Daniel Rasmussen é o jogador 16271 e o membro da equipe 14739), e cada perfil aponta para o outro em sua saída.

Servidor MCP

A mesma funcionalidade é exposta a clientes MCP (por exemplo, Claude) por bin/eliteprospects-mcp, um servidor Model Context Protocol que fala JSON-RPC 2.0 sobre stdio. Ele não tem dependências — o protocolo é implementado diretamente em src/mcp.ts.

Ferramentas:

FerramentaArgumentosDescrição
searchquery, type?Buscar jogadores, equipe técnica, times e ligas por nome
list_leaguescountry?Listar ligas, opcionalmente filtradas por código de país
get_leagueslug, season?Metadados da liga, times, temporadas
get_teamid, season?Metadados do time e elenco
get_playeridPerfil do jogador
get_staffidPerfil da equipe técnica

Registre-o com um cliente MCP apontando para o launcher, por exemplo, em uma configuração mcpServers:

{
  "mcpServers": {
    "eliteprospects": {
      "command": "bun",
      "args": ["/absolute/path/to/eliteprospects/bin/eliteprospects-mcp"]
    }
  }
}

Veja também: https://coworkerai.io/guide/mcp-setup

Como funciona

EliteProspects é um site Next.js. Duas fontes de dados são usadas, ambas JSON estruturado em vez de HTML raspado:

  • Páginas de índice (por exemplo, /leagues) incorporam seus dados em uma tag <script id="__NEXT_DATA__">. Veja src/leagues.ts.
  • Páginas de detalhe (por exemplo, /league/<slug>) ficam atrás de um desafio Cloudflare em sua forma renderizada, então buscamos o endpoint de dados do Next.js /_next/data/<buildId>/<route>.json, que retorna o mesmo pageProps e não é desafiado. O buildId muda a cada deploy, então é lido em tempo de execução da página /leagues acessível e armazenado em cache. Veja src/client.ts e src/league.ts.

A busca usa um backend completamente diferente: a API de autocomplete do site em autocomplete.eliteprospects.com (a mesma que a caixa de busca do site usa). É um host separado, sem autenticação — não está atrás do desafio Cloudflare e não está sujeito aos limites de membros do formulário de busca do site. O endpoint /all retorna tipos mistos (cada um marcado com _type); /players, /staff, /teams e /leagues retornam cada um um único tipo. Veja src/search.ts.

As URLs de times, jogadores e equipe técnica carregam tanto um id quanto um slug (/team/42107/aalborg-u18, /player/8862/joe-sakic, /staff/14739/daniel-rasmussen). Uma requisição apenas pelo id faz um soft-redirect para o caminho canônico, que o scraper segue para descobrir o slug — então teams, players e staff funcionam apenas com o id numérico. Essa resolução id→slug vive em fetchEntityData (src/client.ts) e é compartilhada por src/team.ts e src/profile.ts.

Códigos de país

EliteProspects identifica países com códigos ISO 3166-1 alpha-3 (DNK). A saída e o filtro --country usam a forma mais universal alpha-2 (DK); ambas as formas são aceitas como entrada. As duas nações domésticas do Reino Unido que a EP lista separadamente — Inglaterra e Escócia — não são países ISO e não têm alpha-2, então mantêm os códigos de subdivisão ISO 3166-2 GB-ENG / GB-SCT (distintos de GB = Reino Unido). O mapeamento é uma tabela ISO embutida e verificada — veja src/countries.ts.

Estrutura do projeto

Desenvolvimento

bun install     # install dev dependencies (TypeScript, @types/bun)
bun run typecheck