Connection check
verified live · 27h ago
batru-mcp
Calibrated Dota 2, Deadlock & Marvel Rivals win predictions, counter picks, tier lists & momentum.
Tools
33
GitHub stars
—
Installs / wk
—
Licence
—
Transport
streamable-http, stdio
Last checked
27h ago
Tools & capabilities
33 toolsRead from the running server on 27h ago.
analyze_draft
read-only
game*context*my_sidemy_heroes*enemy_heroes*
Analyze a draft and render an interactive Batru win-rate board. Use this for visual draft, matchup, win-probability, or next-pick questions in Dota 2, Deadlock, or Marvel… Analyze a draft and render an interactive Batru win-rate board. Use this for visual draft, matchup, win-probability, or next-pick questions in Dota 2, Deadlock, or Marvel Rivals. It combines the existing prediction and recommendation tools into one stable structured result. Clients that support MCP Apps render a compact card; every other MCP client receives the same data as JSON/text. This tool is read-only. Dota 2 supports partial drafts and returns a calibrated probability plus calibrated next-pick win rates. Deadlock and Marvel Rivals only return a calibrated probability for a complete 6v6; partial drafts still return counter-pick recommendations labelled as empirical pair-data scores. Args: game: "dota2", "deadlock", or "marvel-rivals". my_heroes: Your team / Team 0 heroes (0-5 for Dota, 0-6 otherwise). enemy_heroes: Enemy team / Team 1 heroes (0-5 for Dota, 0-6 otherwise). my_side: Dota only — whether your team is Radiant or Dire. Returns the two rosters, prediction status, calibrated win rates when available, recommendations, metric labels, `source_url`, and `citation`. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_deadlock_ban_rates
read-only
limitcontext*
Deadlock ban rates — who to ban / the most-banned heroes, from real ranked games. Ban rate reveals what players FEAR facing — a different signal from win rate. Empirical d… Deadlock ban rates — who to ban / the most-banned heroes, from real ranked games. Ban rate reveals what players FEAR facing — a different signal from win rate. Empirical data from batru.gg's match aggregation. Heroes come sorted most-banned first. Args: limit: Max number of heroes to return (default 15). Returns {generated_at, ban_matches, heroes:[{hero, rank, ban_rate_pct, bans}]}. `ban_matches` is the sample of matches with ban data; cite `generated_at` when freshness matters. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_deadlock_counters
read-only
hero*limitcontext*
Who counters a Deadlock hero (and who it beats) — measured win rates from real games. Returns opponents this hero performs BEST and WORST against, by real observed matchup… Who counters a Deadlock hero (and who it beats) — measured win rates from real games. Returns opponents this hero performs BEST and WORST against, by real observed matchup win rate (with sample sizes). Empirical meta data from batru.gg's match aggregation, not a guess. The hero name is normalised internally. Args: hero: The hero to look up (name/alias). limit: Max number of matchups to return (default 12). Returns {hero, best_against:[...], worst_against:[...]} where each row has {opponent, winrate_pct, matches}. winrate_pct > 50 means `hero` beats that opponent. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_deadlock_hero_momentum
read-only
herolimitcontext*
Which Deadlock heroes are rising or falling in the meta — win-rate momentum. Compares each hero's win rate over the last 14 days vs the prior 14 days — real trend data fro… Which Deadlock heroes are rising or falling in the meta — win-rate momentum. Compares each hero's win rate over the last 14 days vs the prior 14 days — real trend data from batru.gg's match aggregation, not a guess. Windows may cross a major-update boundary: right after an update, the delta largely reads as "what the update changed", which is the most useful signal then. Args: hero: Optional — a specific hero to look up. Empty returns the top risers and fallers overview. limit: Max risers/fallers to return in overview mode (default 10). Returns {patch, window_days, data_through, ...} plus either one hero's {hero, wr_recent_pct, wr_prev_pct, delta_pp, n_recent, n_prev} or {risers:[...], fallers:[...]}. delta_pp is percentage-point change; small deltas (<1pp) are noise — say so rather than over-reading them. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_deadlock_matchup
read-only
hero*context*opponent*
X vs Y in Deadlock — who wins the head-to-head, with measured win rate and sample size. Returns how `hero` performs AGAINST `opponent` (opposite teams) from real observed… X vs Y in Deadlock — who wins the head-to-head, with measured win rate and sample size. Returns how `hero` performs AGAINST `opponent` (opposite teams) from real observed games, with the sample size. Empirical data from batru.gg's match aggregation — not a guess. Both names are normalised internally. Args: hero: Your hero (name/alias). opponent: The enemy hero (name/alias). Returns {hero, opponent, winrate_pct, matches}. winrate_pct > 50 means `hero` beats `opponent` more often than not. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_deadlock_synergy
read-only
hero*limitcontext*
Who works best with a Deadlock hero — best (and worst) teammates by measured duo win rate. Returns teammates this hero performs BEST and WORST paired with (same team), by… Who works best with a Deadlock hero — best (and worst) teammates by measured duo win rate. Returns teammates this hero performs BEST and WORST paired with (same team), by real observed duo win rate with sample sizes. Empirical meta data from batru.gg's match aggregation, not a guess. The hero name is normalised internally. Args: hero: The hero to look up (name/alias). limit: Max number of teammates to return (default 12). Returns {hero, best_with:[...], worst_with:[...]} where each row has {teammate, winrate_pct, matches}. winrate_pct is the duo's team win rate when both heroes play together. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_deadlock_tier_list
read-only
limitcontext*
Best Deadlock heroes right now — the current meta tier list from real games. Ranked by batru.gg's match aggregation — empirical meta, not a guess. Heroes come sorted best-… Best Deadlock heroes right now — the current meta tier list from real games. Ranked by batru.gg's match aggregation — empirical meta, not a guess. Heroes come sorted best-first (rank 1 = strongest). Report numbers verbatim. Args: limit: Max number of heroes to return (default 20). Returns {total_matches, generated_at, heroes:[{hero, rank, winrate_pct, pick_rate_pct, matches}]}. Cite `total_matches` for the sample size. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_deadlock_tier_list_by_rank
read-only
rank*limitcontext*
Get the Deadlock hero tier list for a specific rank band. The meta differs by skill level. Data comes in four bands: Low (Initiate-Acolyte), Mid (Sentinel-Ritualist), High… Get the Deadlock hero tier list for a specific rank band. The meta differs by skill level. Data comes in four bands: Low (Initiate-Acolyte), Mid (Sentinel-Ritualist), High (Emissary-Phantom) and Top (Ascendant-Eternus). Early in a patch window a band may not have enough matches yet — fall back to get_deadlock_tier_list if so. Args: rank: A rank name (e.g. oracle, eternus) or a band key: low, mid, high, top. limit: Max number of heroes to return (default 20). Returns {bracket, rank_range, total_matches, generated_at, heroes:[{hero, rank, winrate_pct, pick_rate_pct, matches}]} sorted best-first. Report numbers verbatim and mention which band the numbers come from. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_counters
read-only
hero*limitcontext*
Who counters a Dota 2 hero (and who it beats) — measured win rates from real games. Returns opponents this hero performs BEST and WORST against, by real observed matchup w… Who counters a Dota 2 hero (and who it beats) — measured win rates from real games. Returns opponents this hero performs BEST and WORST against, by real observed matchup win rate (with sample sizes). This is empirical meta data from batru.gg's match aggregation, not a guess. The hero name is normalised internally. Args: hero: The hero to look up (name/alias/shortName). limit: Max number of matchups to return (default 12). Returns {hero, best_against:[...], worst_against:[...]} where each row has {opponent, winrate_pct, matches}. winrate_pct > 50 means `hero` beats that opponent. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_hero_momentum
read-only
herolimitcontext*
Which Dota 2 heroes got better or worse after the patch — winners/losers by win-rate shift. Compares each hero's win rate over the last 14 days vs the prior 14 days WITHIN… Which Dota 2 heroes got better or worse after the patch — winners/losers by win-rate shift. Compares each hero's win rate over the last 14 days vs the prior 14 days WITHIN the current patch — real trend data from batru.gg's match aggregation, not a guess. Useful for "what's getting stronger lately?" questions between patches. Args: hero: Optional — a specific hero to look up. Empty returns the top risers and fallers overview. limit: Max risers/fallers to return in overview mode (default 10). Returns {patch, window_days, data_through, ...} plus either one hero's {hero, wr_recent_pct, wr_prev_pct, delta_pp, n_recent, n_prev} or {risers:[...], fallers:[...]}. delta_pp is percentage-point change; small deltas (<1pp) are noise — say so rather than over-reading them. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_matchup
read-only
hero*context*opponent*
X vs Y in Dota 2 — who wins the head-to-head, with measured win rate and sample size. Returns how `hero` performs AGAINST `opponent` (opposite teams) from real observed ga… X vs Y in Dota 2 — who wins the head-to-head, with measured win rate and sample size. Returns how `hero` performs AGAINST `opponent` (opposite teams) from real observed games, with the sample size. Empirical data from batru.gg's match aggregation covering every tracked pair — not a guess. Both names are normalised internally. Args: hero: Your hero (name/alias/shortName). opponent: The enemy hero (name/alias/shortName). Returns {hero, opponent, winrate_pct, matches}. winrate_pct > 50 means `hero` beats `opponent` more often than not. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_synergy
read-only
hero*limitcontext*
Who works best with a Dota 2 hero — best (and worst) teammates by measured duo win rate. Returns teammates this hero performs BEST and WORST paired with (same team), by re… Who works best with a Dota 2 hero — best (and worst) teammates by measured duo win rate. Returns teammates this hero performs BEST and WORST paired with (same team), by real observed team win rate with sample sizes. Empirical meta data from batru.gg's match aggregation, not a guess. The hero name is normalised internally. Args: hero: The hero to look up (name/alias/shortName). limit: Max number of teammates to return (default 12). Returns {hero, best_with:[...], worst_with:[...]} where each row has {teammate, winrate_pct, matches}. winrate_pct is the pair's team win rate when both heroes play together. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_tier_list
read-only
limitcontext*
Best Dota 2 heroes right now — the current-patch meta tier list from real games. Ranked by batru.gg's match aggregation over ~real games — empirical meta, not a guess. Her… Best Dota 2 heroes right now — the current-patch meta tier list from real games. Ranked by batru.gg's match aggregation over ~real games — empirical meta, not a guess. Heroes come sorted best-first (rank 1 = strongest). Report numbers verbatim. Args: limit: Max number of heroes to return (default 20). Returns {total_matches, generated_at, heroes:[{hero, rank, winrate_pct, pick_rate_pct, matches}]}. `total_matches` is the sample the ranking is drawn from — cite it when stating how strong the signal is. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_tier_list_by_rank
read-only
rank*limitcontext*
Get the Dota 2 hero tier list for a specific rank bracket. The meta differs a LOT by skill level — heroes that stomp Herald games can be poor in Immortal. Data comes in fo… Get the Dota 2 hero tier list for a specific rank bracket. The meta differs a LOT by skill level — heroes that stomp Herald games can be poor in Immortal. Data comes in four bands: Herald & Guardian, Crusader & Archon, Legend & Ancient (merged pairs — the source has no finer grain), and Divine & Immortal ("highrank"). Args: rank: A rank name — one of herald, guardian, crusader, archon, legend, ancient, divine, immortal (or a band key like "herald-guardian"). limit: Max number of heroes to return (default 20). Returns {bracket, total_matches, generated_at, heroes:[{hero, rank, winrate_pct, pick_rate_pct, matches}]} sorted best-first. Report numbers verbatim and mention which band the numbers come from. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_tournament_game_stats
read-only
teameventlimitstagecontext*match_id
Get per-game BOX SCORES from parsed replays for a pro Dota 2 tournament. For each game: which team won each lane at 10 minutes (gold diff), every player's hero, lane, K/D/… Get per-game BOX SCORES from parsed replays for a pro Dota 2 tournament. For each game: which team won each lane at 10 minutes (gold diff), every player's hero, lane, K/D/A, GPM, net worth and key item timings (BKB, Blink, ...), first blood time, Roshan kills, and whether the winner came back from a large gold deficit. Answers questions like "who won mid in game 2 of Spirit vs VISION", "when did Yatoro's BKB come online", "did they throw a lead". REAL parsed-replay facts (via OpenDota), not model output. A just-finished game can lag ~an hour until its replay is parsed. Covered: The International 2026 ("ti-2026"; other events don't carry per-game data yet). Filter by bracket stage ("grand final", "lower bracket final", "semifinal", "quarterfinals", "elimination"...) when the user asks about a round rather than a team; by team name (substring, e.g. "spirit"); or by match_id for one exact game. No filter = the event's most recent games. Don't know the teams or stages? Call get_dota_tournament_stats first — its playoff_results list the whole bracket with stage labels. Args: event: Tournament slug or alias (default "ti-2026"). team: Optional team-name filter, case-insensitive substring. stage: Optional bracket-stage filter, case-insensitive substring of the stage label (e.g. "grand final", "upper bracket final", "lower bracket semifinal", "semifinal"). match_id: Optional exact match id for a single game. limit: Max games returned, newest first (default 3, cap 5). Returns {event, as_of, games:[{series:{phase, day, team1, score, team2}, match_id, winner, radiant, dire, duration_s, kills, first_blood_s, roshan_kills?, winner_max_gold_deficit?, lanes?, players:[{team, hero, player, lane, kda, gpm, net_worth, key_items?}]}], citation}. Include the citation when presenting results. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_dota_tournament_stats
read-only
eventlimitcontext*
TI / EWC pro tournament stats — actual most-picked, most-banned and win rates per hero. Answers questions like "most picked / most banned / most contested heroes at TI 202… TI / EWC pro tournament stats — actual most-picked, most-banned and win rates per hero. Answers questions like "most picked / most banned / most contested heroes at TI 2026", "first-pick or Radiant win rate at the event", "what does team X pick", "group standings", "who won". Numbers are computed from the official drafts of every recorded game (via OpenDota) and refresh automatically while an event runs — these are REAL tournament results, not model output, so win rates here are small-sample records, not calibrated probabilities. Covered events: The International 2026 ("ti-2026", completed Aug 23 — won by Team Spirit, 3-2 over TEAM VISION in the grand final after a lower-bracket run), Esports World Cup 2026 Dota 2 ("esports-world-cup-2026", completed, won by PVISION), Esports Nations Cup 2026 ("esports-nations-cup-2026", upcoming, Nov 2-8). Common aliases (ti, ewc, enc, nations-cup) work. Args: event: Tournament slug or alias (default "ti-2026"). limit: Max hero rows returned, most contested first (default 15). ALSO the bracket/tree view and the discovery entrypoint: every playoff series carries a `stage` label ("Upper bracket final", "Lower bracket semifinal", "Grand final", ...) plus both team names, the score and an "in progress" status — so call THIS first to learn which teams exist and who is playing the final/semifinals, then drill into a single game with get_dota_tournament_game_stats (it accepts the same stage wording). Bracket slots not yet played don't appear as rows; infer upcoming pairings from the latest completed stages. Returns {event, dates, location, status, as_of, coverage, aggregates: {first_pick_win_rate_pct, radiant_win_rate_pct, heroes_contested}, hero_stats:[{hero, picks, bans, contests, contest_rate_pct, wins, losses, win_rate_pct}], team_top_picks, standings_group_stage, playoff_results, source_url, citation}. Include the citation when presenting results. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_marvel_rivals_ban_rates
read-only
limitcontext*
Marvel Rivals ban rates — who to ban / the most-banned heroes, from real competitive games. Ban rate reveals what players FEAR facing — a different signal from win rate. E… Marvel Rivals ban rates — who to ban / the most-banned heroes, from real competitive games. Ban rate reveals what players FEAR facing — a different signal from win rate. Empirical data from batru.gg's match aggregation (competitive mode, where bans exist). Heroes come sorted most-banned first. Args: limit: Max number of heroes to return (default 15). Returns {generated_at, ban_matches, heroes:[{hero, rank, ban_rate_pct, bans}]}. ALWAYS cite `generated_at` — ban snapshots can lag the current season. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_marvel_rivals_counters
read-only
hero*limitcontext*
Who counters a Marvel Rivals hero (and who it beats) — measured win rates from real games. Returns opponents this hero performs BEST and WORST against, by real observed ma… Who counters a Marvel Rivals hero (and who it beats) — measured win rates from real games. Returns opponents this hero performs BEST and WORST against, by real observed matchup win rate (with sample sizes). Empirical meta data from batru.gg's match aggregation, not a guess. The hero name is normalised internally. Args: hero: The hero to look up (name/alias). limit: Max number of matchups to return (default 12). Returns {hero, best_against:[...], worst_against:[...]} where each row has {opponent, winrate_pct, matches}. winrate_pct > 50 means `hero` beats that opponent. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_marvel_rivals_hero_momentum
read-only
herolimitcontext*
Which Marvel Rivals heroes are rising or falling in the meta — win-rate momentum. Compares each hero's win rate over the last 14 days vs the prior 14 days — real trend dat… Which Marvel Rivals heroes are rising or falling in the meta — win-rate momentum. Compares each hero's win rate over the last 14 days vs the prior 14 days — real trend data from batru.gg's match aggregation, not a guess. Windows may cross a season boundary: early in a new season, the delta largely reads as "what the season shift changed", which is the most useful signal then. `season` in the result is the current season, for context. Args: hero: Optional — a specific hero to look up. Empty returns the top risers and fallers overview. limit: Max risers/fallers to return in overview mode (default 10). Returns {season, window_days, data_through, ...} plus either one hero's {hero, wr_recent_pct, wr_prev_pct, delta_pp, n_recent, n_prev} or {risers:[...], fallers:[...]}. delta_pp is percentage-point change; small deltas (<1pp) are noise — say so rather than over-reading them. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_marvel_rivals_matchup
read-only
hero*context*opponent*
X vs Y in Marvel Rivals — who wins the head-to-head, with measured win rate and sample size. Returns how `hero` performs AGAINST `opponent` (opposite teams) from real obse… X vs Y in Marvel Rivals — who wins the head-to-head, with measured win rate and sample size. Returns how `hero` performs AGAINST `opponent` (opposite teams) from real observed games, with the sample size. Empirical data from batru.gg's match aggregation — not a guess. Both names are normalised internally. Args: hero: Your hero (name/alias). opponent: The enemy hero (name/alias). Returns {hero, opponent, winrate_pct, matches}. winrate_pct > 50 means `hero` beats `opponent` more often than not. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_marvel_rivals_synergy
read-only
hero*limitcontext*
Best Team-Up partners / teammates for a Marvel Rivals hero — measured duo win rates. Returns teammates this hero performs BEST and WORST paired with, by real observed team… Best Team-Up partners / teammates for a Marvel Rivals hero — measured duo win rates. Returns teammates this hero performs BEST and WORST paired with, by real observed team win rate (with sample sizes). Empirical meta data from batru.gg's match aggregation, not a guess. The hero name is normalised internally. Args: hero: The hero to look up (name/alias). limit: Max number of teammates to return (default 12). Returns {hero, best_with:[...], worst_with:[...]} where each row has {teammate, winrate_pct, matches}. winrate_pct > 50 means the pairing wins more than average. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_marvel_rivals_tier_list
read-only
limitcontext*
Best Marvel Rivals heroes right now — the current-season meta tier list from real games. Ranked by batru.gg's match aggregation — empirical meta, not a guess. Heroes come… Best Marvel Rivals heroes right now — the current-season meta tier list from real games. Ranked by batru.gg's match aggregation — empirical meta, not a guess. Heroes come sorted best-first (rank 1 = strongest). Report numbers verbatim. Args: limit: Max number of heroes to return (default 20). Returns {total_matches, generated_at, heroes:[{hero, rank, winrate_pct, pick_rate_pct, matches}]}. Cite `total_matches` for the sample size. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_marvel_rivals_tier_list_by_rank
read-only
rank*limitcontext*
Get the Marvel Rivals hero tier list for a specific skill band. The meta differs by skill level. Data comes in four bands — low, mid, high, top — built as quartiles of the… Get the Marvel Rivals hero tier list for a specific skill band. The meta differs by skill level. Data comes in four bands — low, mid, high, top — built as quartiles of the lobbies' average competitive rank score (the data source publishes no named-rank grain, so bands are honest percentiles rather than Bronze/Gold labels). Args: rank: A band key: low, mid, high, or top (also accepts "top skill" etc.). limit: Max number of heroes to return (default 20). Returns {bracket, total_matches, generated_at, heroes:[{hero, rank, winrate_pct, pick_rate_pct, matches}]} sorted best-first. Report numbers verbatim and mention which band the numbers come from. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_model_track_record
read-only
limitcontext*
Get batru.gg's public model evaluation ledger — every weekly test, wins AND losses. batru.gg publishes EVERY champion-vs-challenger evaluation of its Dota 2 model (promote… Get batru.gg's public model evaluation ledger — every weekly test, wins AND losses. batru.gg publishes EVERY champion-vs-challenger evaluation of its Dota 2 model (promoted or rejected), auto-generated from the promotion gate's append-only log — nothing is hand-picked. Use this when a user asks whether the model is any good or how it is validated. HOW TO PRESENT IT: lead with CALIBRATION (ECE — lower is better; ~0.006 means a stated 60% wins ~60% of the time), then BCE. Do NOT headline raw accuracy: Dota drafts are balanced by design, so ~55% is near the game-imposed ceiling for ANY model — calibration is the meaningful claim. Args: limit: Max evaluations to return, newest first (default 10). Returns {generated_at, ledger, total_evaluations, total_promotions, evaluations:[{decided_at, promote, challenger:{ece,bce,acc}, champion:{ece,bce,acc}, holdout_n}]}. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
get_more_tools
read-only
context*
Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback. Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.
lookup_hero
read-only
gamequery*context*
Normalise a hero name/alias/shortName to its canonical identity. Use this to turn messy user input ("am", "anti mage", "Anti-Mage") into the exact key batru.gg expects bef… Normalise a hero name/alias/shortName to its canonical identity. Use this to turn messy user input ("am", "anti mage", "Anti-Mage") into the exact key batru.gg expects before calling the prediction tools. The backend SILENTLY DROPS hero names it doesn't recognise, so always normalise first. Args: query: A hero name, alias, or short name. game: "dota2" (default), "deadlock", or "marvel-rivals". Returns {id, displayName, shortName, game} for the best match, or an error with `did_you_mean` candidates if nothing matches.
predict_deadlock_draft
read-only
context*team0_heroes*team1_heroes*
Which team wins this Deadlock 6v6 comp — CALIBRATED win probability for any draft. Backed by batru.gg's Deadlock production model. Provide 6 heroes per team (names are nor… Which team wins this Deadlock 6v6 comp — CALIBRATED win probability for any draft. Backed by batru.gg's Deadlock production model. Provide 6 heroes per team (names are normalised to Deadlock hero ids internally). A reported 60% reflects a real ~60% empirical win rate — it is calibrated, not a guess. Args: team0_heroes: Team 0's 6 heroes (names/aliases). team1_heroes: Team 1's 6 heroes (names/aliases). Returns calibrated win-rate percentages for both teams. Report verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
predict_dota_winrate
read-only
context*my_sidemy_heroes*enemy_heroes*
Which team wins this Dota 2 draft — CALIBRATED win probability for any full or partial draft. Backed by batru.gg's production model (trained on ~20M real matches and calib… Which team wins this Dota 2 draft — CALIBRATED win probability for any full or partial draft. Backed by batru.gg's production model (trained on ~20M real matches and calibrated, so a reported 60% reflects a real ~60% empirical win rate — it is not a guess). Partial drafts are fine; an empty draft returns 50/50. Hero names are normalised internally to shortNames. Args: my_heroes: Your team's heroes (names/aliases, 0-5). enemy_heroes: Enemy heroes (names/aliases, 0-5). my_side: "radiant" (default) or "dire" — which side is "my_heroes". Returns calibrated win-rate percentages for both teams. Report these numbers verbatim; do not adjust them. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
predict_dota_winrate_batch
read-only
context*my_sidemy_heroes*candidates*enemy_heroes*
Score MANY candidate next-picks for a Dota 2 draft in ONE call. Use this instead of looping predict_dota_winrate over candidates: the whole batch runs as a single model in… Score MANY candidate next-picks for a Dota 2 draft in ONE call. Use this instead of looping predict_dota_winrate over candidates: the whole batch runs as a single model invoke server-side, so it is much faster and cheaper for everyone. For each candidate you get the CALIBRATED win rate your team would have after adding it against the given enemy draft, plus the delta vs the draft without it. Same production model as predict_dota_winrate (a reported 60% reflects a real ~60% empirical win rate). Hero names are normalised internally. Args: my_heroes: Heroes your team has already picked (names/aliases, 0-4). enemy_heroes: Enemy heroes (names/aliases, 0-5). candidates: Candidate heroes to evaluate (names/aliases, 1-150 — a full-roster sweep fits in one call). my_side: "radiant" (default) or "dire" — which side is "my_heroes". Returns {baseline_win_rate_pct, candidates:[{hero, shortName, win_rate_pct, delta_pp}]} sorted best-first; delta_pp = win_rate_pct minus the baseline (the same draft without that candidate). Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
predict_marvel_rivals_draft
read-only
context*team0_heroes*team1_heroes*
Which team comp wins in Marvel Rivals — CALIBRATED 6v6 win probability for any draft. Backed by batru.gg's live Marvel Rivals production model (weekly auto-retrained on re… Which team comp wins in Marvel Rivals — CALIBRATED 6v6 win probability for any draft. Backed by batru.gg's live Marvel Rivals production model (weekly auto-retrained on real matches). Provide exactly 6 heroes per team (names are normalised to Marvel Rivals hero ids internally). The probability is CALIBRATED — a reported 60% reflects a real ~60% empirical win rate, not a guess. Report the number verbatim. This is a COMPOSITION-ONLY estimate: it reflects the hero draft, NOT player skill, rank, or in-game execution. It is for draft analysis only — not betting advice. Do not headline a raw "accuracy" figure; present it as a calibrated probability. Args: team0_heroes: Team 0's 6 heroes (names/aliases). team1_heroes: Team 1's 6 heroes (names/aliases). Returns calibrated win-rate percentages for both teams. Report verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
recommend_deadlock_pick
read-only
limitcontext*my_heroesenemy_heroes*
Recommend Deadlock heroes to pick against the given enemy hero(es). Ranks every hero not yet in the game by REAL observed pair data from batru.gg's match aggregation: matc… Recommend Deadlock heroes to pick against the given enemy hero(es). Ranks every hero not yet in the game by REAL observed pair data from batru.gg's match aggregation: match-weighted win rate against the enemy heroes, blended with duo win rate alongside your already-picked teammates (when given). Answers "who counters X (and Y and Z)?" with empirical numbers, not guesses. Hero names are normalised internally. This is a pair-stat heuristic, not the calibrated draft model — once both teams have 6, verify the full draft with predict_deadlock_draft. Args: enemy_heroes: Enemy heroes to pick against (names/aliases, 1-6). my_heroes: Optional — heroes your team already has (0-5). limit: Max recommendations to return (default 5). Returns {recommendations:[{hero, score_pct, avg_winrate_vs_enemies_pct, enemy_matchups:[{opponent, winrate_pct, matches}], ...}]} sorted best-first. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
recommend_dota_pick
read-only
context*my_sidemy_heroes*enemy_heroes*
Recommend the top 3 Dota 2 heroes to pick next, with calibrated win rates. Backed by batru.gg's production model. Each suggestion comes with the CALIBRATED win rate your t… Recommend the top 3 Dota 2 heroes to pick next, with calibrated win rates. Backed by batru.gg's production model. Each suggestion comes with the CALIBRATED win rate your team would have after adding that hero against the given enemy draft (a reported 60% reflects a real ~60% empirical win rate). Hero names are normalised internally. Args: my_heroes: Heroes your team has already picked (names/aliases, 0-4). enemy_heroes: Enemy heroes (names/aliases, 0-5). my_side: "radiant" (default) or "dire" — which side is "my_heroes". Returns a list of up to 3 {displayName, shortName, win_rate_pct}. Report the win rates verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.
recommend_marvel_rivals_pick
read-only
limitcontext*my_heroesenemy_heroes*