Skip to main content
Glama
drewsungg

Pokemon Showdown MCP Server

by drewsungg

mcpkmn-showdown

PyPI version License: MIT Python 3.10+ MCP

An MCP server that gives AI assistants complete knowledge of competitive Pokemon.

Give Claude (or any MCP-compatible LLM) instant access to Pokemon stats, moves, abilities, items, and type matchups—no API keys, no rate limits, works offline.

Claude Desktop using mcpkmn-showdown


Why This Exists

Without this MCP server, getting accurate Pokemon battle data into an LLM is painful:

  • Hallucination city — LLMs frequently make up stats, forget abilities, or miscalculate type matchups

  • No structured data — You're stuck copy-pasting from Bulbapedia or Serebii

  • Can't build agents — No programmatic way for an AI to query battle mechanics

With mcpkmn-showdown:

  • Zero hallucination — Data comes directly from Pokemon Showdown, the competitive standard

  • Structured responses — Tools return formatted data ready for reasoning

  • Agent-ready — Build bots that analyze replays, suggest teams, or play battles


Related MCP server: Pokémon MCP Server

Quickstart (5 minutes)

1. Install

pip install mcpkmn-showdown

2. Configure Claude Desktop

Add to your config file:

OS

Path

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "pokemon": {
      "command": "mcpkmn-showdown"
    }
  }
}

3. Restart Claude Desktop

4. Try it

Ask Claude: "What's the best ability for Garchomp and why?"


What You Can Do

Here are concrete workflows this MCP enables:

Workflow

Example Prompt

Team Analysis

"Analyze this team's type coverage and suggest improvements"

Matchup Calc

"Is Choice Scarf Garchomp fast enough to outspeed Dragapult?"

Set Building

"Build a Trick Room sweeper that can handle Fairy types"

Replay Analysis

"What went wrong in this battle? [paste replay log]"

Learning

"Explain how Intimidate affects damage calculations"


API Reference

Tools Overview

Tool

Purpose

Key Input

get_pokemon

Pokemon stats, types, abilities

name: string

get_move

Move power, accuracy, effects

name: string

get_ability

What an ability does in battle

name: string

get_item

Held item effects

name: string

get_type_effectiveness

Damage multiplier calculation

attack_type, defend_types

search_priority_moves

Find priority moves

min_priority: int

search_pokemon_by_ability

Pokemon with a specific ability

ability: string

list_dangerous_abilities

Battle-critical abilities by category

category: string

get_smogon_usage

Top Pokemon by usage in a format

format: string

get_smogon_sets

Competitive sets (moves, items, EVs)

pokemon, format

get_pokemon_counters

What checks/counters a Pokemon

pokemon, format

get_pokemon_teammates

Best teammates by co-occurrence

pokemon, format

search_pokemon_by_stat

Filter Pokemon by base stats

stat, min_value, max_value

search_moves_by_effect

Find moves by strategic category

effect: string

get_format_info

Format rules and meta characteristics

format: string


get_pokemon

Look up complete Pokemon data.

Schema:

{
  "name": "string" // Pokemon name (e.g., "garchomp", "Mega Charizard X")
}

Example:

Input:  {"name": "garchomp"}
Output:
  Garchomp
  Types: Ground/Dragon
  Stats: HP 108 | Atk 130 | Def 95 | SpA 80 | SpD 85 | Spe 102
  Abilities: Sand Veil / Rough Skin (Hidden)
  Weight: 95 kg
  Tier: OU

get_move

Look up move details including effects and priority.

Schema:

{
  "name": "string" // Move name (e.g., "earthquake", "swords-dance")
}

Example:

Input:  {"name": "earthquake"}
Output:
  Earthquake
  Type: Ground | Category: Physical
  Power: 100 | Accuracy: 100%
  PP: 10 | Priority: 0
  Effect: Hits all adjacent Pokemon. Double damage on Dig.

get_ability

Look up what an ability does in battle.

Schema:

{
  "name": "string" // Ability name (e.g., "levitate", "protean")
}

Example:

Input:  {"name": "protean"}
Output:
  Protean: This Pokemon's type changes to match the type of the move
  it is about to use. This effect comes after all effects that change
  a move's type.

get_item

Look up held item battle effects.

Schema:

