mcpField
F
Fantasy Premier League (FPL)

Fantasy Premier League (FPL)

远程服务
github.com游戏娱乐06 天前更新

关于 Fantasy Premier League (FPL)

Fantasy Premier League (FPL) 是面向球队经理的 MCP 服务,提供球员数据、积分预测和球队决策参考。它结合当前与历史 FPL 数据,预测未来五个比赛周积分,并按规则优化阵容和转会。

主要功能

  1. 01搜索和比较球员数据
  2. 02查看球队与赛程信息
  3. 03预测未来最多五个比赛周的积分
  4. 04优化阵容并推荐转会
  5. 05提供队长和芯片选择建议
  6. 06对照基准追踪模型准确度

适用场景

  1. 01按位置、价格或数据比较球员
  2. 02为经理的阵容规划转会
  3. 03选择队长或决定芯片使用时机
  4. 04在预算内构建最优阵容

MCP 相关

MCP 服务提供实时及历史 FPL 数据、积分预测、阵容优化、转会建议、队长选择和芯片建议等工具。支持本地 stdio 和远程 HTTP 连接。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://fpl-mcp-9tiv.onrender.com/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

安装包
npmfpl-mcp-server0.2.0

工具

14

此工具无需参数。

详细介绍

fpl-mcp

Tests License: MIT

一个开源的英超梦幻联赛 MCP 服务,可与 Claude、ChatGPT、Grok、Cursor、VS Code 及任何其他 MCP 客户端配合使用。它从官方 FPL API 获取实时数据,并从 vaastav 数据集获取 2016-17 赛季起的历史数据,预测每位球员未来五个比赛周的积分,并推荐阵容、转会、队长和特殊道具。数据存储在 SQLite 或 Supabase 中。

无需安装即可试用:

  • 远程 URL:https://fpl-mcp-9tiv.onrender.com/mcp(claude.ai、ChatGPT、Grok、Cursor;参见连接 AI 客户端)
  • npm:npx -y fpl-mcp-server,适用于运行本地服务的应用(Claude Desktop、Cursor、VS Code)
  • Smithery 和官方 MCP Registry(io.github.GilbertKamau/fpl-mcp)

托管服务运行在免费方案上,因此在一段时间没有请求后,首次请求可能需要等待一分钟。

AI 助手使用 fpl-mcp 的预测回答“未来 3 个比赛周中,700 万英镑以下的最佳中场球员有哪些?”和“GW7 的最佳队长是谁?”

示例问题:“未来 3 个比赛周中,700 万英镑以下的最佳中场球员有哪些?”、 “为球队 1234567 推荐转会”、“这周该使用我的替补席加分吗?”

设置

需要 Python 3.12+。

git clone https://github.com/GilbertKamau/fpl_mcp.git && cd fpl_mcp
python -m venv .venv
# Windows: .venv\Scripts\activate     macOS/Linux: source .venv/bin/activate
pip install -e ".[supabase,dev]"
fpl-sync all       # load data (~3 min to SQLite; ~15 min to a remote Supabase the first time)
fpl-model all      # train the model and write predictions (~3-6 min the first time)

fpl-sync 任务:

任务功能用时
live球员、价格、伤病、球队、比赛周、赛程数秒
current本赛季每位球员的逐场统计数据(FPL API)约 1 分钟
history来自 vaastav 的历史赛季(使用 --seasons 2024-25 选择部分赛季)数分钟,一次
all以上所有内容
weeklylive + current,然后重新训练并刷新预测约 5 分钟

fpl-model 任务:evaluate(仅测试)、compare(并排比较特征集)、train、predict、all(训练 + 预测)。 重新加载历史数据后,添加 --refresh-cache,以重建本地历史赛季缓存。

数据库

默认使用 data/fpl.db 中的 SQLite。若要使用 Supabase,请将 .env.example 复制为 .env,并将 Supabase Session pooler 连接字符串粘贴为 DATABASE_URL(直接使用 db.<ref>.supabase.co 主机仅支持 IPv6)。 密码中的特殊字符会自动编码。 数据表会自动创建。

