Fpl Universal MCP Server
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 Universal MCP Servershow my current team"
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 Universal MCP Server
This repository contains an implementation of an Fpl Universal MCP (Model Context Protocol) server. It provides a standardized interface for interacting with Fpl's tools and services through a unified API.
The server is built using the Universal MCP framework.
This implementation follows the MCP specification, ensuring compatibility with other MCP-compliant services and tools.
Usage
You can start using Fpl directly from agentr.dev. Visit agentr.dev/apps and enable Fpl.
If you have not used universal mcp before follow the setup instructions at agentr.dev/quickstart
Related MCP server: Tavily Universal MCP Server
Available Tools
The full list of available tools is at Tools
Local Development
π Prerequisites
Ensure you have the following before you begin:
Python 3.11+ (recommended)
uv (install globally with
pip install uv)
π οΈ Setup Instructions
Follow the steps below to set up your development environment:
Sync Project Dependencies
uv syncThis installs all dependencies from
pyproject.tomlinto a local virtual environment (.venv).Activate the Virtual Environment
For Linux/macOS:
source .venv/bin/activateFor Windows (PowerShell):
.venv\Scripts\ActivateStart the MCP Inspector
mcp dev src/universal_mcp_fpl/server.pyThis will start the MCP inspector. Make note of the address and port shown in the console output.
Install the Application
mcp install src/universal_mcp_fpl/server.py
π Project Structure
.
βββ src/
β βββ universal_mcp_fpl/
β βββ __init__.py # Package initializer
β βββ server.py # Server entry point
β βββ app.py # Application tools
β βββ README.md # List of application tools
βββ tests/ # Test suite
βββ .env # Environment variables for local development
βββ pyproject.toml # Project configuration
βββ README.md # This fileπ License
This project is licensed under the MIT License.
Generated with MCP CLI β Happy coding! π
Available Tools
12 toolsfpl_analyze_fixturesC
Analyze upcoming fixtures for players, teams, or positions
| Name | Required | Description | Default |
|---|---|---|---|
| entity_name | No | Name of the specific entity | |
| entity_type | No | Type of entity to analyze ("player", "team", or "position") | player |
| num_gameweeks | No | Number of gameweeks to look ahead | |
| include_blanks | No | Whether to include blank gameweek info | |
| include_doubles | No | Whether to include double gameweek info |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full burden of explaining behavior, but it only says 'Analyze upcoming fixtures' without defining what analysis is performed, what is returned, or how blanks/doubles affect results. The parameter names hint at some behavior, but the description itself adds little beyond the tool name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler, and the core action and scope are front-loaded. It is appropriately short for a simple tool, though it could earn a 5 if it also included a brief usage clue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and five parameters including a nullable entity_name, a one-sentence description is insufficient. The agent cannot tell whether entity_name is needed for all entity types, what the output looks like, or how this differs from overlapping sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters like entity_type, num_gameweeks, include_blanks, and include_doubles are already self-explanatory. The description adds no further detail, particularly for the nullable entity_name, which remains vague ('Name of the specific entity') with no example or relationship to entity_type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear action ('Analyze upcoming fixtures') and the resource scope ('players, teams, or positions'), making its general purpose understandable. It does not explicitly distinguish itself from the similarly named sibling fpl_analyze_player_fixtures, though the entity_type parameter hints at a broader scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool instead of fpl_analyze_player_fixtures, fpl_analyze_players, or the blank/double gameweek tools. An agent must infer the use case from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_analyze_player_fixturesA
Analyze upcoming fixtures for a player and provide a difficulty rating
| Name | Required | Description | Default |
|---|---|---|---|
| player_name | Yes | Player name to search for | |
| num_fixtures | No | Number of upcoming fixtures to analyze (default: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It states the core action and output but does not mention read-only behavior, how the difficulty rating is computed, what scale is used, or any side effects. This leaves important behavioral ambiguity for an agent invoking the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes to stating the tool's purpose and output, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool, the description is mostly sufficient to invoke the tool correctly. However, since there is no output schema, the return shape is under-specified: 'a difficulty rating' could mean per-fixture ratings, an aggregate rating, or a numeric scale. The core contract is clear, but the result interpretation has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the input schema. The description adds no additional meaning about the player_name matching behavior or the num_fixtures range. Per the rubric, the baseline of 3 is appropriate when the schema already carries the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Analyze'), a clear resource ('upcoming fixtures for a player'), and an expected output ('difficulty rating'). It distinguishes itself from siblings like fpl_analyze_fixtures and fpl_analyze_players by explicitly scoping the analysis to a single player's fixtures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when a player-specific fixture difficulty analysis is needed. However, it provides no explicit when-not guidance or comparison to sibling tools such as fpl_analyze_fixtures, fpl_analyze_players, or fpl_get_player_information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_analyze_playersC
Filter and analyze FPL players based on multiple criteria
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Team name filter | |
| limit | No | Maximum number of players to return | |
| sort_by | No | Metric to sort results by (default: total_points) | total_points |
| position | No | Player position (e.g., "midfielders", "defenders") | |
| max_price | No | Maximum player price in millions | |
| min_price | No | Minimum player price in millions | |
| min_points | No | Minimum total points | |
| sort_order | No | Sort direction ("asc" or "desc") | desc |
| max_ownership | No | Maximum ownership percentage | |
| min_ownership | No | Minimum ownership percentage | |
| num_gameweeks | No | Number of recent gameweeks to include | |
| form_threshold | No | Minimum form rating | |
| include_gameweeks | No | Whether to include gameweek-by-gameweek data |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention what kind of analysis is performed, whether results are aggregated or raw, whether data is scoped to the current season, or what the output shape looks like. 'Filter and analyze' is purpose, not behavioral context beyond the tool's name and parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is economical and front-loaded with the main verb and resource. However, it is so generic that it does not convey enough substance for a 13-parameter analysis tool, making it concise at the expense of usefulness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 13 parameters and no output schema, this one-sentence description is incomplete. The agent is left without any indication of typical results, default analytical scope, limits, or how this relates to the other player and fixture analysis siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter schemas document all 13 fields, including defaults for limit and sort_by. The description adds no parameter-level meaning beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a clear action ('filter and analyze') applied to a specific resource ('FPL players') with criteria-based selection. It weakly differentiates from sibling tools like fpl_analyze_player_fixtures by emphasizing players and filtering, though 'analyze' remains somewhat generic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this tool over alternatives such as fpl_search_fpl_players, fpl_get_player_information, or fpl_analyze_player_fixtures. The reader must infer context from the name and parameter schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_compare_playersC
Compare multiple players across various metrics
| Name | Required | Description | Default |
|---|---|---|---|
| metrics | No | List of metrics to compare | |
| player_names | Yes | List of player names to compare (2-5 players recommended) | |
| num_gameweeks | No | Number of recent gameweeks to include in comparison | |
| include_gameweeks | No | Whether to include gameweek-by-gameweek comparison | |
| include_fixture_analysis | No | Whether to include fixture analysis including blanks and doubles |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It says the tool compares players and metrics but does not disclose output format, whether it is read-only, data source, or how gameweeks/fixtures affect results. Not misleading, but under-specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no filler or repetition. It is concise, though it sacrifices some useful specificity in favor of brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no output schema and no annotations, a one-sentence description is insufficient. It omits expected return shape, usage context, and how it differs from sibling analysis tools, leaving important decision-making context to the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters already have meaningful descriptions and defaults. The tool description only echoes 'metrics' and 'multiple players' and adds no new parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Compare') and resource ('multiple players') across a defined scope ('various metrics'). It is clear and distinguishable from search/get tools, though it does not explicitly differentiate itself from the sibling fpl_analyze_players.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance about when to prefer this tool over alternatives such as fpl_analyze_players or fpl_get_player_information. The only implied use is 'when you want to compare players,' with no exclusions or routing information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_get_blank_gameweeksB
Get information about upcoming blank gameweeks where teams don't have fixtures
| Name | Required | Description | Default |
|---|---|---|---|
| num_weeks | No | Number of upcoming gameweeks to check (default: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It indicates a read-only informational operation but does not disclose what information is returned, whether it includes all teams, or any edge cases such as gameweeks with no blank fixtures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and the target resource. Every word contributes meaning, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple one-parameter getter, so a short description is mostly adequate. However, since there is no output schema and no annotations, the description leaves unspecified what 'information' is returned, such as gameweek numbers or affected teams.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter already has a clear description with a default value. The tool description adds no further parameter detail, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get information') and a specific resource ('upcoming blank gameweeks where teams don't have fixtures'). This clearly distinguishes the tool from its sibling fpl_get_double_gameweeks by concept, though it does not explicitly name that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent can infer this tool is for queries about blank gameweeks. However, there is no explicit when-to-use guidance, no mention of alternatives, and no exclusions, leaving some routing judgment to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_get_double_gameweeksB
Get information about upcoming double gameweeks where teams have multiple fixtures
| Name | Required | Description | Default |
|---|---|---|---|
| num_weeks | No | Number of upcoming gameweeks to check (default: 5) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It confirms this is an informational read operation, but does not describe what 'information' is returned, whether results can be empty, how num_weeks affects behavior, or any edge cases around upcoming double gameweeks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler or redundancy. Every word adds meaning, and the core concept is stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity tool with one optional, fully documented parameter and no output schema. However, the description does not explain what the returned information looks like or how it relates to sibling tools like blank gameweeks, so while minimally callable, the context is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% because the only parameter, num_weeks, has a clear description and default value. The tool description itself adds no parameter-level meaning, but the baseline of 3 applies since the schema fully documents the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), a clear resource ('information about upcoming double gameweeks'), and defines the key concept ('where teams have multiple fixtures'). It is clearly distinguishable from siblings like fpl_get_blank_gameweeks conceptually, though it does not explicitly name or contrast those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives such as fpl_get_blank_gameweeks or fpl_get_gameweek_status. The description only states what the tool does, leaving the agent to infer the appropriate selection context without exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_get_gameweek_statusB
Get precise information about current, previous, and next gameweeks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses the core behavior: read-only retrieval of current, previous, and next gameweek status. However, it does not describe what fields are included, whether the data is live, or what 'status' means beyond the name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that identifies the verb and scope immediately. The word 'precise' adds little information, but the overall length is appropriate and there is no meaningful redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless getter with no output schema, the description gives a serviceable high-level account of what is returned and is distinguishable from player/league tools. It could be more explicit about the contents of a gameweek status object, but that is a minor gap for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and schema description coverage is effectively 100%, so the baseline is 4. The description adds no parameter details, but none are needed for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and a clear resource ('information about current, previous, and next gameweeks'), which is more specific than the bare tool name. It doesn't explicitly contrast with sibling gameweek-related tools like fpl_get_blank_gameweeks or fpl_get_double_gameweeks, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the alternatives. The description only states what it returns, leaving the agent to infer usage from the name and sibling list. No exclusions or alternative tool mentions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_get_league_analyticsC
Get rich analytics for a Fantasy Premier League mini-league
| Name | Required | Description | Default |
|---|---|---|---|
| end_gw | No | Ending gameweek (defaults to current) | |
| start_gw | No | Starting gameweek (defaults to 1) | |
| league_id | Yes | ID of the league to analyze | |
| analysis_type | No | Type of analysis to perform: - "overview": General league overview (default) - "historical": Historical performance analysis - "team_composition": Team composition analysis | overview |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of disclosing behavior. It only says 'Get rich analytics,' implying a read operation, but does not state whether results are computed on demand, whether the operation is read-only, what output shape to expect, or any league-scope constraints. It does not contradict annotations because there are none, but it adds almost no behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short sentence with no structural waste and front-loads the action and object. However, 'rich analytics' is a vague filler phrase that doesn't earn its place, and the brevity is not used to add differentiating detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a multi-mode analysis_type parameter, this one-line description is insufficient context for an agent to invoke the tool correctly. It does not explain what 'analytics' includes, how it differs from standings, or what each analysis_type mode returns, leaving too much to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage and documents league_id, start_gw, end_gw, and analysis_type with defaults and choices. The description adds no param-level meaning beyond what the schema already provides, so the 100% coverage baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Get') and resource ('Fantasy Premier League mini-league'), so an agent can tell this is a league-level analytics tool. However, 'rich analytics' is vague and does not differentiate it from siblings like fpl_get_league_standings or clarify the specific analysis modes beyond what the schema already lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as fpl_get_league_standings or fpl_analyze_players. The only implied context comes from the tool name itself, which is not enough to route an agent to the correct tool among 12 siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_get_league_standingsB
Get standings for a specified FPL league
| Name | Required | Description | Default |
|---|---|---|---|
| league_id | Yes | ID of the league to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It communicates that this is a read-style 'Get' operation but discloses no other behavioral traits like response scope, data freshness, pagination, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler or redundancy. Every word contributes to identifying the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has one well-documented parameter, and no output schema. The description is sufficient for an agent to understand the basic call, though it leaves some context about the returned standings format implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage with a clear description for league_id ('ID of the league to fetch'). The tool description adds no meaning beyond the schema, so it earns the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('standings for a specified FPL league'), clearly distinguishing this from sibling tools like fpl_get_league_analytics or fpl_team_info. It tells an agent exactly what operation will be performed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as fpl_get_league_analytics or fpl_team_info. The description only states what the tool does, leaving selection criteria entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_get_player_informationC
Get detailed information and statistics for a specific player
| Name | Required | Description | Default |
|---|---|---|---|
| player_id | No | FPL player ID (if provided, takes precedence over player_name) | |
| player_name | No | Player name to search for (used if player_id not provided) | |
| end_gameweek | No | Ending gameweek for filtering player history | |
| start_gameweek | No | Starting gameweek for filtering player history | |
| include_history | No | Whether to include gameweek-by-gameweek history | |
| include_fixtures | No | Whether to include upcoming fixtures |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden of disclosing behavior. It implies a read-only single-player lookup, but discloses nothing about what happens when no identifier is provided, how player_id takes precedence over player_name, whether history/fixtures are included by default, or what occurs if the player is not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with zero filler or redundancy. It is front-loaded with the core action, though it is so sparse that it forfeits the opportunity to convey scoping or usage context that other dimensions would benefit from.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six optional parameters, no annotations, and no output schema, the description is too thin to fully support correct invocation. It does not cover identifier resolution rules, the meaning of the include_* flags, gameweek filtering behavior, or relation to sibling analysis tools, leaving significant gaps for the agent to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters with defaults and precedence. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Get') and resource ('detailed information and statistics for a specific player'), making the core purpose identifiable. However, it does not differentiate from siblings like fpl_analyze_players or fpl_analyze_player_fixtures, which could also plausibly return player statistics; the overlap is left unresolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as fpl_search_fpl_players, fpl_analyze_players, or fpl_compare_players. The description also fails to mention when the optional identifier and filtering parameters should be supplied, leaving the agent to infer usage from the schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_search_fpl_playersC
Search for FPL players by name with optional filtering
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | Optional team name filter | |
| limit | No | Maximum number of results to return | |
| query | Yes | Player name or partial name to search for | |
| position | No | Optional position filter (GKP, DEF, MID, FWD) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only says 'Search for FPL players by name with optional filtering'. It does not mention case sensitivity, partial matching behavior, result ordering, return fields, or whether results are limited by the current season. This is minimal behavior information for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no redundant filler. It is concise and readable. However, it is so short that it sacrifices useful behavioral and usage context, though conciseness itself is well-handled.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations and no output schema, the description should explain more about return values and search behavior, but it does not. An agent does not know what a successful response looks like or how search semantics work. The schema covers inputs, but the context around invoking this tool correctly is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents all four parameters with descriptions and defaults, and schema coverage is 100%. The description adds only the generic phrase 'with optional filtering', which does not meaningfully expand on the schema. The baseline 3 applies because the schema already handles parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Search for FPL players by name'. This clearly distinguishes it from sibling tools like fpl_get_player_information or fpl_analyze_players, which serve different retrieval/analysis purposes. It does not explicitly name a sibling, but the verb-resource pairing is sufficiently specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as fpl_get_player_information or fpl_analyze_players. There are no exclusions, prerequisites, or scenario-based recommendations. The agent must infer usage purely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpl_team_infoC
Get information about a team
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes | The ID of the team to get information about |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states a 'get' operation, implying a read, but does not disclose return format, pagination, rate limits, or any side effects. For a tool with zero annotation coverage, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no redundant phrasing. It front-loads the core action, though it omits necessary detail, making it efficient in structure but lacking substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must explain what information is returned, but it does not. It also fails to clarify whether 'team' means an FPL squad, a real-world club, or something else, and gives no indication of data complexity or size. For a simple tool with one parameter, the missing return details make it incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%βthe team_id parameter is already described as 'The ID of the team to get information about'. The tool description adds no additional meaning beyond that, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Get information about a team'. It distinguishes from player-focused siblings (e.g., fpl_get_player_information) by specifying 'team' as the object, but does not elaborate on what specific team information is provided, making it slightly generic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no mention of when to use this tool versus alternatives, no prerequisites, and no exclusion criteria. The description provides no context for selection among the many sibling tools that also retrieve data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.3- First observed
fpl_analyze_fixtures - First observed
fpl_analyze_player_fixtures - First observed
fpl_analyze_players - First observed
fpl_compare_players - First observed
fpl_get_blank_gameweeks - First observed
fpl_get_double_gameweeks - First observed
fpl_get_gameweek_status - First observed
fpl_get_league_analytics - First observed
fpl_get_league_standings - First observed
fpl_get_player_information - First observed
fpl_search_fpl_players - First observed
fpl_team_info
TDQS
Scored across 12 tools
Most tools have distinct purposes (player info, search, gameweek status, league standings, team info), but fpl_analyze_players and fpl_search_fpl_players overlap somewhat in filtering/analyzing players, and fpl_analyze_player_fixtures vs fpl_analyze_fixtures could be confused despite one being player-specific.
All tools use a consistent fpl_ prefix with verb_noun structure (get_, search_, analyze_, compare_, etc.). Minor inconsistency: fpl_team_info breaks the verb pattern compared to fpl_get_* tools, but overall the naming is predictable.
12 tools is well-scoped for an FPL server covering players, fixtures, gameweeks, and leagues. Each tool serves a distinct aspect of Fantasy Premier League data without feeling bloated.
The server covers player lookup, search, analysis, comparison, fixture analysis, gameweek info, and league standings/analytics. Missing obvious operations like getting overall FPL standings or user/team-specific data, but the core fantasy football workflows are well covered.
Maintenance
Related MCP Connectors
Verified, pay-per-use API tools for AI agents through one authenticated connection.
Unified gateway exposing 150+ tools across all NexGenData MCP servers via one endpoint.
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a standardized interface for interacting with Jira's tools and services through a unified API.1MIT
- AlicenseNot gradedqualityDmaintenanceProvides a standardized interface for interacting with Tavily's tools and services through a unified API.MIT
- AlicenseNot gradedqualityDmaintenanceProvides a standardized interface for interacting with Google-Gemini's tools and services through a unified API.MIT
- AlicenseNot gradedqualityDmaintenanceProvides a standardized interface for interacting with Shortcut's tools and services through a unified API.MIT