{
  "name": "string" // Item name (e.g., "choice-scarf", "leftovers")
}

Example:

Input:  {"name": "choice-scarf"}
Output:
  Choice Scarf: Holder's Speed is 1.5x, but it can only use the first
  move it selects.

get_type_effectiveness

Calculate type matchup multipliers.

Schema:

{
  "attack_type": "string", // Attacking type (e.g., "electric")
  "defend_types": ["string"] // Defending types (e.g., ["water", "flying"])
}

Example:

Input:  {"attack_type": "electric", "defend_types": ["water", "flying"]}
Output: 4x - Super effective!

search_priority_moves

Find moves that act before normal speed order.

Schema:

{
  "min_priority": 1 // Minimum priority level (default: 1)
}

Example:

Input:  {"min_priority": 1}
Output:
  +1 Priority: Aqua Jet, Bullet Punch, Ice Shard, Mach Punch,
               Quick Attack, Shadow Sneak, Sucker Punch...
  +2 Priority: Extreme Speed, Feint...
  +3 Priority: Fake Out...

search_pokemon_by_ability

Find all Pokemon with a specific ability.

Schema:

{
  "ability": "string" // Ability name (e.g., "intimidate")
}

Example:

Input:  {"ability": "levitate"}
Output: Azelf, Bronzong, Cresselia, Eelektross, Flygon, Gengar,
        Hydreigon, Latias, Latios, Mismagius, Rotom, Uxie, Vikavolt...

list_dangerous_abilities

List abilities that significantly impact battle outcomes.

Schema:

{
  "category": "string" // One of: immunity, defense, reflect, offense,
  // priority, contact, or "all"
}

Categories:

  • immunity — Levitate, Flash Fire, Volt Absorb, Water Absorb, etc.

  • defense — Multiscale, Fur Coat, Fluffy, Marvel Scale, etc.

  • reflect — Magic Bounce

  • offense — Huge Power, Pure Power, Gorilla Tactics, etc.

  • priority — Prankster, Gale Wings

  • contact — Rough Skin, Iron Barbs, Flame Body, Static, etc.


get_smogon_usage

Get the most-used Pokemon in a competitive format from Smogon stats.

Schema:

{
  "format": "string",  // Format ID (e.g., "gen9ou", "gen9vgc2025")
  "top_n": 20          // Number of results (default: 20)
}

Example:

Input:  {"format": "gen9ou", "top_n": 5}
Output:
  1. Great Tusk (usage count: 619,002) — Top moves: Rapid Spin, Headlong Rush, Ice Spinner
  2. Darkrai (usage count: 500,000) — Top moves: Dark Void, Dark Pulse
  ...

get_smogon_sets

Get competitive sets for a specific Pokemon: moves, items, abilities, EV spreads, Tera types, and teammates.

Schema:

{
  "pokemon": "string",  // Pokemon name (e.g., "Great Tusk")
  "format": "string"    // Format ID (e.g., "gen9ou")
}

get_pokemon_counters

Get what checks and counters a Pokemon in competitive play, with KO and switch-out rates.

Schema:

{
  "pokemon": "string",  // Pokemon name
  "format": "string"    // Format ID
}

get_pokemon_teammates

Get the best teammates for a Pokemon based on co-occurrence in competitive teams.

Schema:

{
  "pokemon": "string",  // Pokemon name
  "format": "string"    // Format ID
}

search_pokemon_by_stat

Find Pokemon filtered by base stat ranges. Useful for building teams around specific stat requirements (e.g., slow Pokemon for Trick Room, fast sweepers, bulky walls).

Schema:

{
  "stat": "string",     // Stat: "hp", "atk", "def", "spa", "spd", "spe"
  "min_value": 0,       // Minimum value (default: 0)
  "max_value": 999,     // Maximum value (default: 999)
  "types": ["string"],  // Optional type filter
  "tier": "string"      // Optional tier filter (e.g., "OU")
}

Example:

Input:  {"stat": "spe", "max_value": 30, "types": ["Steel"]}
Output: Ferrothorn (Grass/Steel, Spe: 20), Stakataka (Rock/Steel, Spe: 13), ...

search_moves_by_effect

Find moves by strategic category for team building.

Schema:

