Koskamo

pokeapi-mcp-server

An MCP server that provides tools to query PokéAPI v2 for comprehensive Pokémon data including stats, abilities, moves, items, natures, and type matchups. It supports STDIO and Streamable HTTP transports, offering 7 tools, 2 resources, and 1 prompt for agent integration.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

pokeapi-mcp-server logo, by cyanheadsCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-06Published by cyanheads
MCP endpoint (Streamable HTTP)
https://pokeapi.caseyjhand.com/mcp
Vendor documentation

What its tools do

7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

7 of 7 have a description · 7 of 7 declare behavior hints · 7 of 7 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Retrieve a denormalized Pokémon dossier with stats, abilities, and evolution chain
  • Compute offensive and defensive type effectiveness matchups
  • Get detailed move information including power, accuracy, and effect text
  • Filter Pokémon by generation, type, or egg group

Source and maintenance

Community listingRegistry 0.3.0
Maintenance checked

Protocol and capabilities

Server
pokeapi-mcp-server 0.3.0
MCP protocol negotiated in check
2025-11-25
Tools
7 advertised
Resources
21 advertised
Resource templates
3 advertised
Prompts
1 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": true,
    "listChanged": true
  },
  "extensions": {
    "io.modelcontextprotocol/skills": {
      "directoryRead": true
    }
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Start with pokeapi_get_pokemon for a Pokémon profile with stats, abilities, evolution, and sprites. Use pokeapi_get_type_matchups for type effectiveness and pokeapi_find_pokemon to filter by generation, type, pokédex, or egg group. Read pokeapi://pokemon/{identifier} or pokeapi://type/{typeName} for injectable Pokémon or type context.

Tools

7 advertised

pokeapi_get_pokemon — Get Pokémon
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get a fully denormalized Pokémon dossier in a single call — base stats, types, abilities (with full English effect text), height/weight, resolved evolution chain, sprite URLs including official artwork, species flavor text, variety list, capture rate, growth rate, gender rate, legendary/mythical flags, egg groups, and (optionally) a summarized learnable-move list. Accepts a name (lowercase, hyphens for spaces, e.g. "bulbasaur", "mr-mime") or PokéAPI Pokémon-record ID. A species name with no Pokémon record of its own (e.g. "deoxys") resolves to the default variety of that species ("deoxys-normal"), reported in resolvedFromSpecies. Set include_moves=true to include the move summary (large); defaults to false. Use game_version to select flavor text from a specific game (e.g. "sword", "red"); falls back to the most recent English entry when the version is not found. Use pokeapi_find_pokemon to discover Pokémon by type, generation, or egg group before calling this tool.

pokeapi_get_pokemon input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "description": "Pokémon name (lowercase hyphenated, e.g. \"bulbasaur\", \"charizard-mega-x\") or PokéAPI Pokémon-record ID as a string (e.g. \"1\", \"10034\"). A species name (e.g. \"deoxys\") resolves to its default variety."
    },
    "game_version": {
      "type": "string",
      "description": "PokéAPI version name to filter flavor text (e.g. \"sword\", \"red\", \"scarlet\"). Falls back to the most recent English entry when the version is not found."
    },
    "include_moves": {
      "type": "boolean",
      "default": false,
      "description": "Include the full learnable-move summary. Defaults to false because the list is large (100–200+ moves)."
    }
  },
  "additionalProperties": false
}
pokeapi_get_pokemon output schema
{
  "type": "object",
  "$defs": {
    "__schema0": {
      "type": "object",
      "required": [
        "species",
        "trigger",
        "minLevel",
        "item",
        "condition",
        "evolutionDetails",
        "evolvesTo"
      ],
      "properties": {
        "item": {
          "type": [
            "string",
            "null"
          ],
          "description": "First alternative evolution item. Null when unspecified."
        },
        "species": {
          "type": "string",
          "description": "Species name."
        },
        "trigger": {
          "type": "string",
          "description": "First alternative trigger, or base for the root stage."
        },
        "minLevel": {
          "type": [
            "number",
            "null"
          ],
          "description": "First alternative minimum level. Null when unspecified."
        },
        "condition": {
          "type": [
            "string",
            "null"
          ],
          "description": "Compatibility summary of the first alternative; evolutionDetails contains the complete methods."
        },
        "evolvesTo": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/__schema0"
          },
          "description": "Further evolutions from this stage."
        },
        "evolutionDetails": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "versionGroup",
              "isDefault",
              "requiredPokemonForm",
              "evolvedPokemonForm",
              "trigger",
              "item",
              "gender",
              "heldItem",
              "knownMove",
              "knownMoveType",
              "location",
              "minLevel",
              "minHappiness",
              "minBeauty",
              "minAffection",
              "nearSpecialRock",
              "needsMultiplayer",
              "needsOverworldRain",
              "partySpecies",
              "partyType",
              "relativePhysicalStats",
              "timeOfDay",
              "tradeSpecies",
              "turnUpsideDown",
              "region",
              "usedMove",
              "minMoveCount",
              "minSteps",
              "minDamageTaken",
              "allowedNatures",
              "conditionExpression"
            ],
            "properties": {
              "item": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Item used for evolution. Null when unspecified."
              },
              "gender": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Required gender ID. Null when unspecified."
              },
              "region": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Required region. Null when unspecified."
              },
              "trigger": {
                "type": "string",
                "description": "Event that triggers this alternative."
              },
              "heldItem": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Required held item. Null when unspecified."
              },
              "location": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Required location. Null when unspecified."
              },
              "minLevel": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum level. Null when unspecified."
              },
              "minSteps": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum steps. Null when unspecified."
              },
              "usedMove": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Move that must be used. Null when unspecified."
              },
              "isDefault": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Whether this is the expected main-series evolution for its variety. Null when unspecified."
              },
              "knownMove": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Required known move. Null when unspecified."
              },
              "minBeauty": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum beauty. Null when unspecified."
              },
              "partyType": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Type required in the party. Null when unspecified."
              },
              "timeOfDay": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Required time of day. Empty string is preserved; null when unspecified."
              },
              "minAffection": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum affection. Null when unspecified."
              },
              "minHappiness": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum happiness. Null when unspecified."
              },
              "minMoveCount": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum move uses. Null when unspecified."
              },
              "partySpecies": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Species required in the party. Null when unspecified."
              },
              "tradeSpecies": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Species to trade for. Null when unspecified."
              },
              "versionGroup": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Version group that introduced this method. Null when unspecified."
              },
              "knownMoveType": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Type of a required known move. Null when unspecified."
              },
              "allowedNatures": {
                "anyOf": [
                  {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Allowed nature names. Empty lists are preserved; null when unspecified."
              },
              "minDamageTaken": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Minimum damage taken. Null when unspecified."
              },
              "turnUpsideDown": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Whether the device must be upside down. Null when unspecified."
              },
              "nearSpecialRock": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Whether proximity to a Moss Rock or Icy Rock is required. Null when unspecified."
              },
              "needsMultiplayer": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Whether multiplayer link play is required. Null when unspecified."
              },
              "evolvedPokemonForm": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Resulting form. Null when unspecified."
              },
              "needsOverworldRain": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Whether overworld rain is required. Null when unspecified."
              },
              "conditionExpression": {
                "anyOf": [
                  {
                    "type": "object",
                    "required": [
                      "expression",
                      "percentageChance",
                      "variables"
                    ],
                    "properties": {
                      "variables": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "Names of expression variables in upstream order."
                      },
                      "expression": {
                        "type": "string",
                        "description": "Verbatim upstream RPN condition expression; not evaluated."
                      },
                      "percentageChance": {
                        "type": "number",
                        "description": "Upstream chance percentage, including zero."
                      }
                    },
                    "additionalProperties": false
                  },
                  {
                    "type": "null"
                  }
                ],
                "description": "Variable-dependent condition supplied by PokéAPI. Null when unspecified."
              },
              "requiredPokemonForm": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Required starting form. Null when unspecified."
              },
              "relativePhysicalStats": {
                "type": [
                  "number",
                  "null"
                ],
                "description": "Required Attack relative to Defense: 1 greater, 0 equal, -1 less. Null when unspecified."
              }
            },
            "description": "One complete alternative evolution method.",
            "additionalProperties": false
          },
          "description": "All alternative methods in upstream order; empty for a base stage. Requirements apply within each method, never across alternatives."
        }
      },
      "additionalProperties": false
    }
  },
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "id",
        "name",
        "resolvedFromSpecies",
        "heightDm",
        "weightHg",
        "types",
        "stats",
        "abilities",
        "sprites",
        "moves",
        "moveCount",
        "speciesFlavorText",
        "genus",
        "captureRate",
        "growthRate",
        "genderRate",
        "isLegendary",
        "isMythical",
        "evolutionChain",
        "varieties",
        "generation",
        "eggGroups"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "id": {
      "type": "number",
      "description": "PokéAPI Pokémon-record ID. Form IDs are not National Pokédex numbers."
    },
    "name": {
      "type": "string",
      "description": "Canonical Pokémon name in hyphenated lowercase."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The identifier matches no Pokémon record and no species. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "genus": {
      "type": [
        "string",
        "null"
      ],
      "description": "English genus (e.g. \"Seed Pokémon\"). Null when unavailable."
    },
    "moves": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "learnMethod",
          "levelLearnedAt"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Move name."
          },
          "learnMethod": {
            "type": "string",
            "description": "How the move is learned (level-up, machine, egg, tutor)."
          },
          "levelLearnedAt": {
            "type": "number",
            "description": "Level at which the move is learned. Zero for non-level-up methods."
          }
        },
        "description": "Move summary entry — name, learn method, and level.",
        "additionalProperties": false
      },
      "description": "Learnable moves (populated when include_moves=true, empty otherwise)."
    },
    "stats": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "baseStat",
          "effort"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Stat name (hp, attack, defense, special-attack, special-defense, speed)."
          },
          "effort": {
            "type": "number",
            "description": "Effort value (EV) yield."
          },
          "baseStat": {
            "type": "number",
            "description": "Base stat value."
          }
        },
        "description": "Individual base stat entry.",
        "additionalProperties": false
      },
      "description": "Base stats."
    },
    "types": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Type names ordered by slot (e.g. [\"fire\", \"flying\"])."
    },
    "sprites": {
      "type": "object",
      "required": [
        "frontDefault",
        "frontShiny",
        "officialArtwork"
      ],
      "properties": {
        "frontShiny": {
          "type": [
            "string",
            "null"
          ],
          "description": "Front shiny sprite URL."
        },
        "frontDefault": {
          "type": [
            "string",
            "null"
          ],
          "description": "Front default sprite URL."
        },
        "officialArtwork": {
          "type": [
            "string",
            "null"
          ],
          "description": "High-quality official artwork URL."
        }
      },
      "description": "Sprite URLs.",
      "additionalProperties": false
    },
    "heightDm": {
      "type": "number",
      "description": "Height in decimetres."
    },
    "weightHg": {
      "type": "number",
      "description": "Weight in hectograms."
    },
    "abilities": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "isHidden",
          "slot",
          "effectText",
          "shortEffectText"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Ability name in hyphenated lowercase (e.g. \"overgrow\")."
          },
          "slot": {
            "type": "number",
            "description": "Ability slot (1, 2, or 3)."
          },
          "isHidden": {
            "type": "boolean",
            "description": "True when this is the hidden ability."
          },
          "effectText": {
            "type": [
              "string",
              "null"
            ],
            "description": "Full English effect description. Null when unavailable."
          },
          "shortEffectText": {
            "type": [
              "string",
              "null"
            ],
            "description": "Short English effect description. Null when unavailable."
          }
        },
        "description": "Ability entry with effect text and hidden-ability flag.",
        "additionalProperties": false
      },
      "description": "Abilities with full effect text."
    },
    "eggGroups": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Egg group names."
    },
    "moveCount": {
      "type": "number",
      "description": "Total number of learnable moves regardless of include_moves."
    },
    "varieties": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "isDefault"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Variety/form name (e.g. \"pikachu-alola-cap\")."
          },
          "isDefault": {
            "type": "boolean",
            "description": "True for the canonical form."
          }
        },
        "description": "Form or variant entry with name and default flag.",
        "additionalProperties": false
      },
      "description": "All forms and variants of this species."
    },
    "genderRate": {
      "type": "number",
      "description": "Gender ratio: -1 genderless, 0 always male, 8 always female, 1–7 fraction (eighths) female."
    },
    "generation": {
      "type": "string",
      "description": "Generation introduced (e.g. \"generation-i\")."
    },
    "growthRate": {
      "type": "string",
      "description": "Growth rate name (e.g. \"medium-slow\")."
    },
    "isMythical": {
      "type": "boolean",
      "description": "True for mythical Pokémon."
    },
    "captureRate": {
      "type": "number",
      "description": "Base capture rate (0–255)."
    },
    "isLegendary": {
      "type": "boolean",
      "description": "True for legendary Pokémon."
    },
    "evolutionChain": {
      "anyOf": [
        {
          "$ref": "#/$defs/__schema0"
        },
        {
          "type": "null"
        }
      ],
      "description": "Evolution tree rooted at the base species."
    },
    "speciesFlavorText": {
      "type": [
        "string",
        "null"
      ],
      "description": "Flavor text from the selected (or most recent) game version. Null when none available."
    },
    "resolvedFromSpecies": {
      "type": [
        "string",
        "null"
      ],
      "description": "Species name the identifier matched when it named no Pokémon record; this dossier is the default variety of that species. Null when the identifier named a Pokémon record directly."
    }
  },
  "additionalProperties": false
}
pokeapi_get_pokemon annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
pokeapi_get_type_matchups — Get Type Matchups
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get the full offensive and defensive type effectiveness breakdown. Provide either a type name (e.g. "fire", "psychic") or a Pokémon identifier (name or PokéAPI Pokémon-record ID; a species name resolves to its default variety). For dual-type Pokémon, the defensive multipliers are correctly composed (e.g. Fire/Flying vs Rock = 4× because both types are weak to Rock). Exactly one of type or pokemon must be provided.

