mcpField
E
espn

espn

本地服务
github.com/christianclaudio游戏娱乐01 天前更新

关于 espn

为 AI Agent 提供 ESPN 实时及历史体育数据的 MCP 服务,涵盖比分、赔率、球员统计和预测。它将游戏、球队和新闻划分为独立领域,可通过服务配置选择。

主要功能

  1. 01实时与历史比分及赛程
  2. 02赔率、胜率和比赛预测
  3. 03球队、阵容和球员统计
  4. 04排名、榜单和交易记录
  5. 05可选的比赛、球队和新闻配置

适用场景

  1. 01跟踪实时比赛局势和胜率
  2. 02比较赔率与对阵预测
  3. 03查看球员简介、统计和比赛记录
  4. 04查询赛程、排名和联盟榜单

MCP 相关

通过 MCP 工具和资源提供 ESPN 公共体育数据。支持 stdio 与 Streamable HTTP,并可按领域选择服务配置。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"christianclaudio-espn": {
"command": "uvx",
"args": [
"mcp-server-espn"
],
"env": {
"ESPN_BASE_URL": "<ESPN_BASE_URL>",
"ESPN_TIMEOUT_SECONDS": "<ESPN_TIMEOUT_SECONDS>",
"ESPN_MAX_RETRIES": "<ESPN_MAX_RETRIES>",
"ESPN_MCP_READONLY": "<ESPN_MCP_READONLY>",
"ESPN_MCP_PROFILE": "<ESPN_MCP_PROFILE>",
"ESPN_MCP_ENABLE_TOOL_SEARCH": "<ESPN_MCP_ENABLE_TOOL_SEARCH>",
"ESPN_MCP_TOOL_SEARCH_BACKEND": "<ESPN_MCP_TOOL_SEARCH_BACKEND>"
}
}
}
}
启动命令uvx mcp-server-espn
需要配置的环境变量
ESPN_BASE_URLOptional REST base URL override
ESPN_TIMEOUT_SECONDSHTTP request timeout in seconds
ESPN_MAX_RETRIESMaximum retry attempts on HTTP 429 / 5xx
ESPN_MCP_READONLYRestrict server execution strictly to read-only inspection tools
ESPN_MCP_PROFILEServer domain profile (full, games, teams, news, readonly)
ESPN_MCP_ENABLE_TOOL_SEARCHReplace flat tool catalog with dynamic search transform
ESPN_MCP_TOOL_SEARCH_BACKENDTool Search backend: bm25 (default) or regex

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypimcp-server-espn2.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

🏈 mcp-server-espn

CI PyPI Python License: Apache-2.0 Coverage CodeRabbit Reviews

企业级 Model Context Protocol(MCP)服务,用于通过 ESPN 获取实时和历史体育数据分析、共识投注赔率及预测。
为 AI Agent 提供实时体育情报、实时胜率预测、深入的记分统计、阵容层级信息和对阵分析。


⚠️ 免责声明与合理使用声明

重要

社区项目免责声明
mcp-server-espn 是一个独立的开源社区项目,与 ESPN Inc. 或 The Walt Disney Company 没有任何关联,也未获得其赞助、认可或支持。“ESPN” 是 ESPN Inc. 的商标。通过 ESPN 公开 REST 接口提供的所有数据,旨在用于教育、研究和个人非商业用途。


💡 项目缘起

自主体育分析需要高速、结构化且可靠的数据流:

  1. 实时比赛状态与获胜概率: 实时比赛事件(失误、得分进攻、投手更换)会动态改变比赛势头和预期结果。
  2. 关键球员伤情与阵容深度调整: 比赛中的受伤或换人会从根本上改变球队效率和战术对阵。
  3. 共识赔率与预测模型: 汇总体育博彩公司的共识赔率(DraftKings、Caesars、ESPN BET)以及预测指标(FPI、BPI),可用于深入评估比赛数据。

mcp-server-espn 提供统一且经过加固的 Model Context Protocol 接口,直接连接 ESPN 的公开体育数据接口。


🏟️ 系统架构