{
  "effect": "string",    // Category (see below)
  "move_type": "string"  // Optional type filter
}

Categories: spread, priority, recovery, setup, hazard, hazard_removal, weather, terrain, screen, pivot, speed_control, redirection, protect


get_format_info

Get rules, clauses, bans, and meta characteristics for a competitive format.

Schema:

{
  "format": "string"  // Format name (e.g., "gen9ou", "gen9vgc2025")
}

Supported formats: gen9ou, gen9uu, gen9ubers, gen9vgc2025, gen9doublesou, gen9randombattle


Architecture

┌─────────────────┐     ┌─────────────────────┐     ┌──────────────────┐
│                 │     │                     │     │                  │
│  Claude/LLM     │────▶│  mcpkmn-showdown    │────▶│  Local JSON      │
│                 │ MCP │  (MCP Server)       │     │  Cache           │
│                 │◀────│                     │◀────│                  │
└─────────────────┘     └─────────────────────┘     └──────────────────┘
                                                            │
                                                            │ (manual update)
                                                            ▼
                                                    ┌──────────────────┐
                                                    │  Pokemon         │
                                                    │  Showdown        │
                                                    │  Data Files      │
                                                    └──────────────────┘

Why MCP?

LLMs hallucinate Pokemon data — wrong stats, forgotten abilities, botched type calculations. MCP tools let the model query authoritative data instead of guessing from training.

Why local JSON instead of connecting to Pokemon Showdown?

Pokemon Showdown doesn't have a REST API. Their data is served as minified JavaScript for their web client. Connecting live would mean parsing JS on every query, network latency, rate limiting concerns, and breaking if they change formats.

Approach

Tradeoff

Local JSON

Instant, offline, reliable — but data can go stale

Live connection

Always fresh — but slow, fragile, requires internet

For reference data (stats, moves, abilities), local is the right call. The data only changes with new games/DLC. Smogon usage stats are fetched live on first request and cached for 30 days (stats update monthly).

Data sources:

  • Pokemon Showdownpokedex.json, moves_showdown.json, abilities_full.json, items.json, typechart.json

  • Smogon Stats — Usage statistics, movesets, teammates, counters (fetched on demand, cached locally)

To refresh the static data: python -m mcpkmn_showdown.data_fetcher


Safety & Limits

Concern

How It's Handled

Rate limits

None — all data is local, no external API calls

Data freshness

Ships with latest Showdown data; manually updateable

Input validation

Names normalized and validated before lookup

Error handling

Returns helpful "not found" messages, never crashes

Credential handling

No credentials needed, no auth, no API keys


Roadmap

Planned features:

  • Live battle integration (connect to a running Showdown battle)

  • Team import/export (paste Showdown format, get structured data)

  • Damage calculator integration

  • Format-specific tier lists and banlists (get_format_info)

  • Usage statistics from Smogon (get_smogon_usage, get_smogon_sets)

Help wanted — good first issues:

  • Add search_pokemon_by_type tool

  • Improve form normalization (regional forms, Gigantamax, etc.)

  • Add more test coverage

  • Support more formats in get_format_info

See CONTRIBUTING.md for how to get started.


Contributing

See CONTRIBUTING.md for full guidelines. Quick start:

git clone https://github.com/drewsungg/mcpkmn-showdown.git
cd mcpkmn-showdown
pip install -e ".[dev]"
pytest                    # Run tests
npx @modelcontextprotocol/inspector mcpkmn-showdown  # Interactive testing

MCP Inspector


I Want Your Feedback!

If you try this out, please let me know:

  1. Is the tool naming/schema intuitive for an agent? Would different boundaries help?

  2. What's missing for your use case? Teambuilding? Laddering? Replay analysis? Eval harness?

  3. Any security/abuse concerns? Anything that could be misused?

  4. Does it behave well under load? Concurrent requests? Long sessions?

Open an issue or reach out: @drewsungg



License

MIT License — see LICENSE for details.

Author

Andrew Sung

Available Tools

8 tools
get_abilityC

Look up an ability by name. Returns full description of what the ability does in battle.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesAbility name (e.g., 'truant', 'intimidate', 'levitate')

TDQS

