Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Batru — Competitive Game Intelligence for AI Agents

REMOTE · BATRU.GG · 2 COMPONENTS · SCANNED SEP 20

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

+1 this week 75 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security80
Transport & Reachability100
Schema Quality & AI Usability75
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 7384 tokens (~410/item across 18 items; 17 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management10
  • Stability check failed: schema churn in the 30 days we've observed: 28 tool removals, 0 breaking changes, 0 auth/transport breaks, 14 additions. See how to fix → Fail
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (6% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 17 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
  • Supports UI / widget rendering.Pass
Install

How do I install the Batru — Competitive Game Intelligence for AI Agents MCP server?

Batru — Competitive Game Intelligence for AI Agents is a hosted endpoint at https://batru.gg/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · batru.gg

# add to Claude Code
claude mcp add --transport http gg-batru-batru-mcp 'https://batru.gg/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "gg-batru-batru-mcp": {
      "url": "https://batru.gg/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "gg-batru-batru-mcp": {
      "type": "http",
      "url": "https://batru.gg/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.gg-batru-batru-mcp]
url = "https://batru.gg/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "gg-batru-batru-mcp": {
      "type": "remote",
      "url": "https://batru.gg/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add gg-batru-batru-mcp --url 'https://batru.gg/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  gg-batru-batru-mcp:
    url: "https://batru.gg/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "gg-batru-batru-mcp": {
      "Transport": "http",
      "Url": "https://batru.gg/mcp"
    }
  }
}
# add to Vellum
assistant mcp add gg-batru-batru-mcp -t streamable-http -u 'https://batru.gg/mcp'
// mcp.json
{
  "mcpServers": {
    "gg-batru-batru-mcp": {
      "type": "http",
      "url": "https://batru.gg/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 19 Sept 26 +2
    • Tool “lookup_hero” rewrote its description, which is the text the model reads security
    • Tool “predict_winrate” rewrote its description, which is the text the model reads security
    • Schema quality: 336 → 410 functional
    • Tool coverage: 26% → 100% functional
    • “get_tier_list” reworded the description of “game” cosmetic
    • “fetch” reworded the description of “id” cosmetic
    • “get_ban_rates” reworded the description of “game” cosmetic
    • “get_ban_rates” reworded the description of “limit” cosmetic
    • “get_counters” reworded the description of “game” cosmetic
    • “get_counters” reworded the description of “hero” cosmetic
    • “get_counters” reworded the description of “limit” cosmetic
    • “get_hero_momentum” reworded the description of “game” cosmetic
    • “get_hero_momentum” reworded the description of “hero” cosmetic
    • “get_hero_momentum” reworded the description of “limit” cosmetic
    • “get_matchup” reworded the description of “game” cosmetic
    • “get_matchup” reworded the description of “hero” cosmetic
    • “get_matchup” reworded the description of “opponent” cosmetic
    • “get_model_track_record” reworded the description of “limit” cosmetic
    • “get_synergy” reworded the description of “game” cosmetic
    • “get_synergy” reworded the description of “hero” cosmetic
    • “get_synergy” reworded the description of “limit” cosmetic
    • “analyze_draft” reworded the description of “my_side” cosmetic
    • “get_tier_list” reworded the description of “limit” cosmetic
    • “get_tier_list” reworded the description of “rank” cosmetic
    • “get_tournament_game_stats” reworded the description of “event” cosmetic
    • “get_tournament_game_stats” reworded the description of “game” cosmetic
    • “get_tournament_game_stats” reworded the description of “limit” cosmetic
    • “get_tournament_game_stats” reworded the description of “match_id” cosmetic
    • “get_tournament_game_stats” reworded the description of “stage” cosmetic
    • “get_tournament_game_stats” reworded the description of “team” cosmetic
    • “get_tournament_stats” reworded the description of “event” cosmetic
    • “get_tournament_stats” reworded the description of “game” cosmetic
    • “get_tournament_stats” reworded the description of “limit” cosmetic
    • “lookup_hero” reworded the description of “game” cosmetic
    • “lookup_hero” reworded the description of “query” cosmetic
    • “predict_winrate” reworded the description of “enemy_heroes” cosmetic
    • “predict_winrate” reworded the description of “game” cosmetic
    • “predict_winrate” reworded the description of “my_heroes” cosmetic
    • “predict_winrate” reworded the description of “my_side” cosmetic
    • “predict_winrate_batch” reworded the description of “candidates” cosmetic
    • “predict_winrate_batch” reworded the description of “enemy_heroes” cosmetic
    • “predict_winrate_batch” reworded the description of “game” cosmetic
    • “predict_winrate_batch” reworded the description of “my_heroes” cosmetic
    • “predict_winrate_batch” reworded the description of “my_side” cosmetic
    • “recommend_pick” reworded the description of “enemy_heroes” cosmetic
    • “recommend_pick” reworded the description of “game” cosmetic
    • “recommend_pick” reworded the description of “limit” cosmetic
    • “recommend_pick” reworded the description of “my_heroes” cosmetic
    • “recommend_pick” reworded the description of “my_side” cosmetic
    • “search” reworded the description of “query” cosmetic
    • “analyze_draft” reworded the description of “enemy_heroes” cosmetic
    • “analyze_draft” reworded the description of “game” cosmetic
    • “analyze_draft” reworded the description of “my_heroes” cosmetic
  • 17 Sept 26 −1

    No change was recorded against any check on this day. Stability & Change Management went from 15 to 10.

  • 13 Sept 26 +1
    • Schema quality: good → excellent functional
    • “get_counters” reworded the description of “context” cosmetic
    • “get_hero_momentum” reworded the description of “context” cosmetic
    • “get_matchup” reworded the description of “context” cosmetic
    • “get_model_track_record” reworded the description of “context” cosmetic
    • “get_synergy” reworded the description of “context” cosmetic
    • “get_tier_list” reworded the description of “context” cosmetic
    • “get_tournament_game_stats” reworded the description of “context” cosmetic
    • “get_tournament_stats” reworded the description of “context” cosmetic
    • “lookup_hero” reworded the description of “context” cosmetic
    • “predict_winrate” reworded the description of “context” cosmetic
    • “predict_winrate_batch” reworded the description of “context” cosmetic
    • “recommend_pick” reworded the description of “context” cosmetic
    • “search” reworded the description of “context” cosmetic
    • “analyze_draft” reworded the description of “context” cosmetic
    • “fetch” reworded the description of “context” cosmetic
    • “get_ban_rates” reworded the description of “context” cosmetic
  • 12 Sept 26 −13
    • Stability: pass → fail security
    • Tool “get_dota_tournament_stats” was removed security
    • Tool “get_deadlock_ban_rates” was removed security
    • Tool “get_deadlock_counters” was removed security
    • Tool “get_deadlock_hero_momentum” was removed security
    • Tool “get_deadlock_matchup” was removed security
    • Tool “get_deadlock_synergy” was removed security
    • Tool “get_deadlock_tier_list” was removed security
    • Tool “get_deadlock_tier_list_by_rank” was removed security
    • Tool “get_dota_counters” was removed security
    • Tool “get_dota_hero_momentum” was removed security
    • Tool “get_dota_matchup” was removed security
    • Tool “get_dota_synergy” was removed security
    • Tool “get_dota_tier_list” was removed security
    • Tool “get_dota_tier_list_by_rank” was removed security
    • Tool “get_dota_tournament_game_stats” was removed security
    • Tool “get_marvel_rivals_ban_rates” was removed security
    • Tool “get_marvel_rivals_counters” was removed security
    • Tool “get_marvel_rivals_hero_momentum” was removed security
    • Tool “get_marvel_rivals_matchup” was removed security
    • Tool “get_marvel_rivals_synergy” was removed security
    • Tool “get_marvel_rivals_tier_list” was removed security
    • Tool “get_marvel_rivals_tier_list_by_rank” was removed security
    • Tool “predict_deadlock_draft” was removed security
    • Tool “predict_dota_winrate” was removed security
    • Tool “predict_dota_winrate_batch” was removed security
    • Tool “predict_marvel_rivals_draft” was removed security
    • Tool “recommend_deadlock_pick” was removed security
    • Tool “recommend_dota_pick” was removed security
    • Tool “recommend_marvel_rivals_pick” was removed security
    • Tool coverage: 32% → 26% functional
    • Schema quality: 349 → 313 functional
    • Schema quality: excellent → good functional
    • New prompt “counter_check” functional
    • New prompt “draft_help” functional
    • New prompt “meta_brief” functional
    • Server version: 0.5.4 → 0.7.0 functional
    • New tool “fetch” functional
    • New tool “get_ban_rates” functional
    • New tool “get_counters” functional
    • New tool “get_hero_momentum” functional
    • New tool “get_matchup” functional
    • New tool “get_synergy” functional
    • New tool “get_tier_list” functional
    • New tool “get_tournament_game_stats” functional
    • New tool “get_tournament_stats” functional
    • New tool “predict_winrate” functional
    • New tool “predict_winrate_batch” functional
    • New tool “recommend_pick” functional
    • New tool “search” functional
  • 11 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “predict_dota_winrate” rewrote its description, which is the text the model reads security
  • 31 Aug 26 0
    • Server version: 0.5.3 → 0.5.4 functional
  • 29 Aug 26 +10
    • Authorization: unverified → partial security
    • The server rewrote its instructions, which are the text every model session reads security
    • First check of Tool coverage: 3 functional
    • First check of Schema quality: 100 functional
    • First check of Capabilities: pass functional
    • New resource “Batru draft board” functional
    • Server version: 0.5.0 → 0.5.3 functional
    • New tool “analyze_draft” functional
  • 28 Aug 26 0
    • Tool “get_deadlock_matchup” rewrote its description, which is the text the model reads security
    • Tool “get_deadlock_synergy” rewrote its description, which is the text the model reads security
    • Tool “get_deadlock_hero_momentum” rewrote its description, which is the text the model reads security
    • Tool “get_dota_matchup” rewrote its description, which is the text the model reads security
    • Tool “get_dota_synergy” rewrote its description, which is the text the model reads security
    • Tool “get_dota_tier_list” rewrote its description, which is the text the model reads security
    • Tool “get_dota_tournament_stats” rewrote its description, which is the text the model reads security
    • Tool “get_marvel_rivals_ban_rates” rewrote its description, which is the text the model reads security
    • Tool “get_marvel_rivals_counters” rewrote its description, which is the text the model reads security
    • Tool “get_marvel_rivals_hero_momentum” rewrote its description, which is the text the model reads security
    • Tool “get_marvel_rivals_matchup” rewrote its description, which is the text the model reads security
    • Tool “get_marvel_rivals_synergy” rewrote its description, which is the text the model reads security
    • Tool “get_marvel_rivals_tier_list” rewrote its description, which is the text the model reads security
    • Tool “predict_deadlock_draft” rewrote its description, which is the text the model reads security
    • Tool “predict_dota_winrate” rewrote its description, which is the text the model reads security
    • Tool “predict_marvel_rivals_draft” rewrote its description, which is the text the model reads security
    • Tool “get_dota_hero_momentum” rewrote its description, which is the text the model reads security
    • Tool “get_deadlock_counters” rewrote its description, which is the text the model reads security
    • Tool “get_deadlock_ban_rates” rewrote its description, which is the text the model reads security
    • Tool “get_dota_counters” rewrote its description, which is the text the model reads security
    • Tool “get_deadlock_tier_list” rewrote its description, which is the text the model reads security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 20 Sept 2026 · Probed https://batru.gg/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=batru.gg CN=WE1,O=Google Trust Services,C=US 30 Aug 2026 28 Nov 2026 ECDSA 256 ECDSA-SHA256 e3aa2f6d62d259713e4f15c2f944186
SANs: batru.gg, *.batru.gg
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of batru.gg. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
gg. present 4975 8 Verified
batru.gg. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=2592000

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://batru.gg/mcp Verified 200
http (plaintext) http://batru.gg/mcp HTTPS enforced 301 https://batru.gg/mcp
MCP tools · 17 exposed · ~6,955 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_draft ~667

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
enemy_heroesarrayyesHeroes on the ENEMY team, as a list of hero names (any alias or short name; normalised internally). To see every valid hero name for a game, call lookup_hero with an EMPTY query (query="", game=...)…
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
my_heroesarrayyesHeroes already on YOUR team, as a list of hero names (any alias or short name; normalised internally). May be empty for a fresh draft. To see every valid hero name for a game, call lookup_hero with a…
my_sidestringDota 2 only: the side your team plays, "radiant" or "dire". Ignored for deadlock / marvel-rivals.
NameTypeReqDescription
citation
did_you_meanarray
enemy_heroesarray
enemy_labelstringyes
enemy_win_rate_pct
error
gamestringyes
game_labelstringyes
my_heroesarray
my_labelstringyes
my_win_rate_pct
notestringyes
prediction_statusstringyes
recommendation_metric_labelstringyes
recommendationsarray
source_url

No examples provided.

fetch ~301

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
idstringyesA document id exactly as returned by search.

No output schema declared.

No examples provided.

get_ban_rates ~287

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
gamestringyes"deadlock" or "marvel-rivals" (Dota 2 has no draft-phase ban data here).
limitintegerMaximum number of rows to return.

No output schema declared.

No examples provided.

get_counters ~421

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
herostringyesHero name — any alias or short name is accepted and normalised internally. To see every valid hero name for a game, call lookup_hero with an EMPTY query (query="", game=...) — it returns the full ros…
limitintegerMax opponents to list per direction (best / worst matchups).

No output schema declared.

No examples provided.

get_hero_momentum ~359

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
herostringOptional: one hero to report on. Empty = the biggest movers of the current window.
limitintegerMaximum number of rows to return.

No output schema declared.

No examples provided.

get_matchup ~336

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
herostringyesThe hero you are asking about (any alias; normalised internally).
opponentstringyesThe opposing hero (any alias; normalised internally).

No output schema declared.

No examples provided.

get_model_track_record ~418

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
limitintegerNumber of most recent weekly evaluations to return.

No output schema declared.

No examples provided.

get_more_tools ~53

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

NameTypeReqDescription
contextstringyesA description of your goal and what kind of tool would help accomplish it.

No output schema declared.

No examples provided.

get_synergy ~407

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
herostringyesHero name — any alias or short name is accepted and normalised internally. To see every valid hero name for a game, call lookup_hero with an EMPTY query (query="", game=...) — it returns the full ros…
limitintegerMax teammates to list per direction (best / worst duos).

No output schema declared.

No examples provided.

get_tier_list ~468

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
limitintegerMaximum number of rows to return.
rankstringOptional skill bracket. dota2: herald, guardian, crusader, archon, legend, ancient (or a band like "legend-ancient"). deadlock / marvel-rivals: low, mid, high or top. Empty = all ranks.

No output schema declared.

No examples provided.

get_tournament_game_stats ~429

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
eventstringEvent slug, e.g. "ti-2026" or "ewc-2026".
gamestringOnly "dota2" has replay-parsed box scores today.
limitintegerMax games to return (each is a full box score).
match_idintegerOptional: a single Dota match id to fetch; 0 = no filter.
stagestringOptional stage filter (group stage, playoffs, ...).
teamstringOptional team-name filter (either side of the game).

No output schema declared.

No examples provided.

get_tournament_stats ~383

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
eventstringEvent slug, e.g. "ti-2026" (The International 2026) or "ewc-2026" (Esports World Cup).
gamestringOnly "dota2" has pro tournament coverage today.
limitintegerMaximum number of rows to return.

No output schema declared.

No examples provided.

lookup_hero ~417

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}]}.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
gamestring"dota2" (default), "deadlock", or "marvel-rivals".
querystringyesA hero name, alias or short name as the user typed it. Pass an EMPTY string to list the game's full roster instead.