pokeapi_get_type_matchups input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "type": {
      "type": "string",
      "description": "Type name in lowercase (e.g. \"fire\", \"water\", \"psychic\"). Provide this or pokemon, not both."
    },
    "pokemon": {
      "type": "string",
      "description": "Pokémon name or PokéAPI Pokémon-record ID; a species name resolves to its default variety. The server resolves the types automatically. Provide this or type, not both."
    }
  },
  "additionalProperties": false
}
pokeapi_get_type_matchups output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "queryType",
        "resolvedTypes",
        "resolvedPokemon",
        "resolvedFromSpecies",
        "offensiveRelations",
        "defensiveMatchups",
        "composedMultipliers"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found",
                "invalid_input"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The type name or Pokémon identifier was not found in PokéAPI. `invalid_input`: Neither type nor pokemon was provided, or both were provided simultaneously. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "queryType": {
      "type": "string",
      "description": "How the query was resolved: \"type\" for a direct type query, \"pokemon\" for a Pokémon lookup."
    },
    "resolvedTypes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "The type name(s) the query resolved to."
    },
    "resolvedPokemon": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "id",
            "name"
          ],
          "properties": {
            "id": {
              "type": "number",
              "description": "Resolved PokéAPI Pokémon-record ID, including form IDs."
            },
            "name": {
              "type": "string",
              "description": "Resolved Pokémon-record name."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Resolved Pokémon record for a pokemon query; null for direct type queries."
    },
    "defensiveMatchups": {
      "type": "object",
      "required": [
        "weakTo",
        "resists",
        "immuneTo"
      ],
      "properties": {
        "weakTo": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Attacking types that deal 2× or more damage."
        },
        "resists": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Attacking types that deal 0.5× or less damage (but not immune)."
        },
        "immuneTo": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Attacking types that deal 0× damage."
        }
      },
      "description": "Defensive matchups — composed correctly for dual-type Pokémon.",
      "additionalProperties": false
    },
    "offensiveRelations": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "superEffectiveTo",
            "notVeryEffectiveTo",
            "noEffectTo"
          ],
          "properties": {
            "noEffectTo": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Types this type deals 0× damage to (immune)."
            },
            "superEffectiveTo": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Types this type deals 2× damage to."
            },
            "notVeryEffectiveTo": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Types this type deals 0.5× damage to."
            }
          },
          "additionalProperties": false
        },
        {
          "type": "null"
        }
      ],
      "description": "Offensive effectiveness (populated for single-type queries; null for dual-type Pokémon where per-type breakdown does not compose cleanly)."
    },
    "composedMultipliers": {
      "type": "object",
      "description": "Multiplier (0, 0.25, 0.5, 1, 2, 4) for every attacking type touched by at least one of the resolved defending type(s), including net-neutral 1× entries where a dual type composes to a cancellation (e.g. Fire/Flying vs Ice: 0.5× then 2× = 1×). A type absent from this map relates to neither defending type and also deals 1× damage.",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "number"
      }
    },
    "resolvedFromSpecies": {
      "type": [
        "string",
        "null"
      ],
      "description": "Species name when it resolved to its default variety; null for direct record or type queries."
    }
  },
  "additionalProperties": false
}
pokeapi_get_type_matchups annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
pokeapi_get_move — Get Move
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get move details by name or numeric ID — type, damage class, power, accuracy, PP, priority, target, stat changes, status-effect chance, and full English effect text. Set include_learners=true to include the list of Pokémon that can learn the move. Move names are available from pokeapi_get_pokemon when include_moves=true.

