Skip to main content
Glama
manuelcralves

liga-record-mcp

Liga Record MCP

An MCP server that exposes my Liga Record fantasy football squad to Claude — the rules as tools, the regulation as a resource, and two prompts for the decisions I actually make each round.

The split it's built on: deterministic rules live in code, judgement stays with Claude. Formation legality, budget arithmetic and the §11 automatic substitutions are computed here and are authoritative. Who to start and who to sell is Claude's to reason about, given real data and the real rulebook.

See docs/PLANNING.md for the design and the rule ambiguities this reading of the regulation leaves open.

Setup

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .

The editable install is not optional — it puts liga_record_mcp on the path (the project uses a src/ layout) and creates the liga-record-mcp launcher the MCP config points at.

Your squad lives in data/squad.yaml. Copy data/squad.example.yaml and fill in your 23 players — the loader checks the file against the regulation on every read and names whatever is missing, so you don't have to count by hand. Point LIGA_RECORD_SQUAD at a different file to run a second team.

data/coaches.yaml holds the 18 selectable coaches, also hand-maintained (LIGA_RECORD_COACHES overrides it). It changes only when a club changes manager.

Related MCP server: fpl-mcp

Connecting it to Claude

.mcp.json in the repo root already declares the server, so Claude Code picks it up when you open this project — no CLI needed. Restart Claude Code after the install and approve the server when prompted.

The path in .mcp.json is absolute and machine-specific. Windows resolves a relative command against the launching process's directory, not the server's, so a relative path fails when the app starts it. Edit that path if you move or clone the repo.

Claude Desktop uses the same shape in claude_desktop_config.json:

{
  "mcpServers": {
    "liga-record": {
      "command": "C:\\path\\to\\liga-record-mcp\\.venv\\Scripts\\liga-record-mcp.exe"
    }
  }
}

Then ask it something: "Is my current XI legal, and who comes on if Diogo Costa doesn't play?"

What it exposes

