MCP.Market

Batru — Competitive Game Intelligence for AI Agents MCP server

online · 100% uptime
by batru.gg·gg.batru/batru-mcp·v0.7.0

Live competitive-game predictions, meta data and decision tools for AI agents.

A90/100grade A
What users say
No reviews yet
Be the first
Safety scan
A90/100

full report

Adoption
New

0 stars

Reviews

Write one

Nobody has reviewed Batru — Competitive Game Intelligence for AI Agents yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Batru — Competitive Game Intelligence for AI Agents tools (17)

write = sends, deletes, buys or posts
  • analyze_draftFree

    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.

  • fetchFree

    Fetch the full live document behind a `search` result id. Ids look like `dota2:counters:axe`, `deadlock:tier-list`, `marvel-rivals:synergy:mantis`, `deadlock:ban-rates`, `dota2:tournament:ti-2026` or `model:track-record`. Returns {id, title, text, url} where `text` is the document's data as JSON (measured win rates / ranks with sample sizes). Report the numbers verbatim and cite `url`. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_ban_ratesFree

    Most-banned heroes — measured draft-phase ban rates for Deadlock or Marvel Rivals. Args: game: "deadlock" or "marvel-rivals" (ranked Dota has no ban-phase export — for pro Dota bans use get_tournament_stats). limit: Max heroes to return (default 15). Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_countersFree

    Who counters a hero (and who it beats) — measured matchup win rates for Dota 2, Deadlock or Marvel Rivals. Opponents this hero performs BEST and WORST against, by real observed win rate with sample sizes — empirical meta data, not a guess. The hero name is normalised internally. Args: game: "dota2", "deadlock", or "marvel-rivals". hero: The hero to look up (name/alias/shortName). limit: Max matchups per direction (default 12). winrate_pct > 50 means `hero` beats that opponent. Report verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_hero_momentumFree

    Which heroes are rising or falling right now — week-over-week win-rate movement. Momentum from batru.gg's rolling match aggregation for Dota 2, Deadlock or Marvel Rivals: the biggest movers of the current window, or one hero's trend when `hero` is given. Args: game: "dota2", "deadlock", or "marvel-rivals". hero: Optional — one hero's momentum instead of the movers list. limit: Max movers to return (default 10). Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_matchupFree

    One hero vs one opponent — the measured head-to-head win rate in Dota 2, Deadlock or Marvel Rivals. The direct matchup number ("does X beat Y?") from real games, with the sample size. Names are normalised internally. Args: game: "dota2", "deadlock", or "marvel-rivals". hero: Your hero. opponent: The enemy hero. Report the number verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_model_track_recordFree

    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_toolsFree

    Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.

  • get_synergyFree

    Best teammates / duo partners for a hero — measured together-win-rates for Dota 2, Deadlock or Marvel Rivals. Allies this hero wins MOST and LEAST with, by real observed win rate when picked together (with sample sizes). Covers Marvel Rivals team-ups too. The hero name is normalised internally. Args: game: "dota2", "deadlock", or "marvel-rivals". hero: The hero to look up (name/alias/shortName). limit: Max partners per direction (default 12). Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_tier_listFree

    Best heroes right now — the current-patch tier list for Dota 2, Deadlock or Marvel Rivals. Empirical rankings from batru.gg's match aggregation over real games (not a guess); heroes come sorted best-first. Optionally filter to a skill bracket with `rank`. Args: game: "dota2", "deadlock", or "marvel-rivals". rank: Optional skill bracket. dota2: herald, guardian, crusader, archon, legend, ancient (and bands). deadlock/marvel-rivals: low, mid, high, or top (rank words like "oracle" or "eternus" also resolve). Empty = all ranks combined. limit: Max heroes to return (default 20). `total_matches` is the sample behind the ranking — cite it when stating how strong the signal is. Report numbers verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_tournament_game_statsFree

    Per-game BOX SCORES from parsed replays of a pro Dota 2 tournament. For each game: lane winners at 10 minutes, every player's hero, lane, K/D/A, GPM, net worth and key item timings, first blood, Roshans, and comeback flags. Filter by team, stage, or a single match_id. Args: event: Event slug (default "ti-2026"). team: Optional team-name filter. stage: Optional stage filter. match_id: Optional single-match filter. limit: Max games to return (default 3). game: Only "dota2" today. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • get_tournament_statsFree

    TI / EWC pro tournament stats — actual most-picked, most-banned and win rates per hero. Real recorded results from the official drafts of every game at a covered pro Dota 2 event (The International, Esports World Cup, ...) — small-sample records, not calibrated probabilities. Answers "most picked / banned / contested at TI", "who won", "group standings". Args: event: Event slug, e.g. "ti-2026" (default), "ti-2025", "esports-world-cup-2026". limit: Max heroes per table (default 15). game: Only "dota2" today. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • lookup_heroFree

    Normalise a hero name/alias/shortName to its canonical identity — or list the whole roster. 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. Not sure which heroes exist? Call it with an EMPTY query to get every hero of that game (displayName, shortName, aliases). Args: query: A hero name, alias, or short name. Empty string = list the full roster. game: "dota2" (default), "deadlock", or "marvel-rivals". Returns {id, displayName, shortName, game} for the best match, an error with `did_you_mean` candidates if nothing matches, or — for an empty query — {game, count, heroes:[{id, displayName, shortName, aliases}]}.

  • predict_winrateFree

    Which team wins this draft — CALIBRATED win probability for Dota 2, Deadlock or Marvel Rivals. Backed by batru.gg's per-game production models (built on 140M+ real matches and calibrated: a reported 60% reflects a real ~60% empirical win rate — not a guess). Hero names are normalised internally. Per-game semantics: - dota2: full OR partial drafts (0-5 per side); empty draft = 50/50. `my_side` says whether my_heroes are Radiant or Dire. - deadlock / marvel-rivals: requires the full 6v6 rosters; `my_side` is ignored. For partial drafts use recommend_pick instead. Args: game: "dota2", "deadlock", or "marvel-rivals" (required). my_heroes: Your team's heroes (list of names; may be empty). enemy_heroes: The enemy team's heroes (list of names). my_side: Dota only — "radiant" (default) or "dire". Returns calibrated win-rate percentages for both teams. Report them verbatim; do not adjust them. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • predict_winrate_batchFree

    Score MANY candidate next-picks for a Dota 2 draft in ONE call — calibrated win rate + delta each. Use this instead of looping predict_winrate over candidates: the whole batch runs as a single model invoke server-side. For each candidate you get the CALIBRATED team win rate after adding it, plus the delta vs the draft without it (a full-roster sweep of up to 150 candidates fits in one call). Currently dota2-only. Args: my_heroes: Heroes your team already picked (0-4). enemy_heroes: Enemy heroes (0-5). candidates: Candidate heroes to evaluate (1-150). my_side: "radiant" (default) or "dire". game: Only "dota2" today. Returns {baseline_win_rate_pct, candidates:[{hero, shortName, win_rate_pct, delta_pp}]} sorted best-first. Report verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • recommend_pickFree

    Best heroes to pick next against this draft — Dota 2, Deadlock or Marvel Rivals. Per-game semantics: - dota2: top 3 picks scored by the CALIBRATED draft model (each with the calibrated team win rate after adding that hero); `my_side` applies. - deadlock / marvel-rivals: ranked by REAL observed pair data (win rate vs the enemy heroes, blended with duo rate alongside your picks) — an empirical heuristic, not the calibrated model; verify a full 6v6 with predict_winrate. Args: game: "dota2", "deadlock", or "marvel-rivals". enemy_heroes: Enemy heroes to pick against. my_heroes: Heroes your team already has. my_side: Dota only — "radiant" (default) or "dire". limit: Max recommendations (Deadlock/Marvel; Dota returns top 3). Report win rates verbatim. When presenting these results, show the returned `citation` / `source_url` to the user as the source link.

  • searchFree

    Search batru.gg's live competitive datasets for Dota 2, Deadlock and Marvel Rivals. Finds the right document for a question about hero counters, hero synergies /duos, current-patch tier lists, ban rates, pro tournament results (TI, Esports World Cup) or the prediction model's public evaluation ledger. Data behind every document is computed from 140M+ real matches by batru.gg's production pipeline — measured numbers, not model guesses. Args: query: Free-text search, e.g. "who counters axe dota", "best deadlock heroes", "marvel rivals mantis duo", "ti 2026 most banned". Returns {results: [{id, title, url}]}. Pass a result's `id` to `fetch` to get the full document.

