pokemon-mcp / pokeapi_wrapper.py
Houzeric's picture
Upload 2 files
1bcc1a1 verified
import requests
import json
BASE_URL = "https://pokeapi.co/api/v2"
def _get(endpoint: str, name_or_id: str) -> str:
"""
Internal helper to fetch data from PokéAPI and handle errors.
Args:
endpoint (str): API endpoint (e.g., 'pokemon', 'item')
name_or_id (str): Resource name or ID
Returns:
str: JSON string response from the API
Raises:
ValueError: If the resource is not found or an error occurs
"""
url = f"{BASE_URL}/{endpoint}/{str(name_or_id).lower()}"
headers = {
"Accept": "application/json",
"Content-Type": "application/json"
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
return json.dumps(response.json())
raise ValueError(f"❌ {endpoint} '{name_or_id}' not found (HTTP {response.status_code})")
def get_pokemon(name_or_id):
"""
Get full data for a Pokémon (stats, abilities, types, sprites, etc.).
Args:
name_or_id (str or int): Pokémon name or Pokédex ID
Returns:
str: Pokémon data
"""
return _get("pokemon", name_or_id)
def get_pokemon_species(name_or_id):
"""
Get species-level data for a Pokémon (evolution chain, flavor text, gender ratio, etc.).
Args:
name_or_id (str or int): Pokémon name or ID
Returns:
str: Pokémon species data
"""
return _get("pokemon-species", name_or_id)
def get_ability(name_or_id):
"""
Get details about a specific Pokémon ability (effects, Pokémon with this ability, etc.).
Args:
name_or_id (str or int): Ability name or ID
Returns:
str: Ability data
"""
return _get("ability", name_or_id)
def get_type(name_or_id):
"""
Get data for a specific Pokémon type (damage relations, Pokémon by type, etc.).
Args:
name_or_id (str or int): Type name or ID
Returns:
str: Type data
"""
return _get("type", name_or_id)
def get_item(name_or_id):
"""
Get information on an item (e.g., Potion, Berry, Stone).
Args:
name_or_id (str or int): Item name or ID
Returns:
str: Item data
"""
return _get("item", name_or_id)
def get_berry(name_or_id):
"""
Get data about a specific berry (flavor, firmness, effects, etc.).
Args:
name_or_id (str or int): Berry name or ID
Returns:
str: Berry data
"""
return _get("berry", name_or_id)
def get_evolution_chain(chain_id):
"""
Get full data for an evolution chain (species involved, stages, etc.).
Args:
chain_id (int): Evolution chain ID (not Pokémon ID)
Returns:
str: Evolution chain data
"""
return _get("evolution-chain", chain_id)
def get_location(name_or_id):
"""
Get information on a specific location in the Pokémon world.
Args:
name_or_id (str or int): Location name or ID
Returns:
str: Location data
"""
return _get("location", name_or_id)
def get_move(name_or_id):
"""
Get detailed data for a specific move (power, accuracy, type, effects).
Args:
name_or_id (str or int): Move name or ID
Returns:
str: Move data
"""
return _get("move", name_or_id)
def get_stat(name_or_id):
"""
Get metadata about a base stat (e.g., HP, Attack).
Args:
name_or_id (str or int): Stat name or ID
Returns:
str: Stat data
"""
return _get("stat", name_or_id)
def get_egg_group(name_or_id):
"""
Get information about an egg group (used for Pokémon breeding compatibility).
Args:
name_or_id (str or int): Egg group name or ID
Returns:
str: Egg group data
"""
return _get("egg-group", name_or_id)
def get_pokemon_form(name_or_id):
"""
Get data about a specific form of a Pokémon (e.g., Alolan, Galarian forms).
Args:
name_or_id (str or int): Form name or ID
Returns:
str: Pokémon form data
"""
return _get("pokemon-form", name_or_id)
def get_pokemon_habitat(name_or_id):
"""
Get information about the habitat where a Pokémon is commonly found.
Args:
name_or_id (str or int): Habitat name or ID
Returns:
str: Habitat data
"""
return _get("pokemon-habitat", name_or_id)
def get_pokemon_color(name_or_id):
"""
Get Pokémon categorized by their color (used mainly for Pokédex sorting).
Args:
name_or_id (str or int): Color name or ID
Returns:
str: Color group data
"""
return _get("pokemon-color", name_or_id)
def get_pokemon_shape(name_or_id):
"""
Get Pokémon categorized by shape (used in evolution and form grouping).
Args:
name_or_id (str or int): Shape name or ID
Returns:
str: Shape group data
"""
return _get("pokemon-shape", name_or_id)
def get_generation(name_or_id):
"""
Get data about a Pokémon generation (introduced species, moves, types, etc.).
Args:
name_or_id (str or int): Generation name or ID (e.g., 'generation-i')
Returns:
str: Generation data
"""
return _get("generation", name_or_id)
def get_version(name_or_id):
"""
Get information about a game version (e.g., Red, Blue, Diamond, etc.).
Args:
name_or_id (str or int): Version name or ID
Returns:
str: Version data
"""
return _get("version", name_or_id)
def get_version_group(name_or_id):
"""
Get groupings of game versions (used for shared move sets, regions, etc.).
Args:
name_or_id (str or int): Version group name or ID
Returns:
str: Version group data
"""
return _get("version-group", name_or_id)
def get_pokedex(name_or_id):
"""
Get data for a specific Pokédex (regional or national).
Args:
name_or_id (str or int): Pokédex name or ID (e.g., 'kanto', 'national')
Returns:
str: Pokédex data
"""
return _get("pokedex", name_or_id)
def get_region(name_or_id):
"""
Get details about a region in the Pokémon world (e.g., Kanto, Sinnoh).
Args:
name_or_id (str or int): Region name or ID
Returns:
str: Region data
"""
return _get("region", name_or_id)