Toolsget_squad, get_player, search_squad, validate_selection, simulate_autosubs, check_transfer, project_price, plus four that read the live site: search_market (the whole player pool, with ownership percentages for finding differentials), check_market_transfer (prices a swap from the real quote rather than a hand-typed one), get_fixtures (the league calendar) and squad_fixtures (each of your players' next opponent, home or away), plus list_coaches, squad_value, club_strength, project_points, record_appearances and appearance_history. Every read carries an as_of timestamp so Claude can say how fresh the data is instead of presenting a stored squad as live.

project_points blends this season's form with a prior built from completed seasons and from Record's own pricing, and shows its working. It is explicitly not validated — Liga Record has never published past scores, so there is nothing to backtest against.

validate_selection checks the chosen coach against the real 18 (§6.15). If the coach list can't be read it still validates everything else, but says so rather than skipping the check silently.

The live client is read-only by design. The site also exposes buy, sell and renegotiate endpoints — their contracts are known — and they are deliberately not implemented. Confirming a transfer stays a human's click on Record's site.

Resourcesligarecord://regulamento (generated from the same constants the rules enforce, so it can't drift from the code) and ligarecord://squad.

Promptspick_starting_xi, plan_transfers.

Tests

./.venv/Scripts/python.exe -m pytest -q

rules.py is pure — no I/O, no network, no clock — so the whole rulebook is tested without touching the site.

Status

Steps 1–3 are done: the rules engine, the data-source seam with a hand-maintained YAML squad, and the MCP server.

Step 4 reads the live site for both the market and the calendar, neither of which needs authentication — verified with requests carrying no cookie. The session-token problem the plan treated as step 4's main risk simply does not arise for public data.

playersearch.ashx returns clean JSON for all 498 players. The calendar has no JSON endpoint, so all 306 fixtures are parsed out of one page; every selector lives in a single function and is pinned against a recorded copy of that page, so a redesign fails one test rather than surfacing as wrong advice.

Reading a specific team's squad does still need a login, so data/squad.yaml remains hand-maintained. That is the remaining piece.

Available Tools

9 tools
check_market_transferA

Check a real transfer: one squad player out, one market player in.

Both are player ids. Unlike check_transfer, the incoming player's price and position come from the live market rather than being described by hand — so the budget arithmetic uses their actual quote.

ParametersJSON Schema
NameRequiredDescriptionDefault
in_idYes
out_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It explains that the budget arithmetic uses the live market quote, which is useful behavioral context. However, it does not mention whether the operation is read-only, what happens on invalid ids, or any other side effects or requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the first sentence states the core purpose, and the second paragraph adds only essential differentiating detail. Every sentence earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, the description covers the main purpose, parameter roles, and the key difference from check_transfer. An output schema exists, so return-value details are not required. It could be slightly more complete by mentioning prerequisites or validation behavior, but it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates by stating 'Both are player ids' and clarifying that out_id refers to the squad player and in_id refers to the market player. This adds meaning beyond the bare schema, though it does not detail id formats or how to obtain valid ids.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Check a real transfer: one squad player out, one market player in.' It uses a specific verb and resource, and explicitly distinguishes itself from the sibling tool check_transfer by noting the incoming player's price and position come from the live market.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context by contrasting with check_transfer: this tool should be used when the incoming player's price and position should come from the live market rather than being hand-described. It does not explicitly state exclusions or alternative tools beyond this comparison, but the guidance is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

check_transferA

Check one swap against §6.4 and §6.8.

The incoming player is described by hand because there is no market data yet — step 4 replaces these arguments with a lookup. window is one of in_season, closed (February) or reopened.

ParametersJSON Schema
NameRequiredDescriptionDefault
out_idYes
windowNoin_season
in_clubYes
in_nameYes
in_valueYes
in_positionYes
transfers_availableNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It says 'Check' and references rules, implying a read-only validation, but it does not disclose side effects, error behavior, or what a successful/failed check returns. The 'step 4' note is development context rather than behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded purpose, no filler. Each sentence adds either purpose, parameter context, or an enum clarification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 7 parameters and no annotations, and the description covers the manual-input rationale and window values, but it omits out_id/transfers_available semantics and explicit alternative guidance. The presence of an output schema reduces the need to describe return values, but the remaining gaps keep it from being complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It usefully explains the in_* parameters as manual inputs and enumerates window values (in_season, closed/reopened). However, out_id and transfers_available are left unexplained, and no units or formats are given for in_value or in_position.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence 'Check one swap against §6.4 and §6.8' names a specific verb, object, and rule scope. The note that the incoming player is described by hand because there is no market data yet distinguishes this from the sibling check_market_transfer, which presumably uses market lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for manually described incoming players when no market data exists, and mentions that step 4 will replace these arguments with a lookup. It does not explicitly name check_market_transfer or state when not to use the tool, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_playerA

Find one squad player by id, or by name (partial and accent-insensitive).

Returns the match, or every candidate when the query is ambiguous — never a guess, since acting on the wrong player is worse than asking again.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behaviors: partial and accent-insensitive matching, and the critical behavior of returning multiple candidates when ambiguous rather than guessing. This is valuable transparency for an agent deciding whether to act on the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and the second sentence adds critical behavioral context. Every word earns its place; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no nested objects) and the presence of an output schema, the description is quite complete. It covers the query semantics and the ambiguity behavior. It could mention what happens if no match is found (returns null? empty array?), but the output schema might cover that, and the description's focus on ambiguity is the most important edge case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only one parameter 'query' with 0% description coverage, but the description explains that the query can be an id or a name, and that it supports partial and accent-insensitive matching. This adds meaning beyond the bare schema, but doesn't specify the format for id vs name (e.g., how to distinguish them) or any constraints on the query string.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds one squad player by id or by name, with partial and accent-insensitive matching. It distinguishes itself from siblings like get_squad (which likely returns the whole squad) and search_squad (which likely searches more broadly), by specifying it targets a single player and handles ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you need a specific player by id or name, and it explicitly warns against guessing when ambiguous. It doesn't explicitly name alternatives like search_squad for broader searches, but the context of 'one squad player' and the ambiguity handling provides clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_squadB

The 23 players under contract, with the money around them.

Carries as_of: say how fresh the data is rather than presenting a stored squad as live.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses a meaningful behavioral trait: the data carries an `as_of` timestamp, indicating the squad data may be stored and not live. This warns the agent not to present it as current, which is valuable context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two short sentences. The first sentence is a noun phrase but efficient. The second sentence adds the crucial freshness caveat. It loses one point because the first sentence is grammatically incomplete, though it conveys the essential scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with zero parameters and an output schema, the description sufficiently covers the content (23 players with money) and the main behavioral nuance (as_of freshness). It does not need to explain return values since an output schema exists. It is complete enough for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so per the rubric the baseline is 4. The description mentions `as_of` but that is clearly a field in the output data, not a parameter. No additional parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (the 23 players under contract) and the associated money, but it lacks an explicit verb and doesn't distinguish from sibling tool search_squad. The tool name 'get' implies retrieval, but the description itself is a noun phrase rather than a clear action statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like search_squad or get_player. The description does not mention any exclusions, prerequisites, or alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_priceB

What a player's quote does if they score round_points (§12.3-§12.4).