pokeapi_get_move input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "description": "Move name in lowercase hyphenated form (e.g. \"flamethrower\", \"close-combat\") or numeric ID as a string."
    },
    "include_learners": {
      "type": "boolean",
      "default": false,
      "description": "Include the list of Pokémon that can learn this move. Defaults to false as the list can be large."
    }
  },
  "additionalProperties": false
}
pokeapi_get_move output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "id",
        "name",
        "type",
        "damageClass",
        "power",
        "accuracy",
        "pp",
        "priority",
        "effectChance",
        "effectText",
        "shortEffectText",
        "target",
        "statChanges",
        "learnedByPokemon",
        "learnersIncluded"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "id": {
      "type": "number",
      "description": "Move ID."
    },
    "pp": {
      "type": [
        "number",
        "null"
      ],
      "description": "Base PP. Null when unavailable."
    },
    "name": {
      "type": "string",
      "description": "Move name in hyphenated lowercase."
    },
    "type": {
      "type": "string",
      "description": "Elemental type (e.g. \"fire\")."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The identifier resolves to no move in PokéAPI. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "power": {
      "type": [
        "number",
        "null"
      ],
      "description": "Base power. Null for status moves."
    },
    "target": {
      "type": "string",
      "description": "Target selection (e.g. \"selected-pokemon\", \"all-opponents\")."
    },
    "accuracy": {
      "type": [
        "number",
        "null"
      ],
      "description": "Accuracy percentage (0–100). Null for moves that always hit."
    },
    "priority": {
      "type": "number",
      "description": "Priority bracket (positive = higher priority, negative = lower)."
    },
    "effectText": {
      "type": [
        "string",
        "null"
      ],
      "description": "Full English effect description. Null when unavailable."
    },
    "damageClass": {
      "type": [
        "string",
        "null"
      ],
      "description": "Damage class: physical, special, or status. Null when unavailable."
    },
    "statChanges": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "stat",
          "change"
        ],
        "properties": {
          "stat": {
            "type": "string",
            "description": "Stat name."
          },
          "change": {
            "type": "number",
            "description": "Stat stage change (positive = buff, negative = debuff)."
          }
        },
        "description": "Stat stage change entry — affected stat and magnitude.",
        "additionalProperties": false
      },
      "description": "Stat stage changes caused by this move."
    },
    "effectChance": {
      "type": [
        "number",
        "null"
      ],
      "description": "Secondary effect chance percentage. Null when not applicable."
    },
    "shortEffectText": {
      "type": [
        "string",
        "null"
      ],
      "description": "Short English effect summary. Null when unavailable."
    },
    "learnedByPokemon": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Pokémon names that can learn this move (populated when include_learners=true)."
    },
    "learnersIncluded": {
      "type": "boolean",
      "description": "True when the learner list was requested, including when no learners are known."
    }
  },
  "additionalProperties": false
}
pokeapi_get_move annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
pokeapi_get_ability — Get Ability
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get ability details by name or numeric ID — full English effect text, short effect text, generation introduced, and the list of Pokémon that have the ability (including hidden-ability flag and slot). Ability names are returned by pokeapi_get_pokemon in the abilities array.

