Skip to main content
Glama
mcp-ff2026

mcp-ff2026

by gregbuehler

Sleeper Fantasy Football MCP 2026

An MCP server that helps an AI agent run a Sleeper fantasy football team from draft night through the championship. Sleeper is the read-only source of league state; recommendations, draft queues, decision history, and model data are stored locally in SQLite.

What it does

  • Discovers your league, roster, and draft from one Sleeper username or user ID.

  • Syncs rosters, drafts, picks, matchups, transactions, players, and league history.

  • Imports public ffverse player crosswalks and current rankings without an API key.

  • Best-effort fills projection/ADP gaps from Sleeper's public projection feed.

  • Optionally enriches remaining gaps with FantasyPros or normalized third-party snapshots.

  • Recommends draft picks and estimates who may survive to your next pick.

  • Maintains a conflict-safe local draft queue.

  • Optimizes lineups and analyzes waivers, FAAB, trades, and season strategy.

  • Learns descriptive manager tendencies from historical league behavior.

  • Preserves source snapshots, recommendations, actions, and outcomes for later evaluation.

The models expose their inputs and uncertainty. Heuristic survival, FAAB, and championship estimates are not presented as calibrated facts.

Related MCP server: @fantopy/fantopy-mcp

Requirements

  • Python 3.12+

  • uv

  • A Sleeper username or user ID

FantasyPros is optional. The public ffverse feed is the preferred model-evidence source. Its rankings are distributed through the nflverse ecosystem by DynastyProcess and originate from FantasyPros consensus, so the server preserves that upstream lineage rather than double-counting the two feeds as independent evidence.

Setup

uv sync
cp .env.example .env

Edit .env:

FF2026_SLEEPER_USER_ID=your-sleeper-username
# Optional:
# FF2026_FANTASYPROS_API_KEY=your-api-key

Start the stdio MCP server:

uv run --env-file .env ff2026-mcp

State is stored in .data/ff2026.sqlite3. Credentials are read only from the environment and are excluded from source control.

MCP configuration

{
  "mcpServers": {
    "ff2026": {
      "command": "uv",
      "args": [
        "--directory",
        "/absolute/path/to/mcp-ff2026",
        "run",
        "--env-file",
        ".env",
        "ff2026-mcp"
      ]
    }
  }
}

First run

Ask the agent to perform these operations:

  1. initialize_season discovers and stores the league, roster, and draft defaults.

  2. get_season_context confirms the selection.

  3. sync_ffverse imports the public player crosswalk and preseason rankings using week 0.

  4. sync_sleeper_projections attempts free preseason projection and ADP fallback data.

  5. get_provider_status reports unresolved player identities.

  6. sync_league_history imports previous seasons for manager analysis.

ffverse's draft dataset contains ranks, not season point projections. Import a licensed projection feed with import_provider_snapshot, configure the optional FantasyPros API, or use the best-effort Sleeper-hosted projection fallback. Third-party evidence fills a missing player/metric/horizon only; matching native ffverse evidence remains authoritative. The weekly PPR rank-to-points field is retained as an explicitly labeled fallback rather than promoted to a native projection. Sleeper's projection URL is public but not part of its documented API, so refresh failures warn and preserve the last good evidence instead of blocking ffverse refreshes.

If the account has multiple leagues, initialize_season returns the choices instead of guessing.

During the draft

  1. Run refresh_decision_inputs with week 0.

  2. Read get_draft_state and stop if it reports stale data.

  3. Use recommend_draft_pick and review the alternatives and survival ranges.

  4. Update the local queue with set_draft_queue_entry.

  5. Record the chosen action, sync the draft, and repeat.

No tool makes picks or other changes in Sleeper.

During the season

Refresh inputs each week, then use the lineup, waiver, trade, value-change, simulation, and season strategy tools as needed. Record actions and outcomes so calibration reports can evaluate the system prospectively.