C2.9/5.0
Behavior2/5

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 mentions the return content but doesn't cover critical aspects like error handling (e.g., what happens if the ability name is invalid), performance characteristics, or authentication needs. This leaves significant gaps for a lookup tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('look up an ability by name') and adds necessary detail about the return value. There's no wasted text, though it could be slightly more structured for clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and return value but lacks details on usage context, error behavior, or output format, which would be helpful for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, fully documenting the single 'name' parameter with examples. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage without extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 ('look up') and resource ('ability by name'), and specifies the return value ('full description of what the ability does in battle'). It doesn't explicitly distinguish from siblings like 'list_dangerous_abilities' or 'search_pokemon_by_ability', but the focus on individual ability lookup is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose 'get_ability' over sibling tools like 'list_dangerous_abilities' or 'search_pokemon_by_ability', nor does it specify prerequisites or exclusions for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_itemB

Look up a held item by name. Returns full description of what the item does in battle.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesItem name (e.g., 'choice-scarf', 'leftovers', 'life-orb')

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool returns a 'full description' but does not clarify format, length, or potential errors (e.g., if the item name is invalid). For a read operation with no annotations, this leaves gaps in understanding how the tool behaves in practice.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with zero waste: the first states the action and resource, and the second specifies the return value. It is front-loaded with the core purpose and efficiently conveys necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter, no output schema, no annotations), the description is minimally complete. It covers the purpose and return type but lacks details on behavioral traits and usage guidelines. For a simple lookup tool, this is adequate but leaves room for improvement in guiding the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the input schema already documents the 'name' parameter with examples. The description adds no additional semantic context beyond what the schema provides, such as formatting constraints or case sensitivity. Baseline 3 is appropriate when the schema handles parameter documentation adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 ('Look up') and resource ('held item by name'), and distinguishes it from siblings by focusing on items rather than abilities, moves, or Pokémon. It explicitly mentions what the tool returns ('full description of what the item does in battle'), which adds clarity beyond just retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'get_ability' or 'get_move', nor does it specify scenarios where looking up an item is preferable to other queries. The usage context is implied but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_moveC

Look up a move by name. Returns power, accuracy, type, category, priority, effects, and full description.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesMove name (e.g., 'thunderbolt', 'earthquake', 'swords-dance')

TDQS