graph TD
    Client["AI Agent / MCP Client<br>(Antigravity, Claude, Codex, Cortex)"]
    Gateway["Root FastMCP Gateway (espn-mcp)<br>(stdio / Streamable HTTP)"]
    ParentMW["Parent Middleware Pipeline<br>(ParentAuditMiddleware & ReadOnlyGateMiddleware)"]
    GamesSub["Sub-Server: espn-games<br>(games_* | GamesDomainGuard)"]
    TeamsSub["Sub-Server: espn-teams<br>(teams_* | TeamsDomainGuard)"]
    NewsSub["Sub-Server: espn-news<br>(news_* | Resources)"]
    ClientHandler["Hardened ESPN AsyncClient<br>(Connection Pool & 429 Jitter Backoff)"]
    ESPN["ESPN Public REST CDN<br>(https://site.web.api.espn.com)"]

    Client <-->|"JSON-RPC (tools/list, tools/call)"| Gateway
    Gateway --> ParentMW
    ParentMW --> GamesSub
    ParentMW --> TeamsSub
    ParentMW --> NewsSub
    GamesSub & TeamsSub & NewsSub <-->|"API Methods"| ClientHandler
    ClientHandler <-->|"HTTPS REST Mirror"| ESPN

🚀 FastMCP 4 服务组合

mcp-server-espn 通过 root.mount(..., namespace="...") 实现规范的 FastMCP 4 服务组合:

  • 领域子服务:划分为 espn-games(games_*)、espn-teams(teams_*)和 espn-news(news_*)。
  • 分层中间件:
    • 父级:ParentAuditMiddleware(计时日志、审计跟踪和敏感信息清理)以及 ReadOnlyGateMiddleware(失败时默认拒绝的只读强制机制)。
    • 子级:GamesDomainGuardMiddleware(查询限制验证,<= 100)和 TeamsDomainGuardMiddleware(球队和运动员标识符验证)。
  • 专用配置:通过 --profile full|games|teams|news|readonly(ESPN_MCP_PROFILE)运行轻量级功能集:
    • full(默认):挂载全部 33 个领域工具和资源。
    • games:比分、摘要、赛程、排名、排行榜、交易、联盟领跑者、选秀、实时比赛逐球记录、比赛情况、赔率、概率、预测器、日历、未来赛果和实力指数(20 个工具)。
    • teams:阵容、深度图、球员数据、运动员档案、简介、数据、比赛记录、分类统计、搜索、球队列表、球队详情、球队数据(12 个工具)。
    • news:联盟新闻和参考资源(1 个工具)。
    • readonly:对所有路由强制执行只读限制。
  • 选择启用工具搜索:默认保留标准的扁平 tools/list,确保与客户端无缝兼容;同时可通过 --enable-tool-search(ESPN_MCP_ENABLE_TOOL_SEARCH)启用搜索转换:默认使用 BM25 对自然语言查询进行排序(search_tools 接受 query),也可通过 --tool-search-backend regex(ESPN_MCP_TOOL_SEARCH_BACKEND=regex;search_tools 接受 pattern)使用正则表达式模式。

📈 体育智能工作流

工作流 1:实时比赛胜率与比赛情况跟踪
  1. 轮询正在进行的比赛: Agent 调用 games_get_scoreboard(sport="football", league="nfl"),找出下半场比分接近的比赛。
  2. 获取比赛情况与胜率: 调用 games_get_game_situation(sport="football", league="nfl", event_id="401872947") 和 games_get_win_probabilities(sport="football", league="nfl", event_id="401872947"),查看进攻档数/码数、红区状态和实时胜率曲线。
  3. 查看逐球记录: 调用 games_get_play_by_play(sport="football", league="nfl", event_id="401872947"),获取逐个进攻回合的比赛进程和得分事件记录。
工作流 2:深入分析运动员与梦幻体育估值
  1. 简介与职业生涯背景: 调用 teams_get_athlete_bio(sport="football", league="nfl", athlete_id="12483"),获取选秀顺位、大学经历和身体指标。
  2. 近期比赛记录与分类统计: 调用 teams_get_athlete_gamelog 和 teams_get_athlete_splits,分析球员面对特定防守战术和场馆条件时的表现趋势。
  3. 联盟整体排行榜排名: 调用 games_get_leaders_by_athlete(sport="football", league="nfl", category="passing", sort="yards"),评估百分位排名。

🏟️ 支持的体育项目与联赛参考表

服务支持规范的体育项目 / 联赛 slug 配对,并会自动规范化常见简称:

体育项目 Slug联赛 Slug可识别的简称 / 别名常用显示名称
footballnflnfl国家橄榄球联盟
footballcollege-footballcfb、ncaa-football、fbsNCAA 大学橄榄球
basketballnbanba国家篮球协会
basketballmens-college-basketballcbb、ncaa-basketballNCAA 男子大学篮球
basketballwomens-college-basketballwbb、ncaa-womens-basketballNCAA 女子大学篮球
basketballwnbawnba女子国家篮球协会
baseballmlbmlb美国职业棒球大联盟
hockeynhlnhl国家冰球联盟
soccereng.1epl、premier-league英格兰超级联赛
soccerusa.1mls美国职业足球大联盟
socceruefa.championsucl、champions-leagueUEFA 欧洲冠军联赛
socceresp.1la-liga西班牙足球甲级联赛
soccerita.1serie-a意大利足球甲级联赛
soccerger.1bundesliga德国足球甲级联赛
soccerfra.1ligue-1法国足球甲级联赛

