Skip to main content
Glama
tannnuu

AI Pokemon Arena MCP

by tannnuu

AI Pokemon Arena MCP

A web-based Pokemon battle simulation application powered by AI, featuring both a user-friendly web interface and MCP (Model Context Protocol) server integration for advanced interactions.

Live Demo:
https://ai-pokemon-arena-mcp-server.vercel.app/

Features

  • Interactive Web Interface: Select Pokemon and simulate battles through a clean, responsive web UI

  • AI-Powered Battle Simulation: Uses Gemini AI for intelligent battle analysis and realistic outcomes

  • Comprehensive Pokemon Database: Access detailed Pokemon information via PokeAPI integration

  • MCP Server Support: Connect to Claude Desktop for advanced Pokemon queries and battle simulations

  • Real-time API: RESTful endpoints for Pokemon data and battle results

Related MCP server: Pokémon MCP Server

Project Structure

src/                    # Source TypeScript files
├── index.ts            # MCP server entry point
├── services/
│   ├── pokeapi.ts      # PokeAPI integration
│   └── gemini.ts       # Gemini AI service
├── tools/
│   └── pokemon-tools.ts # MCP tool implementations
├── types/
│   └── pokemon.ts      # TypeScript definitions
└── utils/
    └── helpers.ts      # Utility functions

build/                  # Compiled JavaScript files
simple-battle.html      # Main web interface
server.js               # Express web server
styles.css              # CSS styles for the web app
script.js               # Frontend JavaScript
package.json            # Dependencies and scripts
tsconfig.json           # TypeScript configuration

Setup

Prerequisites

  • Node.js 18+

  • Gemini API key

Installation

  1. Install dependencies:

npm install
  1. Set up environment: Create a .env file with your Gemini API key:

GEMINI_API_KEY=your_gemini_api_key_here
  1. Build the project:

npm run build

Usage

Web Application

Start the web server:

npm run web

Open http://localhost:3001/simple-battle.html in your browser to access the battle arena.

You can also access the live demo at:
https://ai-pokemon-arena-mcp-server.vercel.app/

Features:

  • Search and select Pokemon for battle

  • View detailed Pokemon stats and information

  • Simulate battles with AI-generated narratives

MCP Server

Run the MCP server:

npm start

Connect to Claude Desktop: Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "ai-pokemon-arena-mcp": {
      "command": "node",
      "args": ["C:/path/to/your/project/build/index.js"]
    }
  }
}

Available MCP Tools:

  • get_pokemon_data: Get detailed Pokemon information

  • battle_simulation: Simulate battles between two Pokemon

  • get_pokemon_list: Browse Pokemon with pagination

API Endpoints

The web server provides REST API endpoints:

  • GET /api/pokemon/:name - Get Pokemon data

  • POST /api/battle - Simulate a battle

  • GET /api/pokemon - List Pokemon

Development

Development mode (with hot reload):

npm run dev

Test the MCP server:

npm run test

Technologies Used

  • Frontend: HTML5, CSS3, JavaScript

  • Backend: Node.js, Express.js

  • AI: Google Gemini API

  • Data: PokeAPI

  • Protocol: Model Context Protocol (MCP)

  • Language: TypeScript

Contributing

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes

  4. Test thoroughly

  5. Submit a pull request

License

MIT License

Available Tools

5 tools
analyze_pokemonC

Get AI-powered analysis of a Pokemon's battle capabilities and characteristics

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPokemon name or Pokedex number to analyze

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. The phrase 'AI-powered' hints that output is generated/qualitative rather than deterministic data, but it omits any mention of cost, latency, determinism, or rate limits that matter for an AI-backed operation.

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

Conciseness4/5

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

A single efficient sentence with the core action front-loaded and no filler. It is appropriately sized, though it is so terse that it forgoes the differentiation and behavioral detail the tool arguably needs.

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

Completeness3/5

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

