Skip to main content
Glama
tlo1216

espn-fantasy-mcp

by tlo1216

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ESPN_S2YesYour ESPN S2 session cookie. Required to authenticate with ESPN's fantasy API.
ESPN_SWIDYesYour ESPN SWID cookie. Required to authenticate with ESPN's fantasy API.
ESPN_SPORTYesThe fantasy sport to operate on. Must be one of football, basketball, or baseball (e.g. 'ffl', 'fba', 'flb').
ESPN_SEASONNoOptional. The season year (e.g. '2026'). Defaults to the current season if not set.
ESPN_TEAM_IDYesThe numeric ID of your team within the ESPN fantasy league.
ESPN_LEAGUE_IDYesThe numeric ID of your ESPN fantasy league.
WRITES_ENABLEDNoOptional. Set to 'true' to enable write operations like lineup changes. Defaults to 'false' (dry-run / read-only mode).

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_leagueA

League settings: scoring format, roster slot counts, acquisition (waiver) settings, schedule, trade settings, draft/keeper settings, and the current scoring/matchup period.

get_teamsA

All teams in the league: id, name, owners, record, and waiver rank.

get_rostersA

Every team's roster, or one team's roster if team_id is given. Each player includes id, name, position, pro team, eligible slots, current lineup slot, injury status, lock state, and season/period projections.

get_free_agentsA

Free agents and waiver-wire players, sorted by ownership percent (default) or projection. Optionally filter by lineup slot id (see get_league for slot ids, or the README's slot tables).

get_matchupsA

Matchups for a scoring period: home/away team ids, live/final totals, and live projections.

get_boxscoreA

Per-player actual stats for a scoring period, for both teams in each matchup.

get_transactionsA

Executed transactions (adds, drops, trades, lineup moves, draft picks), most recent first, with items resolved to player names. Paginated — a full season's draft alone can be 100+ records, so use limit/offset rather than expecting everything at once. Response includes total/count/offset/hasMore.

get_pendingA

Pending waiver claims and trade proposals, with items resolved to player names. Trades are read-only here — this server never proposes, accepts, or rejects trades.

get_playerA

Look up one player by ESPN player id, or by a case-insensitive name substring search across rosters and free agents.

snapshotA

The league in the exact line-oriented text format used by frontoffice-manager's tools/diff-snapshot.mjs: teamId|playerId|name|injury|seasonProj roster rows, FA|...|pctOwned free-agent rows, a SETTINGS line, a WAIVERORDER line, and a PEND: line, wrapped in SNAPSTART/SNAPEND markers.

optimal_lineupA

Suggests a starting lineup for one team: fills the most restrictive slots first (fewest eligible roster players), then the best remaining projection for each slot — the same approach the cheat sheets describe by hand. A heuristic, not a guaranteed-optimal assignment. Ranks by season projection by default, or by a specific scoring period's projection if scoring_period_id is given (a bye-week/no-game player ranks 0 for that period, not by season total). Locked players keep their current slot. This is a suggestion only — pass the resulting moves to set_lineup yourself if you want to apply them.

set_lineupA

Apply a batch of lineup moves to one team. Validates every move locally first (player is on the roster, target slot is eligible, player isn't locked, and the resulting lineup respects the league's slot counts) before sending anything. Rejected moves are reported with a reason and never sent.

add_free_agentA

Add an unclaimed free agent (not a waiver-wire player — use waiver_claim for those), optionally dropping another player in the same move.

waiver_claimB

Submit a waiver claim, optionally with a conditional drop. bid is only used in FAAB leagues (see get_league's acquisitionSettings.acquisitionType); leave it unset in priority-waiver leagues.

cancel_claimA

Cancel a pending waiver claim by its transaction id (from get_pending).

move_to_irA

Move one player into the IR/IL slot, as a lineup move. Refuses if the player isn't eligible for IR or is locked.

activate_from_irA

Move one player out of the IR/IL slot into an active or bench slot, as a lineup move.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 17 tools

Disambiguation5/5

Each tool targets a distinct resource or action: rosters vs. teams vs. player lookup, free-agent adds vs. waiver claims, and IR moves are clearly separated. The only near pair is add_free_agent vs. waiver_claim, but their descriptions explicitly distinguish unclaimed free agents from waiver-wire players.

Naming Consistency4/5

Read operations consistently use get_* (get_teams, get_league, get_rosters, etc.), and mutations use action_noun patterns like set_lineup, add_free_agent, cancel_claim, and move_to_ir. Two outliers, snapshot and optimal_lineup, break the verb-first pattern, but they are still recognizable and not confusing.

Tool Count4/5

Seventeen tools is slightly above the typical well-scoped range, but the count is justified by the variety of fantasy-football operations: league info, roster management, waivers, transactions, matchups, and IR handling. Each tool covers a meaningful need with little redundancy.

Completeness4/5

The surface covers the full roster-management lifecycle: viewing teams/rosters, adding/dropping players, submitting/canceling claims, setting lineups, and handling IR. The main gap is trade management, which is explicitly read-only via get_pending, so agents cannot propose or execute trades; otherwise the domain is well covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues