Skip to main content
Glama
hollanddd

Pokédex MCP Server

by hollanddd

Pokédex MCP Server

A Model Context Protocol (MCP) server that provides comprehensive Pokémon data access through the PokeAPI. This server enables AI agents to fetch detailed Pokémon information, type effectiveness charts, encounter locations, and search capabilities.

Features

  • Detailed Pokémon Information: Get comprehensive data including stats, abilities, types, sprites, and artwork

  • Type Effectiveness: Complete damage relationship charts for all Pokémon types

  • Encounter Locations: Wild encounter data with locations, levels, and capture methods

  • Search Functionality: Find Pokémon by partial name matching

  • REST API Client: Full TypeScript client for PokeAPI v2 with type safety

  • Zod Validation: Runtime schema validation for all tool inputs

  • Clean Architecture: Modular design with separated concerns

Related MCP server: Pokémon MCP Server

Architecture

The server is built with a clean, modular architecture:

src/
├── index.ts       # MCP server entry point and transport setup
├── tools.ts       # MCP tool definitions and registration
├── client.ts      # PokeAPI REST client with TypeScript types
├── formatters.ts  # Response formatting utilities
└── fetcher.ts     # GraphQL client (legacy, replaced by REST client)

Core Components

  • MCP Server: Uses @modelcontextprotocol/sdk for protocol compliance

  • REST API Client: Comprehensive PokeAPI v2 client with full TypeScript support

  • Zod Validation: Runtime type checking and schema validation

  • Response Formatters: Centralized formatting for consistent output

Available Tools

fetch_pokemon

Fetch detailed information about a Pokémon by name or ID.

Parameters:

  • name (string): The name or ID of the Pokémon

Example Response:

**pikachu** (ID: 25)
Height: 4 decimetres (0.4m)
Weight: 60 hectograms (6.0kg)
Base Experience: 112
Order: 35

**Types:** electric
**Abilities:** static, lightning-rod (hidden)
**Base Stats:** hp: 35, attack: 55, defense: 40, special-attack: 50, special-defense: 50, speed: 90

**Sprites:**
- Default: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png
- Shiny: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/25.png
- Artwork: https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/official-artwork/25.png

get_type_effectiveness

Get type effectiveness information including strengths, weaknesses, and resistances.

Parameters:

  • name (string): The name or ID of the type

Example Response:

**FIRE Type Effectiveness**

**Strong Against (2x damage to):** grass, ice, bug, steel
**Weak Against (0.5x damage to):** fire, water, rock, dragon
**No Effect Against (0x damage to):** None

**Resistant To (0.5x damage from):** fire, grass, ice, bug, steel, fairy
**Vulnerable To (2x damage from):** water, ground, rock

**Pokémon with this type:** charmander, charmeleon, charizard, vulpix, ninetales, growlithe and 58 more...

get_pokemon_encounters

Get location encounter information for a Pokémon.

Parameters:

  • name (string): The name or ID of the Pokémon

Example Response:

**pikachu Encounter Locations:**

**viridian forest:**
  red: walk (Lv.3-5, 5% chance)
  blue: walk (Lv.3-5, 5% chance)
  yellow: walk (Lv.4-6, 100% chance)

**power plant:**
  red: walk (Lv.20-24, 25% chance)
  blue: walk (Lv.20-24, 25% chance)

search_pokemon

Search for Pokémon by partial name match.

Parameters:

  • query (string): Partial name to search for

Example Response:

**Search results for "char":**

1. charmander (ID: 4)
2. charmeleon (ID: 5)
3. charizard (ID: 6)

*Use fetch_pokemon with any of these names to get detailed information.*

Installation

Prerequisites

  • Node.js 18+

  • pnpm (recommended) or npm

Setup

  1. Clone and install dependencies:

    git clone <repository>
    cd pokedex
    pnpm install
  2. Build the project:

    pnpm build
  3. Run the server:

    node dist/index.js

Development

Project Structure

pokedex/
├── src/
│   ├── index.ts       # Server entry point
│   ├── tools.ts       # MCP tool definitions  
│   ├── client.ts      # PokeAPI REST client
│   ├── formatters.ts  # Response formatting
│   └── fetcher.ts     # GraphQL client (legacy)
├── dist/              # Compiled JavaScript
├── package.json       # Dependencies and scripts
├── tsconfig.json      # TypeScript configuration
├── CLAUDE.md          # Development guidelines
└── README.md          # This file

Available Scripts

# Build TypeScript to JavaScript
pnpm build

# Run tests
pnpm test

# Build and run server
pnpm build && node dist/index.js

