Fantasy Football Draft Analyst (MCP Server)
A live draft assistant. Connect it to Claude, sync your ESPN or Sleeper draft board, andask "who should I pick?" at every turn. It answers with a recommendation, the reasoning,and the odds each player survives to your next pick.
Tested end to end against live data: 631 players (551 veterans, 80 rookies) modelledfrom 247,284 plays across five seasons, priced against real 2026 preseason consensus.
Quick start
git clone https://github.com/OWNER/ff-draft-mcp.git
cd ff-draft-mcp
pip install -e .
# One-time data build (~3-6 min; downloads 5 seasons, then caches)
python setup_data.py
Add to claude_desktop_config.json:
{
"mcpServers": {
"fantasy-draft": {
"command": "python",
"args": ["-m", "ffdraft.server"],
"env": {
"FFDRAFT_SEASON": "2026",
"ESPN_SWID": "optional-for-private-espn-leagues",
"ESPN_S2": "optional-for-private-espn-leagues"
}
}
}
}
Then in Claude:
Set up my home league: 10 teams, full PPR, I pick 4th.
Set up my work league: 13 teams, half PPR, I pick 11th.
Switch to home. Sync my Sleeper draft 1234567890. Who should I pick?
Documentation
| Guide | What's in it |
|---|---|
| Quickstart | Install to first recommendation in ten minutes |
| Tool reference | Every tool, argument and environment variable |
| Methodology | How projections work and why the defaults are what they are |
| Troubleshooting | When something looks wrong |
| Examples | A full draft session, prompt snippets, sample ADP file |
| Security | ESPN cookies, network access, what's stored locally |
| Contributing | Tests, lint, and the bar for model changes |
| Changelog | Release history |
What it does
Recommends picks by opportunity cost, not raw value. Knowing a player is good iseasy; knowing whether he'll still be there at your next turn is what decides who to takenow. For each position the model walks the board top-down, accumulating the probabilityevery better player is gone, and values a pick by its marginal gain over waiting.
At pick 6 with the top five off the board, that means recommending Amon-Ra St. Brown overJosh Allen — Allen grades as the highest-value player left, but has a 73% chance oflasting to pick 19, and the receiver has 8%.
Projects players from five seasons of open data. Offensive line from adjusted lineyards and pressure allowed, neutral-script pace and run/pass split, five-year defensivestrength by position, divisional schedule, injury history crossed with workload burden,positional aging curves. Computed from raw plays rather than scraped from ranking tables,so it recomputes under your scoring and doesn't break when a website changes its HTML.
Optimises for consistency. The default leans toward week-to-week reliability overraw ceiling. Tune it with one number.
Handles your actual leagues. PPR, half PPR, standard, superflex, TE premium, anysize, any slot. Multiple leagues side by side with separate boards and drafts.
Separation and route efficiency from NGS tracking data — the open-data stand-in forpaywalled charting. Validated against a published PFF table: TPRR within a fewhundredths, ordering correct.
Rookies projected from draft capital, fitted to ten years of first-year outcomes.
Live sync from Sleeper (public API, no credentials), ESPN, or paste from anywhere.
Name matching that survives real drafts — JSN, CMC, Bijan, Hollywood Brown,Joshua Palmer, and typos. Ambiguous names name their candidates rather than guessing.
Tools
| Tool | What it does |
|---|---|
configure_league |
Create or update a named league; makes it active |
list_leagues |
All your leagues and which is active |
switch_league |
Change active league; board and draft resume instantly |
remove_league |
Delete a league and its draft history |
refresh_data |
Rebuild the board from source. Run once before draft day |
sync_draft |
Pull the live board from Sleeper, ESPN, or pasted text |
who_should_i_pick |
The main one. Recommendation + reasoning for the pick on the clock |
best_available |
Next best players, sortable by value, consistency, or ADP bargain |
record_pick / undo_pick / reset_draft |
Manual board management |
draft_status |
Your roster and where the draft stands |
prewarm |
Build all caches before draft day so nothing computes on the clock |
rookie_report |
This year's rookie class, projected from draft capital |
resolve_names |
Check how names resolve before trusting a paste sync |
separation_report |
Separation, cushion, YPRR, TPRR — the open-data PFF analogue |
value_picks |
Where the model disagrees with the draft market |
draft_value_history |
Backtest: preseason rank vs actual finish, by round and position |
persistent_value_players |
Players who beat their draft cost year after year |
player_report |
Every modelled factor for one player |
compare_players |
Head to head, up to four |
team_context |
O-line ranks, pace, run/pass split, schedule for an NFL team |
defense_report |
Fantasy points allowed by position, 5-year view |
plan_my_draft |
Simulate all 16 of your picks from your slot |
model_settings |
Retune factor weights |
Data attribution
This project computes everything from open sources and ships no third-party data:
- nflverse — play-by-play, weekly stats, snap counts,injury reports, rosters, schedules, draft picks, combine.
- NFL Next Gen Stats (mirrored by nflverse) — separation, cushion, YAC over expected.
- dynastyprocess/data — FantasyPros expertconsensus rank history.
Please respect the terms of those upstream projects. Nothing here scrapes paywalledsources, and no proprietary data is redistributed.