{"serverId":"mcp-registry/io.github.jorgeperez0825/v12-dfs","tools":[{"name":"betting_analyze_prop","fixed":{"name":"betting_analyze_prop","description":"Analyze Prop\n\nModel a single player's prop vs tonight's FanDuel line -> edge.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"detail\": [\n    {\n      \"loc\": [],\n      \"msg\": \"Message\",\n      \"type\": \"Error Type\",\n      \"ctx\": {}\n    }\n  ]\n}\n```","inputSchema":{"type":"object","title":"betting_analyze_propArguments","required":["name"],"properties":{"name":{"type":"string","title":"name"},"prop":{"type":"string","title":"prop","default":"home_run"},"season":{"type":"integer","title":"season","default":2026},"threshold":{"type":"integer","title":"threshold","default":2}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":223,"tokensAfter":223},{"name":"betting_cross_book","fixed":{"name":"betting_cross_book","description":"Cross Book\n\nCross-book value: FanDuel vs DraftKings (DK pulled via ESPN's public API,\nno key/WS). LINE_SHOP (the books hang different numbers — take the easier\nside) and PRICE_SHOP (better price, same line) are CONFIRMED edges, no model\nneeded. Arbitrage is NOT auto-reported (needs over/under sides, which ESPN\ndoesn't label). Overnight only pitcher_strikeouts overlaps; richer markets\nappear near game time.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application","inputSchema":{"type":"object","title":"betting_cross_bookArguments","properties":{"prop":{"type":"string","title":"prop","default":"pitcher_strikeouts"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":199,"tokensAfter":199},{"name":"betting_market_movers","fixed":{"name":"betting_market_movers","description":"Market Movers\n\nMARKET pattern (not model opinion): how FanDuel lines MOVED today, from the\ncaptured snapshots. A line that shortened = money coming in (sharp/news); a\ndrift = money off. This is the 'obvious opportunity' signal — market-confirmed,\nindependent of our unproven model. Needs accumulated capture; thin → thin.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n``","inputSchema":{"type":"object","title":"betting_market_moversArguments","properties":{"date":{"type":"string","anyOf":[{"type":"string"},{"type":"null"}],"title":"date"},"prop":{"type":"string","anyOf":[{"type":"string"},{"type":"null"}],"title":"prop"},"min_move":{"type":"number","title":"min_move","default":3}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":245,"tokensAfter":245},{"name":"betting_settle_bet","fixed":{"name":"betting_settle_bet","description":"Settle Bet\n\nSettle a logged bet. Body: {uid, bet_id, result: won|lost|push,\nclosing_odds?}. closing_odds lets us compute CLV (did you beat the close).\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"detail\": [\n    {\n      \"loc\": [],\n      \"msg\": \"Message\",\n      \"type\": \"Error Type\",\n      \"ctx\": {}\n    }\n  ]\n}\n```","inputSchema":{"type":"object","title":"betting_settle_betArguments","required":["uid","bet_id","result"],"properties":{"uid":{"type":"string","title":"uid"},"bet_id":{"type":"string","title":"bet_id"},"result":{"type":"string","title":"result"},"closing_odds":{"type":"integer","anyOf":[{"type":"integer"},{"type":"null"}],"title":"closing_odds"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":248,"tokensAfter":248},{"name":"get_slate_players","fixed":{"name":"get_slate_players","description":"Get Slate Players Endpoint\n\nGet the V12 player pool for a specific slate ID.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"detail\": [\n    {\n      \"loc\": [],\n      \"msg\": \"Message\",\n      \"type\": \"Error Type\",\n      \"ctx\": {}\n    }\n  ]\n}\n```","inputSchema":{"type":"object","title":"get_slate_playersArguments","required":["slate_id"],"properties":{"limit":{"type":"integer","anyOf":[{"type":"integer"},{"type":"null"}],"title":"limit"},"compact":{"type":"boolean","title":"compact","default":false},"slate_id":{"type":"integer","title":"slate_id"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":215,"tokensAfter":215},{"name":"health_check","fixed":{"name":"health_check","description":"Health\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"status\": \"Status\",\n  \"version\": \"Version\",\n  \"timestamp\": \"Timestamp\"\n}\n```","inputSchema":{"type":"object","title":"health_checkArguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"health_v12","fixed":{"name":"health_v12","description":"Health V12\n\nDeep health check for the V12 pipeline. Surfaces:\n  - last nightly regression run (pass/fail + per-slate deltas)\n  - regression baseline metadata\n  - recent preflight blockers (if any cached)\nNo auth required — monitoring endpoint.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json","inputSchema":{"type":"object","title":"health_v12Arguments","properties":{}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"list_contests","fixed":{"name":"list_contests","description":"Contest Registry\n\nList contest strategy registry entries for agents and the dashboard.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"detail\": [\n    {\n      \"loc\": [],\n      \"msg\": \"Message\",\n      \"type\": \"Error Type\",\n      \"ctx\": {}\n    }\n  ]\n}\n```","inputSchema":{"type":"object","title":"list_contestsArguments","properties":{"sport":{"type":"string","title":"sport","default":"MLB"},"platform":{"type":"string","title":"platform","default":"fd"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":187,"tokensAfter":187},{"name":"list_live_contests","fixed":{"name":"list_live_contests","description":"Live Contests\n\nReturn latest V12 contest context without backend identifiers.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"detail\": [\n    {\n      \"loc\": [],\n      \"msg\": \"Message\",\n      \"type\": \"Error Type\",\n      \"ctx\": {}\n    }\n  ]\n}\n```","inputSchema":{"type":"object","title":"list_live_contestsArguments","properties":{"limit":{"type":"integer","anyOf":[{"type":"integer"},{"type":"null"}],"title":"limit","default":250},"sport":{"type":"string","title":"sport","default":"MLB"},"compact":{"type":"boolean","title":"compact","default":true},"platform":{"type":"string","title":"platform","default":"fd"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":233,"tokensAfter":233},{"name":"list_presets","fixed":{"name":"list_presets","description":"Get Presets\n\nList 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.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"detail\": [\n    {\n      \"loc\": [],\n      \"msg\": \"Message\",\n      \"type\": \"Error Type\",\n      \"ctx\": {}\n    }\n  ]\n}\n`","inputSchema":{"type":"object","title":"list_presetsArguments","properties":{"sport":{"type":"string","title":"sport","default":"nba"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":199,"tokensAfter":199},{"name":"list_slates","fixed":{"name":"list_slates","description":"Get Slates\n\nList available V12 slates for today. Returns slate IDs, game counts, and lock times.\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n**422**: Validation Error\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"detail\": [\n    {\n      \"loc\": [],\n      \"msg\": \"Message\",\n      \"type\": \"Error Type\",\n      \"ctx\": {}\n    }\n  ]\n}\n```","inputSchema":{"type":"object","title":"list_slatesArguments","properties":{"site":{"type":"string","title":"site","default":"fd"},"limit":{"type":"integer","anyOf":[{"type":"integer"},{"type":"null"}],"title":"limit"},"sport":{"type":"string","title":"sport","default":"NBA"},"compact":{"type":"boolean","title":"compact","default":false},"playable":{"type":"boolean","title":"playable","default":false}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":247,"tokensAfter":247},{"name":"run_mlb_postmortem","fixed":{"name":"run_mlb_postmortem","description":"Run Mlb Postmortem\n\n### Responses:\n\n**200**: Successful Response (Success Response)\nContent-Type: application/json\n\n**Example Response:**\n```json\n{\n  \"status\": \"Status\",\n  \"generated_at\": \"Generated At\",\n  \"date\": \"Date\",\n  \"game_id\": \"Game Id\",\n  \"entries\": 1,\n  \"field_lineups\": 1,\n  \"training_rows\": 1,\n  \"missing_sources\": [\n    \"string\"\n  ],\n  \"results\": {},\n  \"history_validation\": {},\n  \"field\": {},\n  \"diagnostics\": {},\n  \"simulator_feed\": {},\n  \"warnings\": [\n    \"string\"\n  ]\n}\n```\n**422**: ","inputSchema":{"type":"object","title":"run_mlb_postmortemArguments","required":["date","game_id","history_csv"],"properties":{"date":{"type":"string","title":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Slate date YYYY-MM-DD"},"game_id":{"type":"string","title":"game_id","maxLength":32,"minLength":3,"description":"V12 slate/game handle, e.g. 129715."},"history_csv":{"type":"string","title":"history_csv","minLength":1,"description":"Raw FanDuel contest-history CSV content."},"upload_csvs":{"type":"array","items":{"type":"object","title":"PostmortemUploadCsv","required":["content"],"properties":{"content":{"type":"string","title":"Content","minLength":1,"description":"Raw FanDuel upload/template CSV content."},"filename":{"type":"string","title":"Filename","default":"upload.csv","maxLength":240}}},"title":"upload_csvs","default":[],"maxItems":20},"sabersim_csv":{"type":"string","anyOf":[{"type":"string"},{"type":"null"}],"title":"sabersim_csv","description":"Optional external lineup export for comparison."},"sync_supabase":{"type":"boolean","title":"sync_supabase","default":true,"description":"Upsert simulator training rows to production store when configured."},"top_field_rank":{"type":"integer","title":"top_field_rank","default":200,"maximum":1000,"minimum":1},"history_filename":{"type":"string","title":"history_filename","default":"contest-history.csv","maxLength":240}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":563,"tokensAfter":563},{"name":"slate_health","fixed":{"name":"slate_health","description":"Slate Health\n\nPre-flight diagnostic for a slate. Returns whether odds, projections,\nmatchup, and FD master-session are ready BEFORE the agent invokes\n/v1/generate.\n\nEither slate_id or date is required. When slate_id is given, the slate\nmetadata is also returned (games list, lock times). When only date is\ngiven, the data-pillar checks still run but game coverage cannot be\ncomputed (returned as null).\n\nREADING THE PROJECTION FRESHNESS (MLB especially): `stokastic.age_min` is the\nage of the cached ","inputSchema":{"type":"object","title":"slate_healthArguments","properties":{"date":{"type":"string","anyOf":[{"type":"string"},{"type":"null"}],"title":"date"},"site":{"type":"string","title":"site","default":"fd"},"sport":{"type":"string","title":"sport","default":"NBA"},"slate_id":{"type":"integer","anyOf":[{"type":"integer"},{"type":"null"}],"title":"slate_id"},"include_snapshot":{"type":"boolean","title":"include_snapshot","default":false},"last_known_fingerprint":{"type":"string","anyOf":[{"type":"string"},{"type":"null"}],"title":"last_known_fingerprint"}}},"annotations":{"readOnlyHint":true}},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":312,"tokensAfter":312}],"toolsChanged":13,"tokensSaved":0,"todo":[{"tool":"admin_issue_key","params":["tier","email"]},{"tool":"betting_analyze_prop","params":["name","prop","season","threshold"]},{"tool":"betting_best_bets","params":["limit","min_edge"]},{"tool":"betting_build_parlay","params":["legs","ticket_odds"]},{"tool":"betting_cross_book","params":["prop"]},{"tool":"betting_game_lines","params":["date","team"]},{"tool":"betting_game_model","params":["date","team"]},{"tool":"betting_log_bet","params":["uid","book","game","line","odds","prop","team","stake","market","selection"]},{"tool":"betting_market","params":["date","team"]},{"tool":"betting_market_movers","params":["date","prop","min_move"]},{"tool":"betting_matchup","params":["date","team"]},{"tool":"betting_my_bets","params":["uid"]},{"tool":"betting_player_form","params":["name","season"]},{"tool":"betting_scan_edges","params":["prop","coors","limit","season","min_edge","threshold"]},{"tool":"betting_settle_bet","params":["uid","bet_id","result","closing_odds"]},{"tool":"betting_sharp","params":["date","team"]},{"tool":"contest_advice","params":["name","sport","platform"]},{"tool":"contest_semaforo","params":["limit","sport","platform"]},{"tool":"generate_lineups","params":["style"]},{"tool":"get_slate_players","params":["limit","compact","slate_id"]},{"tool":"list_contests","params":["sport","platform"]},{"tool":"list_live_contests","params":["limit","sport","compact","platform"]},{"tool":"list_presets","params":["sport"]},{"tool":"list_slates","params":["site","limit","sport","compact","playable"]},{"tool":"run_mlb_postmortem","params":["upload_csvs","top_field_rank","history_filename"]},{"tool":"scout_field","params":["contest","min_days"]},{"tool":"slate_health","params":["date","site","sport","slate_id","include_snapshot","last_known_fingerprint"]},{"tool":"slate_refresh","params":["date","site","sport"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}