Skip to main content
Glama
Tarune28

ESPN Fantasy Football MCP Server

by Tarune28

ESPN Fantasy Football MCP Server

A Model Context Protocol server that gives Claude Desktop full read access to your ESPN Fantasy Football league — standings, rosters, matchups, free agents, trades, and purpose-built tools for trade and roster-improvement analysis.

Built on espn-api and the mcp Python SDK.


Tools exposed

Tool

What it does

get_league_overview

League name, settings, current week, team count

get_standings

Teams ranked by record and points, with streaks

get_teams

Every team + owner (use to find names for other tools)

get_team_roster

Roster for any team (starters/bench, projections, injuries)

get_matchups

All matchups for a week (scores + projections)

get_scoreboard

Current week's live scores

get_head_to_head

Season history between two teams

get_free_agents

Top available FAs by position

get_player_stats

A player's season stats, weekly scores, status

get_power_rankings

Power rankings for a week

get_trade_activity

Recent completed trades

get_playoff_picture

Seeds, clinched / in-contention / eliminated

compare_teams

Side-by-side starter comparison, position by position

get_league_settings

Scoring format, roster slots, playoff/trade rules

get_team_schedule

Remaining schedule + opponent strength

get_player_schedule

A player's NFL bye week + remaining matchups

get_team_analysis

Aggregated snapshot for improvement advice

get_trade_candidates

Trade targets for a team's weakest position

get_start_sit

Projection-based start/sit swaps + injury/bye flags

refresh_league

Force a re-fetch of all league data

All team-name arguments accept either the team name or the owner name, matched case-insensitively as a substring. If nothing matches, the tool returns the list of valid teams so you can try again.


Related MCP server: Yahoo Fantasy MCP

Project layout

server.py                      # entry point Claude Desktop runs (delegates to the package)
espn_fantasy_mcp/
  config.py                    # env vars, constants, prompting guidance
  app.py                       # the MCP server instance + main()
  client.py                    # ESPN League caching (get_league / reset_league)
  formatting.py                # version-tolerant helpers (projections, fuzzy match, weeks…)
  tools/
    league.py                  # league-wide tools (overview, standings, matchups, settings…)
    teams.py                   # roster, head-to-head, schedule, comparison, analysis
    players.py                 # free agents, player stats, player NFL schedule
    advice.py                  # trade candidates + start/sit

Importing espn_fantasy_mcp.tools runs the @mcp.tool() decorators, so main() registers every tool by importing that package before starting the stdio server.


1. Install dependencies

Requires Python 3.10+ (the mcp SDK does not support 3.8/3.9). Check with python3 --version; if it's older, install/use a newer one (e.g. python3.11).

cd ESPN-Fantasy-MCP
python3.11 -m pip install -r requirements.txt

(Or python3.11 -m pip install espn-api mcp directly.)


2. Get your ESPN cookies (private leagues only)

Public leagues need only ESPN_LEAGUE_ID. Private leagues also need two cookies, ESPN_S2 and SWID. To find them:

  1. In a desktop browser, log in to https://fantasy.espn.com and open your league.

  2. Open Developer Tools (F12, or right-click → Inspect).

  3. Go to the Application tab (Chrome/Edge) or Storage tab (Firefox).

  4. In the left sidebar, expand Cookies and click https://fantasy.espn.com.

  5. Find these two cookies and copy their Value:

    • espn_s2 — a long string (often with % characters). This is your ESPN_S2.

    • SWID — looks like {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} (keep the braces). This is your ESPN_SWID.

Your league id is in the league URL: https://fantasy.espn.com/football/league?leagueId=123456ESPN_LEAGUE_ID=123456.

Keep these cookies private — they authenticate as your ESPN account. Never commit them.


3. Add to Claude Desktop

Edit your claude_desktop_config.json:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

Add this block (command must be a Python 3.10+ interpreter that has the deps installed — plain python/python3 may be too old):

{
  "mcpServers": {
    "espn-fantasy": {
      "command": "python3.11",
      "args": ["path/to/server.py"],
      "env": {
        "ESPN_LEAGUE_ID": "your_league_id",
        "ESPN_S2": "your_espn_s2_cookie",
        "ESPN_SWID": "your_swid_cookie",
        "ESPN_YEAR": "2026"
      }
    }
  }
}

Notes:

  • For a public league, omit ESPN_S2 and ESPN_SWID.

  • ESPN_YEAR is optional; it defaults to the current calendar year.

  • command needs an absolute path if python3.11 isn't on Claude Desktop's PATH (find yours with which python3.11). A venv's Python works too (e.g. "/absolute/path/to/.venv/bin/python").

  • Use an absolute path for server.py.

