espn-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SWID | No | The `SWID` cookie value from fantasy.espn.com. Required for private leagues. | |
| ESPN_S2 | No | The `espn_s2` cookie value from fantasy.espn.com. Required for private leagues. | |
| ESPN_TEAM_ID | Yes | Your team ID from the team URL when viewing your roster. | |
| ESPN_POOL_TTL | No | How long to cache the player pool in seconds. Defaults to 900 (15 minutes). | 900 |
| ESPN_LEAGUE_ID | Yes | Your ESPN league ID from the league URL (e.g., 123456789). |
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_league_settingsA | League format: team count, scoring rules, starting lineup, draft type. Call this once at the start of a session -- every other tool's numbers are relative to this league's shape. |
| get_draft_stateA | Live draft state: picks made so far, who is on the clock, your next picks. Never cached. Safe to poll every few seconds during a live draft. |
| get_available_playersA | Undrafted players, ranked. Args: position: QB, RB, WR, TE, K or D/ST. Omit for all positions. limit: how many to return. sort_by: "vorp" (value over replacement, the default and usually right), "projected_points" (ignores scarcity), or "espn_adp" (what your leaguemates are likely to do). |
| get_value_boardA | Replacement levels and tier structure for the league. Explains why the rankings look the way they do: how many players at each position are startable league-wide, and what the last startable player at each position projects for. |
| get_rosterA | A team's current roster and which starting slots are still unfilled. Defaults to your team (ESPN_TEAM_ID). |
| get_playerA | Full detail on one player: projection, VORP, tier, ADP, injury status. Search by name (partial match) or exact player_id. |
| get_draft_contextA | One-call snapshot for when you are on the clock. Bundles draft state, your roster needs, the best available at each position with tier depth, recent-pick position runs, and the biggest ADP fallers -- everything needed to make a pick inside a 60-90 second clock. |
| record_pickA | Manually record a pick when ESPN is not reporting the draft. Use this if picks stop appearing in get_draft_state during a live draft, or for a draft held outside ESPN's draft room. Recorded picks merge with anything ESPN does report, so the available pool stays correct either way. Args: player: Player name, full or partial ("Gibbs", "jahmyr gibbs"). player_id: Exact id, if you have it instead of a name. team_id: Who made the pick. Defaults to whoever is on the clock. Ambiguous names are not guessed -- the candidates come back instead. |
| record_picksA | Record several picks at once, in draft order, by name. The fast path during a live draft: ESPN does not publish picks until the draft ends, so these ARE the draft. Recorded picks persist, so you only ever send the picks made since your last call -- never the whole board. Re-sending the entire pick history is fine and is the intended way to sync -- players already recorded are counted and ignored, and only the new names are appended, in the order given. Unrecognised or ambiguous names are reported without blocking the rest. |
| next_pickA | The single call to make when you are on the clock. Returns only what a pick decision needs: the best available players that fill an actual roster hole, the tier cliff behind each, and how long until your next turn. Deliberately small -- a draft clock is 60 seconds. |
| reset_draftA | Clear all manually recorded picks. Use before a new draft. |
| undo_pickA | Remove the most recently manually recorded pick. |
| refresh_draft_orderA | Re-read the draft order and your slot. Call this after a randomized draft order is drawn (many leagues randomize shortly before the draft starts). League settings are otherwise cached, so a session opened before the draw would keep the old order. |
| refresh_boardA | Force a re-fetch of the player pool, projections and value math. The pool is cached for ESPN_POOL_TTL seconds. Call this if projections changed (injury news, depth chart move) or the cache looks stale. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Most tools target a distinct data source or action, such as league settings, draft state, rosters, players, and the value board. The main ambiguity is between get_draft_context and next_pick, but their descriptions clearly separate a comprehensive snapshot from a deliberately minimal on-the-clock call.
The tool names overwhelmingly follow a snake_case verb_noun pattern: get_*, record_*, refresh_*, undo_pick, and reset_draft. next_pick is the one clear deviation from the verb-first convention, though it remains readable and does not undermine the overall consistency.
14 tools is well within the ideal range for a fantasy-draft assistant and each tool has a defined role in the draft workflow. The count covers pre-draft research, live draft operations, manual syncing, and cache refreshes without feeling bloated.
The tool surface covers the full draft lifecycle: league context, live draft state, player pool and valuations, roster needs, decision support, manual pick recording, undo/reset, and refreshes for both the board and draft order. There are no obvious dead ends for the stated purpose.