FPL MCP
Provides tools for managing a Fantasy Premier League team, including viewing team data, analyzing players and fixtures, suggesting transfers, and making transfers, setting captain, and playing chips.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FPL MCP Transfer out João Pedro, bring in Havertz, and make Haaland captain"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FPL MCP
Manage your Fantasy Premier League team with AI. An MCP server that lets an LLM client like Claude read your FPL team, analyse players and fixtures, suggest transfers, spy on your mini-league rivals, and actually make transfers, set your captain, and play chips — all from plain-language chat.
⚠️ Unofficial. Not affiliated with, endorsed by, or connected to the Premier League. Uses the public FPL API. Runs entirely on your own machine — your session token never leaves your computer, and your password is never seen by this tool or the model.
Demo
One sentence, multiple moves — a transfer, a captaincy change, and a line-up swap, all executed on the real team:
"Transfer out João Pedro, bring in Havertz, make Haaland captain, and bring Yates into the starting eleven for Le Fée"

Related MCP server: FPL MCP Server
What makes it different
Most FPL tools only read data and give advice you then apply by hand. This one:
Actually manages your team — transfers, captaincy, line-up, and chips, executed for real.
Signs you in without ever touching your password — a real browser opens, you log in on the official FPL page, and only the session token is captured.
Spies on your mini-league — rivals' squads are public, so it computes ownership within your league and tells you your edge and the threats.
Suggests transfers with a position-aware model — three strategies: best points, safe template picks, or differentials to climb the rank.
Tools
Category | Tools |
Auth |
|
Your team |
|
Data |
|
Analysis |
|
Manage |
|
How sign-in works (and why it's safe)
FPL migrated to a token-based login (PingOne OIDC). Instead of asking for your password,
login_to_fpl:
Opens a real browser window on the official FPL site.
You sign in there yourself.
The session token is read from the network traffic and stored locally in
token.txt.
Your password is typed only into FPL's own page — it never reaches this code or the model. No bot-detection is bypassed; a human logs in. See docs/FINDINGS.md for the full technical write-up.
Requirements
Python 3.12+
Node.js (only if you use the MCP Inspector for development)
Setup
git clone https://github.com/MoayadAbbara/FPL-MCP.git
cd FPL-MCP
uv sync --extra browser # includes Playwright for browser login
uv run playwright install chromiumConnect it to Claude
Register the server with your MCP client. For Claude Code:
claude mcp add fpl -- uv run --directory /path/to/FPL-MCP python src/server.pyOr add it to your client's MCP config (.mcp.json / claude_desktop_config.json):
{
"mcpServers": {
"fpl": {
"command": "uv",
"args": ["run", "python", "src/server.py"],
"cwd": "/path/to/FPL-MCP"
}
}
}Restart the client, then just talk to it.
Usage
Once connected, use natural language:
"Sign in to FPL"
"Show my team"
"Any injury news on Arsenal players?"
"Compare Haaland and Gyökeres"
"Suggest transfers — differential mode"
"Analyse my mini-league 123456"
"Transfer out Haaland, bring in João Pedro, and make Watkins captain"The model calls the right tools and, for anything that changes your team, tells you what it did.
Architecture
Layered — each layer only knows the one below it:
src/
tools/ MCP tool surface (thin glue: fetch -> domain -> format -> text)
format/ raw data -> compact, model-friendly text
domain/ pure FPL logic (scoring, suggestions, roster maths) — no HTTP, no MCP
api/ FPL HTTP client
auth/ token capture (browser) and storage
server.py entry pointRaw FPL JSON never reaches the model; everything passes through domain/ then format/ so
only decision-relevant fields remain.
Development
uv run ruff format . && uv run ruff check --fix . # format + lint
uv run python src/server.py # run the server (stdio)Notes
The season-dependent tools (
suggest_transfers,analyze_mini_league) work best once the season has started; before the first deadline they return a clear "not yet" message.Automating team management may bump against the FPL Terms of Service. Use it for your own team, keep it personal, and stop if asked to.
License
Available Tools
18 toolsanalyze_mini_leagueA
Spy on a classic mini-league: your rank, your edge, and the threats, compared against the ~10 managers above and below you.
Args:
league_id: The mini-league ID.
team_id: Optional; detected from your account if omitted.
Inputs: league_id (required), team_id. Returns: result
blank_double_gameweeksA
List upcoming blank and double gameweeks by club.
Inputs: no named parameters. Returns: result
compare_playersC
Compare two or more players side by side by name.
Inputs: players (required). Returns: result
get_fixturesC
Upcoming fixtures and difficulty for a club (e.g. 'Arsenal' or 'ARS').
Inputs: team (required), next_n. Returns: result
get_gameweek_statusA
Show the current, previous, and next gameweeks, plus the next deadline.
Inputs: no named parameters. Returns: result
get_league_standingsB
Show standings for a classic mini-league by its ID.
Inputs: league_id (required). Returns: result
get_my_teamA
Get an FPL team: starting XI, bench, captain, bank, value, and chips.
Requires authentication (a Bearer token). Args:
team_id: The FPL team ID. If omitted, it is detected automatically
from the authenticated account.
Inputs: team_id. Returns: result
get_playerB
Detailed profile for one player: stats, status, and upcoming fixtures.
Inputs: name (required). Returns: result
login_to_fplA
Open a browser to sign in to Fantasy Premier League and save the token.
A real browser window opens on the FPL site. The user signs in there themselves; their password is never seen by this tool or the model. Once signed in, the session token is captured and stored for later calls.
Inputs: no named parameters. Returns: result
make_transferA
Transfer one player out and another in (by name).
Args:
sell: Name of a player currently in your squad to sell.
buy: Name of the player to buy.
team_id: Optional; detected from your account if omitted.
Inputs: buy (required), sell (required), team_id. Returns: result
play_chipB
Activate a chip, or cancel the active one.
Args:
chip: One of wildcard, free hit, bench boost, triple captain
(aliases like wc/fh/bb/3xc/tc also work), or "cancel" to turn it off.
team_id: Optional; detected from your account if omitted.
Inputs: chip (required), team_id. Returns: result
search_playersA
Find players by filters, best first.
Args:
position: GKP, DEF, MID, or FWD.
team: Club short or full name (e.g. ARS or Arsenal).
max_price: Maximum price in millions.
min_price: Minimum price in millions.
sort_by: points, form, price, ownership, goals, or assists.
limit: How many players to return.
Inputs: team, limit, sort_by, position, +2 more. Returns: result
set_captainA
Set your captain, and optionally your vice-captain (by name).
Args:
player: Name of the squad player to make captain.
vice: Optional name of the squad player to make vice-captain.
team_id: Optional; detected from your account if omitted.
Inputs: player (required), vice, team_id. Returns: result
substituteA
Swap a bench player into the starting XI and move a starter to the bench.
Args:
bench_in: Name of the bench player to bring into the XI.
starter_out: Name of the starting player to move to the bench.
team_id: Optional; detected from your account if omitted.
Inputs: bench_in (required), starter_out (required), team_id. Returns: result
suggest_transfersB
Suggest transfers that improve your squad over the next 3 gameweeks.
Args:
mode: "normal" (best expected points), "template" (safe, well-owned
picks), or "differential" (low-owned picks to climb your rank).
team_id: Optional; detected from your account if omitted.
Inputs: mode, team_id. Returns: result
team_newsB
Injury and availability news: who is injured, doubtful, or suspended, their chance of playing, and the official note.
Args:
team: Optional club filter (e.g. 'Arsenal' or 'ARS').
player: Optional player name; shows that player's status even if fit.
Inputs: team, player. Returns: result
transfer_historyA
Show a team's transfers this season. Auto-detects your team if logged in.
Inputs: team_id. Returns: result
transfer_previewA
Show what a transfer would do (funds, position) WITHOUT submitting it.
Inputs: buy (required), sell (required), team_id. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 18 tools
Most tools target a distinct action and resource: search, compare, get profile, fixtures, transfers, chips, and squad moves are well separated. The main potential confusion is between get_league_standings and analyze_mini_league, which both deal with mini-league data, though their descriptions indicate different scopes.
There is a clear majority pattern of imperative get_/set_/make_/play_ verbs, but several names are noun phrases instead, such as team_news, transfer_history, transfer_preview, and blank_double_gameweeks. The convention is consistent enough to be readable, but it is not uniformly verb_noun.
18 tools is on the heavier end, but the FPL domain is broad and each tool serves a distinct part of the workflow: login, squad, players, fixtures, news, transfers, chips, and leagues. A few could arguably be folded together, but the count feels justified rather than bloated.
The tool surface covers the core FPL lifecycle: authentication, team viewing, player research, fixture difficulty, injuries, league standings, mini-league analysis, transfer history/suggestions/preview/execution, captain selection, substitutions, and chips. There are no obvious dead ends or missing domain-critical operations.
Maintenance
Related MCP Connectors
Fantasy Premier League (FPL) assistant: one clear call on captain, transfers and chips.
Your Fantasy Premier League team in your AI: analyses, injuries, prices, fixtures and player cards.
FPL data, points predictions, and transfer, captain and chip advice for any team.
Fantasy Premier League tools: rate a team, captains, player points, fixtures, injuries. No login.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with Fantasy Premier League data through natural language queries. Supports retrieving fixtures, league standings, player performance, and other FPL statistics via the official FPL API.1622 npm3MIT
- AlicenseNot gradedqualityDmaintenanceConnects LLMs to the Fantasy Premier League API for intelligent team management, enabling natural language player research, competitor analysis, transfer decisions, and strategic planning using friendly names instead of IDs.3MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to analyze Fantasy Premier League data, providing tools for player search, fixture analysis, manager comparisons, and strategy prompts for transfer planning and lineup selection.1925 PyPI1MIT
- AlicenseNot gradedqualityDmaintenanceProvides tools and resources to interact with the Fantasy Premier League API, enabling player analysis, fixture insights, and team management through natural language.63 npmMIT