Restart Claude Desktop. The espn-fantasy tools will appear in the tools menu (the hammer/plug icon).


Usage tips

Ask Claude things like:

  • "What are the current standings?"

  • "Show me the roster for the Gridiron Gang."

  • "Compare my team to the first-place team."

  • "Analyze my roster and tell me my weakest position."

  • "Who should I target in a trade to fix my RB depth?"

  • "What free-agent WRs are available this week?"

The server ships with prompting guidance (in server.py) telling Claude to check scoring settings, bye weeks, and schedule strength before giving trade or start/sit advice.


Troubleshooting

  • "Could not load league …" — check ESPN_LEAGUE_ID, and for private leagues verify both cookies. espn_s2 is long and may contain % characters; copy the whole value.

  • Data looks stale — call refresh_league (or just ask Claude to refresh the league); the server caches the league object between calls for speed.

  • A player isn't found — try a fuller name; lookups are provided by ESPN's search.

  • Tools don't appear in Claude Desktop — confirm the JSON is valid, the path to server.py is absolute, and the configured python can import mcp and espn_api.

Available Tools

20 tools
compare_teamsB

Compare two teams' starting lineups side by side, position by position.

Args: team_name_1: First team (name or owner, fuzzy). team_name_2: Second team (name or owner, fuzzy).

Groups starters by position and shows projected points for each slot, plus a projected-points total for each team.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_name_1Yes
team_name_2Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations provided, so description carries the burden. It discloses that output is grouped by position with projected points and totals, which is useful. However, it doesn't mention whether the comparison is limited to starters, how fuzziness works, or what happens if a team name is ambiguous.

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 and front-loaded, explaining what it does and then detailing parameters and output format. It could be slightly more efficient, but no significant waste.

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?

With an output schema present, the description needn't explain return values, but it does hint at them. However, given no annotations and low schema description coverage, the description is incomplete regarding behavioral traits and edge cases.

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 coverage is 0% for descriptions, but the description explains that both parameters accept team name or owner with fuzzy matching. This adds meaning beyond the bare schema, though it could specify the fuzziness behavior more precisely.

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?

States a specific verb+resource: comparing two teams' starting lineups position by position. This is clearly distinct from siblings like get_team_roster or get_head_to_head, which serve different purposes.

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 when-to-use guidance or alternatives mentioned. While the purpose implies comparison of teams, it doesn't explain when to prefer this over get_team_roster called twice or get_head_to_head.

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

get_free_agentsA

List the top available free agents.

Args: position: Optional position filter (QB, RB, WR, TE, K, DST). Omit for all. limit: Maximum number of players to return (default 10).

Sorted by projected points (falling back to average points).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
positionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 full behavioral burden. It does disclose the ranking rule ('Sorted by projected points (falling back to average points)'), which is genuinely useful and not derivable from the schema. It says nothing about permissions, league-scoping, or freshness of the underlying data, leaving meaningful gaps for a no-annotation tool.

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 core purpose is front-loaded in a single sentence, followed by a compact Args block. The Args formatting is slightly verbose relative to the one-line summary, but no sentence is wasted and both parameters earn their mention.

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?

Output schema exists, so return-value explanation is not required, and both inputs are documented. What is missing is only surrounding context such as league scoping or data recency, which matters given the absence of annotations but is not critical for correct invocation.

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

Parameters5/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 and it does: it supplies the accepted position values (QB, RB, WR, TE, K, DST) that the schema's unconstrained string type omits, and restates the limit default of 10 with its meaning. This is real information added beyond the structured fields.

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?

States a specific verb and resource: 'List the top available free agents.' An agent immediately knows this returns unsigned players ranked by value. It does not, however, distinguish itself from the nearest sibling (get_trade_candidates), which an agent might plausibly confuse it with.

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 hints at usage via 'Omit for all' for position and the default limit, which implies a browse-then-filter workflow. But there is no explicit when-to-use guidance, no statement of prerequisites (e.g. a league must be loaded), and no routing toward or away from sibling tools.

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

get_head_to_headB

Get the season head-to-head history between two teams.

Args: team_name_1: First team (name or owner, fuzzy). team_name_2: Second team (name or owner, fuzzy).