Scores of 1, 2 or 3 are not covered by the regulation and are treated as no movement — say so if it matters to the answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_idYes
round_pointsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Since no annotations are provided, the description must carry behavioral context. It usefully discloses that low scores (1, 2, 3) result in no price movement and the tool should say so. However, it does not clarify side effects, read-only nature, or result shape beyond that edge case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and every sentence contributes information: one states the tool's subject matter and one provides the important low-score edge case. There is no redundant schema repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The input schema is small and an output schema exists, so the description does not need to fully document return values. Still, it relies on an external regulation reference (§12.3-§12.4) and does not fully state what movement looks like for scores outside 1-3, leaving part of the behavior implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for `round_points` by framing it as the player's score and explaining the 1-3 no-movement boundary. `player_id`, however, is still only described by its name and schema type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description conveys that the tool is related to a player's price/quote behavior for a given `round_points` score, but it never states an explicit action such as 'calculate', 'project', or 'returns'. The phrase 'a player's quote' is also slightly ambiguous, so the purpose is clear only after reading the tool name and context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given for when to choose this tool over siblings or when to avoid it. The note about scores 1-3 being 'no movement' is an output/behavior caveat, not selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_marketA

Search the whole Liga Record player market, not just the squad.

position is required — one of GK, DEF, MID, FWD. The site's endpoint returns nothing without one.

max_owned_percent finds differentials: players few other teams hold. A high-scoring player owned by 40% of the league gains you nothing on the field; the same player owned by 3% is where places are won.

This one reads the live site, so it is the only tool here whose answer can change without anyone editing a file. Results are cached for 15 minutes — quotes only move when a round is scored.

ParametersJSON Schema
NameRequiredDescriptionDefault
clubNo
nameNo
limitNo
positionYes
max_valueNo
min_pointsNo
max_owned_percentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and excels at it. It discloses that the tool reads the live site ('reads the live site'), is the only tool whose results change without file edits, and includes a 15-minute cache. It also explains the behavioral implication of max_owned_percent (differentials). This is rich, actionable context beyond any structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured: it opens with purpose, then details key parameters, and closes with behavioral notes. Every sentence contributes meaning without repetition or fluff. It front-loads the core purpose and efficiently uses three short paragraphs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema (so return values are covered) and 7 parameters, the description covers all essential aspects: purpose, required parameter, key parameter semantics, live nature, caching, and a warning about option impact. It omits details like result ordering or filter logic, but these are likely covered by the output schema and parameter names. It is sufficiently complete for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must add meaning. It effectively explains the two non-obvious parameters: position (required, with enumeration and consequence of omission) and max_owned_percent (with reasoning for its use). Other parameters (club, name, limit, max_value, min_points) are self-explanatory from their names and types, so additional elaboration is reasonably forgone. The added value for the two complex parameters brings this above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it searches the entire market ('Search the whole Liga Record player market') and explicitly contrasts it with squad searches ('not just the squad'), effectively distinguishing it from the sibling tool search_squad. The verb 'search' and resource 'market' are specific, and the phrase 'not just the squad' provides differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool ('whole market' vs 'squad') but does not explicitly name alternatives or state when not to use it. It also provides a critical usage instruction ('position is required') and hints at the utility of max_owned_percent for differentials, but lacks clear exclusion criteria or comparison with sibling tools like search_squad.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_squadA

Filter the squad. position is one of GK, DEF, MID, FWD.

This searches the 23 players already owned, not the transfer market — the market needs the live source that step 4 adds.

ParametersJSON Schema
NameRequiredDescriptionDefault
clubNo
positionNo
max_valueNo
min_pointsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It discloses that search is limited to the 23 owned players, defines position values, and explains the non-market scope. While it does not explicitly state read-only behavior or absence of side effects, this is implied by the filter/search nature. It also references 'step 4' without elaboration, which is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two concise sentences. The first sentence front-loads the core purpose, and the second adds critical scope differentiation without any waste. Every clause contributes value, making it highly readable and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters and no annotations, so the description needs to provide substantial context. It covers the scope and the position enum, but leaves three parameters unexplained and references an undefined 'step 4' in the workflow. The presence of an output schema reduces the need to describe return values, but the missing parameter semantics creates a noticeable gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only documents the `position` parameter with allowed values (GK, DEF, MID, FWD). The other three parameters (`club`, `max_value`, `min_points`) are left completely undocumented in both schema and description, leaving their semantics and units unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Filter the squad,' which is a specific verb+resource statement. It further clarifies the scope by stating it searches the 23 owned players and explicitly contrasts this with the transfer market, thereby distinguishing it from sibling tools like search_market.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates this tool is for searching the owned squad, not the transfer market, and even notes that the market requires the live source added in step 4. This provides explicit when-to-use and when-not-to-use guidance, along with context for why the transfer market is excluded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

simulate_autosubsA

Apply the §11 automatic substitutions to a team sheet.

unavailable is the starters who did not play, or whose match was abandoned or postponed after the round closed. Substitutes come on in bench order, same position only, three at most, and a replaced captain passes the armband on.