pokeapi_get_ability input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "description": "Ability name in lowercase hyphenated form (e.g. \"overgrow\", \"speed-boost\") or numeric ID as a string."
    }
  },
  "additionalProperties": false
}
pokeapi_get_ability output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "id",
        "name",
        "effectText",
        "shortEffectText",
        "generation",
        "pokemon"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "id": {
      "type": "number",
      "description": "Ability ID."
    },
    "name": {
      "type": "string",
      "description": "Ability name in hyphenated lowercase."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The identifier resolves to no ability in PokéAPI. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "pokemon": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "name",
          "isHidden",
          "slot"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Pokémon name."
          },
          "slot": {
            "type": "number",
            "description": "Ability slot (1, 2, or 3)."
          },
          "isHidden": {
            "type": "boolean",
            "description": "True when this is the hidden ability for the Pokémon."
          }
        },
        "description": "Pokémon entry with ability slot and hidden-ability flag.",
        "additionalProperties": false
      },
      "description": "Pokémon that have this ability."
    },
    "effectText": {
      "type": [
        "string",
        "null"
      ],
      "description": "Full English effect description. Null when unavailable."
    },
    "generation": {
      "type": "string",
      "description": "Generation in which the ability was introduced."
    },
    "shortEffectText": {
      "type": [
        "string",
        "null"
      ],
      "description": "Short English effect summary. Null when unavailable."
    }
  },
  "additionalProperties": false
}
pokeapi_get_ability annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
pokeapi_get_item — Get Item
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Get item details by name or numeric ID — effect text, category, versioned purchase and sell prices, fling power, item attributes (holdable, consumable, etc.), sprite URL, and Pokémon that commonly hold it.

