fantasy-sports-toolkit
A fantasy-sports toolkit you author once and compile to every coding agent.
This is a Weft marketplace (namespace
dev.fantasylab). You write provider-agnostic skills, commands, an agent, and MCP
server definitions once, and Weft compiles them into the native plugin format for
Claude Code, OpenAI Codex, Cursor, GitHub Copilot, and OpenCode.
The idea: the judgment (how to set a lineup, value a trade, read the waiver wire)
lives in portable, sport-agnostic skills, while the data comes from a swappable MCP
provider plugin. The same skills handle football, basketball, baseball, and hockey.
They read whatever roster slots and scoring your league uses, so you can bring
whichever sport and platform you play and the logic stays the same.
Layout
marketplace.yaml # the catalog (name + namespace + plugins)
plugins/
fantasy-manager/ # provider-agnostic skills + bundled context MCPs
sleeper/ # Sleeper data-provider plugin (MCP)
yahoo/ # Yahoo data-provider plugin (MCP)
out/ # compiled output for all 5 harnesses (generated; gitignored)
.claude/ # files placed by `weft install` (generated; gitignored)
out/ and .claude/ are generated by weft build / weft install and aren't
committed. Run the CLI to regenerate them.
The plugins
plugins/fantasy-manager (skills, v0.3.0)
The provider-agnostic brains of the toolkit. It carries no roster data of its own.
It expects a data provider MCP (like sleeper) to be connected, and falls back to
asking you to paste your roster if none is. Every skill reads the league's own
roster slots and scoring, so it works across sports: football (QB/RB/WR/TE/FLEX/K/DEF,
weekly lineups, byes), basketball (PG/SG/SF/PF/C/G/F/UTIL, daily lineups, off-nights),
baseball (C/1B/2B/3B/SS/OF/UTIL/SP/RP), and hockey (C/LW/RW/D/G).
Skills (auto-triggered by description, each with an eval suite):
set-lineup builds the optimal starting lineup for the scoring period,
respecting the league's slots, schedule, and OUT/inactive designations, and
surfaces the close calls.
waiver-wire ranks free agents by rest-of-season value for your roster and
assigns a FAAB bid (or waiver priority) and a drop candidate to each claim.
trade-analyzer scores a proposed trade on raw value and roster fit (category
vs. points scoring included), then gives an Accept / Decline / Counter verdict
and drafts the counter.
Commands (explicit, fast-path versions):
/start-sit gives a decisive head-to-head start/sit call between two players.
/trade-check gives a one-line gut-check verdict on a trade stated inline.
Agent:
waiver-scout scans the whole free-agent pool for breakout candidates ahead of
the waiver run and returns a ranked shortlist. It scouts and recommends; it never
submits claims.
Evals (evals/*.cases.yaml) are per-skill case suites with trace assertions (e.g.
"the model called Read"), output regex matches, and LLM-judge rubrics, covering
both football and basketball lineup cases. Run them with weft eval against the
Claude harness.
The plugin also bundles a few provider-independent context MCPs that help no matter
which sport or platform you're on:
sports-data gives live scores, schedules, and standings across sports
(TheSportsDB via the Pipeworx gateway). Remote HTTP, no install, no API key.
reddit searches the sport's fantasy subreddits (r/fantasyfootball,
r/fantasybball, ...) for injury news and sentiment. npm package, anonymous.
web-fetch fetches any page (injury reports, depth charts) as clean markdown.
PyPI package, no API key.
plugins/sleeper (provider)
A single MCP data provider: read-only access to the Sleeper fantasy API for the
sports Sleeper supports (NFL and NBA), covering leagues, rosters, players, matchups,
trending pickups, plus lineup/start-sit/waiver analysis. No API key required.
Install it alongside fantasy-manager to give the skills live data.
plugins/yahoo (provider)
A second, interchangeable MCP data provider: Yahoo Fantasy Sports (NFL, NHL, NBA,
and MLB) via the mcp-yahoo-fantasy package, run with uvx. It exposes leagues,
standings, rosters, matchups, and free agents, plus write operations (set lineups,
add/drop, propose and respond to trades). Unlike Sleeper it needs a one-time Yahoo
OAuth login: create a Yahoo developer app for YAHOO_CONSUMER_KEY and
YAHOO_CONSUMER_SECRET, then run uvx --from mcp-yahoo-fantasy yahoo-login once.
The providers are the swap point. The fantasy-manager skills treat any of them as
a plain data source, so you connect whichever platform you play (Sleeper, Yahoo, or
a future ESPN provider) and the lineup, waiver, and trade logic works unchanged.
Design