📊 工具套件(33 个领域工具)

所有工具均实现了明确的 MCP 2.0 注解(readOnlyHint=True、idempotentHint=True):

领域工具参数描述
比赛games_get_scoreboardsport, league, date, week, season_type, group, limit任意日期(date=YYYYMMDD)或包含首尾日期的日期范围(date=YYYYMMDD-YYYYMMDD)的最终比分和赛果(最多 31 天的范围会逐日获取,因为 ESPN 会拒绝团队运动记分板的范围格式,因此 limit 适用于每天(最多 31 × limit 场赛事),任一天获取失败都会导致整个调用失败;高尔夫日期范围会原样发送给 ESPN);还包括实时比分、比赛状态(pre/in/post)、节次/计时、电视转播和预计首发球员。返回供其他比赛工具使用的赛事 ID。
比赛games_get_game_summarysport, league, event_id多家机构投注盘口共识、对阵预测胜率、ATS、得分进攻、推进过程、领先球员和比赛势头。
比赛games_get_team_schedulesport, league, team_id, season, season_type赛季赛程,包含历史比赛结果和比分:默认显示常规赛,使用 season_type=3 获取季后赛。
比赛games_get_standingssport, league, season分区、联盟和联赛总排名、胜负记录、落后场次和胜率。season 表示赛季结束年份(2016 = 2015-16 NBA 赛季),足球则表示赛季开始年份(2026 = 2026-27 Premier League 赛季);响应会回显 requested_season、season 和 season_display。
比赛games_get_rankingssport, league全国前 25 名投票榜和排名(AP Top 25、Coaches Poll、College Football Playoff)。
比赛games_get_transactionssport, league, limit联赛范围内的交易、阵容交易、弃权签约、签约和裁员。
比赛games_get_leaders_by_athletesport, league, limit, category, sort联赛球员统计排行榜。
比赛games_get_leaders_by_teamsport, league, limit, category, sort球队统计排名和排行榜。
比赛games_get_league_groupssport, league联赛联盟、分区和结构分组层级。
比赛games_get_league_eventssport, league, dates联赛当前已排期的赛事。ESPN 的赛事路由会忽略日期,因此不支持按日期筛选:提供 dates 值会返回 isError: true 且不会发起请求,并提示使用 games_get_scoreboard,将相同的值作为 date 传入。
比赛games_get_league_draftsport, league, season联赛选秀轮次、球队选择和选秀结果。
比赛games_get_scoreboard_headersport, league某项运动和联赛中各场比赛的实时滚动记分板标题数据。
比赛games_get_event_oddssport, league, event_id, competition_id体育博彩盘口共识和服务商赔率(让分、大小分、独赢盘)。
比赛games_get_play_by_playsport, league, event_id, limit, page逐回合比赛序列、计时、得分和推进事件。
比赛games_get_game_situationsport, league, event_id实时比赛情况(进攻档数、距离、码线、控球权、红区)。
比赛games_get_win_probabilitiessport, league, event_id比赛进程中的实时和历史胜率曲线。
比赛games_get_game_predictorsport, league, event_id赛前和赛中的对阵预测及预测指标。
比赛games_get_calendarsport, league, dates联赛赛程日历及整个赛季的有效赛事日期。
比赛games_get_futuressport, league, season赛季期货投注市场(冠军赔率、胜场总数)。
比赛games_get_power_indexsport, league, season球队实力指数(FPI / BPI)评分和效率指标。
球队teams_searchquery, type, limit按名称/关键词全局搜索运动员和球队(type="player" 或 "team")。
球队teams_list_teamssport, league指定联赛所有球队/俱乐部的目录,包含 ID、名称和标志。
球队teams_get_teamsport, league, team_id球队详情概览、场馆、战绩、排名摘要和即将举行的赛事。
球队teams_get_team_statisticssport, league, team_id球队和对手各统计类别的完整细分数据(传球、冲球等)。
球队teams_get_team_rostersport, league, team_id按位置分组的完整现役阵容、教练信息、球衣号码和伤病状态。
球队teams_get_team_depth_chartsport, league, team_id位置首发/替补层级(QB1、QB2 等),用于模拟伤病对人员替换的影响。
球队teams_get_player_statssport, league, event_id各比赛类别的运动员个人记分统计。
球队teams_get_athlete_overviewsport, league, athlete_id运动员个人资料、赛季/生涯统计、比赛记录、下一场比赛和 Rotowire 备注。
球队teams_get_athlete_biosport, league, athlete_id运动员详细背景、选秀历史、出生信息和大学经历。
球队teams_get_athlete_statssport, league, athlete_id, season运动员完整的赛季和生涯各类别统计数据。
球队teams_get_athlete_gamelogsport, league, athlete_id, season运动员整个赛季逐场比赛的表现记录。
球队teams_get_athlete_splitssport, league, athlete_id, season情境统计细分数据(主场/客场、人造草坪/天然草坪、按月、对阵不同对手)。
新闻news_get_newssport, league, limit最新新闻标题、伤病状态和突发阵容分析。