ParametersJSON Schema
NameRequiredDescriptionDefault
benchYes
captainNo
startersYes
unavailableYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It details key rules: substitutes enter in bench order, same position only, maximum three, and the captain's armband passes if the captain is replaced. It also defines 'unavailable' explicitly, which is valuable constraint information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the main purpose, and every clause adds essential rule information. There is no fluff or unnecessary repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is comprehensive for a simulation tool: it covers the substitution algorithm, constraints, and a definition of unavailable. Given that an output schema exists, return values need not be described. Edge cases like insufficient bench players are not mentioned, but the core behavior is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It does define 'unavailable' and explains how bench order and captain are relevant, but it does not individually describe the 'starters' or 'bench' arrays beyond their roles implied by the rule. The captain parameter is only indirectly addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is specific and action-oriented: 'Apply the §11 automatic substitutions to a team sheet.' This clearly states the tool's function and the resource it operates on, and it is distinct from sibling tools like transfer, pricing, and squad management functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a clear use case—when a team sheet has unavailable starters and autosubs should be applied—but it does not explicitly compare to alternatives or say when not to use it. There is no mention of other tools for similar scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_selectionA

Check a team sheet against §6.13, §6.17 and §10.3(l).

Bench order matters — the first substitute listed is the first to come on. This is authoritative: trust it over your own count of the formation.

ParametersJSON Schema
NameRequiredDescriptionDefault
benchYes
captainNo
coach_idNo
startersYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It usefully explains that bench order is semantically meaningful and that output is authoritative, which are important implementation details. However, it is silent on whether this is side-effect-free, what permissions are needed, how errors are surfaced, or what validation categories are returned, leaving some behavioral risk opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only three sentences: a clear opening goal, a critical bench-order constraint, and a decisive authority note. Every sentence carries operational value, and the most important information is front-loaded. No fluff or duplicated schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is enough to understand the basic validation task and the key bench-order semantics, and an output schema is present to document return values. But without annotations or explanations of the referenced regulation sections, and with only partial parameter coverage, it is adequate rather than comprehensive. An agent might still hesitate on when to prefer this over simulate_autosubs or how broad its authority is.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the semantics of the parameters. It adds meaning mainly for 'bench' by explaining order importance, and it indirectly references the starters/formation count. It gives no semantic guidance for 'captain' or 'coach_id', which remain underspecified beyond their schema names and types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says 'Check a team sheet against §6.13, §6.17 and §10.3(l)', which gives a specific verb and resource for the tool. It clearly distinguishes validation from sibling tools like search_squad or simulate_autosubs, though it does not explicitly contrast with them. The legal-section references are cryptic, but the core action is not ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The statement 'Bench order matters — the first substitute listed is the first to come on' provides concrete guidance for how the tool interprets its input, and 'This is authoritative: trust it over your own count' tells the agent when to rely on the result. It does not name alternative tools explicitly, but it gives clear context that prevents misuse of the bench ordering and formation-count semantics.

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.

  1. 9 tool updatesv0.1.0
    • First observedcheck_market_transfer
    • First observedcheck_transfer
    • First observedget_player
    • First observedget_squad
    • First observedproject_price
    • First observedsearch_market
    • First observedsearch_squad
    • First observedsimulate_autosubs
    • First observedvalidate_selection

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation5/5

Each tool has a clear and distinct purpose. check_transfer vs check_market_transfer and search_squad vs search_market are differentiated by their descriptions, preventing confusion. The others (get, validate, simulate, project) are uniquely scoped.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (check_transfer, get_squad, search_market, etc.), using lowercase with underscores. No mixed conventions or inconsistent verb usage.

Tool Count5/5

Nine tools cover the core operations of a fantasy football assistant without redundancy. Each tool serves a distinct function, and the count is neither too sparse nor overwhelming for the domain.

Completeness4/5

The toolset covers reads, searches, validation, simulation, and pricing projections, but lacks an explicit 'execute transfer' or 'update squad' action. However, given the assistant's advisory role, this is a minor gap that doesn't hinder typical workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    A Model Context Protocol server that provides access to Fantasy Premier League data, allowing users to compare players, find team information, view gameweek data, and get FPL-related advice through Claude for Desktop and other MCP-compatible clients.
    23
    79
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server for the Fantasy Premier League API, enabling querying of players, teams, fixtures, and your FPL team through any MCP-compatible client.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude to interact with Sleeper fantasy football leagues via MCP tools for roster, waiver, matchup, and transaction queries, plus a dashboard for daily reports, live scoring, and game-day alerts.
    49
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that gives Claude live access to Major League Soccer data — teams, matches, standings, rosters, and schedule-strength analytics — via the ESPN public API.
    11
    MIT