C2.9/5.0
Behavior2/5

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 the return data (power, accuracy, etc.) but lacks details on error handling, rate limits, authentication needs, or whether it's a read-only operation. This leaves significant gaps for a tool that likely queries a database or API.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, stating the core action and return data in one efficient sentence. It avoids unnecessary words, though it could be slightly more structured by separating lookup purpose from return details for even clearer readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (single parameter, no output schema, no annotations), the description is minimally adequate. It covers the basic purpose and return data but lacks completeness in behavioral aspects like error cases or usage context, which would be helpful for an agent to operate effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, clearly documenting the single required parameter 'name' with examples. The description adds no additional parameter semantics beyond implying it's for move lookup, so it meets the baseline of 3 where the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 ('Look up') and resource ('a move by name'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'search_priority_moves' or 'get_type_effectiveness', which might also involve move-related queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'search_priority_moves' for filtering moves by priority or 'get_type_effectiveness' for type-related data, leaving the agent to infer usage context without explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pokemonA

Look up a Pokemon by name. Returns base stats, types, abilities with descriptions, weight, and competitive tier.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPokemon name (e.g., 'pikachu', 'slaking', 'charizard')

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the return content (base stats, types, etc.), which adds behavioral context beyond the input schema. However, it lacks details on error handling, rate limits, authentication needs, or whether the lookup is case-sensitive. The description adds some value but does not fully compensate for the absence of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core action ('Look up a Pokemon by name') and efficiently lists the returned attributes. Every part of the sentence adds value without redundancy, making it appropriately sized and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (one parameter, no annotations, no output schema), the description is reasonably complete. It specifies what the tool does and what it returns, which is sufficient for a simple lookup operation. However, without an output schema, it could benefit from more detail on the return structure, but the listed attributes provide adequate context for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the single parameter 'name,' providing examples like 'pikachu.' The description does not add further parameter details beyond what the schema already states. With high schema coverage and only one parameter, the baseline is high, and the description does not detract, but it also does not enhance parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Look up a Pokemon by name') and resource ('Pokemon'), distinguishing it from sibling tools like get_ability, get_item, or search_pokemon_by_ability. It specifies the exact scope of what is retrieved (base stats, types, abilities with descriptions, weight, competitive tier), making the purpose unambiguous and distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating 'Look up a Pokemon by name,' which suggests this tool is for retrieving details of a specific Pokemon. However, it does not explicitly state when to use this versus alternatives like search_pokemon_by_ability or list_dangerous_abilities, nor does it provide exclusions or prerequisites. The guidance is present but limited to implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_type_effectivenessB

Calculate type effectiveness multiplier for an attack against a Pokemon's types.

ParametersJSON Schema
NameRequiredDescriptionDefault
attack_typeYesThe attacking move's type (e.g., 'electric', 'fire')
defend_typesYesList of the defending Pokemon's types (e.g., ['water', 'flying'])

TDQS

B3.1/5.0
Behavior2/5

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 the tool 'calculates' a multiplier, implying a read-only operation, but doesn't specify if it's based on game mechanics, returns a numeric value, or handles edge cases like dual types. This is a significant gap for a tool with no structured safety hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without any wasted words. It directly states what the tool does, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (calculating type interactions) and lack of annotations or output schema, the description is minimally adequate. It covers the basic purpose but fails to explain the calculation method, return format, or error handling, leaving gaps that could hinder effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the input schema already fully documents the two parameters (attack_type and defend_types) with clear examples. The description doesn't add any additional meaning beyond what's in the schema, such as explaining type validity or format constraints, but this is acceptable given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 ('calculate') and resource ('type effectiveness multiplier'), making it immediately understandable. However, it doesn't explicitly differentiate this tool from its siblings like 'get_move' or 'get_pokemon', which might also involve type-related calculations, so it doesn't reach the highest score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention if this is for battle simulations, data analysis, or other contexts, nor does it reference sibling tools like 'get_move' that might overlap in functionality. This leaves the agent without clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_dangerous_abilitiesC

List abilities that can significantly affect battle outcomes (immunities, damage reduction, status reflection, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoCategory of abilities: 'immunity' (type immunities), 'defense' (damage reduction), 'reflect' (status reflection), 'offense' (damage boosts), 'priority' (move order), 'all' (default)all

TDQS

C2.9/5.0
Behavior2/5

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 mentions what types of abilities are listed ('immunities, damage reduction, status reflection, etc.') but doesn't describe the return format (e.g., list structure, fields included), pagination, rate limits, or authentication needs. For a listing tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose ('List abilities that can significantly affect battle outcomes') and provides clarifying examples. There's no wasted text, though it could be slightly more structured by explicitly mentioning the parameter or output.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (listing with filtering), no annotations, and no output schema, the description is minimally adequate. It covers the purpose and hints at scope through examples, but lacks details on return values, error handling, or behavioral constraints, which are important for a tool with no structured output or annotation support.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description doesn't add any parameter-specific information beyond what's already in the input schema, which has 100% coverage for the single parameter 'category'. The schema's description fully documents the parameter's purpose, possible values, and default. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but doesn't need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List abilities that can significantly affect battle outcomes' with specific examples (immunities, damage reduction, status reflection). It uses a specific verb ('List') and identifies the resource ('abilities'), but doesn't explicitly distinguish it from sibling tools like 'get_ability' or 'search_pokemon_by_ability' beyond the listing focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'get_ability' (which might retrieve details about a specific ability) or 'search_pokemon_by_ability' (which might find Pokémon with certain abilities), leaving the agent to infer usage context without explicit direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_pokemon_by_abilityC

Find all Pokemon that can have a specific ability.

ParametersJSON Schema
NameRequiredDescriptionDefault
abilityYesAbility name to search for

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden but offers minimal behavioral insight. It implies a read-only search operation but doesn't disclose critical details like whether the search is case-sensitive, if it returns partial matches, what format the results take (e.g., list of names or full objects), or any rate limits. For a search tool with zero annotation coverage, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with zero wasted words. It's front-loaded with the core purpose and efficiently conveys the essential function without unnecessary elaboration, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for effective use. It doesn't explain what the tool returns (e.g., Pokemon names, IDs, or full details), how results are structured, or any limitations (e.g., max results). For a search tool with no structured output documentation, this leaves the agent guessing about the response format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'ability' parameter clearly documented. The description adds marginal value by reinforcing that the search is based on 'a specific ability', but doesn't provide additional semantics like valid ability names, examples, or search behavior (e.g., exact vs. substring matching). Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 ('Find') and resource ('Pokemon'), and specifies the search criterion ('that can have a specific ability'). It distinguishes itself from generic 'get_pokemon' by focusing on ability-based filtering. However, it doesn't explicitly differentiate from 'list_dangerous_abilities' which might have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'get_pokemon' (which might retrieve individual Pokemon data) or 'list_dangerous_abilities' (which might list abilities rather than Pokemon). There's no mention of prerequisites, exclusions, or comparative contexts with sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_priority_movesB

Find all moves with priority (moves that go before normal moves). Useful for finding options when you need to outspeed an opponent.

ParametersJSON Schema
NameRequiredDescriptionDefault
min_priorityNoMinimum priority value (default 1)

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool finds moves but doesn't describe how results are returned (e.g., list format, pagination), potential limitations (e.g., rate limits, authentication needs), or what 'all moves' entails (e.g., completeness, filtering). The description adds minimal behavioral context beyond the basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with two sentences that directly address purpose and usage. Every sentence adds value: the first defines the tool's function, and the second provides context. There's no wasted text, though it could be slightly more structured (e.g., bullet points).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is minimally complete. It covers the basic purpose and a usage hint but lacks details on behavioral traits, output format, or integration with sibling tools. Without annotations or output schema, the description should do more to compensate, but it's adequate for a simple search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'min_priority' fully documented in the schema (type, default, description). The description doesn't add any parameter-specific information beyond what the schema provides, such as explaining priority values or usage examples. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Find all moves with priority (moves that go before normal moves).' It specifies the verb ('Find') and resource ('moves with priority'), and explains what priority means. However, it doesn't explicitly differentiate from sibling tools like 'get_move' or 'search_pokemon_by_ability' beyond the priority focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides implied usage guidance: 'Useful for finding options when you need to outspeed an opponent.' This suggests when to use it (for speed advantage scenarios) but doesn't explicitly state when not to use it or name alternatives. No comparison to sibling tools is made, leaving the agent to infer context.

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. Dates show when Glama detected each change.

  1. 8 tool updates
    • First observedget_ability
    • First observedget_item
    • First observedget_move
    • First observedget_pokemon
    • First observedget_type_effectiveness
    • First observedlist_dangerous_abilities
    • First observedsearch_pokemon_by_ability
    • First observedsearch_priority_moves

TDQS

A3.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: get_ability, get_item, get_move, and get_pokemon retrieve specific data types, get_type_effectiveness calculates a multiplier, list_dangerous_abilities lists impactful abilities, and the two search tools find Pokemon by ability or priority moves. The descriptions reinforce unique functions, eliminating confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: get_ability, get_item, get_move, get_pokemon, get_type_effectiveness, list_dangerous_abilities, search_pokemon_by_ability, and search_priority_moves. This predictability makes the set easy to navigate and understand at a glance.

Tool Count5/5

With 8 tools, the server is well-scoped for its purpose of providing Pokemon battle data and competitive insights. Each tool serves a distinct role in retrieving or analyzing information, avoiding bloat while covering key aspects like stats, abilities, moves, and strategic searches.

Completeness4/5

The toolset covers core competitive Pokemon needs: data retrieval for abilities, items, moves, and Pokemon, plus strategic tools for type effectiveness and searches. Minor gaps exist, such as no direct tool for team building or battle simulation, but agents can work around this with the provided tools for comprehensive analysis.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI models to access comprehensive Pokémon data from PokéAPI and simulate battles between any two Pokémon with realistic mechanics including type effectiveness, stat-based damage calculations, and status effects.
    1
    -
  • F
    license
    C
    quality
    D
    maintenance
    Enables interaction with live Pokémon data through PokeAPI, providing comprehensive Pokémon information, battle calculations, moveset validation, and team analysis. Supports searching Pokémon and moves, calculating stats, checking type effectiveness, and analyzing team synergies with in-memory caching for improved performance.
    9
    -

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/drewsungg/mcpkmn-showdown'

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