Skip to main content
Glama
batru-mcp
by batrugg

batru-mcp

IMPORTANT

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

lookup_hero(query, game="dota2")

Normalise a name/alias/shortName to {id, displayName, shortName}. game ∈ {dota2, deadlock}.

predict_dota_winrate(my_heroes, enemy_heroes, my_side="radiant")

Calibrated win-rate % for both teams (partial drafts OK; empty → 50/50).

recommend_dota_pick(my_heroes, enemy_heroes, my_side="radiant")

Top-3 heroes to pick next, each with its calibrated win rate.

get_dota_counters(hero, limit=12)

Real matchup table: who this hero beats / loses to, with win rate % and sample size.

predict_deadlock_draft(team0_heroes, team1_heroes)

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 server

Configuration 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 API

Prefer programmatic access from Python instead of MCP? pip install batru — the official batru SDK.

Available Tools

5 tools
get_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

    A4.5/5.0

    Scored across 5 tools

    Disambiguation5/5

    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.

    Naming Consistency5/5

    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.

    Tool Count5/5

    With 5 tools covering core analytics for two games, the count is well-scoped. Each tool adds unique functionality without redundancy or unnecessary weight.

    Completeness4/5

    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

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP 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
    • A
      license
      A
      quality
      D
      maintenance
      Read-only MCP server for sourced Dota 2 tournament, team, player, schedule, and result data from Liquipedia, with revision-level metadata and caching.
      5
      5 npm
      1
      MIT