gameweek_status
Current and next gameweek, the next deadline, and when the data was last refreshed.
无需输入参数。

io.github.GilbertKamau由 GitHub 账号 GilbertKamau 发布v0.2.1更新于 Oct 24, 2026
FPL data, points predictions, and transfer, captain and chip advice for any team.
梦幻英超(FPL)MCP 服务器:提供实时 FPL 数据、积分预测,以及阵容、转会、队长和芯片建议。
Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。
把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。
阅读 https://sourceweft.com/mcp/io.github.GilbertKamau%2Ffpl-mcp/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。把它添加到你客户端的 mcpServers 配置中。
{
"mcpServers": {
"fantasy-premier-league-fpl": {
"type": "http",
"url": "https://fpl-mcp-9tiv.onrender.com/mcp"
}
}
}An open-source MCP server for Fantasy Premier League that works with Claude, ChatGPT, Grok, Cursor, VS Code and any other MCP client. It pulls live data from the official FPL API and past seasons (2016-17 onward) from the vaastav dataset, predicts every player's points for the next five gameweeks, and recommends squads, transfers, captains and chips. Data lives in SQLite or Supabase.
Try it without installing anything:
https://fpl-mcp-9tiv.onrender.com/mcp (claude.ai, ChatGPT, Grok, Cursor; see Connecting AI clients)npx -y fpl-mcp-server for apps that run local servers (Claude Desktop, Cursor, VS Code)io.github.GilbertKamau/fpl-mcp)The hosted server runs on a free plan, so the first request after a quiet spell can take a minute.
Example questions: "Who are the best midfielders under £7m for the next 3 gameweeks?", "Suggest transfers for team 1234567", "Should I play my Bench Boost this week?"
Requires Python 3.12+.
fpl-sync jobs:
fpl-model jobs: evaluate (test only), compare (feature sets side by side), train, predict, all (train + predict).
Add --refresh-cache after re-loading history, so the local cache of past seasons is rebuilt.
SQLite at data/fpl.db by default. To use Supabase, copy .env.example to .env and paste your
Supabase Session pooler connection string as DATABASE_URL (the direct db.<ref>.supabase.co
host is IPv6-only). Special characters in the password are encoded automatically.
Tables are created automatically.
Data quirks: 2019-20 gameweeks run to 47 (the COVID restart was numbered 39-47);
2024-25 includes AM (assistant manager) rows, which the model ignores; xG/xA exist from 2022-23 onward.
data/ (SQLite backup, cache, logs), models/ and .env are git-ignored, and a local
pre-commit hook refuses to commit them.
LightGBM predicts each player's points per fixture from information available before kick-off:
A gameweek's expected points is the sum over its fixtures, so double gameweeks count twice. Injury and suspension news scales the next gameweek's prediction by FPL's chance of playing. The trained model is stored in the database, so any machine can make predictions with it.
Testing on past seasons. Walk-forward: for each of the last three complete seasons, the model is trained only on earlier seasons and predicts every fixture. The baseline is the player's average points over their last 6 matches.
That is 7.5% better than the baseline overall. Adding last-match form, season-long form and the
market features improved the average MAE from 0.982 to 0.958 and was better in every test season
(fpl-model compare reruns this). A retrained model is only used if it beats the baseline and is
no worse than the current model.
Past-season tests have no injury news (there's no historical record of it), so they understate
live accuracy. They also can't fairly be compared with FPL's own expected points: the historical
xP column includes injury news, and its 2025-26 values are on a different scale.
Live tracking. Every prediction is archived. After each gameweek, the prediction made before
the deadline is scored against actual points, next to two benchmarks recorded at the same moment:
the 6-match baseline and FPL's own expected points (ep_next). It also compares what each method's
top 20 players actually scored. model_report shows the running results.
FPL points are very noisy (a 2-pointer and a 15-pointer can come from the same performance), so treat predictions as estimates.
Integer programs solved with HiGHS (via PuLP) that follow FPL rules: 2 GKP / 5 DEF / 5 MID / 3 FWD, max 3 per club, a valid formation, the budget, and −4 per transfer beyond the free ones. Points for later gameweeks are discounted (×0.85 per week) because predictions further out are less reliable.
For a manager's team it uses public endpoints only (no login). Selling prices are estimated from the manager's transfer history (FPL keeps half of any price rise), and free transfers from their gameweek history (up to 5 banked, kept through Wildcard and Free Hit weeks). Transfers made since the last deadline aren't public yet, so they aren't included.
There are two ways to run the server:
In the examples, /path/to/fpl_mcp/.venv/bin/python is the Python inside your virtual
environment (Windows: C:\path\to\fpl_mcp\.venv\Scripts\python.exe), and
https://your-server.example.com/mcp is your deployed URL.
Local: Settings > Developer > Edit Config, then add to claude_desktop_config.json:
Remote: use Settings > Connectors > Add custom connector (same as claude.ai below).
Settings > Connectors > Add custom connector, and paste https://your-server.example.com/mcp.
Available on paid plans; on Team/Enterprise an owner adds it for the organization. claude.ai
connects to servers without a login or with OAuth, so leave MCP_AUTH_TOKEN unset.
Turn on Developer mode (Settings > Apps & Connectors > Advanced), create a connector with the URL
https://your-server.example.com/mcp and authentication None, then pick it from the tools
menu in a chat. Plan availability varies, so check OpenAI's current docs. Like claude.ai, it can't
send a fixed token, so leave MCP_AUTH_TOKEN unset.
Grok connects to remote MCP servers through the xAI API:
Or with the Responses API, add this to tools:
If you set MCP_AUTH_TOKEN, also pass "authorization": "<token>".
Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
Remote: "fpl": { "url": "https://your-server.example.com/mcp" }, plus
"headers": { "Authorization": "Bearer <token>" } if you set a token.
.vscode/mcp.json:
Remote: "fpl": { "type": "http", "url": "https://your-server.example.com/mcp" }.
Any MCP client that supports stdio or Streamable HTTP works. To try the server interactively:
npx @modelcontextprotocol/inspector /path/to/fpl_mcp/.venv/bin/python -m fpl_mcp.server.
The hosted server only reads the database. Data, training and predictions run on your own
machine (or any scheduled job) with fpl-sync weekly, and the hosted server picks up new
predictions within 10 minutes. You therefore need a database both can reach, such as Supabase.
Create a read-only database user for the public server: run
scripts/supabase_readonly_role.sql in Supabase's SQL editor.
Deploy. On Render: New > Blueprint, pick your fork of this repo, and
render.yaml sets it up. Elsewhere (Fly.io, Railway, Google Cloud Run, a VPS),
use the Dockerfile.
Set environment variables:
Your MCP URL is https://<your-app>/mcp. https://<your-app>/health should return {"status":"ok"}.
To run the HTTP server locally: fpl-mcp --http (serves http://127.0.0.1:8000/mcp).
Without a token, anyone with the URL can call the tools. The data is public FPL data and the server is read-only, but if the URL gets shared widely, set a token or put it behind your host's access controls.
GitHub Actions keeps the shared database fresh:
Run it by hand from the Actions tab (Scheduled update > Run workflow). It needs a repository secret
DATABASE_URL with write access, and only runs in the main repository, not in forks. To run your
own copy, add the secret to your fork and change the if: line in the workflow.
Without GitHub Actions, run fpl-sync weekly (or fpl-sync live + fpl-model predict) from cron
or Windows Task Scheduler; scripts\update.ps1 wraps both modes for Windows and logs to data\logs.
Issues and pull requests are welcome. Please run pytest before opening a PR, and never commit
.env, data/ or models/. By submitting a contribution you agree that it is licensed under
this project's MIT License.
Copyright (c) 2026 Gilbert Kamau. Released under the MIT License: you may use, copy, modify and distribute the code, including commercially, as long as you keep the copyright and licence notice. Third-party software and data are listed in THIRD_PARTY_NOTICES.md.
Historical data comes from vaastav/Fantasy-Premier-League (code under the MIT License); live data from the public FPL API. Fantasy Premier League data is the property of the Premier League; the MIT License covers this project's code only, not the data. This project is not affiliated with or endorsed by the Premier League or Fantasy Premier League. Use the FPL API responsibly, and treat predictions as estimates, not guarantees.
来源:README.md,提交 3e38efb
Current and next gameweek, the next deadline, and when the data was last refreshed.
无需输入参数。
Find and rank players; position GKP/DEF/MID/FWD, sort_by any stat (e.g. form, price, ep_next).
nameteamlimitsort_bypositionmax_pricemin_pricemin_minutesavailable_onlyA player's stats, injury news, last 6 matches and next fixtures. player: name or FPL id.
player必填Compare 2-6 players side by side, including per-90 output, value and fixture difficulty.
players必填Fixtures for a team (next 6 gameweeks), or every fixture in a gameweek (default: next gameweek).
teamgameweekA club's results so far, goals for/against, clean sheets, upcoming fixtures and top FPL players.
team必填A player's FPL totals for every season loaded (back to 2016-17), linked across seasons.
player必填A manager's squad, bank, rank and availability_alerts. team_id is the number in the FPL entry URL.
team_id必填gameweekExpected points for the next 1-5 gameweeks, best first; one player, or filter to rank candidates.
teamlimitplayerpositiongameweeksmax_priceModel accuracy: past-season tests and this season's live results vs a baseline and FPL's own.
无需输入参数。
Best 15-man squad from scratch (e.g. a Wildcard) for a budget in £m, following FPL rules.
budgetgameweeksBest transfers over the next N gameweeks after -4 hits; mention any availability_alerts to the user.
team_id必填gameweeksmax_transfersfree_transfersCaptain, vice-captain and the top 5 captaincy options in a manager's current squad for next gameweek.
team_id必填Chips left this half of the season, what each is worth, and whether to play or save it.
team_id必填gameweeks已满足适用检查项的 100%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
git clone https://github.com/GilbertKamau/fpl_mcp.git && cd fpl_mcppython -m venv .venv# Windows: .venv\Scripts\activate macOS/Linux: source .venv/bin/activatepip 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)claude mcp add fpl -- /path/to/fpl_mcp/.venv/bin/python -m fpl_mcp.server # localclaude mcp add --transport http fpl https://your-server.example.com/mcp # remote{ "mcpServers": { "fpl": { "command": "/path/to/fpl_mcp/.venv/bin/python", "args": ["-m", "fpl_mcp.server"] } }}from xai_sdk import Clientfrom xai_sdk.chat import userfrom xai_sdk.tools import mcp
client = Client() # reads XAI_API_KEYchat = 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){ "type": "mcp", "server_url": "https://your-server.example.com/mcp", "server_label": "fpl" }{ "mcpServers": { "fpl": { "command": "/path/to/fpl_mcp/.venv/bin/python", "args": ["-m", "fpl_mcp.server"] } }}{ "servers": { "fpl": { "type": "stdio", "command": "/path/to/fpl_mcp/.venv/bin/python", "args": ["-m", "fpl_mcp.server"] } }}.venv\Scripts\python -m pytest