fantasy-mcp
This server gives Claude read-only access to your ESPN fantasy football league: rosters, standings, matchups, projections, free agents, transactions, and player profiles.
Auth & setup:
whoamiverifies credentials;setupshows an in-chat card for entering ESPN cookies and league ID;save_settingsstores and tests them.League overview:
get_league_settingsreturns scoring rules, lineup slots, position limits, playoffs, waivers, and trade rules;get_standingsshows rankings, records, points, streaks, projected finishes, waiver priority, and playoff clinch status.Rosters:
get_my_teamandget_teamreturn full rosters with lineup slots, injury status, and current-week projections;get_matchupgives head-to-head scores, projections, win probability, and both lineups for any week.Lineup help:
get_projectionsprovides weekly projections, a suggested optimal lineup, and start/sit recommendations.Player acquisition:
get_free_agentslists available players by position, sorted by ownership or projection, with waiver/free-agent status and trends;get_transactionsshows adds, drops, trades, and pending/processed waiver claims.Player research:
get_playerreturns full profiles (ownership, season stats, outlook, game logs);compare_playerscompares 2–6 players side by side on projections, recent form, and availability.Read-only: nothing modifies your team or league; all operations are safe.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fantasy-mcphow's my fantasy team doing?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fantasy-mcp
Gives Claude read-only access to your ESPN fantasy football team: your roster, this week's matchup, free agents, and player profiles.
Install in Claude Desktop
Download
fantasy-mcp.mcpb(under Assets) from the latest release.Double-click the file (or in Claude Desktop: Settings → Extensions → Advanced settings → Install Extension… and pick it).
Claude Desktop will warn that the extension isn't signed by Anthropic — that's expected for this project; choose Install.
Skip the settings form (leave it empty and click Save) — you'll do setup in chat.
Start a new chat and say set up my fantasy league. A card walks you through copying two cookies from your browser and your league ID, then tests the connection.
Ask "how's my fantasy team doing?"
The first launch takes a minute while Claude Desktop downloads Python and the server's dependencies. Nothing else needs to be installed.
Related MCP server: Yahoo Fantasy MCP
Get your ESPN cookies and league ID
ESPN has no public API, so the server signs in with the same two cookies your browser uses. They are private — do not share them.
Chrome (or Edge, Brave)
Go to fantasy.espn.com and make sure you're logged in.
Open DevTools: right-click anywhere on the page and choose Inspect, or press
Cmd+Option+I(Mac) /F12orCtrl+Shift+I(Windows).Click the Application tab. In the left sidebar, under Storage, expand Cookies and click
https://fantasy.espn.com.Find the rows named
espn_s2andSWID. Click a row, then copy its Value from the box below the table. Leave Show URL-decoded unchecked — the decoded value won't work. Paste each into the matching box in the setup card (or the settings form), keeping the curly braces onSWID.
Safari (Mac)
Enable the Develop menu once: Safari → Settings → Advanced → Show features for web developers.
Go to fantasy.espn.com, logged in.
Develop → Show Web Inspector, then the Storage tab → Cookies →
fantasy.espn.com.Click the
espn_s2row and copy its Value; then do the same forSWID.
League ID
Open your league on fantasy.espn.com. The number after leagueId= in the
address bar is your League ID.
Prefer not to type cookies in chat?
Enter them in Settings → Extensions → ESPN Fantasy Football instead; Claude Desktop keeps them in your keychain. Values saved from the chat card take precedence over the settings form.
When cookies expire
ESPN cookies expire every few weeks. When they do, tools fail with a message mentioning "cookies". Say update my ESPN cookies and fill in the card again (or update the settings form if you used that).
Optional settings
Season (optional) — defaults to the current calendar year. Set it explicitly from January to July if you want to keep looking at last season.
Team ID (optional) — normally auto-detected from your SWID. Set it only if the server reports it can't find your team; it's the
teamId=number in your team's URL.
Use with Claude Code or other MCP clients
Install uv (Python 3.12+), then:
git clone https://github.com/jolfr/fantasy-football-mcp fantasy-mcp
cd fantasy-mcp
cp .env.example .env # fill in the same values as above
uv sync.mcp.json in this repo registers the server automatically when you run
claude here. For other projects or clients, add:
{"mcpServers": {"fantasy": {"command": "uv",
"args": ["run", "--directory", "/path/to/fantasy-mcp", "fantasy-mcp"]}}}If you also use Claude Desktop, values saved from the in-chat setup card
(~/Library/Application Support/fantasy-mcp/config.json on macOS,
~/.config/fantasy-mcp/config.json on Linux, %LOCALAPPDATA%\fantasy-mcp\config.json
on Windows) take precedence over .env.
Tools
whoami— confirms auth; returns league name, season, your team.setup— shows the in-chat setup card;save_settingsstores and verifies what you enter.get_league_settings— scoring rules (with a one-line summary), lineup slots, position limits, playoff format, waiver and trade rules.get_standings— every team's rank, record, points, streak, ESPN projected finish, waiver priority, transaction counts, and playoff clinch status.get_my_team— your record, points, and roster with lineup slots.get_team— any other team's roster by id, name, or abbreviation, with owner and current-week projections (trade targets, positional depth).get_matchup— head-to-head for the current week (or anyweek): live score, projection, win probability, and both rosters with per-player actual/projected points.get_projections— this (or any) week's ESPN projections for your roster with opponent/bye/kickoff, plus a suggested optimal lineup and the start/sit changes to reach it.get_free_agents— available players (free agents + waivers), optionally by position, sorted by % rostered or season projection, with ownership trend, projections, and positional rank.get_transactions— league transaction log (adds, drops, trades, waiver claims including pending ones), newest first, optionally filtered to one team, with a one-line summary per transaction.get_player— one player's full profile by name or id: league ownership, season totals/projection, ESPN outlook, and a per-week game log with stat lines for this season and last. In clients that support MCP Apps (Claude Desktop, claude.ai) this renders as an interactive card; elsewhere the JSON profile is returned as text.compare_players— 2–6 players side by side: this week's projection and opponent, season pace, recent form, last season, league availability, ownership trend.
Nothing here can change your team; it is read-only.
Develop
uv sync
uv run pytestBuild a local extension bundle to test in Claude Desktop:
npx -y @anthropic-ai/mcpb@2.1.2 pack . fantasy-mcp.mcpbRelease
Bump
versionin bothpyproject.tomlandmanifest.json(they must match —tests/test_manifest.pychecks this).Commit, then
git tag vX.Y.Z && git push origin main --tags.The
Releaseworkflow tests, packs, and attachesfantasy-mcp.mcpbto a GitHub Release for the tag.
Available Tools
13 toolscompare_playersCompare PlayersA
Compare 2-6 players side by side for "X or Y?" decisions.
players may mix names and player_ids (ids from other tools are precise;
names are matched against ESPN's active-player index). Ambiguous or
unknown names are returned in unresolved with candidate ids -- retry
just those, the rest still come back. week defaults to the league's
current NFL week; pass next week's number to plan ahead.
Each row: identity/status/owned_by; week {projected, opponent, kickoff}; season {projected, points, positional_rank, games, avg}; last_3 (points in the most recent games this season, newest first); last_season {points, games, avg} or null; percent_owned / percent_change (ESPN-wide ownership and trend). Rows keep the input order.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No | ||
| players | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses name-vs-ID matching behavior, unresolved-name handling with candidate IDs, the default week behavior, and the full row structure. It does not discuss potential errors, rate limits, or whether the operation is read-only, but it is substantially transparent for a comparison tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, input semantics, unresolved behavior, default week, and output row structure. The most important scoping information is front-loaded, and no filler or repetition is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, two parameters, and an output schema, the description is fully adequate for an agent to select and invoke it correctly. It covers input formats, defaults, edge-case handling, and return layout; nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. It explains that players may be names or player_ids, that IDs are precise, that names are matched against ESPN's active-player index, and how unresolved names behave. It also explains the week parameter's default and how to use it for future weeks, adding rich meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Compare 2-6 players side by side for "X or Y?" decisions.' This clearly differentiates the tool from single-player siblings like get_player and projection-focused tools, and the scope (2-6 players) is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: comparing players for roster decisions, including planning ahead by passing next week's number. It does not explicitly name alternatives or exclusion conditions, so it stops short of a full when/when-not guide, but the intended use case is unmistakable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_free_agentsGet Free AgentsA
List available players (free agents and waiver claims) in the user's league.
Use this for "who should I pick up?", "best available RB", or "who's trending".
Args: position -- one of QB, RB, WR, TE, K, D_ST (case-insensitive; D/ST also accepted); omit for all positions. limit -- 1 to 50, default 10. sort -- "owned" (most rostered across ESPN first, default) or "projected" (highest season projection first).
Each player row: player_id (pass to get_player), name, position, pro_team, injury_status, status (FREEAGENT = add immediately; WAIVERS = must submit a claim), percent_owned (% of ESPN leagues rostering them), percent_change (ownership trend -- positive means being picked up), season_projected / season_points (full-season projected / scored so far), week_projected / week_points (current NFL week; 0.0 may mean not played yet OR played and scored nothing), and positional_rank (ESPN's season rank at their position; null if unavailable). Next-week projections are not available from this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | owned | |
| limit | No | ||
| position | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it explains status values (FREEAGENT vs WAIVERS), ownership trend interpretation, the ambiguity of 0.0 week points, and explicitly notes next-week projections are unavailable. This goes well beyond a basic list description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section earns its place: purpose and usage are front-loaded, args are compact, and the row-field explanation adds semantic nuance. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-optional-parameter list tool with no annotations, the description covers what the tool does, when to use it, all parameter semantics, and the meaning of every returned field. Nothing needed to invoke or interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully documents all three parameters: position values including aliases and case-insensitivity, limit range and default, and sort options with their meanings. It compensates completely for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'List available players (free agents and waiver claims) in the user's league', a specific verb and resource that clearly distinguishes it from sibling tools like get_my_team or get_player. The scope ('available', 'free agents and waiver claims') makes its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit use cases: 'who should I pick up?', 'best available RB', or 'who's trending'. It does not explicitly state when to prefer a sibling tool, though the output row directs passing player_id to get_player, providing a mild routing hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_league_settingsGet League SettingsA
League rules: scoring, roster construction, schedule/playoffs, waivers, trades.
Call this before start/sit, pickup, or trade advice so recommendations use this league's scoring (scoring.ppr = points per reception; scoring.summary is a one-line description; scoring.rules maps stat names -- the same names get_player's game log uses -- to points, with unmapped ESPN ids as stat_). roster.lineup gives starting slots and bench/IR counts; roster.position_limits caps how many of a position a team may roster. waivers describes the claim system (budget is FAAB dollars when present); trades.deadline is a UTC date.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It goes beyond a simple 'returns settings' by explaining important value semantics: scoring.rules maps stat names to points, unmapped ESPN ids appear as stat_<id>, FAAB budget is present when applicable, and trades.deadline is a UTC date. It does not discuss read-only status or data freshness, but the tool name and lack of parameters make those less critical.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description opens with a compact summary of the returned categories, then uses each subsequent sentence to add meaningful detail about how to interpret the fields. It is dense but every sentence earns its place, with no filler or repetition of schema data.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter settings retrieval tool, this is complete: it explains the major output sections, clarifies edge cases in scoring and trade data, and tells the agent when to call it. The presence of an output schema reduces the need to re-describe raw return shapes, and the description adds the interpretive context the schema likely cannot.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter meanings to clarify beyond the schema. The baseline for a zero-parameter tool is 4, and the description appropriately focuses on output shape and interpretation rather than inventing parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource (league settings) and enumerates its contents: scoring, roster construction, schedule/playoffs, waivers, and trades. It is immediately distinguishable from siblings like whoami, get_my_team, and get_free_agents because it is the only tool focused on league-wide rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use directive: 'Call this before start/sit, pickup, or trade advice.' It references get_player for stat-name conventions, but does not explicitly state when not to use this tool or name alternatives for other tasks, so it stops short of the full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_matchupGet MatchupA
Return the user's head-to-head matchup for the current week (or a given week).
Use this for "am I winning?", "who am I playing?", or "should I have started X?". week defaults to the current matchup period (current_week); pass an earlier week for a final result or next week's number for a preview with projections. There is no per-player game-state field: points of 0.0 may mean the player has not played yet OR played and scored nothing -- do not claim to know which.
Top level: week; status (UPCOMING, IN_PROGRESS, or FINAL); is_home; my_team; opponent. Each team has: team_id, name, abbrev, score (fantasy points so far this week), projected (ESPN's live projection for the week's final score, or for a future week the sum of starters' player projections -- see projected_source: "espn" | "sum_of_starters" | null), win_probability (0-1, may be null), and roster. Each roster row has the same fields as get_my_team (player_id, name, position, slot, pro_team, injury_status) plus points (scored so far this week) and projected (ESPN's projection for this player this week; null if unavailable). Only rows whose slot is not BENCH or IR count toward score.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral details: the lack of a per-player game-state field, the ambiguity of 0.0 points, the meaning of projected_source, possible null win_probability, and roster field nuances. It also explains how scoring works (non-BENCH/IR slots), which is critical for correct interpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a lead sentence with purpose and usage examples, followed by a clear breakdown of the top-level and nested fields. Every sentence adds value, covering semantics, edge cases, and data interpretation without redundancy. Despite length, it is efficient for the complexity it addresses.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is comprehensive: it explains the tool's purpose, parameter semantics, output structure (including nested objects), edge cases, and data interpretation pitfalls. With an output schema present, the description still adds critical context about field meaning and ambiguity, making it complete for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the only parameter, but the description thoroughly explains the 'week' parameter: defaulting to current matchup period, passing earlier weeks for final results, and next week for previews with projections. This far exceeds the schema's minimal definition and fully compensates for the lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb ('Return') with a clear resource ('head-to-head matchup') and immediately provides concrete use-case examples ('am I winning?', 'who am I playing?'). It clearly distinguishes from sibling tools like get_my_team by focusing on the matchup context, and the detailed output structure further differentiates it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool via the example questions and explains the week parameter semantics (default current, earlier for final, next for preview). It does not explicitly name alternatives or exclusion conditions, but the context makes the appropriate usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_my_teamGet My TeamA
Return the user's fantasy team: season record, points, and full roster.
Each roster row has: player_id (pass to get_player); name; position (the player's NFL position, e.g. QB/RB/WR); slot (the fantasy lineup slot — BENCH and IR mean not starting, anything else is a starter); pro_team (NFL team abbreviation); injury_status; projected (ESPN's projection for the current NFL week, null if unavailable). Rows are ordered starters first, then bench, then IR. Record and points are season-to-date for the configured season.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It explains roster row fields (player_id, name, position, slot, pro_team, injury_status, projected) and gives important semantics: slot values BENCH/IR mean not starting, rows are ordered starters/bench/IR, projected is ESPN's projection for the current week and can be null, and record/points are season-to-date for the configured season. This goes beyond a simple return statement and gives an agent enough to interpret results correctly. It does not mention side effects, but as a 'get' tool, read-only nature is implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, then proceeds to detailed roster field explanations. It is about 120 words, which is slightly longer than minimal, but every sentence adds meaningful detail (field semantics, ordering, null handling). There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the zero-parameter tool and the presence of an output schema, the description adds semantic richness beyond what schema field names would provide: it clarifies slot behavior, ordering, and the meaning of 'projected'. It also mentions the configured season, which ties into configuration context. For a simple getter, this is complete; it only lacks explicit details about authentication or error cases, which are likely not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds no parameter documentation (there is nothing to document) but does add cross-tool linkage by noting player_id can be passed to get_player. This is useful context beyond the empty schema, though not technically parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Return the user's fantasy team') and enumerates the included content (record, points, full roster). The word 'user's' distinguishes it from the sibling 'get_team' by indicating it is the current user's team. This is clear and specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool: when you need the current user's fantasy team, including roster and stats. It also provides a practical usage tip by telling the agent to pass player_id to get_player. It does not explicitly state when not to use it or name alternatives, but the context is clear enough that no exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playerGet PlayerA
Full profile for one player: status, league ownership, season numbers, outlook, game log.
Use this for "tell me about X", "how has X been doing", "who has X in my league", or "is X worth a claim". Pass exactly one of: name (full name is best; a partial name works if it matches one active player) or player_id (from any other tool's rows -- prefer this when you have it).
Returns: player_id, name, position, pro_team, injury_status, injured, eligible_slots; league_status (ONTEAM / FREEAGENT / WAIVERS) and owned_by (the league team rostering them, or null); ownership across all ESPN leagues (percent_owned, percent_started, percent_change = trend, adp); season {year, projected, points, positional_rank}; last_season {year, points}; outlook (ESPN's written preseason summary); game_log newest first, each week with points, projected (null until ESPN publishes it), and stats -- raw counts such as rush_yds, targets, pass_td, fg_made_40_49, dst_sacks (zero-valued stats omitted). Covers this season and last. No news articles or opponent-matchup ratings. Name lookup uses a snapshot of ESPN's active-player list taken when the server started; a player signed since then may not resolve by name but still works by player_id. In clients that support MCP Apps this renders as a card; the JSON profile is always returned as text. headshot_url points at ESPN's CDN (team logo for a D/ST) and is not verified to exist.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| player_id | No |
TDQS
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 so thoroughly. It discloses the name lookup snapshot limitation, game log ordering, zero-valued stat omission, headshot_url verification caveat, season coverage, and rendering behavior. This is far beyond what annotations could provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational value: usage conditions, parameter semantics, full return structure, caveats, and rendering notes. It is front-loaded with the core purpose and usage before diving into field details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, zero annotations, and no output schema, the description is remarkably complete. It covers inputs, output fields, data provenance, limitations, and return format, leaving an agent with enough information to invoke the tool correctly and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description fully compensates by explaining both parameters: name semantics ('full name is best; a partial name works if it matches one active player') and player_id semantics ('from any other tool's rows -- prefer this when you have it'). It also clarifies the relationship between them with 'Pass exactly one of'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Full profile for one player' with a detailed list of contents including status, league ownership, season numbers, outlook, and game log. It clearly distinguishes this from siblings like get_free_agents and get_my_team by focusing on a single player's profile.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases ('tell me about X', 'how has X been doing', 'who has X in my league', 'is X worth a claim') and parameter selection guidance. It also states exclusions ('No news articles or opponent-matchup ratings'), but does not explicitly name sibling tools as alternatives, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectionsGet ProjectionsA
ESPN projections for the user's roster for one NFL week, with a suggested optimal lineup.
Use this for "set my lineup", "start X or Y?", or "who's on bye?". week defaults to current_week (the league's current NFL week, which ESPN keeps until the week's games finish); to plan ahead once games have kicked off, call again with week = current_week + 1. Projections are null until ESPN publishes them.
players: every rostered player with slot (current lineup slot), opponent ("@KC" away, "vs KC" home, "BYE"), kickoff (UTC), and projected (ESPN's points projection for that week; null if ESPN has none). suggested_lineup fills this league's starting slots (including FLEX/superflex slots and their eligibility rules) to maximize projected points; players on IR or marked OUT/suspended are never started. changes lists who to start (with their suggested slot) and who to sit (with their current slot) to get there, plus the projected gain; a continuing starter that merely moves slots appears only in suggested_lineup. Present changes to the user rather than the whole table when they ask for lineup advice.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly: it discloses that projections are null until ESPN publishes them, that suggested_lineup fills league starting slots with eligibility rules, that IR/OUT/suspended players are never started, and that changes lists only the moves needed while continuing starters appear only in suggested_lineup. It also gives presentation guidance to show changes rather than the whole table.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then organized into usage guidance, return-field semantics, and presentation advice. Every sentence adds actionable information, and none merely restates the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool returns, how the suggested lineup is computed, how changes should be presented, and how the week parameter behaves. Although an output schema exists, the description still explains the semantics of players, suggested_lineup, and changes in enough detail for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter, week, with 0% description coverage, so the description must fully compensate. It does: it explains that week defaults to current_week, defines current_week as the league's current NFL week, and instructs callers to pass current_week + 1 once games have kicked off to plan ahead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns ESPN projections for the user's roster for one NFL week along with a suggested optimal lineup. It also anchors concrete use cases like 'set my lineup' and 'start X or Y?', making it easy to distinguish from sibling tools such as get_my_team or compare_players.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit scenarios for when to use the tool ('set my lineup', 'start X or Y?', 'who's on bye?') and explains the week default plus how to plan ahead with week = current_week + 1. It does not explicitly name alternative tools or state when not to use it, so it falls just 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_standingsGet StandingsA
League standings: rank, record, points for/against, streak, projected finish, waiver order.
Use this for "where do I stand", "who's in the playoff picture", "who has the top waiver priority", or "who's been active on waivers/trades". Teams are ordered by ESPN's playoff seed (falling back to wins then points for when ESPN hasn't seeded yet, e.g. preseason); is_me marks the user's team; owner is the ESPN member name; projected_rank is ESPN's projected final standing; clinched is set once a team has clinched a playoff spot. Records and points update when ESPN finalizes each week (use get_matchup for live scores).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It explains ordering by ESPN playoff seed with fallback logic, field markers like is_me and clinched, and the caveat that records/points are not live until ESPN finalizes the week.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-line overview, explicit use cases, then detailed behavioral notes. Every sentence adds value, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless tool with an output schema, the description is complete. It covers the meaning of key fields, ordering semantics, update timing, and the appropriate sibling tool for live data, leaving no critical ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema completely documents this, so there is no parameter semantics burden on the description. The description appropriately focuses on output content rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as providing league standings with a specific list of fields: rank, record, points for/against, streak, projected finish, and waiver order. It goes beyond the title by specifying exactly what data is returned and includes concrete natural-language use cases, distinguishing it from sibling tools like get_team or get_matchup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool with example queries like 'where do I stand' and 'who's in the playoff picture'. It also directs users to get_matchup for live scores, providing a clear exclusion and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_teamGet TeamA
Another league team's roster: record, points, and players with current-week projections.
Use this for trade targets, "who has the most RBs", or "what does Lucas's team look like". team is a team id (from get_standings or get_matchup) or a name / abbreviation (case-insensitive; a partial name works if unique). Same shape as get_my_team: owner, record, points_for/against, and roster rows with player_id, name, position, slot, pro_team, injury_status, and projected for the current NFL week.
| Name | Required | Description | Default |
|---|---|---|---|
| team | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and details exactly what is returned: owner, record, points_for/against, and roster rows with specific fields. It also discloses flexible lookup behavior including case-insensitive names, abbreviations, and unique partial names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a concise summary, followed by practical usage contextchers, then parameter semanticsholas, and finally return-shape details. Every sentence earns its place and no redundant filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read-only tool with an output schema, the description covers what the tool does, when to use it, how to resolve the parameter, and the exact return fields. Nothing an agent needs to select and invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates by explaining the team parameter accepts an ID from get_standings or get_matchup, or a name/abbreviation, and clarifies case-insensitivity and unique partial-name matching. This adds substantial meaning beyond the bare anyOf schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieving another league team's roster with record, points, and players with current-week projections. It clearly distinguishes itself from get_my_team by specifying 'another' and directly referencing get_my_team's shape.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit use cases such as trade targets, 'who has the most RBs', and 'what does Lucas's team look like'. It also tells where to get team IDs from (get_standings or get_matchup), but does not explicitly contrast when to use get_my_team instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionsGet TransactionsA
League transaction log: adds, drops, waiver claims (including pending), and trades.
Use this for "who dropped X", "did my waiver claim go through", recent trades, or waiver activity. Newest first. A pending waiver claim has status PENDING; its processed field is when ESPN will run it (already executed claims/trades have processed set to when they ran). Lineup moves (bench/slot changes, not adds or drops) are hidden unless include_lineup_moves is true -- they rarely matter for these questions.
Args: team -- id or name/abbreviation (case-insensitive, partial name ok) to filter to one team's transactions, including trades where that team is the other side; omit for the whole league. limit -- 1 to 100, default 25.
Each row: id, type (WAIVER, FREEAGENT, TRADE, LINEUP, or DRAFT), status (e.g. PENDING, EXECUTED, DECLINED, VETOED), espn_type (ESPN's raw type, e.g. TRADE_ACCEPT), week, team (who initiated it), proposed/processed (UTC timestamps), bid (FAAB dollars, 0 if none), items (action ADD/DROP/ LINEUP/TRADE/DRAFT, player_id, name -- null if not in the player index -- position, pro_team, from_team/to_team, from_slot/to_slot), and a one-line summary.
| Name | Required | Description | Default |
|---|---|---|---|
| team | No | ||
| limit | No | ||
| include_lineup_moves | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses sorting ('Newest first'), pending/processed semantics, filtering behavior for team including trades where the team is the other side, hidden lineup moves, and response field details. This is unusually transparent for a read-only log tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence adds value: scope, use cases, ordering, status semantics, filtering, parameter meaning, and output fields. It is front-loaded with the most important identification sentence and flows logically into usage, behavior, args, and return shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a transaction log tool with three optional parameters and an output schema, this description covers all the behavioral nuances an agent needs: pending status, processed timestamps, team-side trade filtering, lineup move suppression, and the meaning of each returned field. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does explain team (id or name/abbreviation, case-insensitive, partial name ok, omit for whole league), limit (1 to 100, default 25), and include_lineup_moves is described in the prose though not in the Args section. This is strong coverage, though including all params in the Args section would make it complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement: 'League transaction log: adds, drops, waiver claims (including pending), and trades.' This clearly identifies the resource and scope. It also separates this tool from sibling tools by listing its specific transaction types and typical use cases.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'who dropped X', 'did my waiver claim go through', recent trades, or waiver activity. It also explains when not to care about lineup moves and how to include them. It does not explicitly contrast with sibling tools like get_free_agents, but the scope 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.
save_settingsSave SettingsA
Save ESPN credentials and league id, then verify them against ESPN.
Normally called by the setup card's Save & test button; you may call it
directly if the user pasted values into the chat. Returns {"ok": true,
"league_name", "team_name", "season"} on success, or {"ok": false,
"error": "..."} with a message to relay. Values are stored in a per-user
config file that takes precedence over the extension's settings form.
Values are written to the config file before the ESPN check, so on an
ok: false cookie error they are already saved (tell the user to
re-copy espn_s2/SWID); on a validation error nothing is written.
| Name | Required | Description | Default |
|---|---|---|---|
| swid | No | ||
| espn_s2 | No | ||
| league_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses side effects, return contract, config-file precedence, and ordering between writing values and the ESPN check, including the distinction between a cookie error and a validation error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with purpose, and every sentence adds necessary usage, return, or side-effect detail. It covers invocation, success/failure responses, storage precedence, and error semantics without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and low schema parameter coverage, the description is unusually complete: it includes return values, error semantics, side effects, precedence, and conditional behavior. An agent can call this tool correctly and relay the right message to the user on failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for missing parameter docs. It references 'ESPN credentials and league id' and the espn_s2/SWID cookies, but it does not formally map each schema parameter to its meaning, format, or default behavior. It adds useful context but not full per-parameter clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action: 'Save ESPN credentials and league id, then verify them against ESPN.' This clearly names the resource, the mutation, and the verification behavior. It is easy to distinguish from sibling read tools like get_league_settings and whoami.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to call it directly ('if the user pasted values into the chat') and identifies its normal invocation path via the setup card's Save & test button. It does not explicitly list alternatives to avoid, but the usage context is clear enough for an agent to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setupSetupA
Show the in-chat setup card for connecting the user's ESPN league.
Call this when any tool reports the league is not configured, or when the user asks to set up, connect, update, or change their league or cookies. The card explains where to find the espn_s2 and SWID cookies, has one input per value, and saves + verifies them via save_settings. Ask the user to fill in the card; do not ask them to paste cookies into the chat. If this client cannot display cards, tell the user to set the values in the extension's settings in Claude Desktop or in .env for a local checkout (see README).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses that the tool saves and verifies settings via save_settings and instructs the agent to ask the user to fill the card rather than paste cookies. However, it doesn't explicitly state that the tool has no return value or that it triggers a UI interaction, though these are implied. Overall, it is fairly transparent but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear front-loaded purpose, followed by usage triggers, content details, and a fallback. It is somewhat lengthy but every sentence earns its place—no fluff. The structure is logical and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, this description is highly complete. It covers when to use, what the tool does, what the agent should tell the user, and how to handle clients without card support. Nothing an agent needs to correctly invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema coverage is 100% (empty schema). The description adds useful context about the cookie inputs (espn_s2 and SWID) that the user must provide, which enriches the agent's understanding even though there are no formal parameters. Baseline for zero-param is 4, and the description meets that adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows an in-chat setup card for connecting the user's ESPN league. It uses a specific verb ('Show') and a concrete resource, distinguishing it from sibling data-query tools like get_standings or get_player. It is immediately clear this is a configuration action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly defines when to call: when any tool reports the league is not configured, or when the user asks to set up, connect, update, or change their league/cookies. It also provides a clear alternative instruction for clients that cannot display cards, which prevents misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiWhoamiA
Verify ESPN credentials and league configuration.
Call this first. Cheap (one small request, no roster data). Returns the league id/name, season, and the user's team id/name. Fails with an explanatory message if cookies are expired or the league/team can't be resolved.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral burden and does so thoroughly. It discloses the request cost, that no roster data is fetched, exactly what fields are returned, and the failure mode with an explanatory message when cookies expire or the league/team cannot be resolved. This is model behavior for a zero-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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short, information-dense sentences with no filler. It front-loads the core purpose and 'Call this first' instruction, then supplies cost, return details, and failure behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter preflight tool with an output schema present, the description is complete: it covers when to call it, what it returns, cost characteristics, failure modes, and error messaging. There is no significant information an agent needs that is missing. The output schema handles return-value detail, so the description's summary of return fields is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema trivially covers this with an empty properties object. Per the baseline for zero-parameter tools, the description need not add parameter semantics. It adds value by describing what is returned rather than parameters, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: 'Verify ESPN credentials and league configuration', and the phrase 'Call this first' immediately positions it as a preflight/bootstrap check. It distinguishes itself from sibling data-fetching tools by noting it returns the league and team identifiers, not league settings, matchup, or free-agent data. This is enough for an agent to know what the tool is for and how it differs from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this first' and supports that with cost and scope information: 'Cheap (one small request, no roster data)'. This gives concrete guidance on when to invoke it before more expensive or data-heavy sibling calls. It also indicates when not to expect detailed data, effectively distinguishing it from retrieval tools.
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.
8 tool updates
v0.3.1- Added
compare_players - Changed
get_matchup1 field changed- added
Input schema / properties / weekAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
get_projections - Added
get_standings - Added
get_team - Added
get_transactions - Added
save_settings - Added
setup
6 tool updates
v0.2.0- First observed
get_free_agents - First observed
get_league_settings - First observed
get_matchup - First observed
get_my_team - First observed
get_player - First observed
whoami
TDQS
Scored across 13 tools
Each tool targets a distinct purpose: credential checks, settings, roster views, player profiles, standings, matchups, projections, transactions, and comparisons. Even similar tools like get_my_team and get_team differ by target team, and get_player vs compare_players are clearly separated by context.
Names follow a consistent verb_noun pattern with get_* for retrieval operations and descriptive verbs for others (save_settings, setup, compare_players). No mixed conventions or ambiguous verbs.
13 tools is well within the ideal range for a domain-specific server. Each tool covers a necessary aspect of fantasy football information retrieval without redundancy or bloat.
The surface covers all major fantasy football queries: team rosters, standings, matchups, player details, free agents, transactions, projections, and lineup advice. League settings and credential management are included, making the tool set self-sufficient for read-only use.
Maintenance
Related MCP Connectors
Read-only ESPN, Sleeper, and Fantrax fantasy leagues for Claude, ChatGPT, and other AI tools.
Read-only fantasy analysis for ESPN, Yahoo, and Sleeper leagues via MCP
GA4, Google Ads and Search Console in Claude. Read-only OAuth, multi-account for agencies.
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceConnects Claude to your Yahoo Fantasy Baseball team, enabling lineup management, roster analysis, and free agent scouting through natural conversation.-
- FlicenseNot gradedqualityDmaintenanceEnables 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.-
- FlicenseNot gradedqualityBmaintenanceEnables Claude to securely read Sleeper fantasy football league data over the internet via the public API, supporting access from both Claude Desktop and mobile devices.-
- AlicenseNot gradedqualityBmaintenanceConnects Claude to Sleeper fantasy football leagues, providing read-only tools for rosters, matchups, standings, transactions, player search, and trending players, with multi-league support.MIT