表内容
players、teams、gameweeks、fixtures当前赛季快照
player_gameweeks每个赛季中每位球员每场比赛一行。player_code 用于关联球员的跨赛季数据
season_teams各赛季的球队 ID → 名称
predictions每位球员在未来赛程中的预期积分
prediction_history所有预测记录及其基准数据,用于实时评分
model_artifacts已训练的模型
model_runs每次训练的运行记录、测试结果以及是否被接受
sync_log各项同步任务的运行时间

数据注意事项:2019-20 赛季的比赛周编号延续至 47(COVID 中断后恢复的比赛编号为 39-47); 2024-25 赛季包含 AM(助理经理)行,模型会忽略这些行;从 2022-23 赛季起提供 xG/xA 数据。

data/(SQLite 备份、缓存、日志)、models/ 和 .env 均已加入 Git 忽略列表,本地 pre-commit 钩子会阻止提交这些内容。

预测模型

LightGBM 根据开赛前可获取的信息,预测每位球员在每场比赛中的得分:

  • 状态: 最近 1、3、6、12 和 38 场比赛的滚动平均值(得分、出场时间、首发、xG、xA、奖励分、BPS、ICT、防守贡献……)
  • 市场: 该轮的持有率和净转会人数,以百分位表示(大众对球员健康状况和状态的判断)
  • 背景: 价格、位置、主客场、距上一场比赛的天数
  • 球队实力: 两支球队近期的进球数,以及预期进球(xG)和预期失球

每轮的预期得分是该轮各场比赛的得分之和,因此双赛周会计算两次。 伤病和停赛消息会根据球员出场的可能性,调整其下一轮的预测值。 训练好的模型会存储在数据库中,因此任何机器都可以用它进行预测。

往季测试。 采用滚动前推法:针对最近三个完整赛季中的每个赛季,模型仅使用更早的赛季训练,并预测该赛季的每场比赛。基准值为球员最近 6 场比赛的平均得分。

赛季模型 MAE基准 MAE常规首发球员:模型 / 基准
2023-240.9310.9992.19 / 2.40
2024-250.9881.0532.20 / 2.41
2025-260.9541.0552.26 / 2.55

总体而言,模型比基准值好 7.5%。加入最近一场的状态、整个赛季的状态和市场特征后,平均 MAE 从 0.982 降至 0.958,并且在每个测试赛季中都表现更好(运行 fpl-model compare 可重新测试)。只有在重新训练的模型优于基准值且不逊于当前模型时,才会启用它。

往季测试不包含伤病消息(没有历史记录),因此低估了实时预测准确度。此外,也无法与 FPL 自身的预期得分进行公平比较:历史 xP 列包含伤病消息,而 2025-26 赛季的数值采用了不同的尺度。

实时追踪。 每次预测都会存档。每轮结束后,会将截止时间前做出的预测与实际得分进行比较,并同时对照在同一时刻记录的两个基准值:6 场比赛基准值和 FPL 自身的预期得分(ep_next)。此外,还会比较每种方法排名前 20 的球员实际取得的得分。model_report 会显示持续更新的结果。

FPL 得分存在很大随机性(同样的表现可能得到 2 分,也可能得到 15 分),因此请将预测视为估算值。

优化器

使用 HiGHS(通过 PuLP)求解的整数规划,遵循 FPL 规则:2 名 GKP / 5 名 DEF / 5 名 MID / 3 名前锋,每家俱乐部最多 3 名球员,阵型有效,遵守预算限制,并且超过免费转会次数后每次转会扣 −4 分。之后各轮的得分会按每周 ×0.85 进行折扣,因为越远期的预测越不可靠。

对于经理的球队,只使用公开接口(无需登录)。球员卖出价格根据经理的转会历史估算(FPL 会保留任何价格涨幅的一半),免费转会次数则根据其轮次历史计算(最多可累积 5 次,在使用 Wildcard 和 Free Hit 的轮次也会保留)。自上一个截止时间后进行的转会尚未公开,因此不会纳入计算。

MCP 工具

