Sports Hub

io.github.lacausecrypto由 GitHub 账号 lacausecrypto 发布v1.4.1更新于 Oct 27, 2026

42 sports API providers, 410 tools: scores, stats, odds, esports, chess, motorsport & more.

已验证STDIO仅桌面金融数据与分析

概览

AI 生成的概览

把 42 个体育数据源聚合为一个 MCP 服务器,为助手提供 410 个工具,覆盖比分、数据、赔率、电竞、国际象棋和赛车。

可以做什么
  • 查询 70 多个项目的实时比分、积分榜、赛程、技术统计和球队球员数据
  • 从多个赔率数据源获取投注赔率与盘口
  • 查询电竞赛事与 Dota 2 分析,以及国际象棋棋手资料、排行榜和每日谜题
  • 读取 F1、MotoGP、Formula E 和 NASCAR 的赛事结果与实时遥测
  • 以资源形式浏览数据源与预设目录,并运行今日赛事、赔率对比等预设工作流
适用场景
适合希望用一个本地服务器回答体育类问题(赛程、赛果、积分榜、赔率或电竞数据),而不必分别接入多个体育 API 的场景。默认免费预设无需注册即可使用,便于先试用再添加密钥。
运行要求
通过 npx 或全局 npm 安装以 stdio 在本地运行,需要 Node.js 18+ 和 npm。可选的免费 API 密钥通过环境变量提供,例如 API_SPORTS_KEY、PANDASCORE_TOKEN 和 THE_ODDS_API_KEY;SPORTS_HUB_PROVIDERS 用于选择加载哪些数据源。需要能访问上游体育 API 的网络。
安装前请注意
密钥以环境变量形式传入并保存在客户端配置文件中。HTTP 模式默认无身份验证;绑定到所有网卡会让能访问该端口的任何人使用你配置的密钥,关闭 DNS 重绑定保护会削弱 Host/Origin 校验。部分数据源为非官方接口,可能失效,部分免费额度有速率限制或水印。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Sports Hub,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[Sports Hub]

Sports Hub MCP Server

[npm version] [npm downloads] [CI] [License]

[42 Providers] [410 Tools] [MCP Registry]

[macOS] [Linux] [Windows] [Node.js] [TypeScript]

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: [Claude] [ChatGPT] [Cursor] [Windsurf] [Zed] [Continue] [Cline]

Demo

[mcp-sports-hub demo]

NBA scores, Premier League odds, Tennis H2H — all from a single MCP server.

Compatibility

Platforms

OSStatus
macOSSupported
LinuxSupported
WindowsSupported

MCP Clients

ClientStatusNotes
Claude DesktopSupportedAnthropic's desktop app
Claude Code (CLI)Supportedclaude mcp add
CursorSupportedBuilt-in MCP
Windsurf (Codeium)SupportedBuilt-in MCP
Continue.devSupportedOpen-source AI assistant
ClineSupportedVS Code extension
ZedSupportedBuilt-in MCP
ChatGPT DesktopSupportedOpenAI desktop app
Gemini CLISupportedGoogle CLI
Any MCP clientSupportedStdio + 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 (42)

Works instantly — no API key, no signup (19 providers, ~165 tools)

These providers work out of the box. Just build and run.

PrefixProviderCoverageToolsNotes
espn_ESPN20+ sports10Unofficial — can break
nhl_NHL Web APINHL13Undocumented but stable
mlb_MLB Stats APIMLB/MiLB13Official, undocumented
f1_Jolpica F1Formula 1 (1950+)13Community-maintained
openf1_OpenF1F1 live telemetry12Live race weekends only
openliga_OpenLigaDBGerman football10Bundesliga focus
sportsdb_TheSportsDB40+ sports13Test key auto, watermarks
ncaa_NCAA APICollege sports85 req/s rate limit
sportsrc_SportSRCFootball, basketball, MMA + streams7V1 free, V2 needs paid key
lichess_LichessChess (users, top players, broadcasts, daily puzzle)7~20 req/sec/IP
chesscom_Chess.comChess (profiles, stats, clubs, leaderboards)7Throttles on parallel calls
squiggle_SquiggleAFL (Australian Football League)6Honest UA required
motogp_MotoGPMotoGP/Moto2/Moto3/MotoE7Unofficial — can break
formulae_Formula EFormula E7Unofficial — can break
nascar_NASCARNASCAR Cup/Xfinity/Truck3Unofficial CDN feeds
opendota_OpenDotaDota 2 analytics1160 req/min, 50k/mo
sleeper_SleeperNFL fantasy10~1000 req/min
euroleague_EuroLeagueEuroLeague + EuroCup basketball6Keyless feeds
footballdata_uk_Football-Data.co.ukHistorical football results + odds2CSV, 25+ leagues

Tip: Use SPORTS_HUB_PROVIDERS=free to load only these 19 providers (~165 tools).

Free tier with API key — signup required, no credit card (23 providers, ~245 tools)

Registration takes 1-2 minutes. All keys are free.