Create a transactionally consistent backup with:

uv run --env-file .env ff2026-backup

Development

uv run ruff format --check .
uv run ruff check .
uv run mypy
uv run pytest

Detailed design and contracts:

Additional data sources must be licensed for your use. Boris-style tiers are treated as a FantasyPros-derived benchmark, not as independent evidence.

Available Tools

33 tools
analyze_waiver_windowB

Evaluate add/drop pairs, FAAB ranges, and expected competition for current waivers.

Inputs: week (required), limit, league_id, roster_id. Returns: object

compare_playersB

Compare same-horizon league-scoring values without hiding their components.

Inputs: horizon (required), player_ids (required), league_id, roster_id. Returns: object

find_trade_opportunitiesA

Find plausible one-for-one roster-fit trades without inventing acceptance odds.

Inputs: limit, horizon, league_id, roster_id. Returns: object

get_calibration_reportB

Report Brier/absolute-error metrics from prospectively recorded outcomes.

Inputs: league_id. Returns: object

get_decision_historyC

Return immutable recommendation inputs, alternatives, actions, and outcomes.

Inputs: limit, league_id. Returns: object

get_draft_stateA

Get draft settings, picks, next-pick context, and an optional roster's local queue.

Inputs: draft_id, league_id, roster_id. Returns: object

get_league_overviewC

Get the current local league format, rosters, managers, and sync provenance.

Inputs: league_id. Returns: object

get_manager_profileB

Return descriptive, uncertainty-labeled manager behavior from retained history.

Inputs: league_id, roster_id. Returns: object

get_player_contextA

Return resolved projections, market inputs, injuries, and news for a player.

Inputs: player_id (required). Returns: object

get_provider_statusC

Inspect provider synchronizations and unresolved player identities.

Inputs: league_id. Returns: object

get_roster_stateC

Return value-aware roster depth, positional fragility, and current injury risk.

Inputs: horizon (required), league_id, roster_id. Returns: object

get_season_contextB

Get the persisted Sleeper user, league, roster, and draft defaults.

Inputs: season. Returns: object

get_sync_statusB

Inspect recent season/draft synchronizations and retained projection failures.

Inputs: limit, league_id. Returns: object

get_value_changesC

Screen for projection, market, trend, or contextual changes since a timestamp.

Inputs: since (required), horizon (required), limit, league_id. Returns: object

import_provider_snapshotC

Import one licensed point-in-time provider export into the same raw-first pipeline.

Inputs: payload (required), provider (required), source_key (required), document_kind (required), +4 more. Returns: object

initialize_seasonA

Discover the configured Sleeper user's league, roster, and draft for a season.

    A single discovered league is selected automatically. If several exist, this returns
    concise choices without guessing; call it again with league_id. The selected context is
    persisted locally and becomes the default for all league-aware tools.
    

Inputs: season, league_id, include_players. Returns: object

list_available_playersA

List active Sleeper players absent from current rosters and this league's draft picks.

This is an availability query, not a ranking or recommendation. Sleeper's search rank only provides stable result ordering until independent valuations exist.

Inputs: limit, draft_id, league_id, positions. Returns: object

map_player_identityB

Manually resolve an ambiguous provider ID to a Sleeper player with audit metadata.

Inputs: provider (required), sleeper_player_id (required), provider_player_id (required), confidence. Returns: object

optimize_lineupB

Optimize an eligible weekly lineup for median, floor, and upside objectives.

Inputs: week (required), league_id, roster_id. Returns: object

recommend_draft_pickC

Rank available draft choices and estimate survival to the roster's next owned pick.

Inputs: limit, draft_id, league_id, roster_id. Returns: object

recommend_season_strategyC

Recommend risk posture from record, points rank, and current weekly roster strength.

Inputs: week (required), league_id, roster_id. Returns: object

record_decision_actionC

Attach the action actually taken to a previously persisted recommendation.

