# Poké MCP

> Poké connects your AI client directly to the PokéAPI for deep Pokémon data retrieval. Query everything from specific berry flavors and contest type mechanics to wild encounter conditions and evolution chains. You can list all items, check item attributes, or get details on a single location using granular tools like `get_berry` and `list_items`. Stop guessing game lore; pull structured data directly into your chat.

## Overview
- **Category:** data-management
- **Price:** Free
- **Tags:** api-integration, gaming-data, encyclopedia, rest-api, data-retrieval

## Description

*Listen up. This server hooks your AI client right into the PokéAPI. You're getting deep data on every single thing in the Pokémon universe—items, locations, mechanics. Forget relying on fan wikis or guessing game lore; you pull structured facts straight into your chat.

**Analyze Berry Properties**
*   To check out berries, you can start by running `list_berries` to get a full rundown of every berry type available. From there, you'll use `get_berry_firmness` or `get_berry_flavor` if you wanna know specifics about its physical properties or taste profile. You gotta run `list_berry_firmnesses` and `list_berry_flavors` to see all the possible variations for those getters.

**Map Contest Mechanics**
*   If you're deep into contest theory, you can use `list_contest_types` to get a list of every contest type out there. Then, when you know which type it is—like 'cool' or 'elegant'—you run `get_contest_type` for the details. To understand how moves score points in competition, check out `list_contest_effects`, and use `get_contest_effect` to find the specific effect generated by a particular move or type.

**Determine Encounter Rules**
*   Figuring out how Pokémon actually appear in the wild is straightforward. You start by listing all possible conditions with `list_encounter_conditions` and getting general data with `get_encounter_condition`. For specifics, you check tools like `get_encounter_condition_value`, which tells you the exact condition—like 'grass' or 'water'. To see how players trigger a wild encounter, run `list_encounter_methods` to get all options (you know, walking around, fishing). Then you use `get_encounter_method` for details on that specific method. For the values associated with those methods, check out `get_encounter_condition_value`.

**Detail Item Attributes & Contents**
*   When you need item data, start by running `list_items`; this spits out every single usable object in the game. To get full details on any specific item, use `get_item`, which covers uses and properties. If you wanna know if that item is flammable or helps heal, you run `get_item_attribute` for those specifics. You can find out what general group an item belongs to using `get_item_category`, and where it lives by checking its pocket data with `get_item_pocket`. Wanna know what happens when someone throws the item wrong? Use `get_item_fling_effect`, or check all possible outcomes using `list_item_fling_effects`. To get a general idea of storage, you run `list_item_attributes` and `list_item_categories`; for pockets, use `list_item_pockets`.

**Trace Evolution Chains**
*   Tracking how Pokémon change is simple. You can start by listing all documented evolution chains with `list_evolution_chains`. To see the full sequence of stages and steps needed for any creature to evolve, you run `get_evolution_chain`. If you need to know what makes it happen—is it leveling up or an item?—use `get_evolution_trigger` to list all ways evolution can be prompted. For details on a specific trigger, use `get_evolution_trigger`.

**Location and Regional Data**
*   For maps and geography, you can run `list_regions` to see every major area (like Paldea or Johto). To get deep info on a specific region, call `get_region`. If you need details for an actual town or spot, use `list_locations`, then pull the data with `get_location`. For bigger areas that contain multiple spots, check out `list_location_areas` and run `get_location_area`. You can also get Pal Park-specific area info using `list_pal_park_areas` and `get_pal_park_area`. When you need to know about a specific patch or update, use `list_versions` and `get_version`, or check out related updates with `list_version_groups` and `get_version_group`.

**Global Data Retrieval**
*   You can get comprehensive data on any single Pokémon using `get_pokedex` after running `list_pokedexes`. To see all berries, run `list_berries`; for item types, use `list_items`; and to check out the full list of available pockets, you've got `list_item_pockets`. If you need a general overview of what exists in the world, hit up `query_graphql` to execute a complex query against the entire dataset.

## Tools

### get_berry_firmness
Gets the firmness level data for a specified berry.

### get_berry_flavor
Retrieves details about a berry's flavor profile (e.g., spicy, sweet).

### get_berry
Retrieves specific details about a single type of berry.

### get_contest_effect
Gets the specific effect generated by a contest move or type.

### get_contest_type
Retrieves details about a particular contest type (e.g., 'cool', 'elegant').

### get_encounter_condition
Gets the general condition required for a Pokémon encounter.

### get_encounter_condition_value
Retrieves specific values associated with an encounter condition (e.g., 'grass', 'water').

### get_encounter_method
Gets details on a method used to trigger a wild Pokémon encounter.