PrefixProviderCoverageToolsFree LimitGet Key
pandascore_PandaScoreEsports (13 titles)141000 req/hrSign up
apifootball_API-FootballSoccer (960+ leagues)15100 req/daySign up
apisports_API-Sports9 sports10100 req/day/sportSign up
apitennis_API-TennisTennis (ATP/WTA/ITF)12100 req/daySign up
bdl_BallDontLieNBA/NFL/MLB/NHL10Basic tierSign up
cricket_CricketDataCricket10100 req/daySign up
entitycricket_Entity SportCricket (250+ comps)12Free planSign up
footballdata_football-data.orgSoccer (12 leagues)1110 req/minSign up
sportmonks_SportmonksSoccer123000 req/hrSign up
sportsdata_SportsDataIO9 sports121000 req/moSign up
odds_The Odds API70+ sports odds9500 req/moSign up
oddsio_Odds-API.io34 sports odds10Free accountSign up
sgo_Sports Game Odds55+ leagues odds10TrialSign up
lumify_LumifyOdds, splits + AI bet analysis (8 sports)14Free trial keySign up
mma_Fighting TomatoesMMA8200 req/moSign up
livegolf_Live Golf APIGolf (PGA/DP World)8Free tierSign up
isports_iSportsAPIFootball/Basketball (Asia)10Free tierSign up
sportdevs_SportDevsRugby/Volleyball/Handball12TrialSign up
msf_MySportsFeedsNFL/NBA/MLB/NHL12Free non-commercialSign up
golfcourse_GolfCourseAPI30K+ golf courses6300 req/daySign up
cfbd_College Football DataNCAA football141000 req/moSign up
boxing_Boxing Data APIPro boxing (fighters/bouts/titles)8100 req/moSign up
highlightly_HighlightlyMulti-sport highlights + odds6100 req/daySign 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)

bash
npx mcp-sports-hub

npm global

bash
npm install -g mcp-sports-hubmcp-sports-hub

From source

bash
git clone https://github.com/lacausecrypto/mcp-sports-hub.gitcd mcp-sports-hubnpm installnpm 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 flagnpx mcp-sports-hub --http
# Via envSPORTS_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 503SPORTS_HUB_SESSION_TTL=1800   # seconds a session may sit idleSPORTS_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.

Configuration

Environment Variables

Only set keys for providers you want:

bash
# 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 registrationexport 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/keyexport LUMIFY_API_KEY="your-key"                # https://lumify.ai/

Windows (PowerShell):

powershell
$env:API_SPORTS_KEY = "your-key"$env:PANDASCORE_TOKEN = "your-token"

Windows (cmd):

cmd
set API_SPORTS_KEY=your-keyset 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.

jsonc
// 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

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

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
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)

bash
claude mcp add sports-hub node /absolute/path/to/mcp-sports-hub/dist/index.js

Or in .claude/settings.json:

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 (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 presetSPORTS_HUB_PROVIDERS=us-major npx mcp-sports-hub
# Pick specific providersSPORTS_HUB_PROVIDERS=espn,nhl,odds npx mcp-sports-hub
# Exclude from all (prefix with -)SPORTS_HUB_PROVIDERS=-sportsdata,-mma npx mcp-sports-hub

Presets

PresetProvidersToolsNeeds keys?
free (default)19 no-key providers (espn, nhl, mlb, f1, openf1, openliga, sportsdb, ncaa, sportsrc, lichess, chesscom, squiggle, motogp, formulae, nascar, opendota, sleeper, euroleague, footballdatauk)~165No
allall 42 providers410Yes (for key-required providers)
chesslichess, chesscom14No
us-majorespn, nhl, mlb, ncaa, cfbd, bdl, msf, nascar, sleeper~93Some
soccerespn, apifootball, footballdata, sportmonks, openliga, sportsrc, footballdatauk, highlightly~73Some
f1f1, openf125No
motorsportf1, openf1, motogp, formulae, nascar~42No
esportspandascore, opendota25Some
oddsodds, oddsio, sgo, lumify43Yes
cricketcricket, entitycricket22Yes
golflivegolf, golfcourse14Some

Cache

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

In Claude Desktop config:

json
"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 standingsmlb_get_game_boxscore      — MLB box scoref1_get_race_results        — F1 results (1950+)openf1_get_laps            — F1 live telemetrypandascore_get_lives       — Live esports matchesapifootball_get_fixtures   — Soccer fixtures (960+ leagues)odds_get_odds              — Betting odds (70+ sports)sportsrc_get_xg_stats      — Expected goals (xG)

MCP Resources & Prompts

Beyond tools, the server exposes:

Resources (readable catalogs, no API call):

  • sportshub://providers — the full provider catalog (prefix, name, coverage, required key)
  • sportshub://presets — all presets and the providers they load
  • sportshub://provider/{key} — details for one provider (with key autocompletion)

Prompts (curated slash-command workflows over the 410 tools):

  • whats-on-today · compare-odds {event} · motorsport-weekend {series} · league-standings {league} · team-deep-dive {team} · f1-race {season} {round}

All tools are annotated readOnly / idempotent so clients can skip confirmation prompts.

Architecture

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

Each provider exports register(server). Keys are checked at call time, not startup.

Contributing

  1. Fork the repository
  2. Create src/providers/my-api.ts exporting register(server: McpServer)
  3. Prefix tool names: myapi_get_something
  4. Import + call in src/index.ts
  5. npm run build to verify
  6. Submit a PR

License

MIT

来源:README.md,提交 5ecd395

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v1.4.1最新Oct 14, 2026
  2. v1.3.0Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分