🏃 快速开始与安装

1. 通过 uvx 直接运行(无需安装)

[project.scripts] 中的控制台脚本都会调用 espn_mcp.server:main:espn-mcp(下文使用)和 mcp-server-espn。安装示例不会固定版本。若要锁定某个版本,请选择 Releases 中的版本。

uvx --from mcp-server-espn espn-mcp

升级后,请重新加载 MCP 宿主,确保运行中进程的启动时间晚于新二进制文件的修改时间(旧进程 ≠ 新软件包)。

2. 通过 pip 或 uv 安装
# Using pip
pip install mcp-server-espn

# Using uv
uv add mcp-server-espn
3. 通过 Docker 运行
docker run --rm -i ghcr.io/christianclaudio/mcp-server-espn:latest

🎛️ 引擎配置

变量CLI 标志默认值描述
ESPN_BASE_URL—https://site.web.api.espn.com目标 ESPN REST CDN 基础 URL(绕过 Akamai TLS 过滤器)
ESPN_TIMEOUT_SECONDS—30.0HTTP 请求超时时间(秒)
ESPN_MCP_AUTH_TOKEN—未设置HTTP 传输所需的共享 bearer 令牌(stdio 不使用此令牌)
ESPN_MCP_ALLOW_UNAUTHENTICATED_BIND—未设置1 表示允许在非 localhost 主机上绑定不带令牌的 HTTP
ESPN_MAX_RETRIES—3遇到 429 / 5xx 时的最大重试次数,采用带随机抖动的指数退避;若 Retry-After 要求等待更久,则延长等待时间(上限为 ESPN_TIMEOUT_SECONDS)
ESPN_MCP_READONLY—0将服务严格限制为只读检查工具
ESPN_MCP_PROFILE--profilefull域子服务配置:full、games、teams、news、readonly
ESPN_MCP_ENABLE_TOOL_SEARCH--enable-tool-search0将扁平工具目录替换为动态搜索转换(search_tools + call_tool)
ESPN_MCP_TOOL_SEARCH_BACKEND--tool-search-backendbm25工具搜索后端:bm25(BM25SearchTransform,按自然语言进行排序;search_tools 接受 query)或 regex(RegexSearchTransform,使用正则表达式模式;search_tools 接受 pattern)

🎮 客户端集成指南

🧡 Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):

{
  "mcpServers": {
    "espn": {
      "command": "uvx",
      "args": ["--from", "mcp-server-espn", "espn-mcp"],
      "env": {
        "ESPN_TIMEOUT_SECONDS": "20.0"
      }
    }
  }
}

对于 Claude Code CLI:

claude mcp add espn -- uvx --from mcp-server-espn espn-mcp
♊ Google Antigravity & Gemini CLI

添加到 .agents/mcp_config.json 或 ~/.gemini/config/mcp_config.json:

{
  "mcpServers": {
    "espn": {
      "command": "uvx",
      "args": ["--from", "mcp-server-espn", "espn-mcp"],
      "env": {
        "ESPN_TIMEOUT_SECONDS": "20.0"
      },
      "lazy": true
    }
  }
}
❄️ Snowflake Cortex

添加到 ~/.snowflake/cortex/mcp.json:

{
  "mcpServers": {
    "espn": {
      "command": "uvx",
      "args": ["--from", "mcp-server-espn", "espn-mcp"],
      "env": {
        "ESPN_TIMEOUT_SECONDS": "20.0"
      },
      "lazy": true
    }
  }
}
⚡ Cursor IDE

添加到 .cursor/mcp.json:

{
  "mcpServers": {
    "espn": {
      "command": "uvx",
      "args": ["--from", "mcp-server-espn", "espn-mcp"]
    }
  }
}
💻 VS Code(Cline / Roo Code / Copilot Agent Mode)

