Skip to main content
Glama
README.md
# poke-mcp

A [Model Context Protocol](https://modelcontextprotocol.io) server that turns your favorite LLM client into a Pokédex. Backed by a dataset of 801 Pokémon (generations 1–7).

## Tools

| Tool | Description |
|---|---|
| `get_pokemon` | Look up a Pokémon by name. Supports exact, partial, and misspelled names (`pika`, `mrmime`, `charmandr` all work). Returns types, abilities, base stats, height/weight, generation, and legendary status. Ambiguous queries return candidate names. |
| `predict_battle` | Predict the winner of a battle between two Pokémon using a deterministic model based on base stats and type effectiveness. Same inputs always produce the same result, with a full breakdown of why. |

## Setup

Requires Node.js 18+.

```sh
npm install
npm run build
```

## Client Configuration

### opencode

Add to `opencode.json` (project) or `~/.config/opencode/opencode.json` (global):

```json
{
  "mcp": {
    "poke-mcp": {
      "type": "local",
      "command": ["node", "/absolute/path/to/poke-mcp/dist/index.js"]
    }
  }
}
```

### Claude Desktop

Add to `claude_desktop_config.json` (found via **Claude Desktop → Settings → Developer → Edit Config**):

```json
{
  "mcpServers": {
    "poke-mcp": {
      "command": "node",
      "args": ["/absolute/path/to/poke-mcp/dist/index.js"]
    }
  }
}
```

Restart Claude Desktop after saving.

### Other MCP clients

The server speaks standard MCP over **stdio** — launch it with any client that supports local MCP servers:

```
node /absolute/path/to/poke-mcp/dist/index.js
```

## Development

```sh
npm run build   # compile TypeScript to dist/
npm start       # run the server (stdio transport)
```

## Data

`data/pokemon.csv` — 801 Pokémon with base stats, types, abilities, and per-type defensive multipliers used for battle predictions.

Sourced from the [Pokémon with stats dataset](https://www.kaggle.com/datasets/rounakbanik/pokemon) by Rounak Banik on Kaggle.

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

The two tools serve clearly distinct purposes: one retrieves Pokemon information, the other predicts battle outcomes. There is no overlap or ambiguity in their intended use.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern (get_pokemon, predict_battle), making the naming predictable and easy to reason about.

Tool Count3/5

With only 2 tools, the server feels thin for a 'Pokemon' domain, but the tools are focused and each serves a distinct purpose, making it borderline acceptable for a narrow scope.

Completeness2/5

The server lacks common operations such as listing all Pokemon, retrieving moves, or detailed type charts. The stated domain implies a broader surface, leaving significant gaps that agents may need to work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues