Batru — Competitive Game Intelligence for AI Agents

gg.batru由 batru.gg 發布官方發布者v0.7.0更新於 Oct 25, 2026

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

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取資料與分析

概覽

AI 產生的概覽

以 batru.gg 為基礎的唯讀 MCP 伺服器,讓助理取得 Dota 2、Deadlock 和 Marvel Rivals 的即時陣容勝率預測、英雄中繼資料與職業賽事資料。

可以做什麼
查詢並正規化英雄名稱,或列出 Dota 2、Deadlock 和 Marvel Rivals 的英雄名單。預測陣容的校準勝率,一次批次評估多個候選選角,並推薦下一手最佳選擇。為陣容產生可互動的勝率面板。讀取英雄中繼資料:梯隊榜、克制關係、協同搭檔、單對單對位勝率、週環比走勢和禁用率。讀取職業賽事資料:最常選與最常禁的英雄,以及解析重播得到的逐局資料。搜尋 batru.gg 的即時資料集並取得結果對應的完整文件,包括模型的公開評估紀錄。
適用情境
當使用者詢問 Dota 2、Deadlock 或 Marvel Rivals 的陣容、英雄克制、協同、梯隊榜或職業賽事結果,並希望助理用實測資料而非憑記憶作答時適用。建議使用託管端點以取得最新工具集。
執行需求
可使用 batru.gg 的遠端託管端點,或以 uv 執行本機 PyPI 套件(Python 3.12+),但 README 稱該本機套件為舊版且已凍結在早期版本。未宣告需要身分驗證。選用環境變數 BATRU_API_BASE 預設指向公開網站。需要能連線至 batru.gg 的網路。
安裝前請注意
此伺服器被描述為唯讀,且不需要憑證。本機套件已過時,工具數量少於託管端點。後端會默默捨棄無法辨識的英雄名稱,因此應先正規化名稱,以免得到誤導性的預測。賽事資料為小樣本紀錄,並非校準機率。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Batru — Competitive Game Intelligence for AI Agents,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/gg.batru%2Fbatru-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "batru-competitive-game-intelligence-for": {
      "type": "http",
      "url": "https://batru.gg/mcp"
    }
  }
}

README

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

ToolWhat 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):

bash
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):

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

bash
git clone https://github.com/batrugg/batru-mcp && cd batru-mcpuv syncuv 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

bash
uv run pytest            # offline: hero normalisation + draft assemblyuv 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.

來源:README.md,提交 8d72267

工具

17

lookup_hero

Look up a hero name

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

輸入參數gamequery必填context必填

get_model_track_record

Model track record (public ledger)

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; under 0.005 means a stated 60% wins ~60% of the time), then BCE. Do NOT headline raw accuracy on its own: Dota drafts are balanced by design, so pre-game draft-only accuracy sits in the high 50s for ANY model (always picking Radiant already scores ~53%) — 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.

輸入參數limitcontext必填

analyze_draft

Analyze a game draft visually

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.

輸入參數game必填context必填my_sidemy_heroes必填enemy_heroes必填

predict_winrate

Predict draft win rate

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.

輸入參數game必填context必填my_sidemy_heroes必填enemy_heroes必填

predict_winrate_batch

Score many candidate picks in one call

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.

輸入參數gamecontext必填my_sidemy_heroes必填candidates必填enemy_heroes必填

recommend_pick

Recommend the next pick

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.

輸入參數game必填limitcontext必填my_sidemy_heroesenemy_heroes必填

get_tier_list

Current-patch tier list

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.

輸入參數game必填ranklimitcontext必填

get_counters

Hero counters

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.

輸入參數game必填hero必填limitcontext必填

get_synergy

Hero synergies / duos

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.

輸入參數game必填hero必填limitcontext必填

get_matchup

Head-to-head matchup

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.

輸入參數game必填hero必填context必填opponent必填

get_hero_momentum

Hero momentum (rising / falling)

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.

輸入參數game必填herolimitcontext必填

get_ban_rates

Ban rates

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.

輸入參數game必填limitcontext必填

get_tournament_stats

Pro tournament stats

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.

輸入參數gameeventlimitcontext必填

get_tournament_game_stats

Pro tournament box scores

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.

輸入參數gameteameventlimitstagecontext必填match_id

fetch

Fetch a Batru document by id

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.

輸入參數id必填context必填

get_more_tools

Get More Tools

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

輸入參數context必填

版本歷史

1
  1. v0.7.0最新Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分