io.github.Jorgeperez0825/v12-dfs is a remote MCP server that gives an AI agent 34 tools, among them admin_issue_key, agent_guide, betting_agent_guide. It answers at https://v12dfs-production.up.railway.app/mcp over streamable HTTP, and it listed its tools to an anonymous client, so no sign-in was needed for that. Our probes reached it 6 of 6 times since 11 September 2026; the last check, on 20 October 2026, succeeded.
AI-driven DFS lineup optimizer for MLB & NBA — build FanDuel & DraftKings lineups via MCP.
Description as the publisher wrote it.
| Tool | What it does |
|---|---|
admin_issue_key | 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 existi Inputs: email, tier, rotate |
agent_guide | 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 gene |
betting_agent_guide | Betting 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 |
betting_analyze_prop | 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 Re Inputs: name, prop, threshold, season |
betting_best_bets | 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 ran Inputs: min_edge, limit |
betting_build_parlay | 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 t Inputs: legs, ticket_odds |
betting_cross_book | 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 need Inputs: prop |
betting_game_lines | 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 te Inputs: team, date |
betting_game_model | 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 FAI Inputs: team, date |
betting_log_bet | 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. ### Respons Inputs: uid, market, selection, odds, stake, line |
betting_market | 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, Inputs: team, date |
betting_market_movers | 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-confi Inputs: prop, min_move, date |
betting_matchup | 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 re Inputs: team, date |
betting_my_bets | 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/jso Inputs: uid |
betting_player_form | 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 Respon Inputs: name, season |
betting_scan_edges | 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:** Inputs: prop, min_edge, limit, threshold, coors, season |
betting_settle_bet | 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/j Inputs: uid, bet_id, result, closing_odds |
betting_sharp | 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 pr Inputs: team, date |
contest_advice | 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), Inputs: name, platform, sport |
contest_semaforo | 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: ap Inputs: platform, sport, limit |
fill_template | 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, co Inputs: template_csv, lineups |
generate_lineups | Generate Lineups ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "status": "Status", "generated_at": "Generated At", "warnings": [], "exposures": {}, "lineups": [ |
get_slate_players | 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 Res Inputs: slate_id, compact, limit |
health_check | Health ### Responses: **200**: Successful Response (Success Response) Content-Type: application/json **Example Response:** ```json { "status": "Status", "version": "Version", "timestamp": "Timestamp" } ``` |
health_v12 | 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. ### |
list_contests | 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 **E Inputs: platform, sport |
list_live_contests | 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 Re Inputs: platform, sport, compact, limit |
list_presets | 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 ( Inputs: sport |
list_slates | 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: applicatio Inputs: site, sport, playable, compact, limit |
run_mlb_postmortem | 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", "entr Inputs: date, game_id, history_csv, history_filename, upload_csvs, sabersim_csv |
scout_field | 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 w Inputs: contest, min_days |
slate_diff | 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"}, ...], "odd |
slate_health | 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 metada Inputs: slate_id, date, site, sport, last_known_fingerprint, include_snapshot |
slate_refresh | 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 Inputs: date, sport, site |
Every block below points at https://v12dfs-production.up.railway.app/mcp. Pick your client and copy.
claude mcp add --transport http io-github-jorgeperez0825-v12-dfs https://v12dfs-production.up.railway.app/mcp
{
"mcpServers": {
"io-github-jorgeperez0825-v12-dfs": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://v12dfs-production.up.railway.app/mcp"]
}
}
}{
"mcpServers": {
"io-github-jorgeperez0825-v12-dfs": {
"url": "https://v12dfs-production.up.railway.app/mcp"
}
}
}{
"servers": {
"io-github-jorgeperez0825-v12-dfs": {
"type": "http",
"url": "https://v12dfs-production.up.railway.app/mcp"
}
}
}{
"context_servers": {
"io-github-jorgeperez0825-v12-dfs": {
"url": "https://v12dfs-production.up.railway.app/mcp"
}
}
}{
"mcpServers": {
"io-github-jorgeperez0825-v12-dfs": {
"serverUrl": "https://v12dfs-production.up.railway.app/mcp"
}
}
}{
"mcpServers": {
"io-github-jorgeperez0825-v12-dfs": {
"url": "https://v12dfs-production.up.railway.app/mcp"
}
}
}name: io.github.Jorgeperez0825/v12-dfs
version: 0.0.1
schema: v1
mcpServers:
- name: io.github.Jorgeperez0825/v12-dfs
type: streamable-http
url: https://v12dfs-production.up.railway.app/mcp{
"mcpServers": {
"io-github-jorgeperez0825-v12-dfs": {
"httpUrl": "https://v12dfs-production.up.railway.app/mcp"
}
}
}{
"mcpServers": {
"io-github-jorgeperez0825-v12-dfs": {
"type": "http",
"url": "https://v12dfs-production.up.railway.app/mcp"
}
}
}{
"mcpServers": {
"io-github-jorgeperez0825-v12-dfs": {
"url": "https://v12dfs-production.up.railway.app/mcp"
}
}
}goose://extension?url=https%3A%2F%2Fv12dfs-production.up.railway.app%2Fmcp&type=streamable_http&id=io-github-jorgeperez0825-v12-dfs&name=io.github.Jorgeperez0825/v12-dfs
It answered our last check on 20 October 2026 in 270 ms. Over 6 checks since 11 September 2026 it answered 6. Status here comes from Neuronto's own probes, not from the publisher.
34, as returned by the server's own tools/list on 12 September 2026: admin_issue_key, agent_guide, betting_agent_guide, betting_analyze_prop, betting_best_bets, betting_build_parlay, betting_cross_book, betting_game_lines, and 26 more.
It answered our last check on 20 October 2026 in 270 ms. Over 6 checks since 11 September 2026 it answered 6.
Put the server under mcpServers in ~/.cursor/mcp.json with the URL https://v12dfs-production.up.railway.app/mcp. The exact JSON is above, with the same setup for Claude Code, Claude Desktop, VS Code, Windsurf, Zed, Gemini CLI and the rest.
It listed its tools to an anonymous client, so reading the tool list needs no key. Individual tools can still ask for credentials in their own inputs.
Publisher: io.github.jorgeperez0825. Endpoint host: v12dfs-production.up.railway.app. ARD identifier: urn:air:io.github.jorgeperez0825:mcp:v12-dfs.
First indexed 10 September 2026. The tools are exactly what the server returned; nothing on this page
is inferred from its name. Ranking in Neuronto search is never for sale.