FPL Cat
by fplcat.com · remote · no sign-in to list tools · v1.2.1 · published by com.fplcat
Fantasy Premier League tools: rate a team, captains, player points, fixtures, injuries. No login.
15 tools: 14 change things and 1 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things14Claude Code: ask: see these tools
- Only reads1Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http fpl-cat https://fplcat.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnset_piece_takers
The server marks "set_piece_takers" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "set_piece_takers" says "set": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
15 tools
Changes things 14Claude Code: ask
best_teamUse this when the user wants the best Fantasy Premier League squad from scratch: 'best team for £100m', 'wildcard team', 'free hit team for GW7', 'best team for £102.5m'.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user wants the best Fantasy Premier League squad from scratch: 'best team for £100m', 'wildcard team', 'free hit team for GW7', 'best team for £102.5m'. Gives our model's best 15-man squad with the XI, bench and captain for next gameweek. Default: the £100.0m Wildcard squad (next 6 gameweeks), free. mode 'freehit' (best for next gameweek only) and any other budget are FPL Cat Pro: they need the user to sign in to FPL Cat (the client will ask), and a signed-in user without Pro gets the £100m Wildcard squad instead. Not a squad built from the user's own team.
Annotations the server declares
- title: Best FPL team (Wildcard or Free Hit)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
captain_optionsUse this when the user asks who to captain in Fantasy Premier League: 'who should I captain?', 'best captain for GW7?', 'Haaland or Saka for captain?', 'differential captain?'.Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Use this when the user asks who to captain in Fantasy Premier League: 'who should I captain?', 'best captain for GW7?', 'Haaland or Saka for captain?', 'differential captain?'. No team ID needed: without one it gives the best captains in the whole game by our model's predicted points next gameweek, so call it straight away rather than asking. If the user has given their team ID earlier in this conversation, pass it as team to get the best captains from their own squad.
Annotations the server declares
- title: FPL captain picks
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
chip_planUse this when the user asks about their Fantasy Premier League chips: 'should I bench boost this week?', 'when should I triple captain?', 'which chips do I have left?', 'should I w…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Use this when the user asks about their Fantasy Premier League chips: 'should I bench boost this week?', 'when should I triple captain?', 'which chips do I have left?', 'should I wildcard?'. Says which chips they have left in this window (GW1-19 or GW20-38), whether to play one this gameweek, and the best one coming up, by our model. Needs the team ID (for the chips already played; reuse it if the user gave it earlier in this conversation) or all 15 names.
Annotations the server declares
- title: FPL chip advice
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
deadlineUse this when the user asks when the Fantasy Premier League deadline is: 'when's the deadline?', 'how long until GW7?', 'what gameweek is it?'.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks when the Fantasy Premier League deadline is: 'when's the deadline?', 'how long until GW7?', 'what gameweek is it?'.
Annotations the server declares
- title: FPL deadline
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
fixture_difficultyUse this when the user asks about Fantasy Premier League fixtures: 'which teams have the easiest fixtures?', 'Arsenal's next 5 fixtures', 'best fixture run for defenders', 'who to …No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks about Fantasy Premier League fixtures: 'which teams have the easiest fixtures?', 'Arsenal's next 5 fixtures', 'best fixture run for defenders', 'who to target for GW7-10?'. Our difficulty rating (1 easiest to 5 hardest) for every club's next 1-6 gameweeks, with blanks and doubles.
Annotations the server declares
- title: FPL fixture difficulty
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
gameweek_reviewUse this when the user asks how their Fantasy Premier League gameweek went: 'how did my team do?', 'review my gameweek', 'was my captain right?', 'did my transfers work?', 'how man…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Use this when the user asks how their Fantasy Premier League gameweek went: 'how did my team do?', 'review my gameweek', 'was my captain right?', 'did my transfers work?', 'how many points did my bench score?'. Their points vs the average, gameweek and overall rank, captain vs the best captain they had, bench points, auto-subs, and each transfer's points in vs out. Live during a gameweek. Needs the team ID: if the user gives a number with 'my team', that's it; reuse it if they gave it earlier in this conversation.
Annotations the server declares
- title: Review my FPL gameweek
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
injuriesUse this when the user asks who is injured, doubtful or suspended in Fantasy Premier League, for one club or all: 'Arsenal injuries', 'is Saka injured?', 'who's out this week?', 'a…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks who is injured, doubtful or suspended in Fantasy Premier League, for one club or all: 'Arsenal injuries', 'is Saka injured?', 'who's out this week?', 'any injury news?'. FPL's own flags with their news and chance of playing, plus unconfirmed injury reports for players FPL still lists as fit (say these are reported, not confirmed by FPL). For one player's full picture, player_projection is better.
Annotations the server declares
- title: FPL injuries and team news
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
live_bonusUse this when the user asks about Fantasy Premier League bonus points or BPS during or after Premier League matches: 'provisional bonus in Man Utd v Spurs', 'who's getting bonus?',…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks about Fantasy Premier League bonus points or BPS during or after Premier League matches: 'provisional bonus in Man Utd v Spurs', 'who's getting bonus?', 'is Saka on bonus?', 'live BPS'. Provisional bonus (3-2-1) from the live Bonus Points System for matches in play or finished this gameweek, and the BPS gap to the next bonus. Only useful on match days.
Annotations the server declares
- title: FPL live bonus points
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
my_teamUse this when the user asks who to start, who to bench or who to captain in their own Fantasy Premier League team this gameweek: 'who should I start?', 'pick my team for GW7', 'sho…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Use this when the user asks who to start, who to bench or who to captain in their own Fantasy Premier League team this gameweek: 'who should I start?', 'pick my team for GW7', 'should I bench Gordon?', 'is my lineup right?'. Gives our model's best XI, bench order, captain and vice-captain from their 15 for the next gameweek, and what changes from the lineup they have now. Needs the team ID (reuse it if the user gave it earlier in this conversation) or all 15 player names. Doesn't suggest transfers (use rate_team) or plan later gameweeks.
Annotations the server declares
- title: Pick my FPL lineup
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
player_projectionUse this when the user asks about one to three Fantasy Premier League players: 'how many points will Saka get?', 'is Palmer worth buying?', 'Saka or Palmer?', 'is Isak fit?'.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks about one to three Fantasy Premier League players: 'how many points will Saka get?', 'is Palmer worth buying?', 'Saka or Palmer?', 'is Isak fit?'. Gives our model's predicted points for the next gameweek with where they come from (minutes, goals, assists, clean sheet, bonus, defensive contributions), his chance of playing, news, fixtures, price and ownership. With 2-3 names, compares them on next gameweek. Pass all the names in one call.
Annotations the server declares
- title: FPL player points
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
price_changesUse this when the user asks about Fantasy Premier League price rises and falls: 'who's rising tonight?', 'will Saka drop in price?', 'price changes today', 'who went up this week?'…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this when the user asks about Fantasy Premier League price rises and falls: 'who's rising tonight?', 'will Saka drop in price?', 'price changes today', 'who went up this week?'. likely: players closest to a rise or fall by FPL's own progress figure, with net transfers this gameweek. changed: rises and falls already made this gameweek.
Annotations the server declares
- title: FPL price changes
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
rate_teamUse this when the user wants their Fantasy Premier League team rated or reviewed, or asks what to change: 'rate my team', 'how good is my team?', 'who should I transfer out?', 'who…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Use this when the user wants their Fantasy Premier League team rated or reviewed, or asks what to change: 'rate my team', 'how good is my team?', 'who should I transfer out?', 'who should I bring in?', 'what's wrong with my team?'. Scores the squad 0-100 against the best squad the same money buys, by our model's predicted points over the next 6 gameweeks, and gives the 3 changes worth the most points, with 3 replacements each. Needs the team ID or all 15 player names.
Annotations the server declares
- title: Rate my FPL team
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
set_my_teamUse this when the user wants FPL Cat to remember their Fantasy Premier League team, change the saved one or forget it: 'remember my team 123456', 'my team ID is 123456', 'change my…No findings
Why it is in this group
- The name "set_my_team" says "set": a word for a change.
Description, as the server wrote it Use this when the user wants FPL Cat to remember their Fantasy Premier League team, change the saved one or forget it: 'remember my team 123456', 'my team ID is 123456', 'change my saved team', 'forget my team'. Saves the team ID to their FPL Cat account (the client asks them to sign in first), so team tools work without it later. The first team ID a signed-in user gives any team tool is saved automatically; use this to change or forget it.
Annotations the server declares
- title: Save my FPL team
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
set_piece_takersUse this when the user asks who takes penalties, corners or free kicks for a Premier League club: 'who's on pens for Chelsea?', 'Arsenal set-piece takers', 'which defenders take co…1 finding
Why it is in this group
- The name "set_piece_takers" says "set": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "set_piece_takers" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "set_piece_takers" says "set": a word for a change.
Description, as the server wrote it Use this when the user asks who takes penalties, corners or free kicks for a Premier League club: 'who's on pens for Chelsea?', 'Arsenal set-piece takers', 'which defenders take corners?'. FPL's own order for penalties, corners and indirect free kicks, and direct free kicks.
Annotations the server declares
- title: FPL penalty and set-piece takers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 1Claude Code: allow
find_playersUse this when the user wants Fantasy Premier League players that fit a brief: 'best midfielders under £7m', 'cheap defenders for the next 3 gameweeks', 'differential forwards under…No findings
Why it is in this group
- The name "find_players" says "find": a word for reading.
Description, as the server wrote it Use this when the user wants Fantasy Premier League players that fit a brief: 'best midfielders under £7m', 'cheap defenders for the next 3 gameweeks', 'differential forwards under 10% owned', 'best Arsenal players', 'replacement for Isak under £8m'. Ranks by our model's predicted points for next gameweek, or by price, form or ownership; horizon adds each player's fixtures for up to 6 gameweeks. Also finds a player by name. Ranking over several gameweeks is in FPL Cat Pro.
Annotations the server declares
- title: Find FPL players
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data or outbound.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write5
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out0
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Oct 22, 2026, 14:32 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 200
- tools/list served without credentials
- yes
- Tools that change things, listed without credentials
- 14
- Protocol version
- 2025-06-18
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- none
- RFC 9728 protected resource metadata
- https://fplcat.com/.well-known/oauth-protected-resource/mcp
- Authorization servers
- https://fplcat.com/api/auth
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- yes
- Client ID metadata documents
- no
- WarnThe whole server
The endpoint served tools/list without credentials, and the list has 14 tools that change things (14 write). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://fplcat.com/mcp: tools/list returned 15 tools to an anonymous client, including rate_team (write), my_team (write), captain_options (write), chip_plan (write), set_my_team (write) and 9 more
Install
Pinned to version 1.2.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http fpl-cat https://fplcat.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__fpl-cat__find_players"
],
"ask": [
"mcp__fpl-cat__rate_team",
"mcp__fpl-cat__my_team",
"mcp__fpl-cat__captain_options",
"mcp__fpl-cat__chip_plan",
"mcp__fpl-cat__set_my_team",
"mcp__fpl-cat__player_projection",
"mcp__fpl-cat__best_team",
"mcp__fpl-cat__injuries",
"mcp__fpl-cat__fixture_difficulty",
"mcp__fpl-cat__price_changes",
"mcp__fpl-cat__set_piece_takers",
"mcp__fpl-cat__deadline",
"mcp__fpl-cat__live_bonus",
"mcp__fpl-cat__gameweek_review"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as fpl-cat. Review it before you use it.
Capability tags behind 5 rules
- mcp__fpl-cat__rate_team untrusted-input
- mcp__fpl-cat__my_team untrusted-input
- mcp__fpl-cat__captain_options untrusted-input
- mcp__fpl-cat__chip_plan untrusted-input
- mcp__fpl-cat__gameweek_review untrusted-input