### get_evolution_chain
Retrieves the sequence of stages and steps required for a Pokémon's evolution.

### get_evolution_trigger
Gets details on what causes an evolution to happen (e.g., 'level up', 'item').

### get_generation
Retrieves information regarding a specific generation of Pokémon.

### get_item_attribute
Retrieves specific attributes (like flammable or healing) associated with an item.

### get_item_category
Gets the general category an item belongs to.

### get_item_fling_effect
Retrieves details on what happens if a player throws the item incorrectly.

### get_item_pocket
Gets information about where an item can be stored or found in a pocket.

### get_item
Gets full data, including uses and properties, for any given item.

### get_location_area
Gets information about the larger area containing a location.

### get_location
Retrieves details for a specific geographical location within the game world.

### get_pal_park_area
Retrieves details specific to Pal Park areas.

### get_pokedex
Gets comprehensive data for a single Pokémon entry in the Pokédex.

### get_region
Retrieves details about a specific geographical region (e.g., Kanto, Paldea).

### get_super_contest_effect
Gets the mechanics and effects related to super contests.

### get_version_group
Gets details regarding a group of related game versions.

### get_version
Retrieves version-specific data about the game release or update.

### query_graphql
Executes a complex GraphQL query against the entire PokéAPI dataset.

### list_berries
Provides a list of every type of berry available in the database.

### list_berry_firmnesses
Lists all known firmness types for berries.

### list_berry_flavors
Outputs a list of distinct berry flavor profiles (e.g., spicy, sour).

### list_contest_effects
Returns an enumeration of all possible contest effects.

### list_contest_types
Outputs a list of distinct contest types available in the game.

### list_encounter_condition_values
Lists specific values that define an encounter condition (e.g., 'tall grass').

### list_encounter_conditions
Outputs a list of all possible conditions used for Pokémon encounters.

### list_encounter_methods
Provides an enumeration of how players can encounter wild Pokémon.

### list_evolution_chains
Lists every documented evolution chain in the game's history.

### list_evolution_triggers
Outputs a list of all ways an evolution can be triggered (e.g., 'level up', 'trade').

### list_generations
Lists the different generations of Pokémon documented.

### list_item_attributes
Provides a list of all known item attributes (e.g., flammable, healing).

### list_item_categories
Outputs a comprehensive list of item categories.

### list_item_fling_effects
Lists all possible negative outcomes when an item is thrown wrong.

### list_item_pockets
Provides a list of locations or types of pockets where items can be stored.

### list_items
Lists every item available in the game's database.

### list_location_areas
Outputs a list of major, defined geographical areas.

### list_locations
Lists every specific point or location within the game world map.

### list_pal_park_areas
Outputs a list of areas specific to Pal Park.

### list_pokedexes
Lists every available Pokédex entry or guide.

### list_regions
Outputs a list of known Pokémon regions (e.g., Johto, Paldea).

### list_super_contest_effects
Lists all possible super contest effects.

### list_version_groups
Outputs a list of version groups for related game updates.

### list_versions
Provides a list of specific versions or patches available for the API.

## Prompt Examples

**Prompt:** 
```
List the first 10 berries available in the database.
```

**Response:** 
```
I've retrieved the first 10 berries: cheri, chesto, pecha, rawst, aspear, leppa, oran, persim, lum, and nanab. Would you like details on any of these?
```

**Prompt:** 
```
What are the effects of the contest type 'cool'?
```

**Response:** 
```
The 'cool' contest type (ID: 1) is associated with specific move appeals. In contests, using 'cool' moves will yield higher points if the audience is looking for that style. Would you like to see the list of contest effects?
```

**Prompt:** 
```
Show me the different encounter methods available.
```

**Response:** 
```
I found several encounter methods, including 'walk' (walking in tall grass), 'old-rod' (fishing), 'surf' (moving on water), and 'headbutt' (shaking trees). Which one would you like to explore further?
```

## Capabilities

### Analyze Berry Properties
List all available berries and retrieve detailed data on their firmness levels and flavor types.

### Map Contest Mechanics
Query contest type rules and effects to understand how different moves score points in competition.

### Determine Encounter Rules
Find the conditions and methods Pokémon use when they appear in the game world (e.g., tall grass, fishing).

### Detail Item Attributes
Get specific properties of any item—its category, attribute, or even its pocket contents.

### Trace Evolution Chains
Retrieve the steps and triggers required for a Pokémon to evolve from one stage to another.

## Use Cases

