41 sports API providers, 396 tools: scores, stats, odds, esports, chess, motorsport & more.
Sports Hub MCP Server
This Model Context Protocol (MCP) server provides access to sports data aggregated from 41 sports API providers with 396 tools. It covers scores, stats, odds, esports, chess, and motorsport, among other sports categories. The package is identified as io.github.lacausecrypto/sports-hub and is distributed via npm.
๐ ๏ธ Key Features
41 sports API providers
396 tools
Data categories include scores, stats, and odds
Also supports esports, chess, and motorsport
๐ Use Cases
Retrieve sports scores and stats
Use sports odds data for betting-related workflows
Query esports, chess, and motorsport sources alongside mainstream sports
โก Developer Benefits
Tool-based MCP integration with 396 available tools
Topic alignment for common sports domains (e.g., NFL, NBA, MLB, soccer, F1)
TypeScript ecosystem indicated by the server topics
โ ๏ธ Limitations
The provided description does not specify authentication, rate limits, or tool-by-tool input/output formats.
A unified MCP server that aggregates 42 sports API providers into a single service. 410 tools covering scores, stats, odds, esports, college sports, chess, motorsport, boxing, 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.
Works with:
Demo
mcp-sports-hub 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 (19 providers, ~165 tools)
These providers work out of the box. Just build and run.
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)
bash
npx mcp-sports-hub
npm global
bash
npm install -g mcp-sports-hub
mcp-sports-hub
From source
bash
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.)
bash
npx mcp-sports-hub
HTTP/SSE (remote clients, web apps, custom integrations)
bash
# 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":19,"sessions":0,"mode":"session"})
Supports CORS and multi-client session management via the mcp-session-id header. Default port: 3000.
Each client gets its own session, created on initialize and addressed afterwards by its session id. Building a session costs ~90 ms for the 165-tool free preset, paid once per client rather than per request. Idle sessions are reaped.
bash
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 suits several replicas behind a load balancer with no sticky routing. It pays the build cost on every call, so prefer sessions for a single instance.
โ Security: HTTP mode binds to 127.0.0.1 (loopback) by default. Setting SPORTS_HUB_HOST=0.0.0.0 exposes an unauthenticated MCP endpoint to your whole network โ anyone who can reach it can use your configured API keys. DNS-rebinding protection only blocks browser-origin attacks, not direct clients. Only expose it behind a reverse proxy with auth/TLS. SPORTS_HUB_CORS_ORIGINS must list explicit origins (a literal * is rejected).
Hosted (Smithery)
A Dockerfile and smithery.yaml are included for container hosting on Smithery. The hosted endpoint serves the keyless free preset, so clients connect with zero setup. The deploy sets SPORTS_HUB_DNS_REBINDING_PROTECTION=0 because Smithery's proxy forwards a non-localhost Host header.
SPORTS_HUB_DNS_REBINDING_PROTECTION=0 disables the Host/Origin check (it is on by default). Only set it when the server runs behind a trusted proxy that owns routing โ never for a server directly reachable by browsers on localhost.
set API_SPORTS_KEY=your-key
set PANDASCORE_TOKEN=your-token
Response size and the fields parameter
Sports APIs return very wide objects, and every byte a tool returns is spent from the model's context window. A single espn_get_scoreboard-style team listing is ~300 KB of JSON, of which the part anyone wants is under 3 KB.
Every tool accepts an optional fields parameter: a comma-separated list of key names to keep, matched at any depth. Branches that match nothing are dropped, and a matched key keeps its whole value.
If fields matches nothing, the tool says so and lists the top-level keys it did see, rather than returning an empty object.
Responses are also capped. Above the limit, the longest lists in the payload are shortened until it fits (so the JSON still parses) and a note reports how many items were dropped.
bash
SPORTS_HUB_MAX_RESULT_BYTES=40000 # default; serialized bytes per tool result
By default, only the free preset is loaded (19 providers, ~165 tools โ no API keys needed). Use SPORTS_HUB_PROVIDERS to change what's loaded:
bash
# 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
All GET responses are cached in memory for 60 seconds by default. This protects against duplicate calls and rate limit waste. Configure with:
bash
SPORTS_HUB_CACHE_TTL=120 # seconds (0 to disable)
The cache key includes a digest of the request's auth headers, so two API keys never read each other's entries. Concurrent identical requests are collapsed into a single upstream call, and a 404/410 is remembered briefly (SPORTS_HUB_NEGATIVE_CACHE_TTL, default 30s) so a wrong ID can't be re-fetched in a loop.
Rate limits and retries
429 and 5xx responses are retried with exponential backoff, honouring Retry-After when the upstream sends one. Client errors (4xx other than 408/425/429) and timeouts are not retried.
bash
SPORTS_HUB_MAX_RETRIES=2 # extra attempts after the first (0 disables)
SPORTS_HUB_RETRY_BASE_MS=300 # backoff base; doubles per attempt