Inputs: decision_id (required), chosen_action (required). Returns: object

record_decision_outcomeA

Attach an observed outcome to a prior recommendation without rewriting its forecast.

Inputs: outcome (required), decision_id (required). Returns: object

record_trade_offerC

Record proposed/rejected/countered/accepted trade labels for future calibration.

Inputs: status (required), give_player_ids (required), receive_player_ids (required), receiving_roster_id (required), +3 more. Returns: object

refresh_decision_inputsD

Refresh the appropriate Sleeper ledger, market signals, and licensed evidence.

Inputs: week, season, scoring, draft_id, +2 more. Returns: object

remove_draft_queue_entryB

Conflict-safely remove one player from an agent-managed local draft queue.

Inputs: player_id (required), expected_queue_revision (required), draft_id, roster_id. Returns: object

set_draft_queue_entryA

Conflict-safely insert or update one player in the local draft queue.

    Copy expected_queue_revision and expected_state_token from get_draft_state. A stale write is
    rejected so a pick or another queue edit cannot be silently overwritten.
    

Inputs: player_id (required), queue_rank (required), expected_state_token (required), expected_queue_revision (required), +4 more. Returns: object

simulate_seasonC

Estimate explicitly experimental playoff and championship probabilities.

Inputs: week (required), league_id, simulations. Returns: object

sync_draftA

Refresh only live draft details, picks, and traded-pick ownership.

    This low-latency path detects picks made during its read. Call it immediately before a
    draft decision, then use the returned sync provenance from get_draft_state.
    

Inputs: draft_id, league_id. Returns: object

sync_fantasyprosC

Ingest licensed FantasyPros identities, ECR/ADP, projections, news, and injuries.

Inputs: week, season, scoring, league_id. Returns: object

sync_leagueA

Synchronize broad Sleeper league state for setup and season-long operation.

    With weeks omitted, the current NFL week is captured automatically. Pass an explicit list
    for historical/backfill work or an empty list for core state only. Set include_players only
    when the large NFL catalog needs refreshing; Sleeper recommends caching it.
    

Inputs: weeks, league_id, include_players. Returns: object

sync_league_historyC

Backfill every week while following Sleeper's previous-league renewal chain.

Inputs: league_id, max_seasons. Returns: object

sync_sleeper_marketC

Ingest documented Sleeper global add/drop trends as a market signal.

Inputs: limit, league_id, lookback_hours. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 33 tools

    Disambiguation4/5

    Most tools target distinct resources and actions, but the multiple sync_* variants (sync_league, sync_draft, sync_league_history, sync_fantasypros, sync_sleeper_market) and refresh_decision_inputs create potential confusion about which synchronization to call for a given task. Descriptions mitigate this, but boundaries are not always obvious.

    Naming Consistency5/5

    All tool names use a consistent snake_case verb_noun pattern (e.g., get_draft_state, sync_league, recommend_draft_pick), with no convention mixing. The pattern is predictable and helps agents infer functionality.

    Tool Count2/5

    With 33 tools, the server exceeds the 25-tool threshold for a typical MCP server. While the fantasy football domain is broad, many sync and decision-recording tools could be consolidated, making the surface unnecessarily large.

    Completeness4/5

    The tool set covers the full fantasy football decision lifecycle, from data ingestion and state synchronization to analysis, recommendations, and outcome recording. Minor gaps exist such as no transaction execution or lineup setting, but these appear deliberately excluded from the server's decision-support scope.

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      B
      maintenance
      A server that integrates Sleeper fantasy sports data with Goose AI through the Machine Context Protocol (MCP), providing structured access to fantasy league information.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server that turns real NFL & fantasy data into a decisive edge, offering 70+ tools for draft assistance, start/sit recommendations, trade analysis, playoff odds, and more, with live league integration.
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      MCP server for NFL fantasy football retrieval, providing access to NFL stats and Sleeper league data through retrieval-oriented tools.
      -