batru-mcp
Provides calibrated win-rate predictions, hero lookups, counter recommendations, and draft recommendations for Dota 2 matches.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@batru-mcp predict Dota 2 win rate for PA, Lina vs Sniper, Pudge"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
batru-mcp
Use the hosted endpoint — no install needed. Add https://batru.gg/mcp to Claude, ChatGPT, Cursor or any MCP client and you get the newest tool set (31 read-only tools across Dota 2, Deadlock and Marvel Rivals, always in sync with the live site). Setup guide: https://batru.gg/developers
The local PyPI package described below (uvx batru-mcp) is legacy and no longer updated — it is frozen at an early version with a reduced tool set. It still works (it proxies the same live API), but the hosted endpoint is the canonical distribution.
A minimal, read-only MCP server over batru.gg's live API, so your LLM can answer Dota 2 / Deadlock draft, counter and win-rate questions with real, calibrated model predictions instead of guessing from memory.
It is a thin wrapper around batru.gg's public endpoints — no model runs locally; every number comes from the same production model the website serves.
Why calibrated matters
batru.gg's model is trained on ~20M real matches and calibrated: a reported 60% win rate corresponds to an empirically observed ~60% win rate. We deliberately do not headline a raw "accuracy" number — accuracy alone is misleading for win prediction. What you get from these tools are probabilities you can trust at face value. The tool descriptions instruct the host LLM to report these numbers verbatim and never invent matchup data.
Related MCP server: Valorant MCP Server
Tools
Tool | What it does |
| Normalise a name/alias/shortName to |
| Calibrated win-rate % for both teams (partial drafts OK; empty → 50/50). |
| Top-3 heroes to pick next, each with its calibrated win rate. |
| Real matchup table: who this hero beats / loses to, with win rate % and sample size. |
| Calibrated win-rate % for a Deadlock 6v6 (6 heroes per team). |
Hero names are accepted in any form (e.g. am, anti mage, Anti-Mage) and normalised internally — the backend silently drops names it doesn't recognise, so normalising first keeps predictions honest.
Install
Requires uv (or any way to run a Python 3.12+ package from PyPI):
uvx batru-mcp # fetches from PyPI and starts the stdio MCP serverConfiguration is via the BATRU_API_BASE environment variable (default https://batru.gg) — you normally don't need to set anything.
Claude Desktop config
Add to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"batru": {
"command": "uvx",
"args": ["batru-mcp"]
}
}
}Restart Claude Desktop; the batru tools appear in the tool picker. Claude Code:
claude mcp add batru -- uvx batru-mcp.
Development
git clone https://github.com/batrugg/batru-mcp && cd batru-mcp
uv sync
uv run batru-mcp # run the server from the checkout (blocks, waiting on stdin)For a Claude Desktop pointing at the checkout, use
"command": "uv", "args": ["run", "--directory", "/absolute/path/to/batru-mcp", "batru-mcp"].
Tests
uv run pytest # offline: hero normalisation + draft assembly
uv run pytest -m live # also hits the real batru.gg APIPrefer programmatic access from Python instead of MCP? pip install batru — the
official batru SDK.
Available Tools
5 toolsget_dota_countersAInspect
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.
Inputs: hero (required), limit.
lookup_heroAInspect
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) or "deadlock".
Returns {id, displayName, shortName, game} for the best match, or an error
with did_you_mean candidates if nothing matches.
Inputs: query (required), game.
predict_deadlock_draftAInspect
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.
Inputs: team0_heroes (required), team1_heroes (required).
predict_dota_winrateAInspect
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.
Inputs: my_heroes (required), enemy_heroes (required), my_side.
recommend_dota_pickAInspect
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.
Inputs: my_heroes (required), enemy_heroes (required), my_side.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
Each tool serves a clearly distinct purpose: hero normalization, Dota win rate prediction, Dota pick recommendation, Dota matchup analysis, and Deadlock draft prediction. No overlap or ambiguity.
All tools follow a consistent verb_noun pattern using snake_case (e.g., lookup_hero, predict_dota_winrate, recommend_dota_pick). Minor verb variation is expected and does not break consistency.
With 5 tools covering core analytics for two games, the count is well-scoped. Each tool adds unique functionality without redundancy or unnecessary weight.
For Dota 2, the toolset covers hero identification, match win rate, pick recommendations, and counters—comprehensive for prediction. Missing hero stats or item analysis, but these are beyond the defined scope. Deadlock is only covered by one prediction tool, but that aligns with the server's focus.
Maintenance
Related MCP Connectors
Read-only MCP server for live Polymarket, Kalshi, Limitless odds; Manifold sentiment.
Official MCP server for Qase — manage test cases, runs, suites, defects via AI tools.
Read-only MCP server for verified book recommendations and reading lists.
Official Intrinio MCP server. US stock prices, options and fundamentals for AI agents.
Related MCP Servers
- AlicenseBqualityDmaintenanceModel Context Protocol server that enables LLMs and AI assistants to retrieve real-time Dota 2 statistics, match data, player information, and game metrics through a standardized interface.179MIT
- FlicenseAqualityCmaintenanceMCP server for Valorant match analysis. Enables fetching player stats, match history, agent performance, and more via Henrik's Valorant API.9-
- AlicenseNot gradedqualityDmaintenanceMCP server for Valorant esports analytics that exposes structured metrics and database query tools, enabling AI-assisted match analysis, player profiling, scouting reports, and coaching insights.Apache 2.0
- AlicenseAqualityDmaintenanceRead-only MCP server for sourced Dota 2 tournament, team, player, schedule, and result data from Liquipedia, with revision-level metadata and caching.55 npm1MIT