Development Guidelines

  • ES Modules: Project uses "type": "module" for modern JavaScript

  • TypeScript: Strict mode enabled with ES2022 target

  • Code Style: Formatted with consistent patterns

  • Validation: All inputs validated with Zod schemas

  • Error Handling: Comprehensive error catching and user-friendly messages

MCP Integration

Claude Desktop Integration

Add to your Claude Desktop MCP configuration:

{
  "mcpServers": {
    "pokedex": {
      "command": "node",
      "args": ["/path/to/pokedex/dist/index.js"],
      "env": {}
    }
  }
}

Other MCP Clients

The server implements the standard MCP protocol and works with any compliant client:

  • Transport: stdio (standard input/output)

  • Protocol Version: 2025-06-18

  • Capabilities: tools (with listChanged support)

API Coverage

This server provides access to major PokeAPI v2 endpoints:

  • Pokémon Data: /pokemon/{id or name} - Complete Pokémon information

  • Type Information: /type/{id or name} - Type effectiveness and relationships

  • Encounter Data: /pokemon/{id}/encounters - Wild encounter locations

  • Search: /pokemon list endpoint for name-based searching

Dependencies

Runtime Dependencies

  • @modelcontextprotocol/sdk: MCP protocol implementation

  • zod: Runtime type validation and schema definition

Development Dependencies

  • typescript: TypeScript compiler and language support

  • @types/node: Node.js type definitions

Contributing

  1. Follow existing code patterns and architecture

  2. Maintain TypeScript strict mode compliance

  3. Add appropriate error handling for new features

  4. Update formatters for consistent response formatting

  5. Test with MCP clients before submitting changes

API References

License

This project provides educational access to Pokémon data through the public PokeAPI service. All Pokémon data is owned by The Pokémon Company.

Available Tools

4 tools
fetch_pokemonC

Fetch detailed information about a Pokémon by name or ID

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name or ID of the Pokémon

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It states the tool fetches 'detailed information', which implies a read-only operation, but doesn't specify what 'detailed' includes, potential rate limits, authentication needs, error handling, or response format. This leaves significant gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is a single, clear sentence with no wasted words. It's front-loaded with the core purpose and efficiently specifies the input method. Every part of the sentence contributes essential information, making it appropriately concise.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, how results are structured, or any behavioral traits like error cases. For a tool with rich sibling context and no structured support, more detail is needed to guide effective usage.

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

Parameters3/5

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

The input schema has 100% description coverage, with the parameter 'name' documented as accepting 'name or ID'. The description adds no additional semantic context beyond this, such as examples, format constraints, or case sensitivity. With high schema coverage, the baseline is 3, and the description doesn't enhance it further.

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

Purpose4/5

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

