poke-mcp
by aquibm
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