### Writing a Guide on Rare Berries
A writer needs to write about the 'Oran Berry.' Instead of searching multiple wikis, they ask their agent: 'What are the flavor and firmness details for Oran Berries?' The agent runs `get_berry` and then `get_berry_flavor`, immediately returning structured data (Flavor: Orange; Firmness: Medium) that can be pasted directly into the guide.

### Checking Battle Rules
A developer is designing a new contest move. They ask, 'What are the effects of the 'cool' contest type?' The agent runs `get_contest_type` and `list_contest_effects`, detailing exactly how that type impacts point scoring for moves in competition.

### Mapping a New Gym Location
A data analyst needs to know all potential encounter methods at a new gym. They run `list_encounter_methods`. The agent returns options like 'walk' and 'old-rod,' allowing the analyst to systematically map out every possible way a Pokémon could appear in that area.

### Debugging an Item Interaction
A content creator needs to know why throwing a specific item causes damage. They ask, 'What is the fling effect of this item?' The agent runs `get_item` and specifically calls `get_item_fling_effect`, providing the exact mechanical consequence for fact-checking.

## Benefits

- Verify item properties instantly. Instead of cross-referencing guides, use `get_item` to find an item's attribute or category directly in your chat window.
- Map out wild encounters precisely. Use `list_encounter_methods` to see how Pokémon appear and then run `get_encounter_condition` to know the exact required condition (e.g., 'tall grass').
- Build accurate lore guides. Need to write about a berry? Run `list_berries` first, then use `get_berry_flavor` for specific details like 'spicy' or 'dry'.
- Understand battle mechanics quickly. Use `get_contest_type` and `list_contest_effects` to see exactly how moves score points in a contest.
- Trace creature evolution efficiently. Use `list_evolution_chains` to map out the entire progression, then use `get_evolution_trigger` to state what causes it (e.g., 'level up').
- Handle complex queries with GraphQL. When specific tools aren't enough, run a single `query_graphql` call for maximum data density.

## How It Works

The bottom line is that this server turns complex database lookups into simple chat commands, letting your AI agent pull specific game data instantly.

1. First, tell your AI agent which data set you need (e.g., 'List all berries' or 'What is the effect of contest type X?').
2. The agent calls the specific tool (like `list_berries` or `get_contest_effect`) to pull structured data from the PokéAPI.
3. You get a clean, readable list or object containing the precise mechanics and details you asked for, ready to use in your writing or code.

## Frequently Asked Questions

**How do I find out what a Pokémon can evolve into using get_evolution_chain?**
Running `get_evolution_chain` provides the full sequence of stages. It tells you not just the next stage, but also the necessary trigger (e.g., 'level up' or 'trade') to make it happen.

**What is the difference between list_items and get_item?**
`list_items` provides a simple inventory of every item ID available in the database. `get_item`, however, retrieves the full data object for that specific item—including its category and attributes.

**Can I use get_encounter_condition to find out how Pokémon appear?**
Yes. You should pair it with `list_encounter_methods`. First, run `list_encounter_methods` (e.g., 'walk'). Then, use the method name in a query to narrow down specific conditions using `get_encounter_condition`.

**How do I compare item attributes across different items?**
You run `list_item_attributes` first to see all possible types (like 'flammable'). Then, you can use `get_item_attribute` multiple times for different items to build a comparative list.

**Which tool should I use if I need general API data? Should I use query_graphql?**
If you know the exact function (e.g., finding berry flavor), use the specific getter (`get_berry_flavor`). Save `query_graphql` for truly complex, multi-entity queries where no single tool exists.

**If I query a large dataset using list_pokedexes, how does the server handle rate limits?**
The server manages standard API rate limiting. If your agent client hits a limit, it must implement an exponential backoff retry loop to wait and re-attempt the call later. This prevents connection failures.

**Do I need specific credentials or keys just to use get_item details?**
No, this server uses public endpoint data and requires no complex API keys. Your AI client connects directly without needing authentication tokens for basic lookups of item information.

**Should I use list_items or list_item_categories if I'm grouping items?**
You should use list_item_categories first to get the structured group names. Then, you can use get_item with a specific ID to pull the detailed data for any item within that category.

**How can I find the specific details of a berry by its name?**
Use the `get_berry` tool and provide the name (e.g., 'cheri'). The agent will return its growth time, max harvest, size, and smoothness.

**Can I list all the different ways a Pokémon can be encountered?**
Yes, use the `list_encounter_methods` tool. It provides a paginated list of all methods like 'walk', 'old-rod', or 'surf' used in the games.

**Is it possible to check the effects of Pokémon Contests?**
Absolutely. You can use `list_contest_effects` to see available effects or `get_contest_effect` with a specific ID to see the detailed appeal and jam metadata.