Scans each team's weekly schedule for games against the other and reports the results and point totals.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_name_1Yes
team_name_2Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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. It usefully discloses the mechanism ('scans each team's weekly schedule for games against the other and reports results and point totals'), implying a read-only operation, but says nothing about permissions, season scope limits, or behavior when teams have not met.

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 core purpose is front-loaded in a single sentence, followed by a compact Args block and a one-line mechanism note. The Args formatting is slightly verbose relative to the two-parameter schema but nothing is wasted.

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?

An output schema exists, so return-value detail is not required. For a simple two-parameter read tool, the description covers purpose, params, and mechanism adequately, with the main omission being when to pick it over siblings.

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 compensate, and it does: both params are described as accepting a team name or owner with fuzzy matching. This is meaningful semantics absent from the schema, though format/example detail is still thin.

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?

States a specific verb and resource: retrieves the season head-to-head history between two teams. This is clearly distinct from around-the-league tools, though it doesn't explicitly differentiate itself from the potentially overlapping compare_teams sibling.

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 on when to use this versus alternatives like compare_teams or get_matchups. The description explains what it returns but gives no conditions, prerequisites, or exclusions to help an agent choose it over a sibling.

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

get_league_overviewB

Get a high-level overview of the league.

Returns the league name, season year, current week, number of teams, and key settings (scoring type, playoff team count).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description technically carries the burden, but as a zero-parameter read tool there is little behavior to disclose. It lists what it returns, yet says nothing about auth requirements, rate limits, or whether the data is live versus cached.

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?

Two short sentences, front-loaded with the purpose before the field list. Minor redundancy between 'high-level overview' and the enumerated fields, but no wasted space.

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?

A zero-param read tool with an output schema needs little more than a statement of purpose; the description provides that and notes the key contents. Nothing critical is missing, though it could route the agent away from the overlapping settings 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?

The tool takes no parameters, so there is no parameter syntax the description needs to compensate for. Baseline 4 applies for a parameterless tool.

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?

States a specific verb ('Get') and resource ('league overview') and enumerates the fields returned, so the agent knows it is a summary/snapshot tool. However, it does not differentiate itself from the sibling 'get_league_settings', which also covers league settings, leaving genuine overlap unaddressed.

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 when-to-use guidance is given and no alternative is named. The phrase 'high-level overview' loosely implies it is a quick snapshot versus a detailed settings call, but the agent must infer this, and the overlapping 'get_league_settings' sibling is never mentioned.

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

get_league_settingsA

Get the league's scoring format and roster/structure settings.

Essential context for evaluating player value: scoring type (PPR / half / standard), roster slot requirements, playoff structure, trade deadline, and waiver/FAAB type.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 disclosure burden. It conveys the shape of the returned data (scoring type, roster slots, playoffs, trade deadline, waiver/FAAB), which is useful behavioral context, but says nothing about read-only nature, permissions, or caching for a metadata endpoint.

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?

Two compact sentences, front-loaded with the core action and followed by a rationale and the payload list. No filler, though the trailing list slightly restates the opening clause.

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?

With an output schema present, the description is not obligated to enumerate return fields, yet it does so briefly, which is helpful rather than harmful. For a zero-parameter, no-annotation metadata tool, nothing an agent needs in order to call it correctly is missing.

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 takes zero parameters, so there is nothing for the description to disambiguate; the schema is trivially complete. Baseline 4 applies for a no-argument tool.

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?

States a specific verb and resource ('Get the league's scoring format and roster/structure settings') and names the concrete settings returned, so the agent knows exactly what it fetches. It does not, however, distinguish itself from the similarly named sibling get_league_overview, which risks overlap confusion.

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?

'Essential context for evaluating player value' gives a clear situational trigger for calling the tool. There is no explicit statement of when not to use it or which sibling to prefer, so it stops short of a 5.

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

get_matchupsB

Get all matchups for a given week with scores and projections.

Args: week: Week number. Defaults to the current week.

ParametersJSON Schema
NameRequiredDescriptionDefault
weekNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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 full behavioral burden. It discloses the return content (scores and projections) and the week-defaulting behavior, but says nothing about scope (whole league?), permissions, or pagination. It is a read-style list so the risk is low, but disclosure is thin.

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?

Two short lines, purpose front-loaded ahead of the parameter note, with no filler. The 'Args:' block is slightly mechanical for a single optional parameter but not wasteful.

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?

An output schema exists, so return values need not be explained, and with one optional parameter and no nested structure the description covers what an agent needs to call it. The main missing piece is sibling differentiation, which is a routing rather than an invocation gap.

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 coverage is 0%, so the description must document the single parameter, and it does: 'week' is a week number and defaults to the current week. That adds the default semantics the schema's bare anyOf/null does not convey, though it gives no valid range or format.

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?

States a specific verb+resource (get all matchups) and adds the payload contents (scores and projections), which helps an agent distinguish it from a bare scoreboard call. It does not, however, differentiate itself from siblings like get_scoreboard or get_head_to_head, which sound closely related.

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 when-to-use guidance and no exclusions. With 20 sibling tools, several of which (get_scoreboard, get_head_to_head, get_standings) overlap semantically with 'matchups', the description offers no routing signal for choosing this one.

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

get_player_scheduleA

Show a player's NFL bye week and remaining NFL matchups.

Args: player_name: Full or partial player name.

Useful for spotting bye-week conflicts and upcoming tough/easy stretches.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses that the tool is forward-looking ('remaining' matchups) and what it returns, but says nothing about permissions, freshness, or season scoping. Some value added, clear gaps remain.

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?

Short and front-loaded with the core purpose in the first sentence. The Args block slightly duplicates schema information but remains terse.

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?

An output schema exists, so return values need not be explained, and the single parameter is documented including partial-match behavior. For a read-only lookup, this is nearly complete; only data-freshness context is absent.

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 compensate. It does, stating 'Full or partial player name,' which documents partial-match behavior not conveyed by the bare string schema.

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?

States a specific verb and resource: show a player's NFL bye week and remaining matchups. The scope is player-level, which cleanly separates it from the sibling get_team_schedule.

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 line 'Useful for spotting bye-week conflicts and upcoming tough/easy stretches' implies when to reach for it, but no explicit alternatives or when-not conditions are given. Adequate but leaves routing to inference against 19 siblings.

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

get_player_statsB

Look up a specific player's season stats and current status.

Args: player_name: Full or partial player name.

Returns season totals/averages, projected points, injury status, and available weekly scores.

ParametersJSON Schema
NameRequiredDescriptionDefault
player_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses the returned content — season totals/averages, projected points, injury status, weekly scores — and the read-only nature of a 'look up' is self-evident. It says nothing about partial-name ambiguity, missing players, or caching/rate behavior.

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?

Short, front-loaded with the purpose, and cleanly split into Args and Returns sections with no filler. The Args block restates a single obvious parameter, a minor redundancy, but overall it is efficient.

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-only single-parameter lookup with an output schema present, the description covers purpose, the matching semantics of the argument, and the shape of the return. Only edge-case behavior (unknown or ambiguous names) is unaddressed, which is a minor gap given the output schema documents the response.

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 coverage is 0%, so the description must compensate, and it does add real meaning: the parameter accepts a 'Full or partial player name,' which the schema's bare 'Player Name' string does not convey. It still doesn't explain how ambiguous partial matches are resolved, which is the main semantic risk for a single lookup key.

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?

States a specific verb+resource — 'Look up a specific player's season stats and current status' — so an agent knows exactly what it retrieves. It implicitly differentiates from siblings like get_player_schedule and get_team_roster by scope, though it never names an alternative explicitly.

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?

There is no when-to-use guidance, no prerequisites, and no named alternative such as get_player_schedule for schedule data or get_start_sit for lineup decisions. Usage is only inferable from the purpose statement, matching the MID calibration case where context exists but routing is absent.

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

get_playoff_pictureA

Show the projected playoff picture.

Ranks teams by record and points for, marks the current playoff seeds, and gives a rough clinched / in-contention read based on games remaining.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the computation (ranking basis, seed marking, clinch read based on games remaining) and honestly labels the clinch read as 'rough'. It does not state that it is a read-only, non-mutating operation, nor anything about data freshness or league-context 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?

Two sentences, front-loaded with the outcome, then the three elements of the result. No filler, no restating of the tool name.

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?

An output schema exists, so the description need not explain return values, yet it helpfully summarizes them. For a zero-parameter read tool this is essentially complete; only the positioning against sibling standings/projection tools is absent.

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 takes zero parameters, so per the baseline there are no parameter semantics to document. Nothing in the description misrepresents the empty argument set.

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 states a specific verb ('Show') and a well-defined resource ('projected playoff picture'), then enumerates the actual contents (ranking by record and points for, playoff seeds, clinched/in-contention read). It never names or contrasts with the obvious sibling get_standings, so an agent must infer the difference from the word 'projected' alone.

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?

There is no explicit when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. The scenario is only implied by the playoff framing, so the agent must decide on its own between this and get_standings or get_power_rankings.

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

get_power_rankingsB

Get power rankings for a week, if the library can compute them.

Args: week: Week number. Defaults to the current week.

ParametersJSON Schema
NameRequiredDescriptionDefault
weekNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/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 full burden. It does disclose one real behavioral trait – the rankings may not be computable, implying a possible failure or empty result – which is useful. Beyond that, nothing about permissions, cost, or result shape is stated, though an output schema exists to cover returns.

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?

Front-loaded with a one-line purpose and a single, non-redundant parameter note. The 'Args:' block is slightly ceremonial for one parameter, but nothing is wasted or buried.

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?

For a one-parameter read tool with an output schema, explaining returns is unnecessary, and the description covers the parameter and the availability caveat. It stops short of clarifying what a power ranking represents or how it relates to the sibling ranking/standings tools.

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 coverage is 0% for the single week parameter, and the description compensates by explaining that it is a week number and that omitting it defaults to the current week. That resolves the otherwise opaque 'default: null' in the schema.

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?

States a specific verb+resource (get power rankings) scoped to a week, which an agent can distinguish from siblings like get_standings or get_matchups. It does not name an explicit alternative, but the resource is concrete enough to route correctly.

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?

The only conditional is 'if the library can compute them,' which describes availability rather than when to choose this tool over alternatives. No guidance on when a user would want power rankings instead of standings or team analysis.

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

get_scoreboardA

Get the current week's live scores across all matchups.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full burden. It does add one meaningful behavioral trait beyond the name: the scores are 'live' and scoped to the 'current week', implying real-time, auto-scoped data rather than a stored historical snapshot. It still says nothing about permissions, refresh cadence, or whether the week is inferred from league settings.

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?

A single front-loaded sentence with no filler and no padding. Every word earns its place.

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?

With an output schema present, the description needn't explain return values, and with zero parameters there is little to document. For a simple read tool this is close to complete, with only the sibling differentiation left unaddressed.

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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline of 4 applies; the description correctly implies no filtering input is needed.

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?

States a specific verb ('Get') and resource ('current week's live scores across all matchups'), which is concrete and scoped. However, it never distinguishes itself from the closely related sibling get_matchups, which an agent would likely confuse it with.

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?

There is no when-to-use guidance, no prerequisites, and no mention of the obvious alternative (get_matchups or get_standings). The agent must infer usage from the name alone when several siblings cover adjacent territory.

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

get_standingsA

Get league standings ranked by record and points for.

Includes each team's wins-losses(-ties), points for/against, and current win/loss streak.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the burden, but this is a zero-parameter read-only retrieval with low risk. It discloses what the ranking is based on and which fields come back, yet says nothing about scope (single league?), freshness, or whether it triggers any computation.

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?

Two tight sentences with the core behavior front-loaded, no filler. The second sentence enumerating returned fields is partly redundant given an output schema exists, which costs it the top score.

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

Completeness5/5

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

For a parameterless read tool whose return shape is fully defined by the output schema, the description supplies all that is needed: what is returned, how it is ordered, and the key columns. Nothing an agent needs to call it correctly is missing.

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 input schema has zero parameters, so there is nothing to document and the baseline of 4 applies. The description correctly makes no parameter claims.

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?

States a specific verb (Get) and resource (league standings) plus the ranking rule (by record and points for), which is more precise than a bare 'get standings'. It does not name or contrast any sibling tool (e.g., get_power_rankings, get_playoff_picture), so an agent must infer differentiation from the shared 'get_*' naming pattern.

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 when-to-use guidance, no prerequisites, and no mention of adjacent tools like get_power_rankings or get_playoff_picture that could be confused with standings. The section reads as a content summary rather than invocation guidance.

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

get_start_sitA

Recommend start/sit moves for a team's lineup for a given week.

Args: team_name: Team name or owner name (fuzzy, case-insensitive substring). week: Week number. Defaults to the upcoming (actionable) week — if the current week's games are already final, this is next week.

Flags starters who are injured or on bye, then compares bench players to the current starters at slots they are eligible to fill and suggests any swap where a bench player out-projects a starter. Purely projection-driven — treat it as a starting point, not gospel (matchups and game scripts still matter).

ParametersJSON Schema
NameRequiredDescriptionDefault
weekNo
team_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full burden, and it does well: it discloses the internal logic (flags injured/bye starters, compares eligible bench players, swap suggested when bench out-projects), states it is purely projection-driven, and warns about its own limitations. It stops short of stating permissions or failure behavior for an unresolvable team.

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?

Purpose is front-loaded in the first line, parameters are cleanly listed in an Args block, and the behavior paragraph is tight. Slightly verbose relative to what is strictly needed, but every sentence adds information.

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?

An output schema exists, so return values need no explanation, and the two parameters' semantics and defaults are fully covered. The only minor gap is undocumented edge behavior (unknown/ambiguous team name), which keeps it short of a 5.

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

Parameters5/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, and it does: team_name is documented as fuzzy, case-insensitive substring matching over team or owner name, and week's default is spelled out precisely (upcoming actionable week, rolling to next week if the current week is final).

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?

Specific verb ('Recommend start/sit moves') plus resource and scope ('for a team's lineup for a given week'), which is immediately distinguishable from siblings like get_trade_candidates, get_free_agents, or get_team_roster. An agent can tell what this returns without opening the schema.

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?

It explains the default week behavior and how to interpret output ('treat it as a starting point, not gospel'), which is helpful usage context. However, it never names an alternative sibling or an explicit when-to-use/when-not condition, so the routing guidance is only implied.

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

get_team_analysisA

Aggregated snapshot of a team for trade / improvement advice.

Args: team_name: Team name or owner name (fuzzy).

Returns:

  • Full roster with average points and a last-3-weeks trend (up/down/flat)

  • Bye-week conflicts (weeks where multiple starters are out)

  • Position-group strength vs the league average at that position

  • Bench depth by position

ParametersJSON Schema
NameRequiredDescriptionDefault
team_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 full burden. It does disclose the concrete analysis dimensions returned (trend, bye weeks, positional strength, bench depth) and implies a read-only aggregate, but says nothing about permissions, refresh/caching behavior, or whether the snapshot is computed live.

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?

Front-loaded one-line purpose followed by tightly scoped Args and Returns sections; every bullet adds information. Slightly list-heavy, but nothing is wasted.

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?

An output schema exists, so return values did not need restating, yet the description's summary of them helps an agent decide relevance. For a single-param read tool, the definition is essentially complete; only the absence of any usage routing against 19 siblings leaves a small gap.

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 coverage is 0% for the single parameter, so the description must compensate, and it does: 'Team name or owner name (fuzzy)' tells the agent that owner names are accepted and matching is fuzzy. That is genuine semantic value beyond the bare 'team_name: string' schema.

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 states a specific resource and scope: 'Aggregated snapshot of a team for trade / improvement advice,' and enumerates the analytical outputs (trend, bye-week conflicts, positional strength, bench depth). This distinguishes it conceptually from raw-roster siblings like get_team_roster, though it never names an alternative explicitly.

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?

It gives a purpose context ('for trade / improvement advice') that implies when to reach for it, but offers no explicit when-to-use vs when-not guidance and does not point to siblings like get_trade_candidates or compare_teams. Usage is implied rather than stated.

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

get_team_rosterB

Get the full roster for any team in the league.

Args: team_name: Team name or owner name (fuzzy, case-insensitive substring). week: Week to project for. Defaults to the upcoming (actionable) week — if the current week's games are already final, this is next week.

Shows each player's name, position, projected points, injury status, and whether they are in a starting slot or on the bench.

ParametersJSON Schema
NameRequiredDescriptionDefault
weekNo
team_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/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 full burden. It does disclose the return contents (name, position, projected points, injury status, starting/bench slot) and the non-obvious default week semantics, which is genuinely useful. But it says nothing about permissions, whether repeated calls are cheap, or freshness of projections.

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?

Front-loaded purpose followed by a compact Args block and a return summary; each sentence earns its place. Minor structural clutter from the docstring-style formatting, but no wasted content.

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?

An output schema exists, so explaining return values is not strictly required, yet the description still covers them without harm. With two params fully explained, the definition is complete enough to invoke correctly; only the lack of sibling differentiation tempers it.

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 coverage is 0%, so the description must do the work and does: team_name is explained as fuzzy, case-insensitive substring matching against team or owner name, and week is explained with a default-resolution rule. This meaningfully exceeds the bare schema, only missing exact bounds on week.

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 states a specific verb and resource: 'Get the full roster for any team in the league.' That is unambiguous. However, it offers no differentiation from siblings like get_team_analysis, get_teams, or compare_teams, so the agent cannot tell from the description alone why this tool is picked over those.

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?

There is no explicit when-to-use guidance or mention of alternatives. The only implied context is that this surfaces a fantasy roster. Given many roster-adjacent siblings, the agent gets no help routing between this and get_team_analysis or get_teams.

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

get_teamsA

List every team in the league with its team name and owner.

Use this first so you know the exact names to pass to other tools. Team lookups elsewhere accept either the team name or the owner name.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose useful cross-tool behavior: lookups elsewhere accept either the team name or the owner name, plus the exact return fields. It does not declare read-only status or any permission/limit characteristics, but for a zero-parameter listing this is meaningful added 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.

Conciseness5/5

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

Three short sentences with no filler; the purpose is front-loaded and the sequencing guidance follows immediately. Every sentence contributes new information.

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

Completeness5/5

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

For a discovery/list tool with zero parameters and an output schema that documents the return shape, the description supplies everything an agent needs: what it returns, when to call it, and how the returned names are consumed downstream. Nothing material is missing.

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 takes zero parameters, so the schema has nothing to document and the baseline is 4. The description appropriately spends no words on parameter syntax and instead clarifies the naming contract callers will rely on elsewhere.

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?

States a specific verb and resource ('List every team in the league') and names what is returned ('team name and owner'). This cleanly separates it from sibling team-scoped tools like get_team_roster, compare_teams, and get_team_analysis, which operate on a specific team rather than enumerating all of them.

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?

Gives an explicit sequencing directive: 'Use this first so you know the exact names to pass to other tools.' That tells the agent this is the ID/name-resolution prerequisite for the rest of the family. It stops short of naming a specific alternative or stating when not to call it, so it is clear context rather than a full when/when-not rule.

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

get_team_scheduleA

Show a team's remaining schedule with opponent strength.

Args: team_name: Team name or owner name (fuzzy).

Lists each remaining week's opponent along with that opponent's record and points for, so you can gauge schedule difficulty.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden, and it does disclose read-only semantics ("Show", "Lists") and that results are per-remaining-week with opponent record and points-for. It omits error behavior for fuzzy/unmatched team names and any ambiguity handling, which matters for a fuzzy lookup.

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?

Purpose is front-loaded in the first sentence, followed by a short arg note and a return explanation. Slightly redundant to restate the return content after the opening line, but nothing is bloated.

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?

An output schema exists, so return values need not be re-explained, and the single parameter's semantics are covered. Complete enough to call correctly; only the fuzzy-match failure/disambiguation case is left unspecified.

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 coverage is 0%, so the description must compensate, and it does: team_name accepts a team name OR an owner name and matching is fuzzy. That is meaningful semantics an agent could not get from the bare string schema, though no format example or disambiguation guidance is given.

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?

States a specific verb ("Show") and resource (a team's remaining schedule) plus the value-add dimension (opponent strength). It is distinguishable from get_player_schedule by the team-level scope, but the description never explicitly contrasts with siblings such as get_team_analysis or compare_teams.

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 closing clause "so you can gauge schedule difficulty" implies the use case, but there is no explicit when-to-use, when-not-to-use, or named alternative. An agent must infer that this is the tool for forward-looking schedule evaluation rather than past results.

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

get_trade_activityB

List recent completed trades in the league.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/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 behavioral burden—yet it discloses nothing about how far back 'recent' reaches, result limits, ordering, or pagination. For a league-history listing tool this leaves real gaps, though the output schema covers the return shape.

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?

A single tight sentence with the key scope word ('recent') front-loaded and no filler. It is efficient, though it could have used one more clause to define 'recent' without becoming bloated.

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?

With an output schema present, the return values need not be explained, and there are no parameters or annotations to reconcile. However, the undefined time window for 'recent' and the absence of any usage routing leave the definition only minimally adequate.

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 takes zero parameters, so there are no parameter semantics to document; the baseline for a 0-param tool applies. No misleading or missing param information exists.

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 names a specific verb and resource ('List recent completed trades'), which cleanly separates it from the sibling get_trade_candidates (prospective trade partners). It does not explicitly name that sibling, so it falls 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.

Usage Guidelines2/5

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

There is no guidance on when to call this tool versus get_trade_candidates or the other league-listing siblings, and no stated prerequisites. Usage must be inferred entirely from the name and the word 'recent'.

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

get_trade_candidatesA

Identify potential trade targets for a team.

Args: team_name: Team name or owner name (fuzzy).

Finds the team's weakest starting position group, then scans every other team for players at that position who sit on the bench or represent surplus depth. Returns candidates grouped by position need, with the owning team so the user knows whom to approach.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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, and it does substantial work: it discloses the internal algorithm (weakest starting position group, other teams' bench/surplus depth) and what the response groups by, including that the owning team is included so the user knows whom to approach. It omits nothing critical for a read-only lookup tool.

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?

One-line purpose up front, followed by the Args detail and then the mechanism. Efficient and front-loaded. The Args block slightly restates the schema, but it is short and matches convention.

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?

An output schema exists, so return formatting needn't be explained, yet the description still sketches the grouping structure. Combined with the fuzzy-parameter note and the algorithmic disclosure, an agent has enough to call this correctly and interpret the result.

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 coverage is 0% and the single parameter's schema only says type string. The description compensates by clarifying that team_name accepts a team name OR an owner name and that matching is fuzzy — meaningful semantics the schema does not carry.

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?

States a specific verb and resource ('Identify potential trade targets for a team') and then explains the mechanism: find weakest starting position group, scan other teams for bench/surplus players. That is far more than a name restatement. It doesn't explicitly distinguish itself from the similarly-named sibling get_trade_activity, but the purpose is unambiguous.

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 makes the use case implied — you call this when you want trade targets — but never states when to prefer it over siblings like get_trade_activity (past trades), get_free_agents, or get_team_analysis. There is no explicit when/when-not guidance.

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

refresh_leagueA

Force a re-fetch of all league data from ESPN.

Use this when scores, rosters, or transactions may have changed since the server started. All other tools use cached data until this is called.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/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, and it does disclose the key non-obvious behavior: everything else reads from a cache that only this call invalidates. It does not mention cost, latency, rate limits against ESPN, or failure behavior, so it falls short of fully transparent for a network-fetch operation.

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?

Two sentences, zero filler, with the primary action front-loaded before the caching context. Every clause earns its place.

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

Completeness5/5

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

An output schema exists and there are no parameters or annotations to compensate for, so the description only needed to convey purpose and cache semantics - both of which it covers. Nothing an agent needs to call it correctly is missing.

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?

Zero parameters defined, so there is nothing for the description to disambiguate; the baseline of 4 applies. No misleading parameter text is present.

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?

States a specific verb and resource ('Force a re-fetch of all league data from ESPN') and distinguishes itself from all 19 sibling read tools by explaining that they serve cached data. An agent can tell immediately this is the cache-invalidation counterpart to the get_* tools.

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?

Gives an explicit trigger ('when scores, rosters, or transactions may have changed since the server started') and states the relationship to alternatives ('All other tools use cached data until this is called'). Both when-to-use and how-it-interacts-with-siblings are covered.

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. 20 tool updatesv0.2.0
    • First observedcompare_teams
    • First observedget_free_agents
    • First observedget_head_to_head
    • First observedget_league_overview
    • First observedget_league_settings
    • First observedget_matchups
    • First observedget_player_schedule
    • First observedget_player_stats
    • First observedget_playoff_picture
    • First observedget_power_rankings
    • First observedget_scoreboard
    • First observedget_standings
    • First observedget_start_sit
    • First observedget_team_analysis
    • First observedget_team_roster
    • First observedget_team_schedule
    • First observedget_teams
    • First observedget_trade_activity
    • First observedget_trade_candidates
    • First observedrefresh_league

TDQS

A3.6/5.0

Scored across 20 tools

Disambiguation3/5

Several tools overlap in purpose: get_matchups and get_scoreboard both return weekly scores, and get_standings, get_power_rankings, and get_playoff_picture all rank teams. Descriptions help differentiate, but an agent may still hesitate between the scoreboard and matchups tools.

Naming Consistency5/5

All tools use snake_case with a consistent verb_noun pattern (get_*, refresh_league, compare_teams). The convention is predictable and readable throughout.

Tool Count4/5

With 20 tools, the server is on the heavy side for the domain, but each tool covers a distinct facet of fantasy football management. Some redundancy exists (e.g., scoreboard vs. matchups), but overall the count is reasonable.

Completeness4/5

The toolset covers most in-season fantasy football needs: league info, standings, matchups, player stats, rosters, trades, waivers, and start/sit advice. Minor gaps include a full transaction log and waiver bid suggestions, but core workflows are supported.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    C
    maintenance
    Enables comprehensive Sleeper Fantasy Football integration with Claude, providing real-time player projections, historical performance analytics, league management, and waiver wire analysis. Supports advanced NFL metrics, lineup optimization, and matchup analysis for fantasy football decision-making.
    6
    12
    1
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude to interact with Yahoo Fantasy Baseball and Basketball leagues, allowing roster analysis, matchup tracking, free agent browsing, and player stats retrieval via natural language.
    -
  • 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.
    72 npm
    MIT