Skip to main content
Glama
DeepBlueCoding

MCP Dota 2 Match Analysis Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
delete_replayA

Delete cached replay file and parsed data for a match.

Use this tool when:

  • A replay appears to be corrupted and needs to be re-downloaded

  • You want to force a fresh download of a replay

  • Cached parsed data seems incorrect or outdated

After deletion, the next analysis request for this match will trigger a fresh download and parse.

Args: match_id: The Dota 2 match ID to delete cached data for

Returns: DeleteReplayResponse with deletion status

download_replayA

Download and cache the replay file for a Dota 2 match.

Use this tool FIRST before asking analysis questions about a match. Replay files are large (50-400MB) and can take 1-5 minutes to download.

Once downloaded, the replay is cached locally and subsequent queries for the same match will be instant.

Progress is reported during download:

  • 0-10%: Checking cache and getting replay URL

  • 10-40%: Downloading compressed file

  • 40-50%: Extracting replay

  • 50-95%: Parsing replay

  • 95-100%: Caching results

Args: match_id: The Dota 2 match ID (from OpenDota, Dotabuff, or in-game)

Returns: DownloadReplayResponse with success status and file info

get_hero_deathsA

Get chronological list of ALL hero deaths in a match.

Returns all deaths with killer, victim, time, location, and ability used. Use for global death timeline, first blood, or death pattern analysis.

Args: match_id: The Dota 2 match ID killer: Filter by killer hero (partial match, e.g. 'jugg') victim: Filter by victim hero (partial match) location: Filter by map location (partial match, e.g. 't1', 'roshan') ability: Filter by killing ability (partial match) start_time: Filter deaths after this game time (seconds) end_time: Filter deaths before this game time (seconds)

get_raw_combat_eventsA

Get raw combat events for a specific time window.

Use for analyzing non-fight moments (e.g., Roshan attempts, specific plays). detail_level: "narrative" (deaths/abilities), "tactical" (+damage), "full" (all).

Args: match_id: The Dota 2 match ID start_time: Start of time window in seconds end_time: End of time window in seconds hero_filter: Filter to specific hero ability_filter: Filter to specific ability detail_level: "narrative", "tactical", or "full" max_events: Maximum events to return

get_item_purchasesA

Get item purchase timings for heroes in a Dota 2 match.

Returns a chronological list of item purchases with:

  • game_time: Seconds since game start (can be negative for pre-horn purchases)

  • game_time_str: Formatted as M:SS

  • hero: Hero that purchased the item

  • item: Item name (e.g., "item_bfury", "item_power_treads")

Use this to answer questions like:

  • "When did Juggernaut finish Battlefury?"

  • "What was Anti-Mage's item progression?"

  • "Who bought the first BKB?"

Args: match_id: The Dota 2 match ID hero_filter: Only include purchases by this hero, e.g. "juggernaut" (optional)

Returns: ItemPurchasesResponse with list of item purchase events

get_courier_killsA

Get all courier kills in a Dota 2 match.

Returns a list of courier kill events with:

  • game_time: Seconds since game start

  • game_time_str: Formatted as M:SS

  • killer: Hero that killed the courier

  • killer_is_hero: Whether the killer was a hero

  • team: Team whose courier was killed (radiant/dire)

Args: match_id: The Dota 2 match ID

Returns: CourierKillsResponse with list of courier kill events

get_objective_killsA

Get all major objective kills in a Dota 2 match.

Returns kills of:

  • Roshan: game_time, killer, team, kill_number (1st, 2nd, 3rd Roshan)

  • Tormentor: game_time, killer, team, side (which Tormentor was killed)

  • Towers: game_time, tower name, team, tier, lane, killer

  • Barracks: game_time, barracks name, team, lane, type (melee/ranged), killer

Use this to analyze:

  • When did each team take Roshan?

  • Tower trade patterns and timing

  • High ground pushes and barracks destruction

  • Tormentor control

Args: match_id: The Dota 2 match ID

Returns: ObjectiveKillsResponse with all objective kill events

get_rune_pickupsA

Get power rune pickups in a Dota 2 match.

Returns a list of power rune pickup events with:

  • game_time: Seconds since game start

  • game_time_str: Formatted as M:SS

  • hero: Hero that picked up the rune

  • rune_type: Type of rune (haste, double_damage, arcane, invisibility, regeneration, shield)

Note: Only power runes are trackable. Bounty, wisdom, and water runes don't leave detectable events in the replay data.

Use this to answer questions like:

  • "Who got the most power runes?"

  • "What runes did the mid player secure?"

  • "When did they get a DD rune before fighting?"

Args: match_id: The Dota 2 match ID

Returns: RunePickupsResponse with list of power rune pickup events

get_hero_performanceA

Get comprehensive performance data for a hero.

Returns kills, deaths, assists, ability stats (casts, hit rate), and per-fight breakdowns. Use ability_filter for specific ability analysis.

Time filtering: Use start_time/end_time to analyze specific game phases. Common time ranges:

  • Early game: start_time=0, end_time=900 (0-15 min)

  • Mid game: start_time=900, end_time=1800 (15-30 min)

  • Late game: start_time=1800 (30+ min)

Args: match_id: The Dota 2 match ID hero: Hero name (e.g., "jakiro", "mars", "batrider") ability_filter: Filter to specific ability (e.g., "ice_path", "flaming_lasso") start_time: Filter fights starting after this game time (seconds) end_time: Filter fights starting before this game time (seconds)

get_fight_combat_logA

Get detailed event-by-event combat log for a specific fight.

