OpenDota MCP Server
A Model Context Protocol (MCP) server that provides seamless access to the OpenDota API for querying Dota 2 player statistics, match data, and hero information through AI assistants like Claude.
Features
20+ Tools across 5 categories for comprehensive Dota 2 data access
Natural Language Support - Fuzzy matching for hero names, lane positions, and stat fields
Dual Transport - Supports both stdio (local) and HTTP (remote) modes
Rate Limiting - Built-in protection respecting OpenDota API limits
Reference Data Caching - Fast lookups with local hero/item data
Available Tools
Player Tools (6 tools)
Query player statistics, win/loss records, hero preferences, and performance metrics:
get_player_info- Get player profile, win rate, and favorite heroesget_player_win_loss- Win/loss stats with advanced filteringget_heroes_played- Detailed statistics for all heroes playedget_player_peers- Find frequent teammatesget_player_totals- Aggregated player statisticsget_player_histograms- Distribution of matches across statistical fields
Hero Tools (4 tools)
Access hero information, matchups, and item builds:
get_heroes- List all heroes with attributesget_hero_matchups- Matchup data and win ratesget_hero_item_popularity- Popular item builds by game phaseget_hero_stats- Aggregated hero statistics and pick rates
Match Tools (3 tools)
Retrieve detailed match information and parsed data:
get_match_details- Comprehensive match informationget_parsed_match_details- Parsed match data with advanced analyticsget_player_recent_matches- Recent matches for a player
Lookup Tools (4 tools)
Convert names to IDs with fuzzy matching:
get_hero_id_by_name- Hero name → ID (handles typos)get_hero_by_id- Get hero details by IDconvert_lane_name_to_id- Lane/position → lane_role IDresolve_time_name- Time period names → OpenDota filter parameters
Misc Tools (3 tools)
Search and utility functions:
search_players- Search for players by nameget_constants- Get OpenDota constants and reference dataget_player_counts- Get player count by rank tier
Installation
Prerequisites
Python 3.10 or higher
pip package manager
Install from Source
Usage
Option 1: Local Server (stdio mode)
Best for Claude Desktop integration on your local machine.
Using Claude Desktop
Config file location:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Recommended: Using the installed command
After running pip install -e ., add to your claude_desktop_config.json:
Note: Replace
/path/to/your/opendota-mcp-serverwith the actual path where you cloned this repository. On macOS/Linux, runpwdin the project directory to find this path. On Windows, runcdto see the full path.
Alternative: Using Python module directly
Alternative: Using the shell script
Using Docker:
After updating the config:
Save the file
Restart Claude Desktop completely
Start a new conversation
Your OpenDota tools should now be available!
Manual Testing
Option 2: Remote Server (HTTP mode)
Access a deployed server from anywhere.
Public Server
Use the publicly deployed server at:
Claude Desktop (Remote Connection)
Add to your claude_desktop_config.json:
Claude.ai Web Interface
Go to Claude.ai → Settings → MCP Servers
Click "Add Server"
Enter Server URL:
https://opendota-mcp-server-jylza6gata-ew.a.run.app/mcpSave and start chatting!
Option 3: Deploy Your Own
Deploy to Google Cloud Run or any container platform:
Configuration
Environment Variables
Create a .env file in the project root (or copy from .env.example):
OpenDota API Key (Optional)
An API key is optional but recommended for higher rate limits and better performance.
Rate Limits:
Without API key: 60 requests/minute (anonymous)
With API key: Higher limits for registered users
How to get an API key:
Sign in with your Steam account
Click "Create API Key"
Copy the generated API key
Add it to your
.envfile:OPENDOTA_API_KEY=your-api-key-hereRestart the server
The server will automatically detect and use the API key when configured. You'll see a confirmation message in the logs:
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Acknowledgments
OpenDota for providing the excellent Dota 2 API
FastMCP for the MCP framework
The Model Context Protocol team at Anthropic
The Dota 2 community
Support
For issues, questions, or contributions:
Open an issue on GitHub
Check existing issues for solutions
Review the OpenDota API documentation
Made with ❤️ for the Dota 2 community
This server cannot be installed