Valorant MCP Server
Provides access to Valorant game data, including player information, match history, MMR, leaderboards, game content (agents, maps, weapons), and service status, using the HenrikDev unofficial Valorant API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Valorant MCP Servershow MMR for player 'Scream' in EU"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Valorant MCP Server
A Model Context Protocol (MCP) server that provides access to Valorant game data using the unofficial Valorant API.
Features
Player Information: Get account details, MMR, and match history
Match Data: Detailed match information and statistics
Game Content: Agents, maps, weapons, and other game assets
Service Status: Check Valorant service status and maintenance
Leaderboards: Competitive rankings and leaderboards
Related MCP server: MCP Riot Server
Prerequisites
Python 3.11 or higher
A Valorant API key from HenrikDev API
Internet connection for API requests
Installation
Option 1: Run via uvx (Recommended)
No local environment setup required. uvx runs the packaged console script directly.
# Install UV if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh
# Run from GitHub (replace with your repo URL)
uvx --from git+https://github.com/<your-username>/valorant-mcp-server.git valorant-mcp-server
# Windows (PowerShell)
uvx --from git+https://github.com/<your-username>/valorant-mcp-server.git valorant-mcp-serverOptionally set an API key in the environment first (or use the set_api_key tool at runtime):
export VALORANT_API_KEY="your_api_key_here"
uvx --from git+https://github.com/<your-username>/valorant-mcp-server.git valorant-mcp-serverOption 2: Local UV/Pip environment
# Clone and setup
git clone https://github.com/<your-username>/valorant-mcp-server.git
cd valorant-mcp-server
# With UV
uv venv && . .venv/bin/activate # Windows: .venv\Scripts\activate
uv pip install -r requirements.txt
# Or with pip
python -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
# Environment
cp env.example .env # Windows: copy env.example .env
# Edit .env and add your VALORANT_API_KEYUsage
Running the Server
# Recommended: uvx from git
uvx --from git+https://github.com/<your-username>/valorant-mcp-server.git valorant-mcp-server
# Locally (if you've installed deps)
python server.pyNote: The server will start and wait for MCP client connections. It will show a warning if no API key is set, but you can still use the set_api_key tool to configure it at runtime.
Using with MCP Clients
Claude Desktop
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"valorant": {
"command": "uvx",
"args": ["--from", "git+https://github.com/<your-username>/valorant-mcp-server.git", "valorant-mcp-server"],
"env": {
"VALORANT_API_KEY": "your_api_key_here"
}
}
}
}Cline (VS Code Extension)
Add to your Cline configuration:
{
"mcpServers": {
"valorant": {
"command": "uvx",
"args": ["--from", "git+https://github.com/<your-username>/valorant-mcp-server.git", "valorant-mcp-server"],
"env": {
"VALORANT_API_KEY": "your_api_key_here"
}
}
}
}Generic MCP Client
Use the packaged command with uvx:
uvx --from git+https://github.com/<your-username>/valorant-mcp-server.git valorant-mcp-serverAvailable Tools
get_account_details(name, tag, region="na"): Basic account info (PUUID, level, card, region).
get_match_history_by_name(name, tag, region="na", size=10): Recent matches with per-game stats.
get_match_details(match_id, region="na"): Full details for a specific match.
get_mmr_details_by_name(name, tag, region="na"): Current competitive tier, ELO, RR.
get_mmr_history_by_name(name, tag, region="na", size=10): Competitive MMR history with match IDs.
get_lifetime_matches_by_name(name, tag, region="na", mode=None, map_filter=None, page=1, size=20): Aggregate lifetime stats and list of matches.
get_leaderboard(region="na", season="e8a1"): Top players for a region/season.
get_content(region="na"): Agents, maps, and other content.
get_status(region="na"): Service status and incidents.
set_api_key(api_key_input): Set HenrikDev API key at runtime.
get_detailed_competitive_analysis(name, tag, region="na", match_count=10): Correlate MMR history with match stats.
find_leaderboard_position(name, tag, region="na", season="e8a1"): Locate a player on the leaderboard (Immortal 3+).
Testing
You can validate connectivity by launching the server via uvx and connecting from your MCP client (Claude Desktop/Cline/Cursor). Use the get_status and get_content tools to confirm responses.
Configuration
Environment Variables
VALORANT_API_KEY: Your Valorant API key (required)
API Key Setup
You can set your API key in two ways:
Environment Variable: Set
VALORANT_API_KEYin your environmentRuntime: Use the
set_api_keytool to configure it at runtime
Project Structure
valorant-mcp-server/
├── server.py # MCP server implementation (FastMCP)
├── pyproject.toml # Package metadata + console script
├── requirements.txt # Python dependencies (for local installs)
├── env.example # Environment variables template
├── mcp-client-configs.md # Client configuration examples
├── TOOLS_DOCUMENTATION.md # Detailed tool docs
├── LICENSE # MIT License
├── .gitignore # Git ignore file
└── README.md # This fileAPI Integration
This server uses:
HenrikDev API - The core API service for Valorant data
Direct HTTP Requests - Python requests library for API calls
FastMCP - MCP framework
Error Handling
The server includes comprehensive error handling for:
Invalid API keys
Rate limiting
Network errors
Invalid player names or regions
Service unavailability
All errors are logged and returned in a structured format.
Development
Adding New Tools
To add new Valorant API endpoints:
Create a new function decorated with
@mcp.tool()Add proper error handling with try/catch blocks
Use the global
valo_apiinstanceReturn structured data using Pydantic models
Update this README with the new tool documentation
Code Quality
# Install development tools
pip install black isort mypy flake8
# Format code
black server.py test_server.py
isort server.py test_server.py
# Type checking
mypy server.py
# Linting
flake8 server.py test_server.pyContributing
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
License
This project is licensed under the MIT License.
Acknowledgments
Available Tools
12 toolsfind_leaderboard_positionA
Find a player's position on the competitive leaderboard.
Searches leaderboard and provides position + nearby players. Only works for Immortal 3+ players.
Args: name: Player's in-game name tag: Player's tag region: Region code (ap, na, eu, kr, br, latam) season: Season identifier (default: e8a1)
Returns: Leaderboard position, rank, nearby players
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| name | Yes | ||
| region | No | na | |
| season | No | e8a1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosure. It states that the tool performs a search (a read operation) and returns position, rank, and nearby players. It also discloses the constraint that only Immortal 3+ players are supported, which is a key behavioral trait. It doesn't mention authentication or rate limits, but for a simple lookup, the provided information is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-organized. It opens with a one-sentence summary, followed by a brief explanation of behavior, then clearly separated Args and Returns sections. No filler or redundant information is present. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's modest complexity (4 parameters, output schema present), the description covers all essential aspects: what it does, player eligibility, parameter meanings, and return content. The output schema already details return structure, so the description's mention of 'position, rank, nearby players' is sufficient. The description is complete enough for an agent to invoke the tool correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions (0% coverage), but the description fills this gap with an Args block: 'name: Player's in-game name,' 'tag: Player's tag,' 'region: Region code (ap, na, eu, kr, br, latam),' 'season: Season identifier (default: e8a1).' This adds meaningful context beyond the bare schema, including valid region codes and the default for season. It also clarifies the 'tag' parameter, which might otherwise be ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find a player's position on the competitive leaderboard.' It further specifies it 'Searches leaderboard and provides position + nearby players,' distinguishing it from sibling tools like get_leaderboard (which likely returns the full board) and get_mmr_details_by_name (which focuses on MMR). The addition of 'Only works for Immortal 3+ players' narrows the scope, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need a specific player's leaderboard position and nearby players. It also provides a clear exclusion/condition: 'Only works for Immortal 3+ players,' telling the agent that the tool is not suitable for lower-ranked players. While it does not explicitly name alternative tools (e.g., 'use get_leaderboard for the full board'), the context is clear enough for an agent to select correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_detailsA
Get account details for a Valorant player.
Essential tool for getting PUUID and account information.
Args: name: Player's in-game name tag: Player's tag region: Region code (ap, na, eu, kr, br, latam)
Returns: PUUID, account level, player card, region info
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| name | Yes | ||
| region | No | na |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses return values (PUUID, account level, player card, region info) and the required parameters, but does not mention prerequisites like API key setup, rate limits, or error handling. This is adequate but not rich in behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a brief intro, argument explanations, and return list. The phrase 'Essential tool' adds slight promotion but does not waste space. It is front-loaded with the purpose, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and has an output schema, so the description need not detail returns exhaustively. However, it lacks context about when to use versus alternative tools, potential prerequisites (e.g., API key), and any caveats. The description is sufficient for basic understanding but leaves some gaps for a fully informed decision.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by explaining each parameter: name is the player's in-game name, tag is the player's tag, and region includes a list of codes (ap, na, eu, kr, br, latam). This goes beyond the schema's bare property names and adds useful meaning, though it does not specify the tag format or default region.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get account details for a Valorant player' and specifies the purpose as obtaining PUUID and account information. It distinguishes this tool from sibling tools like match history or MMR tools by focusing on account-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description emphasizes this as the 'essential tool for getting PUUID,' implying it is the go-to for account identification. It does not explicitly list alternatives or exclusions, but the context of sibling tools and the stated purpose provides clear guidance for typical usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contentC
Get game content (agents, maps, weapons).
Essential for understanding game elements.
Args: region: Region code (ap, na, eu, kr, br, latam)
Returns: All agents, maps, and game content
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | na |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only says it returns content. It does not explicitly state it is read-only, mention authentication requirements, rate limits, or any side effects. 'Get' implies reading but lacks explicit safety/reversibility information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with purpose, but it is redundant: 'Get game content' is echoed in 'Returns: All agents, maps, and game content', and the 'Essential' sentence is filler. No critical information is wasted, but polish is lacking.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter, the description is incomplete: it lacks usage context (e.g., prerequisites like API key), behavioral notes, or clarification of regional differences. The output schema exists, but the description redundantly restates return values instead of addressing gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description only lists region values (ap, na, eu, kr, br, latam) without explaining how region affects the response or the parameter's optionality. It adds minimal value beyond the schema's default value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets game content (agents, maps, weapons), using a specific verb and resource. It is distinct from sibling tools that focus on player/match data, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only vaguely says 'Essential for understanding game elements' without explaining when to prefer this tool over alternatives or any exclusions. No explicit guidance is given versus sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_detailed_competitive_analysisA
Get comprehensive competitive analysis by combining MMR history + match details.
This is the most powerful tool for competitive insights. Combines two different API endpoints to correlate performance with MMR changes.
Args: name: Player's in-game name tag: Player's tag region: Region code (ap, na, eu, kr, br, latam) match_count: Number of matches to analyze (default: 10, max: 20)
Returns: Detailed competitive matches with performance + MMR correlation
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| name | Yes | ||
| region | No | na | |
| match_count | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that it combines two API endpoints and imposes a max match_count, adding some behavioral context. However, it does not mention prerequisites like needing an API key, rate limits, or explicitly state it is read-only, which are important details for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise, with a clear intro, Args, and Returns structure. The claim 'most powerful tool' is somewhat promotional but not excessive. Each section earns its place, though the promotional line could be removed without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (combining two endpoints) and the presence of an output schema, the description covers the return value but omits key operational context: it doesn't mention authentication requirements (set_api_key sibling exists), potential latency or rate limits, or how 'performance' is defined. This leaves gaps for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides per-parameter explanations: name, tag, region (with valid codes), and match_count (with default and max). This compensates well for the schema's lack of descriptions, though it leaves minor details like tag format unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Get comprehensive competitive analysis by combining MMR history + match details.' It clearly identifies the resource (competitive analysis) and the method (combining two endpoints), distinguishing it from siblings like get_mmr_history_by_name and get_match_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by noting it correlates performance with MMR changes and calls itself 'the most powerful tool for competitive insights.' However, it does not explicitly mention when not to use it or alternatives, falling short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leaderboardA
Get the competitive leaderboard for a region.
Shows top players in region/season.
Args: region: Region code (ap, na, eu, kr, br, latam) season: Season identifier (default: e8a1)
Returns: List of top players with rankings and ratings
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | na | |
| season | No | e8a1 |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral transparency burden. It clearly discloses the return value ('List of top players with rankings and ratings') and the args/format, but does not mention potential errors, rate limits, or read-only confirmation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with Args and Returns sections. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple leaderboard-fetching tool with two optional parameters and a clear output schema, the description covers inputs, defaults, and return shape completely. No critical context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates by listing valid region codes (ap, na, eu, kr, br, latam) and the season default (e8a1). It does not explain the season format or meaning of the default value, but provides enough for basic usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' with a clear resource: 'competitive leaderboard for a region'. It further specifies scope with 'region/season', distinguishing it from sibling tools like get_account_details or get_detailed_competitive_analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by stating it returns top players for a region/season, but it does not explicitly say when to use this tool versus alternatives like find_leaderboard_position or get_detailed_competitive_analysis, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lifetime_matches_by_nameA
Get lifetime match statistics (different API endpoint).
Provides aggregate lifetime stats and match history.
Args: name: Player's in-game name tag: Player's tag region: Region code (ap, na, eu, kr, br, latam) mode: Optional game mode filter map_filter: Optional map filter page: Page number (default: 1) size: Matches per page (default: 20)
Returns: Lifetime stats and match list
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| mode | No | ||
| name | Yes | ||
| page | No | ||
| size | No | ||
| region | No | na | |
| map_filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behaviors. It states it returns 'Lifetime stats and match list' and mentions a 'different API endpoint,' but it does not explain pagination behavior, rate limits, authentication requirements, or explicitly confirm it is read-only (though 'Get' implies it).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an Args section and a Returns line. However, the first two sentences are slightly redundant: 'Get lifetime match statistics (different API endpoint)' and 'Provides aggregate lifetime stats and match history' convey similar information. Otherwise, it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 params) and the presence of an output schema, the description covers all parameters and the return type. It lacks guidance on valid values for mode and map_filter, but this is not critical since the output schema exists and the parameters are documented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. The Args section thoroughly explains all 7 parameters, including region codes (ap, na, eu, kr, br, latam), optional filters, and defaults for page and size. This adds significant meaning beyond the schema's bare types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get lifetime match statistics' and 'Provides aggregate lifetime stats and match history.' It distinguishes itself by noting it is a 'different API endpoint,' but it does not explicitly name or contrast with sibling tools like get_match_history_by_name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_match_history_by_name or get_account_details. The description only explains what the tool does, not the context in which it should be chosen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_match_detailsA
Get detailed information about a specific match.
Provides comprehensive match data including all players' stats.
Args: match_id: Match identifier region: Region code (ap, na, eu, kr, br, latam)
Returns: Match details with all players, rounds, scores
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | na | |
| match_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the burden. It discloses return contents (players, rounds, scores) but does not mention potential errors, rate limits, or that it's a read-only operation. This is basic coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The tool description is compact, with a clear one-sentence summary followed by concise argument and return sections. There is minimal redundancy despite duplicating schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
As a simple two-parameter lookup with an output schema, the description provides sufficient context about inputs and expected return data. It lacks explicit default-value information for region, but that is available in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has no descriptions, so the description compensates by defining match_id as 'Match identifier' and region as 'Region code' with a list of possible values. However, 'Match identifier' adds little beyond the parameter name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Get') and resource ('detailed information about a specific match'), distinguishing it from sibling tools like match history or MMR lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving one match's details but does not explicitly contrast with alternatives like get_match_history_by_name or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_match_history_by_nameA
Get recent match history for a player.
Returns matches across all game modes with detailed stats.
Args: name: Player's in-game name tag: Player's tag region: Region code (ap, na, eu, kr, br, latam) size: Number of matches (default: 10, max: 20)
Returns: List of matches with kills, deaths, assists, agents, maps, scores
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| name | Yes | ||
| size | No | ||
| region | No | na |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return format (list of matches with kills, deaths, assists, agents, maps, scores) and scope (all game modes), which is helpful. However, it does not mention potential errors, pagination, rate limits, or any side effects (though this is a read operation). The transparency is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a concise one-sentence summary followed by clearly labeled Args and Returns sections. Every sentence adds value, and the format is easy to parse. It is appropriately sized and front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 params, 2 required, output schema present), the description adequately covers parameter semantics and return values. It does not explain failure modes or API-specific behaviors, but for a simple read operation with an output schema, it is sufficiently complete. Minor gaps like region validation or pagination are not catastrophic.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, forcing the description to compensate. It does so effectively by providing explicit meanings for each parameter: 'name: Player's in-game name', 'tag: Player's tag', 'region: Region code (ap, na, eu, kr, br, latam)', and 'size: Number of matches (default: 10, max: 20)'. This adds critical semantics beyond the bare types in the schema, including enum-like values and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('recent match history for a player'). It adds 'across all game modes with detailed stats', which differentiates it from sibling tools like get_lifetime_matches_by_name (lifetime history) and get_match_details (specific match).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context ('recent', 'all game modes') but does not explicitly state when to use this tool versus alternatives like get_lifetime_matches_by_name or get_match_details. There are no explicit exclusions or alternative recommendations, leaving the agent to infer usage from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mmr_details_by_nameA
Get current MMR and rank for a player.
Provides current competitive standing.
Args: name: Player's in-game name tag: Player's tag region: Region code (ap, na, eu, kr, br, latam)
Returns: Current rank, ELO, RR, last game MMR change
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| name | Yes | ||
| region | No | na |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It does describe the return values (rank, ELO, RR, last game MMR change), which is useful, but it does not mention error handling, API key requirements (despite a sibling set_api_key), or rate limits. It is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description uses a clear Args/Returns structure and is appropriately sized, but the sentence 'Provides current competitive standing' is redundant with the opening line. It does not add substantial new information, preventing a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter tool, the description provides all parameter semantics and return fields. It also distinguishes 'current' from historical/detailed siblings. However, it omits potential failure modes (e.g., player not found, invalid region) and does not mention any required setup like an API key. These gaps keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter: name, tag, and region with valid codes (ap, na, eu, kr, br, latam). This adds meaningful context beyond the schema's types and default values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Get current MMR and rank for a player' with a specific verb and resource, and the phrase 'current competitive standing' distinguishes it from historical or detailed analysis tools. This is a clear, specific purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for current MMR/rank, but it does not explicitly state when to use it versus alternatives like get_mmr_history_by_name or get_detailed_competitive_analysis. There is no 'when to use' or 'instead of' guidance, only implied context from the word 'current.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mmr_history_by_nameA
Get MMR history with match IDs and maps.
Essential for competitive analysis - includes match IDs for each game!
Args: name: Player's in-game name tag: Player's tag region: Region code (ap, na, eu, kr, br, latam) size: Number of history entries (default: 10, max: 20)
Returns: MMR history with match IDs, maps, rank changes, dates
| Name | Required | Description | Default |
|---|---|---|---|
| tag | Yes | ||
| name | Yes | ||
| size | No | ||
| region | No | na |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explains the return content (MMR history with match IDs, maps, rank changes, dates) and mentions size limits (max 20), but does not explicitly confirm read-only behavior, auth requirements, rate limits, or error handling. The description is adequate but not deeply transparent about side effects or constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an opening sentence, a usage note, clearly labeled Args, and Returns. It is slightly verbose with the exclamatory 'Essential for competitive analysis' line, but every other sentence adds value. The front-loaded core sentence allows quick understanding without excessive length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description is not required to detail return values, yet it still summarizes the key return fields. All four parameters are described, required fields are clear, and the tool is simple. It could benefit from mentioning error behaviors or prerequisites, but for a read-only history getter, the context is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter: name and tag are player identifiers, region lists valid codes, and size includes default and max. This adds significant meaning beyond the raw schema, especially the region enum values and size constraints, though the tag format (e.g., case sensitivity) is not detailed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Get MMR history with match IDs and maps' with a specific verb and resource. It distinguishes itself from sibling tools like get_mmr_details_by_name (which likely provides current MMR) by focusing on historical data with match IDs. The phrase 'Essential for competitive analysis' adds context without vagueness.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for competitive analysis and specifies the tool retrieves MMR history, but it does not explicitly state when to use this versus sibling tools like get_mmr_details_by_name or get_match_history_by_name. There are no exclusions or alternative tool recommendations, making the guidance implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusA
Get Valorant service status.
Checks for maintenance and incidents.
Args: region: Region code (ap, na, eu, kr, br, latam)
Returns: Service status, maintenance windows, incidents
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | na |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool returns but does not mention whether an API key is required, potential rate limits, or that it is a read-only operation. 'Get' implies non-destructive, but this is not explicit, and error/empty-response behavior is not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: one-line purpose, a short explanatory sentence, and clean Args/Returns sections. Every sentence contributes to understanding the tool's purpose and parameter, with no wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter, the description covers what it does, the parameter, and the return categories ('Service status, maintenance windows, incidents'). The output schema exists separately, so the description need not detail the return structure. There are no significant gaps for a status-check utility.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0%, but the description lists valid region code values (ap, na, eu, kr, br, latam), adding essential semantic detail beyond the schema. It does not specify that 'region' has a default of 'na' or is optional, but the schema supplies that, and the description compensates for the schema's lack of documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get Valorant service status' and 'Checks for maintenance and incidents,' which is specific and distinguishes this tool from sibling tools focused on player data (account, match history, MMR, leaderboard). It names the exact resource (Valorant service status) and the scope (maintenance and incidents).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for status checks but does not explicitly say when to use it versus alternatives. There is no mention of exclusions or preference relative to sibling tools. The phrase 'Checks for maintenance and incidents' provides context but no direct guidance on when to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_api_keyA
Set the API key for Valorant API requests.
Required for authentication.
Args: api_key_input: Your HenrikDev API key
Returns: Confirmation message
| Name | Required | Description | Default |
|---|---|---|---|
| api_key_input | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states that it sets the API key and returns a confirmation message, which is basic behavior. However, it does not disclose whether the key is persisted, overwritten on subsequent calls, or held only in memory, nor does it mention any security implications. For a simple setter, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, front-loaded with the purpose, and uses a clean Args/Returns structure. Every sentence adds value with no redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, one parameter, and an output schema (confirmation message), the description covers purpose, authentication context, parameter meaning, and return value. It lacks only minor behavioral details like persistence or session scope, but overall it is complete for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter with 0% description coverage, but the description fully compensates by explaining 'api_key_input' as 'Your HenrikDev API key', adding meaning beyond the parameter name. This is sufficient for the single-parameter case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Set the API key for Valorant API requests' clearly states the specific verb ('Set') and resource ('API key for Valorant API requests'), which distinguishes it from the sibling tools that all retrieve data. It is immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Required for authentication' indicates that this tool must be used before making other API requests, providing clear usage context. It does not explicitly name alternatives, but the sibling tools are all getters, making this the only setter, so the usage is effectively implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
find_leaderboard_position - First observed
get_account_details - First observed
get_content - First observed
get_detailed_competitive_analysis - First observed
get_leaderboard - First observed
get_lifetime_matches_by_name - First observed
get_match_details - First observed
get_match_history_by_name - First observed
get_mmr_details_by_name - First observed
get_mmr_history_by_name - First observed
get_status - First observed
set_api_key
TDQS
Scored across 12 tools
Most tools target distinct resources/actions. There is slight overlap between get_match_history_by_name and get_lifetime_matches_by_name, but descriptions clarify the difference (recent vs lifetime aggregate). Otherwise, tools are clearly distinct.
Predominantly uses get_<resource>_<detail> pattern with consistent snake_case. Minor deviations with set_api_key and find_leaderboard_position, but overall the pattern is predictable.
12 tools is well-scoped for a Valorant stats API, covering accounts, matches, MMR, leaderboard, content, status, and auth. No redundancy.
The tool surface is comprehensive for read-only stat retrieval: account, recent/lifetime matches, match details, MMR details/history, leaderboard access, content, status, and a composite analysis tool. No obvious dead ends; all tools connect (e.g., MMR history returns match IDs for match details).
Maintenance
Related MCP Connectors
VALORANT reference data MCP (valorant-api.com).
BGG MCP provides access to the BoardGameGeek API through the Model Context Protocol, enabling retr…
Model Context Protocol server for Studex tools, notifications, and profile integrations
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides Formula One data and statistics through a Model Context Protocol interface, allowing users to access race calendars, session results, driver statistics, telemetry data, and championship standings.811MIT
- AlicenseBqualityCmaintenanceA community-developed Model Context Protocol server that integrates with the Riot Games API to provide League of Legends data, enabling AI assistants to retrieve player information, ranked stats, champion mastery, and match summaries through natural language queries.527MIT

OP.GG MCP Serverofficial
AlicenseBqualityDmaintenanceA Model Context Protocol implementation that enables AI agents to retrieve game data from OP.GG for League of Legends, Teamfight Tactics, Valorant, and esports through function calling.24102MIT- AlicenseBqualityDmaintenanceEnables access to MLB Stats API data including game schedules, results, team information, and player lookups with fuzzy matching support through the Model Context Protocol.37MIT