工具功能
gameweek_status当前/下一轮比赛周及截止时间
search_players按位置、球队、价格、出场分钟数筛选;按任意统计数据排序
get_player统计数据、伤病消息、最近 6 场比赛、接下来 5 轮比赛周的赛程
compare_players并排比较 2-6 名球员,包含每 90 分钟数据和价值数据
get_fixtures某支球队接下来的赛程,或某一整轮比赛周的赛程
team_summary赛果、进球、零封、赛程安排、顶尖球员
player_season_history某名球员自 2016-17 赛季以来每个赛季的总数据
get_my_team按球队 ID 查询任意经理的阵容(公开,无需登录)
predict_points预测接下来 1-5 轮比赛周的预期得分,并排名
model_report模型与基线相比的准确度
optimal_squad根据预算从零开始组建最佳 15 人阵容
suggest_transfers为球队推荐最佳转会,或建议保留转会次数
pick_captain队长、副队长及排名前 5 的人选
chip_advice本半程还剩哪些特殊道具、各自价值多少,以及该使用还是保留
refresh_data重新获取实时快照

连接 AI 客户端

运行服务有两种方式:

  • 本地(stdio): AI 应用在你的电脑上启动服务。适用于 Claude Code、 Claude Desktop、Cursor 和 VS Code。不会向互联网公开任何内容。
  • 远程(HTTP): 将服务托管在公开的 HTTPS URL 上(参见部署)。 claude.ai、ChatGPT 和 Grok 必须使用此方式,因为它们无法在你的电脑上启动程序。

在以下示例中,/path/to/fpl_mcp/.venv/bin/python 是虚拟环境中的 Python (Windows:C:\path\to\fpl_mcp\.venv\Scripts\python.exe),而 https://your-server.example.com/mcp 是你部署后的 URL。

Claude Code
claude mcp add fpl -- /path/to/fpl_mcp/.venv/bin/python -m fpl_mcp.server        # local
claude mcp add --transport http fpl https://your-server.example.com/mcp          # remote
Claude Desktop

本地:前往 Settings > Developer > Edit Config,然后添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "fpl": { "command": "/path/to/fpl_mcp/.venv/bin/python", "args": ["-m", "fpl_mcp.server"] }
  }
}

远程:使用 Settings > Connectors > Add custom connector(与下文 claude.ai 的方式相同)。

claude.ai

前往 Settings > Connectors > Add custom connector,然后粘贴 https://your-server.example.com/mcp。 付费套餐可用;Team/Enterprise 用户需由所有者为组织添加。claude.ai 可连接无需登录或使用 OAuth 的服务,因此请将 MCP_AUTH_TOKEN 留空。

ChatGPT

开启 Developer mode(Settings > Apps & Connectors > Advanced),使用 URL https://your-server.example.com/mcp 创建连接器,并将身份验证设为 None,然后在聊天中从工具 菜单中选择它。不同套餐的可用性有所不同,请查看 OpenAI 的最新文档。与 claude.ai 一样,它无法 发送固定令牌,因此请将 MCP_AUTH_TOKEN 留空。

Grok(xAI API)

Grok 通过 xAI API 连接远程 MCP 服务:

from xai_sdk import Client
from xai_sdk.chat import user
from xai_sdk.tools import mcp

client = Client()  # reads XAI_API_KEY
chat = client.chat.create(
    model="grok-4.7",
    tools=[mcp(server_url="https://your-server.example.com/mcp", server_label="fpl")],
)
chat.append(user("Who should I captain in gameweek 7?"))
print(chat.sample().content)

或者使用 Responses API,将以下内容添加到 tools:

{ "type": "mcp", "server_url": "https://your-server.example.com/mcp", "server_label": "fpl" }

如果设置了 MCP_AUTH_TOKEN,也要传入 "authorization": "<token>"。

Cursor

添加到 ~/.cursor/mcp.json(所有项目)或 .cursor/mcp.json(单个项目):

{
  "mcpServers": {
    "fpl": { "command": "/path/to/fpl_mcp/.venv/bin/python", "args": ["-m", "fpl_mcp.server"] }
  }
}

远程:使用 "fpl": { "url": "https://your-server.example.com/mcp" };如果设置了令牌,还需添加 "headers": { "Authorization": "Bearer <token>" }。

VS Code(GitHub Copilot Agent 模式)

.vscode/mcp.json:

{
  "servers": {
    "fpl": { "type": "stdio", "command": "/path/to/fpl_mcp/.venv/bin/python", "args": ["-m", "fpl_mcp.server"] }
  }
}

远程:"fpl": { "type": "http", "url": "https://your-server.example.com/mcp" }。

其他客户端

