Opendota Server
FreeNot checkedEnables querying Dota 2 player statistics, match data, and hero information through the OpenDota API using natural language.
About
Enables querying Dota 2 player statistics, match data, and hero information through the OpenDota API using natural language.
README
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
# Clone the repository
git clone https://github.com/hkaanengin/opendota-mcp-server.git
cd opendota-mcp-server
# Create virtual environment
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install with dev dependencies
pip install -e ".[dev]"
# Or install runtime only
pip install -e .
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.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Recommended: Using the installed command
After running pip install -e ., add to your claude_desktop_config.json:
{
"mcpServers": {
"opendota": {
"command": "/path/to/your/opendota-mcp-server/.venv/bin/opendota-mcp"
}
}
}
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
{
"mcpServers": {
"opendota": {
"command": "/path/to/your/opendota-mcp-server/.venv/bin/python",
"args": ["-m", "opendota_mcp.server"]
}
}
}
Alternative: Using the shell script
{
"mcpServers": {
"opendota": {
"command": "/path/to/your/opendota-mcp-server/start_mcp.sh"
}
}
}
Using Docker:
{
"mcpServers": {
"opendota": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e", "MCP_TRANSPORT=stdio",
"hkaanengin/opendota-mcp-server:latest"
]
}
}
}
After updating the config:
- Save the file
- Restart Claude Desktop completely
- Start a new conversation
- Your OpenDota tools should now be available!
Manual Testing
# Run the server directly
opendota-mcp
# Or using Python module
python -m opendota_mcp.server
# Or using the shell script
./start_mcp.sh
Option 2: Remote Server (HTTP mode)
Access a deployed server from anywhere.
Public Server
Use the publicly deployed server at:
https://opendota-mcp-server-jylza6gata-ew.a.run.app/mcp
Claude Desktop (Remote Connection)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"opendota": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-remote-http",
"https://opendota-mcp-server-jylza6gata-ew.a.run.app/mcp"
]
}
}
}
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/mcp - Save and start chatting!
Option 3: Deploy Your Own
Deploy to Google Cloud Run or any container platform:
# Build Docker image
docker build -t opendota-mcp-server .
# Run in HTTP mode
docker run -p 8080:8080 \
-e MCP_TRANSPORT=http \
-e PORT=8080 \
opendota-mcp-server
Configuration
Environment Variables
Create a .env file in the project root (or copy from .env.example):
# OpenDota API Key (optional)
# Get your API key from: https://www.opendota.com/api-keys
OPENDOTA_API_KEY=
# Logging level (DEBUG, INFO, WARNING, ERROR)
LOG_LEVEL=INFO
# Transport mode (stdio or http)
MCP_TRANSPORT=stdio
# HTTP server port (for HTTP mode)
PORT=8080
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:
- Visit https://www.opendota.com/api-keys
- 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-here - Restart the server
The server will automatically detect and use the API key when configured. You'll see a confirmation message in the logs:
✅ OpenDota API key configured (higher rate limits enabled)
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
Install Opendota Server in Claude Desktop, Claude Code & Cursor
unyly install opendota-mcp-serverInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add opendota-mcp-server -- uvx --from git+https://github.com/hkaanengin/opendota-mcp-server opendota-mcp-serverFAQ
Is Opendota Server MCP free?
Yes, Opendota Server MCP is free — one-click install via Unyly at no cost.
Does Opendota Server need an API key?
No, Opendota Server runs without API keys or environment variables.
Is Opendota Server hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Opendota Server in Claude Desktop, Claude Code or Cursor?
Open Opendota Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Opendota Server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