For a simple one-parameter tool this is close to adequate, but with no output schema the description should explain what the analysis actually returns and how it differs from battle_simulation. It leaves the return value and the analytical scope undefined.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single well-documented 'name' parameter (Pokemon name or Pokedex number). The description adds no syntax or format detail beyond the schema, which matches the baseline-3 expectation when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb ('Get AI-powered analysis') and resource ('a Pokemon's battle capabilities and characteristics'), which is clearer than a bare data fetch. However, it does not explicitly distinguish itself from siblings like battle_simulation or get_pokemon_data, leaving the agent to infer that this returns qualitative analysis rather than raw data or a simulation.

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?

No when-to-use guidance and no alternatives named. With siblings such as battle_simulation and get_pokemon_data that overlap conceptually, the description never says when this analysis tool is preferable, so selection relies entirely on the agent's guessing.

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

battle_simulationB

Simulate a battle between two Pokemon using AI analysis of their stats, types, and abilities

ParametersJSON Schema
NameRequiredDescriptionDefault
pokemon1YesFirst Pokemon name or Pokedex number
pokemon2YesSecond Pokemon name or Pokedex number

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does disclose that results come from 'AI analysis,' hinting at a non-deterministic, generated outcome rather than a fixed computation, which is genuinely useful. However, it omits latency, cost, determinism, and whether a canonical winner or a narrative is produced.

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?

A single, front-loaded sentence with no filler. Every clause ('simulate a battle,' 'two Pokemon,' 'AI analysis') earns its place.

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

Completeness3/5

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

There is no output schema and no annotations, so the description should ideally say what the agent gets back (a predicted winner, probabilities, a battle narrative). It also doesn't state whether the same inputs always yield the same result. Adequate to invoke, but incomplete for a simulation tool with no structured output contract.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters ('First Pokemon name or Pokedex number') are fully documented in the schema, so the description adds no parameter meaning. Per the baseline rule for high coverage, a 3 is appropriate.

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?

States a specific verb and resource ('simulate a battle between two Pokemon') and adds the mechanism ('AI analysis of stats, types, abilities'). It is clear what the tool does, though it does not name or distinguish itself from siblings like analyze_pokemon, which could plausibly be confused with it.

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 never says when to use this tool versus the sibling data-fetch tools (get_pokemon_data, analyze_pokemon, search_pokemon). No prerequisites, no exclusions, no alternatives are named; usage must be inferred entirely from the verb.

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

get_pokemon_dataB

Get comprehensive data about a specific Pokemon including stats, types, abilities, and description

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPokemon name or Pokedex number (e.g., "pikachu", "25", "charizard")

TDQS

B3.3/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses the response contents (stats, types, abilities, description), which gives useful behavioral context, but lacks details on rate limits, errors, or data freshness.

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?

A single, well-structured sentence that front-loads the purpose and specifics without any wasted words.

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

Completeness3/5

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

For a simple retrieval tool with one parameter and no output schema, the description is adequate but not complete: it omits sibling differentiation, usage guidelines, and any behavioral caveats. Given the absence of annotations and output schema, more context would be helpful.

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

Parameters3/5

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

Schema coverage is 100%, so the parameter is fully documented in the schema (name or Pokedex number with examples). The description does not add any further parameter meaning, so baseline 3 applies.

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?

States a specific verb (Get) and resource (Pokemon data) and enumerates the data categories returned. It's clear what it does, but it does not distinguish itself from siblings like search_pokemon or analyze_pokemon, which could also retrieve Pokemon data.

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, get_pokemon_list, or analyze_pokemon. There are also no prerequisites or exclusions stated.

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

get_pokemon_listC

Get a list of Pokemon with optional pagination

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of Pokemon to return (max 100, default 20)
offsetNoNumber of Pokemon to skip (default 0)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. 'Get' implies a safe read, but it does not disclose return ordering, what each list entry contains, whether the list is exhaustive, or how pagination termination behaves — meaningful gaps for a list tool with zero 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.

Conciseness4/5

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

A single front-loaded sentence with no waste. It is appropriately terse, though it borders on under-specification rather than being genuinely efficient.

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

Completeness3/5

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

For a simple two-parameter read tool this is minimally viable, but with no output schema and no annotations the description leaves unclear what the returned list actually contains and when the agent has reached the end.

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

Parameters3/5

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

Schema description coverage is 100%, with both limit and offset fully documented (defaults, max 100, min 0). The description only restates 'optional pagination' and adds nothing beyond the schema, so the baseline of 3 applies.

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 states a specific verb ('Get') and resource ('list of Pokemon'), which clearly separates it from singular-data siblings like get_pokemon_data. However, it never names or differentiates against search_pokemon or get_pokemon_data, so the agent must infer the boundary on its own.

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?

It says 'optional pagination' but gives no when-to-use guidance, no condition for choosing this over search_pokemon, and no alternatives or prerequisites. The agent gets no routing help.

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

search_pokemonB

Search for Pokemon by name with partial matching

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query (minimum 2 characters)

TDQS

B3.1/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 behavioral burden. It discloses the matching semantics (partial, by name) but says nothing about case sensitivity, result ordering, how many results return, or what an empty result looks like.

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?

One sentence, front-loaded with the action and resource, with zero filler. The scope qualifier arrives immediately after the core purpose.

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

Completeness3/5

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

For a simple one-parameter search with no annotations and no output schema, the core purpose and matching behavior are covered, but the return shape and match behavior under edge cases (no hits, case sensitivity) are left unstated.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter's description already states the two-character minimum. The description's 'partial matching' adds matching semantics beyond the schema, but no format or normalization details, so the baseline 3 applies.

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?

States a clear verb (search) and resource (Pokemon) with the added qualifier that matching is by name and partial. It does not distinguish itself from siblings like get_pokemon_list or get_pokemon_data, so an agent must infer the boundary.

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?

There is no explicit when-to-use or when-not-to-use guidance and no named alternative. The partial-matching phrase hints at how it differs from an exact-lookup sibling, but the routing decision is left entirely to inference.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updatesv1.0.0
    • First observedanalyze_pokemon
    • First observedbattle_simulation
    • First observedget_pokemon_data
    • First observedget_pokemon_list
    • First observedsearch_pokemon

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation4/5

get_pokemon_data and analyze_pokemon could be confused since both provide Pokemon information, but one is raw data and the other is AI analysis. search_pokemon is clearly for finding Pokemon by name, distinct from get_pokemon_list which lists all. Minor overlap exists but descriptions help differentiate.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern: get_pokemon_data, battle_simulation, get_pokemon_list, search_pokemon, analyze_pokemon. Verb choice is clear and predictable.

Tool Count5/5

5 tools is well-scoped for a Pokemon battle and data server. Each tool serves a distinct purpose without redundancy, and the count is appropriate for the domain.

Completeness4/5

Core operations for retrieving Pokemon data, searching, listing, simulating battles, and analyzing are covered. However, there is no tool to get detailed move information or type effectiveness charts, which could be useful for battle simulation completeness. Minor gaps that agents can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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
    6 npm
    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
    A
    quality
    D
    maintenance
    Enables querying Pokemon information from PokeAPI, including Pokemon details, types, moves, abilities, evolution chains, and search functionality, through natural language.
    8
    8 npm
    Apache 2.0