V12 DFS MCP Server
An MCP server that lets any AI agent build contest-ready MLB & NBA DFS lineups on FanDuel and DraftKings.
Documentation
MCP · CLI · HTTP · Agent-ready
DFS Optimizer for AI Agents — MCP Server + CLI
V12's lineup engine is one motor behind three interfaces: an MCP server, a JSON CLI, and an HTTP API. Any agent — Claude, Gemini, OpenClaw, or your own — can list slates, read the player pool, run a readiness pre-flight, and generate ranked, contest-ready NBA + MLB lineups through typed tool calls.
Start Free TrialSee the Dashboard
3
interfaces, one engine
8
decoupled pillars
150
lineups per run
MCP serverJSON CLIHTTP APIStructured tool outputsNBA + MLB nativeAny MCP agent
Section · 01
One engine, three interfaces — and they can't drift
Most optimizers are a GUI you click. V12 is a motor you call. The same v12.core pipeline is exposed three ways: an MCP server for agents, a JSON CLI for shells and cron, and an HTTP API for services. There is no second implementation to fall out of sync — the dashboard, your agent, and a one-line shell command all generate the exact same lineups from the exact same code. Build on whichever interface fits your stack and trust they agree.
Section · 02
Drop V12 into any MCP agent
Point a Claude, Gemini, OpenClaw, or custom agent at the V12 MCP server and it discovers the tools automatically: list slates with lock times, pull the player pool with salaries and projections, run a readiness pre-flight that surfaces blockers and warnings before a run, generate ranked lineups with locks/avoids and contest-aware presets, and assemble the FanDuel entry-template CSV. Every tool returns a structured result, so the agent acts on data — not on a prose blob it has to scrape and hope it parsed right.
Section · 03
No agent? The CLI and API hit the same motor
You don't need an LLM in the loop. `python -m v12.core.cli ` prints JSON to stdout for slates, odds, projections, ownership, simulation, and full lineup generation — pipe it to jq, schedule it in cron, or shell out from any language. The HTTP API (POST /v1/generate) does the same over the network with an API key. The agent path is a convenience layer on top of a CLI and API that stand on their own.
Section · 04
A real engine under the interface, not a wrapper
Behind every interface is an 8-pillar modular engine — data, config, projection, matchup, ownership, optimizer, simulator, ranker — each decoupled. A pure LP optimizer scales from a single lineup to 150 with injectable objectives; an MVN simulator with a PSD-corrected covariance matrix feeds the ranker. NBA and MLB are native today. We're deliberate about what's claimed: DraftKings and single-game/showdown formats are in progress and labeled honestly, not implied as finished.
Built into the engine
Every run ships with the same pillars: pool, projections, ownership, simulation, ranker, and warnings.
MCP server
Typed tools for any agent
Expose the engine over the Model Context Protocol. Your agent gets tools — list slates, read the pool, check readiness, generate lineups — with structured results instead of text it has to parse.
CLI
JSON in, JSON out
python -m v12.core.cli prints JSON to stdout. Pipe to jq, drop it in a cron, or call it from any language. No agent required to run the same engine.
HTTP API
POST /v1/generate
The same pipeline behind a FastAPI app. Send a slate, preset, contest, and lineup count; get a ranked portfolio and a contest-ready upload back. API-key gated.
One engine
Three interfaces, one source of truth
MCP, CLI, and HTTP all call v12.core.pipeline. They can't drift — the dashboard, an agent, and a shell script all get the exact same lineups from the exact same motor.
Structured output
No brittle scraping
Tools return typed objects: slates with lock times, players with salary/position/projection, lineups with player IDs and salaries. The agent acts on data, not on a prose blob.
8 pillars
A real engine under the hood
Data, config, projection, matchup, ownership, optimizer, simulator, ranker — decoupled. Pure LP optimizer, MVN simulator, NBA + MLB native, contest-aware presets.
Common questions
01
How do I connect my agent to V12?
Point your MCP client at the V12 MCP server. The agent discovers the available tools automatically and can immediately list today's slates, pull the player pool, run a readiness pre-flight, and generate lineups. Generation is API-key gated, so only your authenticated agent can spend a run.
02
Does it work with Claude, Gemini, OpenClaw, or custom agents?
Any agent that speaks MCP works — V12 doesn't care which model is driving. Claude, Gemini, OpenClaw, or a custom in-house agent all get the same typed tools. If your stack isn't agent-based at all, the CLI and HTTP API hit the identical engine.
03
Can I use V12 without an agent at all?
Yes. The CLI (python -m v12.core.cli) prints JSON for every subcommand — slates, odds, projections, ownership, simulation, lineups, full generate — so you can wire it into a cron job or a pipeline with no LLM in the loop. The HTTP API does the same over the network.
04
What does the MCP server actually return for a lineup run?
A ranked portfolio: each lineup carries the player IDs, salaries, total projection, stack shape, and the FanDuel entry-template rows when a contest is selected — already structured so the agent can assemble an upload or reason about exposure without parsing text.
05
Is this a finished product or a roadmap pitch?
Finished and running in production today for NBA and MLB on FanDuel, across MCP, CLI, and HTTP. We're honest about scope: DraftKings and single-game/showdown formats are in progress and labeled as such rather than implied as done.
Keep exploring V12
FanDuel
FanDuel DFS Optimizer (NBA + MLB)
NBA
NBA DFS Lineup Optimizer
MLB
MLB DFS Lineup Optimizer
Ready to ship your next slate?
View PlansRead Slate Notes