Batru — Dota 2, Deadlock & Marvel Rivals win predictor
Server Details
Real, calibrated Dota 2, Deadlock & Marvel Rivals win predictions, tier lists & counters.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- batrugg/batru-mcp
- GitHub Stars
- 0
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Score is being calculated. Check back soon.
Available Tools
19 toolsget_deadlock_ban_ratesRead-onlyInspect
Get the most-banned Deadlock heroes from real 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
get_deadlock_countersRead-onlyInspect
Get the strongest matchups (counters) for a Deadlock hero 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.
| Name | Required | Description | Default |
|---|---|---|---|
| hero | Yes | ||
| limit | No |
get_deadlock_tier_listRead-onlyInspect
Get the current Deadlock hero tier list (best heroes) 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
get_dota_countersRead-onlyInspect
Get the strongest matchups (counters) for a Dota 2 hero 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.
| Name | Required | Description | Default |
|---|---|---|---|
| hero | Yes | ||
| limit | No |
get_dota_hero_momentumRead-onlyInspect
Get which Dota 2 heroes are rising or falling in the current patch.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hero | No | ||
| limit | No |
get_dota_matchupRead-onlyInspect
Get the head-to-head win rate for one specific Dota 2 hero pair.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hero | Yes | ||
| opponent | Yes |
get_dota_synergyRead-onlyInspect
Get the best (and worst) TEAMMATES for a Dota 2 hero from real games.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hero | Yes | ||
| limit | No |
get_dota_tier_listRead-onlyInspect
Get the current Dota 2 hero tier list (best heroes this patch) 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
get_dota_tier_list_by_rankRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rank | Yes | ||
| limit | No |
get_marvel_rivals_ban_ratesRead-onlyInspect
Get the most-banned Marvel Rivals 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
get_marvel_rivals_countersRead-onlyInspect
Get the strongest matchups (counters) for a Marvel Rivals hero 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.
| Name | Required | Description | Default |
|---|---|---|---|
| hero | Yes | ||
| limit | No |
get_marvel_rivals_synergyRead-onlyInspect
Get the best (and worst) TEAMMATES for a Marvel Rivals hero from real games.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| hero | Yes | ||
| limit | No |
get_marvel_rivals_tier_listRead-onlyInspect
Get the current Marvel Rivals hero tier list (best heroes) 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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
get_model_track_recordRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
lookup_heroRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| game | No | dota2 | |
| query | Yes |
predict_deadlock_draftRead-onlyInspect
Predict the CALIBRATED win probability for a Deadlock 6v6 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.
| Name | Required | Description | Default |
|---|---|---|---|
| team0_heroes | Yes | ||
| team1_heroes | Yes |
predict_dota_winrateRead-onlyInspect
Predict the CALIBRATED win rate for a Dota 2 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.
| Name | Required | Description | Default |
|---|---|---|---|
| my_side | No | radiant | |
| my_heroes | Yes | ||
| enemy_heroes | Yes |
predict_marvel_rivals_draftRead-onlyInspect
Predict the CALIBRATED win probability for a Marvel Rivals 6v6 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.
| Name | Required | Description | Default |
|---|---|---|---|
| team0_heroes | Yes | ||
| team1_heroes | Yes |
recommend_dota_pickRead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| my_side | No | radiant | |
| my_heroes | Yes | ||
| enemy_heroes | Yes |
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!