OpenDota MCP. Analyze deep match data and MMR trends.
Works with every AI agent you already use
…and any MCP-compatible client
Just plug in your AI agents and start using Vinkius.
OpenDota gives your AI client direct access to one of the largest Dota 2 match databases. Pull player profiles, analyze full match histories, check team rosters, and track all-time records for heroes and players—all without needing an API key for basic use.
This is how you pull raw esports data into conversation.
What your AI agents can do
Get benchmarks
Compares any player’s statistics—like win rate or damage output—against the overall performance of the Dota 2 player base.
Get constants
Pulls predefined data sets, such as lists defining different game modes or lobby types.
Get distributions
Shows the count of players in every rank bracket (Herald through Immortal), helping you map the overall player base's MMR health.
Get specific player data like rank tier, MMR estimate, total matches played, and country using get_player.
Pull a player's full match history or recent games to review performance trends and hero usage patterns via get_player_matches or get_player_recent_matches.
Get every piece of data from a single professional match, including item builds, damage metrics, objectives, and chat logs using get_match.
Run advanced custom SQL queries against the entire dataset using run_explorer_query, allowing for deep meta-game trend identification.
Identify a player's strongest and weakest heroes by pulling their win/loss records for each hero via get_player_wl.
Ask AI about this MCP
Supported MCP Clients
Waiting for input…
OpenDota MCP Server: 18 Tools for Esports Analytics
Analyze Dota 2 by pulling specific metrics on players, teams, heroes, and full matches using specialized tools.
019d8466get benchmarks
Compares any player’s statistics—like win rate or damage output—against the overall performance of the Dota 2 player base.
019d8466get constants
Pulls predefined data sets, such as lists defining different game modes or lobby types.
019d8466get distributions
Shows the count of players in every rank bracket (Herald through Immortal), helping you map the overall player base's MMR health.
019d8466get match
Returns a complete breakdown for one match, including all 10 heroes, their items, KDA, and damage metrics in professional games.
019d8466get player
Retrieves a player's current profile picture, rank tier, MMR estimate, total matches, and win rate.
019d8466get player heroes
Calculates performance metrics specifically for all the heroes a given player has used throughout their career.
019d8466get player matches
Lists every match played by a user, including hero, result, KDA, and duration. Sorted by most recent first.
019d8466get player recent matches
Provides the last 20 matches for quick viewing of a player's current form and primary heroes.
019d8466get player records
Shows all-time personal records for a player, listing the match ID and specific metric value (e.g., highest kills).
019d8466get player wl
Displays how many times a player has won versus lost with each hero they've played.
019d8466get records
Identifies the all-time record holders for various game metrics (like kills, gold per min) across all public matches.
019d8466get team
Pulls detailed info on a professional team, including their current roster, rating, and win/loss track record.
019d8466list heroes
Returns the full list of all 124 Dota 2 heroes and key details like roles and attributes.
019d8466list leagues
Provides a directory of professional leagues, giving their IDs, tiers, regions, and tournament dates.
019d8466list recent matches
Returns up to 500 recent public matches, including MMR averages and the winner for quick browsing.
019d8466list teams
Lists all professional teams sorted by their rating, showing basic stats like wins/losses and last match time.
019d8466run explorer query
Executes a custom SQL query string against the entire database for advanced, deep-dive analysis.
019d8466search
Finds IDs and names for players, teams, leagues, or heroes when you only know their common name.
Choose How to Get Started
Build a custom MCP for your own tools, or connect a ready-made integration from our catalog.
Build Your Own
Turn any API into an MCP. Import a spec, define Agent Skills, or deploy with MCPFusion.
- Import from OpenAPI, Swagger, or YAML specs
- Create Agent Skills with progressive disclosure
- Deploy to edge with MCPFusion framework
- Built in DLP, auth, and compliance on every call
- Real time usage dashboard and cost metering
- Publish to catalog or keep private
Make Your AI Do More
Start with OpenDota, then connect any of our 4,700+ other servers whenever your AI needs more. One click, no limits.
- Use this MCP plus 4,700+ others, all in one place
- Add new capabilities to your AI anytime you want
- Every connection is secured and compliant automatically
- Track usage and costs across all your servers
- Works with Claude, ChatGPT, Cursor, and more
- New servers added to the catalog every week
What you can do with this MCP connector
OpenDota MCP Server - Analyze Dota 2 Match Data
You're getting your AI client direct access to one of the largest Dota 2 match databases out there. Instead of spending time on complicated websites or juggling a dozen APIs, you just ask natural questions and get structured data back. This lets you pull raw esports metrics straight into conversation.
To track individual player performance, use get_player to grab current details like their rank tier, MMR estimate, total matches played, and country. For a quick look at recent form, get_player_recent_matches pulls the last twenty games. If you need a full career rundown, get_player_matches lists every single match they've played, including the hero used, result, KDA, and duration, sorted by what happened most recently.
For deep performance checks, get_benchmarks compares any player’s stats—like their win rate or damage output—against how the entire Dota 2 population performs. You can also run get_player_wl to see exactly how many times a specific player won versus lost with every hero they've ever played. To identify all-time personal high scores, get_player_records shows every record a player holds, listing the match ID and the metric value (like their highest kill count).
When you need to understand what's going down in professional play, start with the team level. Use get_team to pull detailed intel on a pro squad, including their current roster, rating, and win/loss track record. To review any single game, get_match returns every piece of data from that match: all ten heroes, their item builds, KDA, damage totals, and objectives hit in professional contests.
For the general league overview, you can use list_leagues for a directory of pro leagues, giving you IDs, tiers, regions, and tournament dates.
For meta-game analysis across the whole population, get_distributions shows you how many players are sitting in every single rank bracket, from Herald all the way up to Immortal. You can also check overall player status using list_recent_matches, which returns up to 500 recent public matches and includes MMR averages and the winner for fast browsing.
If you're looking at team listings generally, list_teams lists every professional team, sorted by their rating, along with basic stats like wins/losses and when they last played.
To pull data on a player's hero usage across their entire career, run get_player_heroes, which calculates performance metrics specifically for all the heroes that given player has used. To see what records are held universally, use get_records to identify all-time record holders for various game metrics like kills or gold per minute across every public match.
The database also keeps track of system constants; you can pull predefined data sets using get_constants, such as lists that define different game modes or lobby types.
When you're hunting down IDs and names—say, finding a player when you only know their common name—use the search tool. If you need to dive into advanced meta-game trends or run complex queries nobody else can handle, run_explorer_query executes custom SQL against the whole database for deep analysis. To get basic reference points, list_heroes returns the full roster of all 124 Dota 2 heroes and their key attributes, roles, and details.
How OpenDota MCP Works
- 1 First, use
searchto find the specific IDs for players, teams, or leagues you are interested in. - 2 Next, run a targeted tool—like
get_player_recent_matches—to pull the raw data set (e.g., match ID, KDA). - 3 Finally, feed that result into another tool (or ask your agent to synthesize it) using
get_matchorrun_explorer_queryfor detailed analysis.
The bottom line is: you chain specialized data calls together in a conversation, building a full picture from raw match IDs and stats.
Who Is OpenDota MCP For?
Anyone who needs hard numbers to back up their theories. This is for esports analysts tracking meta shifts, coaches scouting opponents' weaknesses, or players trying to finally understand what their true MMR is. If your job requires knowing why a team lost, you need this.
Runs get_distributions and run_explorer_query to track how often certain hero builds or rank tiers show up in pro matches.
Uses get_player_wl and get_player_recent_matches to pinpoint a competitor's reliable heroes and consistent weaknesses, planning the next patch of strategy.
Consults get_benchmarks and get_player_records after a tournament to see how their personal stats compare against the entire player base's top tier.
What Changes When You Connect
- See a player's full performance history. Instead of relying on anecdotal evidence, use
get_player_matchesto pull thousands of records for pattern analysis. - Benchmark opponents accurately.
get_benchmarkscompares a single user against the entire Dota 2 population, giving you hard data points—not just 'good' or 'bad'. - Identify meta trends instantly. By listing heroes with
list_heroes, then querying rank distributions withget_distributions, you see where the player base is congregating. - Deep dive into specific games. When a coach needs to review one crucial moment,
get_matchpulls every single detail—damage, items, objectives—so you don't have to read minutes of text. - Find hidden data relationships using SQL. If the specialized tools fall short, use
run_explorer_querywith custom SQL to join metrics across tables.
Real-World Use Cases
Scouting a Rival Team's Weak Spot
A coach needs to know if their rival team relies too heavily on one hero. They run search for the team, then use get_player_recent_matches for each player. Finally, they use get_player_wl to see which heroes have a disproportionately high loss rate for those players.
Tracking All-Time Records
A researcher wants to find the highest recorded Gold Per Minute (GPM) in Dota 2 history. They skip manual searches and run get_records with 'gold_per_min' as the field, instantly retrieving the top record holders.
Profiling a New Player
A scout needs to assess an unknown player. They use search first to get the Steam ID, then run get_player for their basic stats and get_player_matches to see if they have enough data points to be worth looking at.
Understanding League Depth
An analyst wants to know if a pro league is dominated by one MMR bracket. They use list_leagues to find the tournament, and then run get_distributions to visualize how the entire player population falls across all ranks.
The Tradeoffs
Trying to get everything in one go
Asking your agent: 'Give me a complete analysis of Arteezy's performance, including his team's best items and league data.' This is too vague and forces the AI to guess which tools to use.
→
Break it down. First: get_player for his current rank. Second: get_player_matches for the last 20 games. Third: If you need a specific match detail, run get_match using one of those IDs.
Ignoring data structure
Assuming that just because two tools exist (e.g., list_heroes and get_player), they can automatically link player stats to hero roles without explicit querying.
→
Always use the IDs provided by a listing tool. Pull the hero list via list_heroes, grab a specific Hero ID, then run get_benchmarks using that ID.
Relying only on recent data
Only looking at get_player_recent_matches and concluding the player is weak, ignoring their entire career record.
→
Cross-reference with get_player_wl to see which heroes are consistently strong, even if they aren't visible in the last 20 games. Use get_player_records for overall stats.
When It Fits, When It Doesn't
Use OpenDota if your problem requires verifiable, structured data from professional esports history.
Do this if: You need to calculate statistical differences (e.g., 'How does the average GPM of a Legend player compare to an Immortal player?'). The dedicated tools like get_benchmarks and get_distributions handle these comparisons directly.
Don't use this if: Your question is subjective or relies on qualitative assessment ('Why did the team lose?'—the data only shows what happened, not why). Or if you just need general knowledge (e.g., 'What is a MMR?'). For that, simple web searches are faster.
The boundary case: If no single tool works, but you know the relationship between two or three data points (e.g., linking specific hero damage to league performance), use run_explorer_query. This gives you maximum power but requires solid SQL knowledge.
Independent Platform Disclaimer: Vinkius is an independent platform and is not affiliated with, endorsed by, sponsored by, verified by, or otherwise authorized by OpenDota. All third-party trademarks, logos, and brand names are the property of their respective owners. Their use on this website is strictly for informational purposes to identify service compatibility and interoperability.
VINKIUS INFRASTRUCTURE
Cloud Hosted
Managed infra
V8 Isolated
Sandboxed per request
Zero-Trust Proxy
No stored credentials
DLP Enforced
Policy on every call
GDPR Compliant
EU data residency
Token Compression
~60% cost reduction
Works with Claude, ChatGPT, Cursor, and more
The Model Context Protocol standardizes how applications expose capabilities to LLMs. Instead of operating in isolation, your AI gains direct access to external platforms, live data, and real-world actions through secure, standardized connections.
This server provides 18 capabilities that interface natively with Claude, ChatGPT, Cursor, and any MCP client. No middleware. No custom integration required.
Available Capabilities
Reviewing a team's performance used to mean hours of spreadsheet clicking and tab-jumping.
Before MCP, checking a pro team's record meant visiting their website, cross-referencing player profiles across multiple tabs, manually noting down win/loss streaks, and then trying to figure out if the data was even from the same season. It was tedious, error-prone work.
Now, you ask your agent: 'Give me the team's full roster and their last 20 match results.' You get a single, clean response using `get_team` combined with `list_recent_matches`. The data lands right in your chat window.
OpenDota MCP Server: Get every detail from one professional game.
Trying to understand what happened during a single match—who got the crucial kill, which item was built when, or how much damage was done by objectives—used to require watching VODs and then taking notes. It's slow and you always miss something.
With `get_match`, your agent pulls everything in one go: KDA for all 10 players, a full list of items built, damage dealt, and objective status. You don't watch the game; you read the data.
Common Questions About OpenDota MCP
Do I need an API key? +
No! OpenDota provides free access with 60,000 requests/hour without any API key. An optional free API key is available from opendota.com for higher rate limits, but it's not required.
How do I find a player's account ID? +
Use the search tool with the player's name (e.g. 'Arteezy', 'SumaiL', 'Topson'). The results include their Steam account ID which you can then use with player-specific tools. You can also find account IDs on sites like dotabuff.com or stratz.com.
What data is available for matches? +
Match data includes: all 10 players' heroes, items, KDA, GPM, XPM, hero damage, tower damage, healing, lane positions, draft picks, chat logs, team objectives, ability builds and more. Professional matches have even more detailed data including observer ward placements and rune pickups.
How many heroes are in Dota 2? +
Dota 2 currently has 124 heroes, each with unique abilities and roles. Use list_heroes to see the complete list with their IDs, names, primary attributes (Strength, Agility, Intelligence, Universal) and roles (carry, support, offlane, mid).
What are the rate limits when using get_player or other stat tools? +
The server provides 60k requests per hour for basic access. If you're building a large-scale application, check the Vinkius documentation for advanced usage options or dedicated batch endpoints.
How do I use run_explorer_query to analyze player performance? +
You provide a full SQL query string that defines your desired calculation. The service runs this against the database and returns results as a structured array of data rows for immediate analysis.
What is get_constants for, and how do I use it? +
This tool retrieves specific constant sets that define game context (like 'game_mode' or 'patch'). You specify the resource name to understand parameters not available in standard player stats.
Before running get_benchmarks, how do I find a hero ID? +
You must call list_heroes first. This tool returns all 124 heroes and their corresponding IDs, which you then use to accurately benchmark any player's performance.
Use it with your favorite AI tools
Connect this server to Cursor, Claude, VS Code, and more.
More in this category
FtmScan (Fantom Network Explorer)
Access Fantom blockchain data directly—query wallet balances, transaction history, smart contract source code, and token transfers via FtmScan.
TF-IDF Vectorizer Engine
Exact Term Frequency-Inverse Document Frequency scores. Stop LLMs from guessing keyword relevance across massive corpuses.
Custify
Equip your AI agent to manage customer success, monitor health scores, and track churn probability directly via the Custify API.
You might also like
NewsAPI
Search breaking news and historical articles from 150,000+ sources via NewsAPI.org.
Giddyup
Coordinate field service teams with job dispatching, route optimization, and real-time status updates for mobile workforces.
OpenDataSUS
Access Brazilian public health data (SUS) directly from your AI. Query datasets, search resources, and analyze health statistics from the official portal.