Automatically detects the fight around reference_time and returns the sequence of deaths, abilities, and key moments.

Args: match_id: The Dota 2 match ID reference_time: Game time in seconds (e.g., 1530 for 25:30) hero: Optional hero to anchor fight detection detail_level: "narrative" (default), "tactical", or "full" max_events: Maximum events to return

list_fightsA

List all fights/skirmishes in a match with death summaries.

Returns fight count, timing, participants, and deaths for each fight.

Args: match_id: The Dota 2 match ID location: Filter by map location (partial match, e.g. 't1', 'roshan_pit') min_deaths: Filter to fights with at least this many deaths is_teamfight: Filter to teamfights only (True) or skirmishes only (False) start_time: Filter fights starting after this game time (seconds) end_time: Filter fights starting before this game time (seconds)

get_teamfightsA

Get major teamfights (3+ deaths) with coaching analysis.

Returns teamfight timing, participants, death sequences, and analysis.

Args: match_id: The Dota 2 match ID min_deaths: Minimum deaths to classify as teamfight (default 3) location: Filter by map location (partial match, e.g. 't1', 'roshan_pit') start_time: Filter teamfights starting after this game time (seconds) end_time: Filter teamfights starting before this game time (seconds)

get_fightC

Get detailed information about a specific fight.

get_fight_replayC

Get high-resolution replay data for a fight.

get_match_timelineC

Get time-series data for a Dota 2 match.

get_stats_at_minuteB

Get player stats at a specific minute in a Dota 2 match.

get_match_draftB

Get the complete draft (picks and bans) for a Dota 2 match with drafting context.

get_match_infoC

Get match metadata and player information for a Dota 2 match.

get_match_heroesC

Get the 10 heroes in a Dota 2 match with detailed stats.

get_match_playersB

Get the 10 players in a Dota 2 match with their hero assignments.

get_hero_positionsB

Get hero positions at a specific minute in a Dota 2 match.

get_snapshot_at_timeC

Get game state snapshot at a specific game time.

search_pro_playerB

Search for professional Dota 2 players by name or alias.

search_teamA

Search for professional Dota 2 teams by name, tag, or alias.

get_pro_playerC

Get detailed information about a professional player by account ID.

get_pro_player_by_nameC

Get detailed information about a professional player by name.

get_teamA

Get detailed information about a team by ID.

get_team_by_nameC

Get detailed information about a team by name.

get_team_matchesC

Get recent matches for a team.

get_leaguesC

Get all Dota 2 leagues/tournaments.

get_pro_matchesA

Get recent professional Dota 2 matches as a flat list.

Returns individual matches without series grouping. Use get_tournament_series for bracket/series analysis.

Args: limit: Maximum matches to return (default 50) tier: Filter by league tier (premium, professional, amateur) team1_name: Filter by first team (fuzzy match). Alone: all matches for team. team2_name: Filter by second team (fuzzy match). With team1: head-to-head matches. league_name: Filter by league/tournament name (contains, case-insensitive) days_back: Only return matches from last N days

get_tournament_seriesA

Get tournament series with bracket/game details.

Use this for tournament progression analysis: series results, Bo3/Bo5 outcomes, team advancement through brackets.

Args: league_name: Filter by league/tournament name (fuzzy match) league_id: Filter by specific league ID team_name: Filter series involving this team limit: Maximum series to return (default 20) days_back: Only series from last N days

get_league_matchesB

Get matches from a specific league/tournament with series grouping.

get_camp_stacksC

Get all neutral camp stacks in a Dota 2 match.

get_jungle_summaryB

Get jungle activity summary for a Dota 2 match.

get_lane_summaryC

Get laning phase summary for a Dota 2 match.

get_cs_at_minuteB

Get last hits, denies, gold, and level for all heroes at a specific minute.

get_position_timelineA

Get hero positions over a time range at regular intervals.

get_farming_patternC

Analyze a hero's farming pattern with camp sequences, power spikes, and routes.

get_rotation_analysisB

Analyze hero rotations - movement patterns between lanes and outcomes.

Returns rotation events, gank attempts, and their success rates.

get_client_capabilitiesA

Diagnostic tool to check what MCP capabilities the connected client supports.

Returns information about sampling, roots, and other client capabilities.

Prompts

Interactive templates invoked by user choice

NameDescription
analyze_draftAnalyze a Dota 2 draft for lane matchups, synergies, counters, and itemization. Use the dota2://heroes/all resource for detailed counter matchups.
review_hero_performanceReview a hero's performance with coaching feedback. Evaluates against role-specific expectations (cores by farm/timings, supports by impact/saves).
analyze_deathsAnalyze death patterns to identify preventable mistakes.
review_laning_phaseReview the laning phase (0-10 minutes) with coaching feedback.
analyze_teamfightAnalyze a teamfight for coaching insights.
compare_itemizationAnalyze item choices and suggest alternatives.
game_turning_pointsIdentify and analyze the turning points of a match.

Resources

Contextual data attached and managed by the client

NameDescription
All Dota 2 HeroesComplete list of all Dota 2 heroes with their canonical names, aliases, and attributes
Dota 2 Map DataComplete Dota 2 map: towers, neutral camps, runes, Roshan, outposts, shops, landmarks
Pro PlayersAll professional Dota 2 players with names, teams, and aliases
Pro TeamsAll professional Dota 2 teams with ratings and win/loss records

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DeepBlueCoding/mcp-replay-dota2'

If you have feedback or need assistance with the MCP directory API, please join our Discord server