The description clearly states the action ('fetch detailed information') and resource ('about a Pokémon'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'search_pokemon' or 'get_pokemon_encounters', which likely have overlapping functionality. A perfect score would require explicit distinction from these alternatives.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'search_pokemon' or 'get_pokemon_encounters'. It mentions fetching by 'name or ID', but doesn't clarify if this is for exact matches only or how it differs from search functionality. No exclusions or prerequisites are mentioned.

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

get_pokemon_encountersC

Get location encounter information for a Pokémon

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name or ID of the Pokémon

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe any behavioral traits such as whether it's a read-only operation, potential rate limits, error conditions, or what the output format might look like. This leaves significant gaps in understanding how the tool behaves beyond its basic function.

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

Conciseness5/5

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

The description is a single, clear sentence that efficiently communicates the tool's purpose without any wasted words. It's front-loaded with the essential information and appropriately sized for a simple tool with one parameter.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete for effective tool use. It doesn't explain what 'location encounter information' entails (e.g., format, structure, or examples), nor does it address behavioral aspects like error handling or limitations. For a tool with no structured metadata, the description should provide more context about what to expect from the operation.

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

Parameters3/5

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

The input schema has 100% description coverage, with the 'name' parameter clearly documented as 'The name or ID of the Pokémon'. The description doesn't add any additional meaning beyond what the schema provides, but since schema coverage is high, the baseline score of 3 is appropriate as the schema adequately handles parameter documentation.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'location encounter information for a Pokémon', making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'fetch_pokemon' or 'search_pokemon' in terms of what specific information is retrieved versus those alternatives.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'fetch_pokemon' or 'search_pokemon'. It lacks any context about prerequisites, exclusions, or specific scenarios where this tool is preferred over others, leaving the agent to infer usage from the tool name alone.

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

get_type_effectivenessC

Get type effectiveness information including strengths, weaknesses, and resistances

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesThe name or ID of the type

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool retrieves information, implying a read-only operation, but doesn't specify any behavioral traits such as error handling, rate limits, authentication needs, or what happens with invalid inputs. This leaves significant gaps for a tool with no annotation coverage.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary details. It's front-loaded with the core action and resource, making it easy to understand at a glance, with no wasted words.

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

Completeness2/5

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

Given the complexity of retrieving type effectiveness data, the description is incomplete. With no annotations, no output schema, and only basic parameter coverage, it lacks details on return values (e.g., format of strengths/weaknesses), error cases, or usage context. This makes it inadequate for an agent to fully understand how to use the tool effectively.

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

Parameters3/5

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

The input schema has 100% description coverage, with the parameter 'name' documented as 'The name or ID of the type'. The description adds no additional meaning beyond this, such as examples or constraints. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('type effectiveness information'), specifying what information is retrieved (strengths, weaknesses, resistances). However, it doesn't explicitly differentiate from sibling tools like 'fetch_pokemon' or 'search_pokemon', which might also involve type data but focus on different resources.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any context, prerequisites, or exclusions, nor does it relate to sibling tools like 'fetch_pokemon' that might overlap in domain but serve different purposes (e.g., retrieving Pokémon vs. type effectiveness).

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

search_pokemonC

Search for Pokémon by partial name match

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesPartial name to search for

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'partial name match', which hints at search behavior, but doesn't disclose other traits like pagination, rate limits, authentication needs, error handling, or what the return format looks like (especially with no output schema). For a search tool with zero annotation coverage, this is a significant gap in behavioral context.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It is appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration. Every word earns its place, making it highly concise and well-structured.

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

Completeness2/5

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

Given the tool's complexity (a search operation with one parameter), lack of annotations, and no output schema, the description is incomplete. It doesn't explain what the search returns (e.g., list of Pokémon objects, error cases), behavioral traits, or usage context. For a tool with minimal structured data, the description should provide more completeness to aid the agent.

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

Parameters3/5

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

The schema description coverage is 100%, with the parameter 'query' documented as 'Partial name to search for'. The description adds no additional meaning beyond this, as it essentially restates the schema's description. With high schema coverage, the baseline is 3, and the description doesn't compensate with extra details like examples or constraints.

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

Purpose4/5

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

The description clearly states the verb 'Search' and resource 'Pokémon', specifying 'by partial name match' which indicates the matching behavior. It distinguishes from siblings like 'fetch_pokemon' (likely by exact ID) and 'get_pokemon_encounters' (different resource), though it doesn't explicitly name alternatives. The purpose is specific but lacks explicit sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'fetch_pokemon' or 'get_pokemon_encounters'. It implies usage for partial name searches but doesn't state exclusions (e.g., when exact ID is known) or prerequisites. No explicit when/when-not instructions are given.

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

TDQS

B3.2/5.0
Disambiguation4/5

The tools have mostly distinct purposes: fetch_pokemon retrieves detailed info, get_pokemon_encounters focuses on locations, get_type_effectiveness handles type interactions, and search_pokemon enables partial name matching. However, fetch_pokemon and search_pokemon could be slightly confused as both involve Pokémon lookup, but their descriptions clarify the distinction between exact and partial matching.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case, using clear verbs like 'fetch', 'get', and 'search' paired with descriptive nouns. There are no deviations in naming conventions, making the set predictable and readable.

Tool Count4/5

With 4 tools, the count is reasonable for a Pokédex server, covering core functionalities like info retrieval, location data, type analysis, and search. It is slightly lean but well-scoped, as each tool serves a distinct purpose without obvious bloat.

Completeness3/5

The tools cover key aspects such as fetching details, encounters, type effectiveness, and searching, but there are notable gaps. For a Pokédex domain, missing operations like listing Pokémon by generation, evolution chains, or abilities limit coverage, though agents can work around this with the existing tools.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    Enables users to access comprehensive Pokemon data through the PokeAPI, including Pokemon stats, types, descriptions, move details, and complete evolution chains. Allows Claude to answer Pokemon-related questions with detailed information about any Pokemon, their abilities, and evolutionary relationships.
    1
    18
    ISC
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI models to access comprehensive Pokémon data from PokéAPI and simulate battles between any two Pokémon with realistic mechanics including type effectiveness, stat-based damage calculations, and status effects.
    1
  • A
    license
    B
    quality
    D
    maintenance
    Empowers AI assistants to fetch and explore comprehensive Pokémon data from PokeAPI via 47 tools covering Pokémon, moves, items, game mechanics, and more.
    47
    166
    1
    ISC

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hollanddd/pokedex-mcp'

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