任何支持 stdio 或 Streamable HTTP 的 MCP 客户端都可以使用。若要交互式试用服务: npx @modelcontextprotocol/inspector /path/to/fpl_mcp/.venv/bin/python -m fpl_mcp.server。

部署

托管服务只会读取数据库。数据处理、训练和预测在你自己的 机器(或任何定时任务)上通过 fpl-sync weekly 运行,托管服务会在 10 分钟内获取新的 预测。因此,你需要一个双方都能访问的数据库,例如 Supabase。

  1. 创建只读数据库用户,供公共服务使用:在 Supabase 的 SQL 编辑器中运行 scripts/supabase_readonly_role.sql。

  2. **部署。**在 Render 上:选择 New > Blueprint,选取此仓库的分叉, render.yaml 会完成配置。在其他平台(Fly.io、Railway、Google Cloud Run、VPS)上, 使用 Dockerfile。

  3. 设置环境变量:

    变量必需用途
    DATABASE_URL是只读用户的 Supabase Session pooler URI
    MCP_AUTH_TOKEN否如果设置,每个请求都需要 Authorization: Bearer <token>。Grok、Cursor 和 VS Code 可以发送此令牌;claude.ai 和 ChatGPT 不支持
    FPL_MCP_ALLOW_REFRESH否1 会开放 refresh_data 工具(托管时默认关闭)
    PORT否大多数托管平台会自动设置;默认值为 8000
  4. 你的 MCP URL 是 https://<your-app>/mcp。https://<your-app>/health 应返回 {"status":"ok"}。

要在本地运行 HTTP 服务:fpl-mcp --http(服务地址为 http://127.0.0.1:8000/mcp)。

没有令牌时,任何拥有此 URL 的人都可以调用这些工具。数据是公开的 FPL 数据,且服务为只读; 但如果 URL 被广泛分享,请设置令牌,或通过托管平台的访问控制来限制访问。

定时更新

GitHub Actions 会保持共享数据库为最新状态:

时间(UTC)模式执行内容
星期二 06:00weekly刷新数据和结果、重新训练、进行预测
星期五 06:00news刷新价格和伤病新闻、进行预测

可在 Actions 选项卡中手动运行(Scheduled update > Run workflow)。这需要一个具有写入权限的仓库密钥 DATABASE_URL,并且只会在主仓库中运行,不会在分叉仓库中运行。若要运行你自己的副本,请将密钥添加到 你的分叉仓库,并修改工作流中的 if: 行。

如果不使用 GitHub Actions,可通过 cron 或 Windows Task Scheduler 运行 fpl-sync weekly(或 fpl-sync live + fpl-model predict); scripts\update.ps1 可在 Windows 上封装这两种模式,并将日志写入 data\logs。

测试

.venv\Scripts\python -m pytest

路线图

  1. 数据处理管道(FPL API + vaastav → SQLite/Supabase)
  2. 只读 MCP 工具
  3. 积分预测:使用 LightGBM,并通过滚动平均基线进行向前验证(另含与 FPL 自身预期积分的实时跟踪)
  4. 优化器:最佳阵容、转会、队长、特殊道具建议
  5. 通过 GitHub Actions 定时更新(同步 → 重新训练 → 预测)
  6. 为 claude.ai、ChatGPT、Grok 和其他远程客户端提供 HTTP 托管
  7. 可选:将更改应用到你的 FPL 球队(默认仅预览)

贡献

欢迎提交问题和拉取请求。提交 PR 前请运行 pytest,并且不要提交 .env、data/ 或 models/。提交贡献即表示你同意依据本项目的 MIT License 授权该贡献。

许可

版权所有 (c) 2026 Gilbert Kamau。根据 MIT License 发布:你可以使用、复制、 修改和分发代码(包括用于商业用途),但须保留版权和许可声明。第三方软件和数据列于 THIRD_PARTY_NOTICES.md。

致谢与免责声明

历史数据来自 vaastav/Fantasy-Premier-League (代码采用 MIT License);实时数据来自公开的 FPL API。Fantasy Premier League 数据归 Premier League 所有;MIT License 仅适用于本项目代码,不适用于数据。 本项目与 Premier League 或 Fantasy Premier League 没有关联,也未获得其认可。 请负责任地使用 FPL API,并将预测视为估算值,而非保证结果。

评论

支持 Markdown

第一次接触 MCP?

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

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