pokeapi_get_item input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "required": [
    "identifier"
  ],
  "properties": {
    "identifier": {
      "type": "string",
      "description": "Item name in lowercase hyphenated form (e.g. \"choice-specs\", \"leftovers\") or numeric ID as a string."
    }
  },
  "additionalProperties": false
}
pokeapi_get_item output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "id",
        "name",
        "category",
        "cost",
        "prices",
        "flingPower",
        "effectText",
        "shortEffectText",
        "attributes",
        "heldByPokemon",
        "spriteUrl"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "id": {
      "type": "number",
      "description": "Item ID."
    },
    "cost": {
      "type": [
        "number",
        "null"
      ],
      "description": "Legacy Pokédollar cost when supplied. Null when unavailable; zero is a literal amount. Independent of versioned prices."
    },
    "name": {
      "type": "string",
      "description": "Item name in hyphenated lowercase."
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The identifier resolves to no item in PokéAPI. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "prices": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "versionGroup",
          "currency",
          "purchasePrice",
          "sellPrice"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "description": "Currency name for both prices."
          },
          "sellPrice": {
            "type": [
              "number",
              "null"
            ],
            "description": "Sell price in this currency and version group. Null means not sellable; zero is a literal amount."
          },
          "versionGroup": {
            "type": "string",
            "description": "Version group these prices apply to."
          },
          "purchasePrice": {
            "type": [
              "number",
              "null"
            ],
            "description": "Purchase price in this currency and version group. Null means not purchasable; zero is a literal amount."
          }
        },
        "description": "One version and currency price record.",
        "additionalProperties": false
      },
      "description": "All supplied price records in upstream order. Empty when no records are available."
    },
    "category": {
      "type": "string",
      "description": "Item category (e.g. \"held-items\", \"medicine\")."
    },
    "spriteUrl": {
      "type": [
        "string",
        "null"
      ],
      "description": "Item sprite URL. Null when no sprite is available."
    },
    "attributes": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Item attributes (e.g. \"holdable\", \"consumable\", \"usable-in-battle\")."
    },
    "effectText": {
      "type": [
        "string",
        "null"
      ],
      "description": "Full English effect description. Null when unavailable."
    },
    "flingPower": {
      "type": [
        "number",
        "null"
      ],
      "description": "Fling move base power when this item is flung. Null if not throwable."
    },
    "heldByPokemon": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Pokémon that commonly hold this item in the wild."
    },
    "shortEffectText": {
      "type": [
        "string",
        "null"
      ],
      "description": "Short English effect summary. Null when unavailable."
    }
  },
  "additionalProperties": false
}
pokeapi_get_item annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true
}
pokeapi_get_nature — Get Nature
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get nature details — the stat boosted (+10%), stat reduced (-10%), and preferred/disliked berry flavors. Omit the identifier to list all 25 natures at once. Natures are critical for competitive team-building: every non-neutral nature modifies two stats by ±10%.