No output schema declared.

No examples provided.

predict_winrate ~645

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
enemy_heroesarrayyesHeroes on the ENEMY team, as a list of hero names (any alias or short name; normalised internally). To see every valid hero name for a game, call lookup_hero with an EMPTY query (query="", game=...)…
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
my_heroesarrayyesHeroes already on YOUR team, as a list of hero names (any alias or short name; normalised internally). May be empty for a fresh draft. To see every valid hero name for a game, call lookup_hero with a…
my_sidestringDota 2 only: the side your team plays, "radiant" or "dire". Ignored for deadlock / marvel-rivals.

No output schema declared.

No examples provided.

predict_winrate_batch ~497

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.

NameTypeReqDescription
candidatesarrayyesCandidate heroes to evaluate as your next pick (1-150), as a list of hero names.
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
enemy_heroesarrayyesEnemy heroes (0-5), as a list of hero names.
gamestringOnly "dota2" is supported today.
my_heroesarrayyesHeroes your team already picked (0-4), as a list of hero names.
my_sidestringDota 2 only: the side your team plays, "radiant" or "dire". Ignored for deadlock / marvel-rivals.

No output schema declared.

No examples provided.

recommend_pick ~521

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
enemy_heroesarrayyesEnemy heroes to pick against, as a list of hero names.
gamestringyesWhich game: "dota2", "deadlock" or "marvel-rivals". Required — hero names alone do not identify the game.
limitintegerMax recommendations (Deadlock / Marvel Rivals; Dota always returns its top 3).
my_heroesarrayHeroes your team already has, as a list of hero names (may be empty).
my_sidestringDota 2 only: the side your team plays, "radiant" or "dire". Ignored for deadlock / marvel-rivals.

