io.github.lacausecrypto/sports-hub
29 sports API providers, 319 tools. Scores, stats, odds, esports, and more.
Ask AI about io.github.lacausecrypto/sports-hub
Powered by Claude Β· Grounded in docs
I know everything about io.github.lacausecrypto/sports-hub. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
Sports Hub MCP Server
A unified MCP server that aggregates 32 sports API providers into a single service. 336 tools covering scores, stats, odds, esports, college sports, chess, AFL, and more across 70+ sports.
Each provider works independently. You only need API keys for the providers you use. Missing keys don't block startup β tools return an error when called without their key.
Demo

NBA scores, Premier League odds, Tennis H2H β all from a single MCP server.
Compatibility
Platforms
| OS | Status |
|---|---|
| macOS | Supported |
| Linux | Supported |
| Windows | Supported |
MCP Clients
| Client | Status | Notes |
|---|---|---|
| Claude Desktop | Supported | Anthropic's desktop app |
| Claude Code (CLI) | Supported | claude mcp add |
| Cursor | Supported | Built-in MCP |
| Windsurf (Codeium) | Supported | Built-in MCP |
| Continue.dev | Supported | Open-source AI assistant |
| Cline | Supported | VS Code extension |
| Zed | Supported | Built-in MCP |
| ChatGPT Desktop | Supported | OpenAI desktop app |
| Gemini CLI | Supported | Google CLI |
| Any MCP client | Supported | Stdio + HTTP/SSE transport |
Uses the stdio transport from the MCP SDK. Works with any LLM (Claude, GPT, Gemini, Llama, Mistral, etc.).
Requirements: Node.js 18+, npm.
Providers (32)
Works instantly β no API key, no signup (12 providers, ~109 tools)
These providers work out of the box. Just build and run.
| Prefix | Provider | Coverage | Tools | Notes |
|---|---|---|---|---|
espn_ | ESPN | 20+ sports | 10 | Unofficial β can break |
nhl_ | NHL Web API | NHL | 13 | Undocumented but stable |
mlb_ | MLB Stats API | MLB/MiLB | 13 | Official, undocumented |
f1_ | Jolpica F1 | Formula 1 (1950+) | 13 | Community-maintained |
openf1_ | OpenF1 | F1 live telemetry | 12 | Live race weekends only |
openliga_ | OpenLigaDB | German football | 10 | Bundesliga focus |
sportsdb_ | TheSportsDB | 40+ sports | 13 | Test key auto, watermarks |
ncaa_ | NCAA API | College sports | 8 | 5 req/s rate limit |
sportsrc_ | SportSRC | Football, basketball, MMA + streams | 7 | V1 free, V2 needs paid key |
lichess_ | Lichess | Chess (users, top players, broadcasts, daily puzzle) | 7 | ~20 req/sec/IP |
chesscom_ | Chess.com | Chess (profiles, stats, clubs, leaderboards) | 7 | Throttles on parallel calls |
squiggle_ | Squiggle | AFL (Australian Football League) | 6 | Honest UA required |
Tip: Use
SPORTS_HUB_PROVIDERS=freeto load only these 12 providers (~109 tools).
Free tier with API key β signup required, no credit card (21 providers, ~227 tools)
Registration takes 1-2 minutes. All keys are free.
| Prefix | Provider | Coverage | Tools | Free Limit | Get Key |
|---|---|---|---|---|---|
pandascore_ | PandaScore | Esports (13 titles) | 14 | 1000 req/hr | Sign up |
apifootball_ | API-Football | Soccer (960+ leagues) | 15 | 100 req/day | Sign up |
apisports_ | API-Sports | 9 sports | 10 | 100 req/day/sport | Sign up |
apitennis_ | API-Tennis | Tennis (ATP/WTA/ITF) | 12 | 100 req/day | Sign up |
bdl_ | BallDontLie | NBA/NFL/MLB/NHL | 10 | Basic tier | Sign up |
cricket_ | CricketData | Cricket | 10 | 100 req/day | Sign up |
entitycricket_ | Entity Sport | Cricket (250+ comps) | 12 | Free plan | Sign up |
footballdata_ | football-data.org | Soccer (12 leagues) | 11 | 10 req/min | Sign up |
sportmonks_ | Sportmonks | Soccer | 12 | 3000 req/hr | Sign up |
sportsdata_ | SportsDataIO | 9 sports | 12 | 1000 req/mo | Sign up |
odds_ | The Odds API | 70+ sports odds | 9 | 500 req/mo | Sign up |
oddsio_ | Odds-API.io | 34 sports odds | 10 | Free account | Sign up |
sgo_ | Sports Game Odds | 55+ leagues odds | 10 | Trial | Sign up |
mma_ | Fighting Tomatoes | MMA | 8 | 200 req/mo | Sign up |
livegolf_ | Live Golf API | Golf (PGA/DP World) | 8 | Free tier | Sign up |
isports_ | iSportsAPI | Football/Basketball (Asia) | 10 | Free tier | Sign up |
sportdevs_ | SportDevs | Rugby/Volleyball/Handball | 12 | Trial | Sign up |
msf_ | MySportsFeeds | NFL/NBA/MLB/NHL | 12 | Free non-commercial | Sign up |
golfcourse_ | GolfCourseAPI | 30K+ golf courses | 6 | 300 req/day | Sign up |
cfbd_ | College Football Data | NCAA football | 14 | 1000 req/mo | Sign up |
Providers with missing keys don't block the server β they just return an error when called. Register keys incrementally as you need them.
Installation
Quick (npx β no install)
npx mcp-sports-hub
npm global
npm install -g mcp-sports-hub
mcp-sports-hub
From source
git clone https://github.com/lacausecrypto/mcp-sports-hub.git
cd mcp-sports-hub
npm install
npm run build
MCP Registry
This server is published on the official MCP Registry as io.github.lacausecrypto/sports-hub. MCP clients that support the registry can discover and install it automatically.
Transport Modes
Stdio (default β Claude Desktop, Cursor, etc.)
npx mcp-sports-hub
HTTP/SSE (remote clients, web apps, custom integrations)
# Via flag
npx mcp-sports-hub --http
# Via env
SPORTS_HUB_HTTP=1 SPORTS_HUB_PORT=3000 npx mcp-sports-hub
Endpoints:
POST /mcpβ MCP protocol (Streamable HTTP with SSE)GET /healthβ Health check ({"status":"ok","providers":9})
Supports CORS, session management via mcp-session-id header. Default port: 3000.
Configuration
Environment Variables
Only set keys for providers you want:
# Free β no key needed:
# ESPN, NHL, MLB, Jolpica F1, OpenF1, OpenLigaDB, NCAA, TheSportsDB (test key),
# SportSRC (V1), Lichess, Chess.com, Squiggle (AFL)
# 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
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
Claude Desktop
Config file locations:
- 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"
}
}
}
}
Windows path: "args": ["C:/Users/you/mcp-sports-hub/dist/index.js"]
Only include env vars for providers you need. Omit env entirely for free-only providers.
Claude Code (CLI)
claude mcp add sports-hub node /absolute/path/to/mcp-sports-hub/dist/index.js
Or in .claude/settings.json:
{
"mcpServers": {
"sports-hub": {
"command": "node",
"args": ["/absolute/path/to/mcp-sports-hub/dist/index.js"],
"env": {
"PANDASCORE_TOKEN": "your-token"
}
}
}
}
Provider Filtering
By default, only the free preset is loaded (9 providers, ~98 tools β no API keys needed). Use SPORTS_HUB_PROVIDERS to change what's loaded:
# Default β free providers only (no config needed)
npx mcp-sports-hub
# Load ALL 29 providers (319 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 | Providers | Tools | Needs keys? |
|---|---|---|---|
free (default) | espn, nhl, mlb, f1, openf1, openliga, sportsdb, ncaa, sportsrc, lichess, chesscom, squiggle | ~109 | No |
all | all 32 providers | 336 | Yes (for key-required providers) |
chess | lichess, chesscom | 14 | No |
us-major | espn, nhl, mlb, ncaa, cfbd, bdl, msf | ~79 | Some |
soccer | espn, apifootball, footballdata, sportmonks, openliga, sportsrc | ~69 | Some |
f1 | f1, openf1 | 25 | No |
esports | pandascore | 14 | Yes |
odds | odds, oddsio, sgo | 29 | Yes |
cricket | cricket, entitycricket | 22 | Yes |
golf | livegolf, golfcourse | 14 | Some |
Cache
All GET responses are cached in memory for 60 seconds by default. This protects against duplicate calls and rate limit waste. Configure with:
SPORTS_HUB_CACHE_TTL=120 # seconds (0 to disable)
In Claude Desktop config:
"env": {
"SPORTS_HUB_PROVIDERS": "us-major",
"THE_ODDS_API_KEY": "your-key"
}
Tool Naming
All tools follow {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)
Architecture
src/
βββ index.ts # Imports + registers all 29 providers
βββ shared/
β βββ http.ts # fetchJson, buildUrl, toolResult, errorResult
βββ 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
βββ 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
Each provider exports register(server). Keys are checked at call time, not startup.
Contributing
- Fork the repository
- Create
src/providers/my-api.tsexportingregister(server: McpServer) - Prefix tool names:
myapi_get_something - Import + call in
src/index.ts npm run buildto verify- Submit a PR
License
MIT