pokeapi_get_nature input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "identifier": {
      "type": "string",
      "description": "Nature name (e.g. \"modest\", \"jolly\") or ID 1–25 as a string. Omit to list all 25 natures."
    }
  },
  "additionalProperties": false
}
pokeapi_get_nature output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "natures",
        "isListAll"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "not_found"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `not_found`: The identifier resolves to no nature in PokéAPI. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "natures": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name",
          "increasedStat",
          "decreasedStat",
          "likesFlavor",
          "hatesFlavor"
        ],
        "properties": {
          "id": {
            "type": "number",
            "description": "Nature ID (1–25)."
          },
          "name": {
            "type": "string",
            "description": "Nature name (e.g. \"modest\")."
          },
          "hatesFlavor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Berry flavor the Pokémon dislikes. Null for neutral natures."
          },
          "likesFlavor": {
            "type": [
              "string",
              "null"
            ],
            "description": "Berry flavor the Pokémon prefers. Null for neutral natures."
          },
          "decreasedStat": {
            "type": [
              "string",
              "null"
            ],
            "description": "Stat reduced by 10%. Null for neutral natures."
          },
          "increasedStat": {
            "type": [
              "string",
              "null"
            ],
            "description": "Stat boosted by 10%. Null for neutral natures."
          }
        },
        "description": "Nature entry with stat modifiers and flavor preferences.",
        "additionalProperties": false
      },
      "description": "One or all 25 natures depending on whether identifier was provided."
    },
    "isListAll": {
      "type": "boolean",
      "description": "True when all 25 natures are returned (no identifier provided)."
    }
  },
  "additionalProperties": false
}
pokeapi_get_nature annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
pokeapi_find_pokemon — Find Pokémon
Advertised by the server during the last successful anonymous check.
Advertised read-only

Filter Pokémon by generation, type, regional pokédex, or egg group. Returns names and PokéAPI IDs; every returned name works as a pokeapi_get_pokemon identifier, where a species name resolves to its default variety. At least one of generation, type, pokedex, or egg_group is required; the ones provided are combined with AND logic, and query adds strict token matching on name within them. A call with no category filter, with or without query, returns an empty result and a notice naming the requirement.