Public scan report

scanner v0.1.10 · 2026-10-03 · same rubric, same numbers if you re-run it

no findings
  • Code scan5 source files scanned25/25
  • Live reliabilityremote reachable in 1359ms20/20
  • Tool poisoning17 tool descriptions checked15/15
  • Auth qualityopen endpoint, read-only tools10/15
  • Maintenancelast push 40 days ago12/15
  • Maintainer identityendpoint served from the registry-verified namespace domain8/10
Overall 90/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Batru — Competitive Game Intelligence for AI Agents compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
90/100
higher than 83% of 48,243 servers
Tools
17
the typical server has 7
Tools that change things
0%
typical: 0%. Fewer write tools means less an agent can break
Uptime
100%
of our recent checks; the typical remote server answers 100%
Response time
827 ms
faster than 17% of 30,027 servers

What its tools let an agent do: 17 read

Install Batru — Competitive Game Intelligence for AI Agents in Claude Code, Cursor or VS Code

claude mcp add --transport http batru-mcp https://batru.gg/mcp
Add to Cursor

What the publisher says

From the Batru — Competitive Game Intelligence for AI Agents repository's README, as published. We do not edit it. Read it on GitHub

batru-mcp

<!-- mcp-name: gg.batru/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.

Tools

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 BATRUAPIBASE environment variable (default https://batru.gg) — you normally don't need to set anything.

Claude Desktop config

Add to claudedesktopconfig.json (macOS: ~/Library/Application Support/Claude/claudedesktopconfig.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.

Nothing above is checked by us. What we check is on the safety report.

Grade history

  • 2026-09-19restoreB → Ascore 91

Batru — Competitive Game Intelligence for AI Agents: common questions

Is Batru — Competitive Game Intelligence for AI Agents MCP server safe?
Yes, by our scan: it is graded A (90/100). Read the Batru — Competitive Game Intelligence for AI Agents safety report
How do I install Batru — Competitive Game Intelligence for AI Agents?
It runs remotely at batru.gg. Add it to Claude Code, Cursor, VS Code or Claude Desktop with the snippets above, or call it through the mcp.market gateway without installing anything.
Does Batru — Competitive Game Intelligence for AI Agents need an API key?
No secret keys are declared. It reads 1 setting from the environment.
Is Batru — Competitive Game Intelligence for AI Agents maintained?
The last commit was 72 days ago (2026-08-25). The latest release is v0.7.0.
Is Batru — Competitive Game Intelligence for AI Agents up?
100% of our last 28 checks got an answer. We check remote servers about four times a day.
How does Batru — Competitive Game Intelligence for AI Agents compare with other MCP servers?
safety score 90/100 (higher than 83% of 48,243 servers); tools 17 (the typical server has 7); tools that change things 0% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.