AI-driven DFS lineup optimizer for MLB & NBA — build FanDuel & DraftKings lineups via MCP.
Inferred from the transports this listing declares (streamable-http). A client not listed here hasn’t been ruled out — it just isn’t something Forge can confirm.
Verification confirms publisher identity (repo ownership), not code safety. The security scan covers known CVEs and suspicious install scripts.
Read from a real MCP initialize → tools/list handshake against the declared endpoint. No tool was ever invoked — tools/list is the read-only introspection call the protocol defines for this. It reflects what the server advertised at that moment; a hosted endpoint is not pinned to any version and can change without notice.
https://v12dfs-production.up.railway.app/mcp34 tools · 325msagent_guideinjection riskAgent Guide
Self-serve onboarding: connect any agent (Claude/MCP or REST) to drive the
V12 motor, the same engine the dashboard agent uses. No auth. Returns
copy-paste MCP + REST config with a PLACEHOLDER key, the endpoint map, and the
generate body fields. Operators: issue each user their OWN key…Agent Guide Self-serve onboarding: connect any agent (Claude/MCP or REST) to drive the V12 motor, the same engine the dashboard agent uses. No auth. Returns copy-paste MCP + REST config with a PLACEHOLDER key, the endpoint map, and the generate body fields. Operators: issue each user their OWN key…
e each user their OWN key via
POST /v1/admin/create-key — never share one key.
### Responses:
**200**: Su…No input schema was published for this tool.
health_checkHealth
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**Example Response:**
```json
{
"status": "Status",
"version": "Version",
"timestamp": "Timestamp"
}
```Health ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "status": "Status", "version": "Version", "timestamp": "Timestamp" } ```
No input schema was published for this tool.
health_v12Health V12
Deep health check for the V12 pipeline. Surfaces:
- last nightly regression run (pass/fail + per-slate deltas)
- regression baseline metadata
- recent preflight blockers (if any cached)
No auth required — monitoring endpoint.
### Responses:
**200**: Successful Response (Success Res…Health V12 Deep health check for the V12 pipeline. Surfaces: - last nightly regression run (pass/fail + per-slate deltas) - regression baseline metadata - recent preflight blockers (if any cached) No auth required — monitoring endpoint. ### Responses: **200**: Successful Response (Success Res…
No input schema was published for this tool.
list_slatesGet Slates
List available V12 slates for today. Returns slate IDs, game counts, and lock times.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/json
**Example Response:**
```json
{
"detail": [
{…Get Slates List available V12 slates for today. Returns slate IDs, game counts, and lock times. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/json **Example Response:** ```json { "detail": [ {…
| Parameter | Type | Description |
|---|---|---|
| site | string | — |
| sport | string | — |
| playable | boolean | — |
| compact | boolean | — |
| limit | integer | — |
get_slate_playersGet Slate Players Endpoint
Get the V12 player pool for a specific slate ID.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/json
**Example Response:**
```json
{
"detail": [
{
"loc": [],
"msg":…Get Slate Players Endpoint Get the V12 player pool for a specific slate ID. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/json **Example Response:** ```json { "detail": [ { "loc": [], "msg":…
| Parameter | Type | Description |
|---|---|---|
| slate_id* | integer | — |
| compact | boolean | — |
| limit | integer | — |
slate_healthSlate Health
Pre-flight diagnostic for a slate. Returns whether odds, projections,
matchup, and FD master-session are ready BEFORE the agent invokes
/v1/generate.
Either slate_id or date is required. When slate_id is given, the slate
metadata is also returned (games list, lock times). When only d…Slate Health Pre-flight diagnostic for a slate. Returns whether odds, projections, matchup, and FD master-session are ready BEFORE the agent invokes /v1/generate. Either slate_id or date is required. When slate_id is given, the slate metadata is also returned (games list, lock times). When only d…
| Parameter | Type | Description |
|---|---|---|
| slate_id | integer | — |
| date | string | — |
| site | string | — |
| sport | string | — |
| last_known_fingerprint | string | — |
| include_snapshot | boolean | — |
slate_refreshSlate Refresh
Re-fetch projections + odds + slate metadata for a date.
Writes to the configured store (Supabase in prod). Returns a summary
dict (date, slate_id, n_games, n_players, n_upserted, n_odds, backend).
Auth: requires X-API-Key OR X-Internal-Secret (cron use). This is a
write op that co…Slate Refresh Re-fetch projections + odds + slate metadata for a date. Writes to the configured store (Supabase in prod). Returns a summary dict (date, slate_id, n_games, n_players, n_upserted, n_odds, backend). Auth: requires X-API-Key OR X-Internal-Secret (cron use). This is a write op that co…
| Parameter | Type | Description |
|---|---|---|
| date | string | — |
| sport | string | — |
| site | string | — |
slate_diffSlate Diff
Compute what changed since a previously-stored snapshot.
Body shape:
{
"slate_id": 32867,
"date": "2026-05-11",
"sport": "NBA",
"site": "FD",
"previous": {
"v": "v1",
"players": [{"id","name","status","salary","proj"}, ...],
"odds": [{"game","ou","spread","home_ml","away_ml"},…Slate Diff Compute what changed since a previously-stored snapshot. Body shape: { "slate_id": 32867, "date": "2026-05-11", "sport": "NBA", "site": "FD", "previous": { "v": "v1", "players": [{"id","name","status","salary","proj"}, ...], "odds": [{"game","ou","spread","home_ml","away_ml"},…
No input schema was published for this tool.
list_presetsGet Presets
List the available strategy presets (gpp_pro_pattern, gpp_sniper, gpp_balanced, gpp_volume, cash_grinder, gpp_contrarian, gpp_mass_entry) with their configurations. No auth required.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**…Get Presets List the available strategy presets (gpp_pro_pattern, gpp_sniper, gpp_balanced, gpp_volume, cash_grinder, gpp_contrarian, gpp_mass_entry) with their configurations. No auth required. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**…
| Parameter | Type | Description |
|---|---|---|
| sport | string | — |
generate_lineupsGenerate Lineups
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**Example Response:**
```json
{
"status": "Status",
"generated_at": "Generated At",
"warnings": [],
"exposures": {},
"lineups": []
}
```
**422**: Validation Error
Content-Type: app…Generate Lineups ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "status": "Status", "generated_at": "Generated At", "warnings": [], "exposures": {}, "lineups": [] } ``` **422**: Validation Error Content-Type: app…
| Parameter | Type | Description |
|---|---|---|
| date* | string | Slate date YYYY-MM-DD |
| sport | string | Sport engine to run: nba or mlb. |
| preset | string | Strategy preset key. |
| platform | string | V12 platform profile: fd or dk. |
| slate_id | integer | Specific slate ID from /v1/slates. Overrides date-based lookup. |
| contest_id | string | Optional contest handle for building an entry-update CSV from the user's existing contest entries. |
| entry_template_csv | string | Raw CSV of a FanDuel entries-upload-template the operator already downloaded. When present, the entry-upload is filled from its OWN entry_ids locally — no FanD… |
| contest_max_entries | integer | Max entries per user for the selected contest. Used to identify multi-entry mass GPPs (>=4) which keep the caller's preset. Field SIZE, not this, governs the M… |
| contest_field_size | integer | Total entries (field size) of the selected contest. Governs the MLB objective: field <= 10 -> max-mean (mlb_small_field_se); field > 10 -> ceiling (mlb_se_ceil… |
| contest_fallback | string | Escape hatch when a contest_id cannot be mapped to a slate (contest_slate_unresolved). 'slate_only' + an explicit slate_id builds on THAT slate and skips conte… |
| plan_only | boolean | When true, the server resolves preset / contest / authoritative slate / top-run-env / locks but does NOT run the optimizer. Returns a Plan response so the user… |
| fd_user_id | string | DEPRECATED on /v1/generate: fd_user_id is bound server-side to your API key (see /v1/admin/bind-fd-user). Body value is IGNORED on the public route unless X-In… |
| lineups | integer | Number of lineups (overrides preset default) |
| strategy | string | GPP or cash game strategy |
| style | string | — |
| runs | integer | Accepted for tier limits and response metadata. Portfolio quality is controlled by preset, candidate_pool_size, pool_oversample_multiplier, and simulation sett… |
| seed | integer | Random seed for reproducibility |
| locks | array | Players to lock in |
| avoids | array | Players to avoid |
| exposure_caps | object | Per-player exposure caps {name: 0.0-1.0} |
| max_hitter_exposure | number | Portfolio cap: max share of delivered lineups any ONE hitter may appear in (0.4 = 40%). Pitchers exempt. |
| max_pitcher_exposure | number | Portfolio cap: max share of delivered lineups any ONE pitcher may appear in. |
| auto_team_exposure_cap | number | Default per-team portfolio cap (share of lineups containing ANY given team). Per-team entries in team_exposure_caps win over it. |
| team_exposure_caps | object | Per-team portfolio caps, as [["COL",0.5],...] pairs or {"COL":0.5} dict. |
run_mlb_postmortemRun Mlb Postmortem
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**Example Response:**
```json
{
"status": "Status",
"generated_at": "Generated At",
"date": "Date",
"game_id": "Game Id",
"entries": 1,
"field_lineups": 1,
"training_rows": 1,…Run Mlb Postmortem ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "status": "Status", "generated_at": "Generated At", "date": "Date", "game_id": "Game Id", "entries": 1, "field_lineups": 1, "training_rows": 1,…
| Parameter | Type | Description |
|---|---|---|
| date* | string | Slate date YYYY-MM-DD |
| game_id* | string | V12 slate/game handle, e.g. 129715. |
| history_csv* | string | Raw FanDuel contest-history CSV content. |
| history_filename | string | — |
| upload_csvs | array | — |
| sabersim_csv | string | Optional external lineup export for comparison. |
| top_field_rank | integer | — |
| sync_supabase | boolean | Upsert simulator training rows to production store when configured. |
list_contestsContest Registry
List contest strategy registry entries for agents and the dashboard.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/json
**Example Response:**
```json
{
"detail": [
{
"loc": []…Contest Registry List contest strategy registry entries for agents and the dashboard. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/json **Example Response:** ```json { "detail": [ { "loc": []…
| Parameter | Type | Description |
|---|---|---|
| platform | string | — |
| sport | string | — |
list_live_contestsLive Contests
Return latest V12 contest context without backend identifiers.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/json
**Example Response:**
```json
{
"detail": [
{
"loc": [],
"msg":…Live Contests Return latest V12 contest context without backend identifiers. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/json **Example Response:** ```json { "detail": [ { "loc": [], "msg":…
| Parameter | Type | Description |
|---|---|---|
| platform | string | — |
| sport | string | — |
| compact | boolean | — |
| limit | integer | — |
contest_semaforoContest Semaforo
VIP-only: per-contest play/skip verdict from the owner's verified P&L
bands + structure gates + rake/fill math. See core/data/contest_semaforo.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: a…Contest Semaforo VIP-only: per-contest play/skip verdict from the owner's verified P&L bands + structure gates + rake/fill math. See core/data/contest_semaforo. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: a…
| Parameter | Type | Description |
|---|---|---|
| platform | string | — |
| sport | string | — |
| limit | integer | — |
scout_fieldScout Field
VIP-only (owner order 8/16): opponent-scouting profiles for the small
single-entry band. The owner's $65 table runs the SAME regulars nightly;
this returns each regular's fingerprint — days seen, avg score,
chalkiness (overlap with field consensus), favorite pitchers/bats and
head-to-h…Scout Field VIP-only (owner order 8/16): opponent-scouting profiles for the small single-entry band. The owner's $65 table runs the SAME regulars nightly; this returns each regular's fingerprint — days seen, avg score, chalkiness (overlap with field consensus), favorite pitchers/bats and head-to-h…
| Parameter | Type | Description |
|---|---|---|
| contest | string | — |
| min_days | integer | — |
contest_adviceContest Advice
Advice for a concrete contest name. Resolves the name against the LIVE
lobby FIRST so a real live contest is never reported missing (the curated
registry is only a subset — that was the "$800 Wed MLB Home Run no existe"
bug), then layers registry strategy advice on top when a templa…Contest Advice Advice for a concrete contest name. Resolves the name against the LIVE lobby FIRST so a real live contest is never reported missing (the curated registry is only a subset — that was the "$800 Wed MLB Home Run no existe" bug), then layers registry strategy advice on top when a templa…
| Parameter | Type | Description |
|---|---|---|
| name* | string | — |
| platform | string | — |
| sport | string | — |
fill_templateinjection riskFill Template
Fill a downloaded FanDuel/DK entries-template with already-generated
lineups WITHOUT re-running the optimizer — the MCP-callable equivalent of the
dashboard's fill_template. Keeps each entry row's leading columns (entry_id,
contest_id, fee) and replaces the roster-slot columns with a…Fill Template Fill a downloaded FanDuel/DK entries-template with already-generated lineups WITHOUT re-running the optimizer — the MCP-callable equivalent of the dashboard's fill_template. Keeps each entry row's leading columns (entry_id, contest_id, fee) and replaces the roster-slot columns with a…
lineups: Exfiltration-shaped instructionEach lineup = upload tokens in template roster-slot order.| Parameter | Type | Description |
|---|---|---|
| template_csv* | string | Raw CSV of the entries-template (headers + entry rows). |
| lineups* | array | Each lineup = upload tokens in template roster-slot order. |
admin_issue_keyIssue Key
Idempotently issue a user's API key and ALWAYS return the paste-able
connect block. Returns the email's existing active key (or mints one) so a
user keeps a single key across dashboard reloads; with rotate=true, revokes
the existing keys and mints a fresh one. Admin-gated — the dashboard…Issue Key Idempotently issue a user's API key and ALWAYS return the paste-able connect block. Returns the email's existing active key (or mints one) so a user keeps a single key across dashboard reloads; with rotate=true, revokes the existing keys and mints a fresh one. Admin-gated — the dashboard…
| Parameter | Type | Description |
|---|---|---|
| email* | string | — |
| tier | string | — |
| rotate | boolean | Revoke existing keys and mint a fresh one. |
betting_agent_guideBetting Agent Guide
How any agent uses the MLB betting tools + how to read the output.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/jsonBetting Agent Guide How any agent uses the MLB betting tools + how to read the output. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json
No input schema was published for this tool.
betting_player_formPlayer Form
Streak / splits / recent form for any player ('racha de X').
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/json
**Example Response:**
```json
{
"detail": [
{
"loc": [],
"msg": "Me…Player Form Streak / splits / recent form for any player ('racha de X'). ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/json **Example Response:** ```json { "detail": [ { "loc": [], "msg": "Me…
| Parameter | Type | Description |
|---|---|---|
| name* | string | — |
| season | integer | — |
betting_analyze_propAnalyze Prop
Model a single player's prop vs tonight's FanDuel line -> edge.
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/json
**Example Response:**
```json
{
"detail": [
{
"loc": [],
"msg":…Analyze Prop Model a single player's prop vs tonight's FanDuel line -> edge. ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/json **Example Response:** ```json { "detail": [ { "loc": [], "msg":…
| Parameter | Type | Description |
|---|---|---|
| name* | string | — |
| prop | string | — |
| threshold | integer | — |
| season | integer | — |
betting_scan_edgesScan Edges
Tonight's prop board ranked by model edge (VALUE first).
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/json
**Example Response:**
```json
{
"detail": [
{
"loc": [],
"msg": "Message…Scan Edges Tonight's prop board ranked by model edge (VALUE first). ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/json **Example Response:** ```json { "detail": [ { "loc": [], "msg": "Message…
| Parameter | Type | Description |
|---|---|---|
| prop | string | — |
| min_edge | number | — |
| limit | integer | — |
| threshold | integer | — |
| coors | boolean | — |
| season | integer | — |
betting_best_betsBest Bets
THE board sweep — scans EVERY main prop market (HR/RBI/hit/total_bases/
2+hits/stolen_base) in one call and returns the top edges across all of them,
not just home runs. Power props carry the Savant validation (CONFIRMED power
ranked above neutral/noise). Use this for an open 'what's hot…Best Bets THE board sweep — scans EVERY main prop market (HR/RBI/hit/total_bases/ 2+hits/stolen_base) in one call and returns the top edges across all of them, not just home runs. Power props carry the Savant validation (CONFIRMED power ranked above neutral/noise). Use this for an open 'what's hot…
| Parameter | Type | Description |
|---|---|---|
| min_edge | number | — |
| limit | integer | — |
betting_build_parlayBuild Parlay
Deterministic parlay analysis for BOTH leg shapes. Body:
{legs:[...], ticket_odds?}. PROP legs {name, prop, threshold} keep the
legacy correlation-aware EV. GAME-side legs (ML / run line / total / team
total / F5, selected by the `market` field) — the slips users actually
paste — are…Build Parlay Deterministic parlay analysis for BOTH leg shapes. Body: {legs:[...], ticket_odds?}. PROP legs {name, prop, threshold} keep the legacy correlation-aware EV. GAME-side legs (ML / run line / total / team total / F5, selected by the `market` field) — the slips users actually paste — are…
| Parameter | Type | Description |
|---|---|---|
| legs* | array | — |
| ticket_odds | integer | — |
betting_log_betLog Bet
Record a bet you placed (per user) so we can track P&L + CLV over time.
Body: {uid, market, selection, odds (American), stake, line?, prop?, team?,
game?, book?}. Append-only — this is the evidence base that PROVES edge.
### Responses:
**200**: Successful Response (Success Response)
Cont…Log Bet Record a bet you placed (per user) so we can track P&L + CLV over time. Body: {uid, market, selection, odds (American), stake, line?, prop?, team?, game?, book?}. Append-only — this is the evidence base that PROVES edge. ### Responses: **200**: Successful Response (Success Response) Cont…
| Parameter | Type | Description |
|---|---|---|
| uid* | string | — |
| market* | string | — |
| selection* | string | — |
| odds* | integer | — |
| stake* | number | — |
| line | number | — |
| prop | string | — |
| team | string | — |
| game | string | — |
| book | string | — |
betting_my_betsMy Bets
A user's bet history + P&L / CLV summary. avg_clv_pct > 0 over time = you're
beating the closing line = real edge (the only durable proof).
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/js…My Bets A user's bet history + P&L / CLV summary. avg_clv_pct > 0 over time = you're beating the closing line = real edge (the only durable proof). ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/js…
| Parameter | Type | Description |
|---|---|---|
| uid* | string | — |
betting_settle_betSettle Bet
Settle a logged bet. Body: {uid, bet_id, result: won|lost|push,
closing_odds?}. closing_odds lets us compute CLV (did you beat the close).
### Responses:
**200**: Successful Response (Success Response)
Content-Type: application/json
**422**: Validation Error
Content-Type: application/…Settle Bet Settle a logged bet. Body: {uid, bet_id, result: won|lost|push, closing_odds?}. closing_odds lets us compute CLV (did you beat the close). ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **422**: Validation Error Content-Type: application/…
| Parameter | Type | Description |
|---|---|---|
| uid* | string | — |
| bet_id* | string | — |
| result* | string | — |
| closing_odds | integer | — |
betting_cross_bookCross Book
Cross-book value: FanDuel vs DraftKings (DK pulled via ESPN's public API,
no key/WS). LINE_SHOP (the books hang different numbers — take the easier
side) and PRICE_SHOP (better price, same line) are CONFIRMED edges, no model
needed. Arbitrage is NOT auto-reported (needs over/under sides…Cross Book Cross-book value: FanDuel vs DraftKings (DK pulled via ESPN's public API, no key/WS). LINE_SHOP (the books hang different numbers — take the easier side) and PRICE_SHOP (better price, same line) are CONFIRMED edges, no model needed. Arbitrage is NOT auto-reported (needs over/under sides…
| Parameter | Type | Description |
|---|---|---|
| prop | string | — |
betting_game_linesGame Lines
GAME markets — moneyline / run total / run line for today's MLB games. This
answers the 'quién gana / cuántas carreras / pronóstico Yankees vs Toronto'
questions that player props CAN'T (V12 used to just refuse them). Optional
team filter ('Yankees', 'NYY'). MARKET data from ESPN's publ…Game Lines GAME markets — moneyline / run total / run line for today's MLB games. This answers the 'quién gana / cuántas carreras / pronóstico Yankees vs Toronto' questions that player props CAN'T (V12 used to just refuse them). Optional team filter ('Yankees', 'NYY'). MARKET data from ESPN's publ…
| Parameter | Type | Description |
|---|---|---|
| team | string | — |
| date | string | — |
betting_marketMarket
FULL FanDuel market board for a team's game — EVERY market with real odds +
de-vig fair price, so NO market question goes unanswered. Game lines (ML /
total / run line), FIRST 5 INNINGS (F5), TEAM TOTALS, NRFI/YRFI, alternate
lines, AND the full player-prop menu (HR / 2+ HR / hit / 2+ hits…Market FULL FanDuel market board for a team's game — EVERY market with real odds + de-vig fair price, so NO market question goes unanswered. Game lines (ML / total / run line), FIRST 5 INNINGS (F5), TEAM TOTALS, NRFI/YRFI, alternate lines, AND the full player-prop menu (HR / 2+ HR / hit / 2+ hits…
| Parameter | Type | Description |
|---|---|---|
| team* | string | — |
| date | string | — |
betting_sharpSharp
SHARP value — FanDuel vs PINNACLE (the sharpest book, ~2% hold). Pinnacle's
de-vigged line ≈ TRUE probability, so this is the most reliable value signal in
the kit, NO model needed: edge_vs_sharp = FD's price minus the sharp's true
prob; POSITIVE means FanDuel pays MORE than fair (real value…Sharp SHARP value — FanDuel vs PINNACLE (the sharpest book, ~2% hold). Pinnacle's de-vigged line ≈ TRUE probability, so this is the most reliable value signal in the kit, NO model needed: edge_vs_sharp = FD's price minus the sharp's true prob; POSITIVE means FanDuel pays MORE than fair (real value…
| Parameter | Type | Description |
|---|---|---|
| team* | string | — |
| date | string | — |
betting_game_modelGame Model
MODEL the GAME run markets — TEAM TOTALS (over/under) and NRFI/YRFI — vs
the FanDuel line, MARKET-ANCHORED: expected_runs = the book's de-vigged
implied mean + 0.25×(structural model − book), and every edge is computed vs
the FAIR (de-vigged) probability, never the raw vig price. The st…Game Model MODEL the GAME run markets — TEAM TOTALS (over/under) and NRFI/YRFI — vs the FanDuel line, MARKET-ANCHORED: expected_runs = the book's de-vigged implied mean + 0.25×(structural model − book), and every edge is computed vs the FAIR (de-vigged) probability, never the raw vig price. The st…
| Parameter | Type | Description |
|---|---|---|
| team* | string | — |
| date | string | — |
betting_matchupMatchup
GROUNDING — the real game for a team today: probable pitchers + the POSTED
lineup (ACTUAL player names from MLB statsapi) + the market line + the CONTEXT
a pro reasons with: home-plate UMPIRE (strike zone → totals/Ks), the INJURY
report (who's OUT / Day-To-Day), and BULLPEN health (ERA / b…Matchup GROUNDING — the real game for a team today: probable pitchers + the POSTED lineup (ACTUAL player names from MLB statsapi) + the market line + the CONTEXT a pro reasons with: home-plate UMPIRE (strike zone → totals/Ks), the INJURY report (who's OUT / Day-To-Day), and BULLPEN health (ERA / b…
| Parameter | Type | Description |
|---|---|---|
| team* | string | — |
| date | string | — |
betting_market_moversMarket Movers
MARKET pattern (not model opinion): how FanDuel lines MOVED today, from the
captured snapshots. A line that shortened = money coming in (sharp/news); a
drift = money off. This is the 'obvious opportunity' signal — market-confirmed,
independent of our unproven model. Needs accumulated…Market Movers MARKET pattern (not model opinion): how FanDuel lines MOVED today, from the captured snapshots. A line that shortened = money coming in (sharp/news); a drift = money off. This is the 'obvious opportunity' signal — market-confirmed, independent of our unproven model. Needs accumulated…
| Parameter | Type | Description |
|---|---|---|
| prop | string | — |
| min_move | number | — |
| date | string | — |
34 of 34 tools published a description.
Tool names and descriptions are written by the publisher and shown verbatim as inert text. They are the strings an MCP client passes to a model, so Forge scans them for prompt-injection patterns — any finding appears with the security scan above. “Privileged” is a keyword match on the tool name, not an audit of what the tool does: a benign-sounding name can still do anything.
AI-driven DFS lineup optimizer for MLB & NBA — build FanDuel & DraftKings lineups via MCP.
Linked names open Forge’s index of every entry observed exposing that tool. Browse all indexed tools.
This entry publishes no npm package, so Forge has no dependency tree for it. That is a gap in coverage — not a statement that it has no dependencies.