pokeapi_find_pokemon input schema
{
  "type": "object",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "type": {
      "type": "string",
      "description": "Type name (e.g. \"fire\", \"psychic\"). Filters to Pokémon of this type."
    },
    "limit": {
      "type": "integer",
      "default": 50,
      "maximum": 9007199254740991,
      "description": "Maximum results to return. Positive integer; defaults to 50.",
      "exclusiveMinimum": 0
    },
    "query": {
      "type": "string",
      "maxLength": 100,
      "description": "Strict token match on name. \"chu\" matches \"pikachu\" and \"raichu\". Case-insensitive. At most 100 characters; whitespace separates tokens, and every token must match."
    },
    "offset": {
      "type": "integer",
      "default": 0,
      "maximum": 9007199254740991,
      "minimum": 0,
      "description": "Offset into the filtered result set for pagination. Non-negative integer; defaults to 0."
    },
    "pokedex": {
      "type": "string",
      "description": "Regional pokédex name (e.g. \"kanto\", \"hoenn\", \"galar\"). Filters to entries in that dex."
    },
    "egg_group": {
      "type": "string",
      "description": "Egg group name (e.g. \"monster\", \"fairy\", \"dragon\"). Filters to Pokémon in this egg group."
    },
    "generation": {
      "type": "string",
      "description": "Generation name (e.g. \"generation-i\", \"generation-iii\"). Filters to Pokémon introduced in this generation."
    }
  },
  "additionalProperties": false
}
pokeapi_find_pokemon output schema
{
  "type": "object",
  "anyOf": [
    {
      "not": {
        "required": [
          "error"
        ]
      },
      "required": [
        "pokemon",
        "totalCount",
        "shown",
        "appliedFilters"
      ]
    },
    {
      "required": [
        "error"
      ]
    }
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": -9007199254740991,
          "description": "JSON-RPC error code for this failure."
        },
        "data": {
          "type": "object",
          "properties": {
            "reason": {
              "type": "string",
              "examples": [
                "invalid_filter"
              ],
              "description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: An unrecognized generation, type, pokédex, or egg-group name was provided. Other values are possible when a failure originates below the handler."
            },
            "recovery": {
              "type": "object",
              "required": [
                "hint"
              ],
              "properties": {
                "hint": {
                  "type": "string"
                }
              },
              "description": "Actionable next step for the caller.",
              "additionalProperties": {}
            },
            "retryable": {
              "type": "boolean",
              "description": "Whether retrying may succeed."
            }
          },
          "additionalProperties": {}
        },
        "message": {
          "type": "string",
          "description": "Human-readable description of what went wrong."
        }
      },
      "description": "Present when the call failed. Absent on success.",
      "additionalProperties": {}
    },
    "shown": {
      "type": "number",
      "description": "Number of results in this response."
    },
    "notice": {
      "type": "string",
      "description": "Guidance for missing category filters, zero matches, or an offset beyond the results."
    },
    "pokemon": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "id",
          "name"
        ],
        "properties": {
          "id": {
            "type": "number",
            "description": "PokéAPI ID: Pokémon record for type-only searches, species record whenever generation, pokedex, or egg_group is present. Form IDs are not National Pokédex numbers."
          },
          "name": {
            "type": "string",
            "description": "Pokémon name."
          }
        },
        "description": "Pokémon entry with PokéAPI ID and name.",
        "additionalProperties": false
      },
      "description": "Matching Pokémon entries."
    },
    "totalCount": {
      "type": "number",
      "description": "Total matching Pokémon before limit/offset."
    },
    "appliedFilters": {
      "type": "object",
      "required": [
        "limit",
        "offset"
      ],
      "properties": {
        "type": {
          "type": "string",
          "description": "Normalized type filter, when applied."
        },
        "limit": {
          "type": "integer",
          "maximum": 9007199254740991,
          "description": "Accepted page size, including the default of 50.",
          "exclusiveMinimum": 0
        },
        "query": {
          "type": "string",
          "description": "Applied lowercase query tokens joined with single spaces. Omitted without a category filter."
        },
        "offset": {
          "type": "integer",
          "maximum": 9007199254740991,
          "minimum": 0,
          "description": "Accepted page offset, including the default of 0."
        },
        "pokedex": {
          "type": "string",
          "description": "Normalized pokédex filter, when applied."
        },
        "egg_group": {
          "type": "string",
          "description": "Normalized egg-group filter, when applied."
        },
        "generation": {
          "type": "string",
          "description": "Normalized generation filter, when applied."
        }
      },
      "description": "Effective nonblank filters and pagination controls for this response.",
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
pokeapi_find_pokemon annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

1 advertised

pokeapi_team_builder

Advertised by the server during the last successful anonymous check.

Suggest a candidate team around a lead against a Pokémon or type opponent using verified type matchups and base stats. The client executes the tool calls; this prompt does not fetch data or guarantee battle outcomes or game legality.

lead
Lead Pokémon name or PokéAPI Pokémon-record ID; retained as a member of the proposed team. (required)
opponent
Opponent Pokémon name or record ID, or a type name, according to opponent_kind. (required)
opponent_kind
Interpret opponent as one Pokémon (pokemon) or one type (type). (required)

Resources

21 advertised

Bulbasaur (example) — Pokémon Dossier

Advertised by the server during the last successful anonymous check.

Pokémon dossier addressable by name or PokéAPI Pokémon-record ID, including forms. A species name with no Pokémon record of its own resolves to the default variety of that species, named in resolvedFromSpecies. Same payload as pokeapi_get_pokemon without move details, including every evolution alternative and its version and form metadata.

Bulbasaur (example) URI
pokeapi://pokemon/bulbasaur

MIME type: application/json

Bulbasaur (PokéAPI ID: 1) — Pokémon Dossier

Advertised by the server during the last successful anonymous check.

Pokémon dossier addressable by name or PokéAPI Pokémon-record ID, including forms. A species name with no Pokémon record of its own resolves to the default variety of that species, named in resolvedFromSpecies. Same payload as pokeapi_get_pokemon without move details, including every evolution alternative and its version and form metadata.

Bulbasaur (PokéAPI ID: 1) URI
pokeapi://pokemon/1

MIME type: application/json

Normal type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Normal type URI
pokeapi://type/normal

MIME type: application/json

Fire type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Fire type URI
pokeapi://type/fire

MIME type: application/json

Water type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Water type URI
pokeapi://type/water

MIME type: application/json

Electric type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Electric type URI
pokeapi://type/electric

MIME type: application/json

Grass type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Grass type URI
pokeapi://type/grass

MIME type: application/json

Ice type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Ice type URI
pokeapi://type/ice

MIME type: application/json

Fighting type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Fighting type URI
pokeapi://type/fighting

MIME type: application/json

Poison type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Poison type URI
pokeapi://type/poison

MIME type: application/json

Ground type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Ground type URI
pokeapi://type/ground

MIME type: application/json

Flying type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Flying type URI
pokeapi://type/flying

MIME type: application/json

Psychic type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Psychic type URI
pokeapi://type/psychic

MIME type: application/json

Bug type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Bug type URI
pokeapi://type/bug

MIME type: application/json

Rock type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Rock type URI
pokeapi://type/rock

MIME type: application/json

Ghost type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Ghost type URI
pokeapi://type/ghost

MIME type: application/json

Dragon type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Dragon type URI
pokeapi://type/dragon

MIME type: application/json

Dark type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Dark type URI
pokeapi://type/dark

MIME type: application/json

Steel type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Steel type URI
pokeapi://type/steel

MIME type: application/json

Fairy type — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Fairy type URI
pokeapi://type/fairy

MIME type: application/json

pokeapi-guide

Advertised by the server during the last successful anonymous check.

Use pokeapi_* tools for form-aware Pokémon discovery, evolution requirements, and type-matchup research. Follow identifier chains and check search coverage and game-version limits before drawing conclusions.

pokeapi-guide URI
skill://pokeapi-guide/SKILL.md

MIME type: text/markdown

Pokémon Dossier — Pokémon Dossier

Advertised by the server during the last successful anonymous check.

Pokémon dossier addressable by name or PokéAPI Pokémon-record ID, including forms. A species name with no Pokémon record of its own resolves to the default variety of that species, named in resolvedFromSpecies. Same payload as pokeapi_get_pokemon without move details, including every evolution alternative and its version and form metadata.

Pokémon Dossier URI template
pokeapi://pokemon/{identifier}

MIME type: application/json

Type Damage Relations — Type Damage Relations

Advertised by the server during the last successful anonymous check.

Type damage relations — offensive and defensive multiplier tables for a given type.

Type Damage Relations URI template
pokeapi://type/{typeName}

MIME type: application/json

io.modelcontextprotocol/skills

Advertised by the server during the last successful anonymous check.

io.modelcontextprotocol/skills URI template
skill://{+path}

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
703 ms
95th percentile latency
703 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 703 ms · metadata changed · 7 tool(s), 21 resource(s), 3 resource template(s), 1 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http pokeapi-mcp-server-caseyjhand https://pokeapi.caseyjhand.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add pokeapi-mcp-server-caseyjhand --url https://pokeapi.caseyjhand.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable pokeapi-mcp-server-caseyjhand in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "pokeapi-mcp-server-caseyjhand": {
      "url": "https://pokeapi.caseyjhand.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "pokeapi-mcp-server-caseyjhand": {
      "type": "streamableHttp",
      "url": "https://pokeapi.caseyjhand.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start pokeapi-mcp-server-caseyjhand and inspect its tools.
VS Code configuration
{
  "servers": {
    "pokeapi-mcp-server-caseyjhand": {
      "type": "http",
      "url": "https://pokeapi.caseyjhand.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http pokeapi-mcp-server-caseyjhand https://pokeapi.caseyjhand.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://pokeapi.caseyjhand.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "pokeapi-mcp-server-caseyjhand": {
      "serverUrl": "https://pokeapi.caseyjhand.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like pokeapi-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.