添加到 cline_mcp_settings.json 或 .vscode/settings.json:

{
  "mcpServers": {
    "espn": {
      "command": "uvx",
      "args": ["--from", "mcp-server-espn", "espn-mcp"]
    }
  }
}
🌐 本地 HTTP / 网络传输模式

通过现代 Streamable HTTP 启动 FastMCP 服务:

uvx --from mcp-server-espn espn-mcp --transport streamable-http --host 127.0.0.1 --port 8000

将 Streamable HTTP 客户端连接到 http://127.0.0.1:8000/mcp(FastMCP 默认的 Streamable HTTP 路径)。

在默认的(有状态)HTTP 模式下,空闲 30 分钟的会话会过期:下一次请求将收到 HTTP 404,客户端必须启动新会话。可通过 FastMCP 的 session_idle_timeout(在 http_app() 上设置)或 FASTMCP_HTTP_SESSION_IDLE_TIMEOUT(秒数;设为 none 则永不过期)更改此设置;请参阅 FastMCP 4.1.0 版本说明和 #5229。

HTTP 身份验证。 设置 ESPN_MCP_AUTH_TOKEN,即可要求每个 HTTP 请求都携带 Authorization: Bearer <token>;缺少令牌或令牌错误时会返回 401。令牌会先去除首尾空白,空值视为未设置。令牌会在构建服务时附加,因此 espn-mcp、fastmcp run 和挂载 mcp.http_app() 的 ASGI 主机都会执行此验证。stdio 不使用此令牌。

未设置令牌时,espn-mcp 不允许将 HTTP 绑定到 127.0.0.1、::1 或 localhost 以外的主机,并会以代码 2 退出。设置令牌、绑定到 localhost,或设置 ESPN_MCP_ALLOW_UNAUTHENTICATED_BIND=1,即可允许未经过身份验证的公网绑定。其他入口会获取令牌,但不会执行 localhost 检查:fastmcp run 和 http_app() 不会经过 espn-mcp 的 main(),因此在这些入口中,不带令牌绑定到 0.0.0.0 不会被拒绝,且服务不会进行身份验证。绑定地址由主机或其进程管理器负责,因此应在那里设置 ESPN_MCP_AUTH_TOKEN。

若要通过 HTTP 提供图像,请从 shell 或环境文件传入令牌(切勿使用固定值),并指定客户端使用的公共主机名:

PUBLIC_HOST=mcp.example.com   # the host name clients use
export ESPN_MCP_AUTH_TOKEN="$(openssl rand -hex 32)"   # or keep it in an env file
docker run --rm -p 8000:8000 -e ESPN_MCP_AUTH_TOKEN \
  ghcr.io/christianclaudio/mcp-server-espn:latest \
  --transport streamable-http --host 0.0.0.0 --allowed-host "$PUBLIC_HOST"
# with an env file instead: docker run --rm -p 8000:8000 --env-file espn.env ...

📚 权威文档与实时文档 MCP 服务

开发、加固或扩展 MCP 服务时,请查阅官方框架和协议参考资料:

  • FastMCP 4 框架参考:https://gofastmcp.com/llms.txt — 服务组合(mount)、分层中间件、转换(ToolTransform、ToolSearch)、生命周期以及内存中的测试客户端。
  • Model Context Protocol 规范:https://modelcontextprotocol.io/llms.txt — 官方规范(2026-07-28)、线路级 JSON-RPC 架构、注解和传输帧格式。
实时文档 MCP 端点(SSE / Streamable HTTP)

将 AI 编码 Agent 直接连接到实时文档服务:

  • FastMCP 文档服务:https://gofastmcp.com/mcp(工具:search_fast_mcp、query_docs_filesystem_fast_mcp、submit_feedback)
  • Anthropic MCP 文档服务:https://modelcontextprotocol.io/mcp(工具:search_model_context_protocol、query_docs_filesystem_model_context_protocol、submit_feedback)
{
  "mcpServers": {
    "fastmcp-docs": { "type": "sse", "url": "https://gofastmcp.com/mcp" },
    "mcp-official-docs": { "type": "sse", "url": "https://modelcontextprotocol.io/mcp" }
  }
}

🏆 验证与质量门禁

# Run unit test suite (100% statement coverage enforced)
pytest

# Static type safety & formatting
mypy --strict src/
ruff check --fix .
ruff format .

# Tool contract, drift & protocol conformance audits
python scripts/check_tool_contract.py
python scripts/check_openapi_drift.py
./scripts/check_conformance.sh

📜 许可证

基于 Apache-2.0 License 发布。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。