No output schema declared.

No examples provided.

search ~346

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.

NameTypeReqDescription
contextstringyesExplain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include,…
querystringyesFree-text search over Batru's live esports data (hero names, matchups, tournaments, patches).

No output schema declared.

No examples provided.

Common questions

What is the Batru — Competitive Game Intelligence for AI Agents MCP server?

Batru — Competitive Game Intelligence for AI Agents is an MCP server listed in the public MCP registry as gg.batru/batru-mcp. Live competitive-game predictions, meta data and decision tools for AI agents. This page covers its hosted endpoint (https://batru.gg/mcp).

Is the Batru — Competitive Game Intelligence for AI Agents MCP server safe to use?

Batru — Competitive Game Intelligence for AI Agents scores 75 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Batru — Competitive Game Intelligence for AI Agents MCP server expose?

Batru — Competitive Game Intelligence for AI Agents exposes 17 tools: lookup_hero, get_model_track_record, analyze_draft, predict_winrate, predict_winrate_batch, and 12 more. Their descriptions and schemas cost roughly 6,955 tokens of context every time the server is loaded.

Does the Batru — Competitive Game Intelligence for AI Agents MCP server require authentication?

No. We connected to Batru — Competitive Game Intelligence for AI Agents without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the Batru — Competitive Game Intelligence for AI Agents MCP server still maintained?

Batru — Competitive Game Intelligence for AI Agents is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.