Pokémon Champions MCP Server
Enables deployment of the MCP server as a remote HTTP service on Cloudflare Workers' free tier for universal access without local installation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Pokémon Champions MCP ServerMega Staraptor vs Garchomp damage calc?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Pokémon Champions MCP Server
A small MCP server that gives an AI assistant accurate, up-to-date data for competitive Pokémon Champions. Hook it up to Claude (or any MCP client) and you can ask things like:
"Does my Choice Band Mega Staraptor OHKO Garchomp?" "Is Sneasler legal in Regulation M-B, and who else can run Fake Out there?" "What Fairy moves are usable this format?"
It covers damage calculation, type matchups, Pokédex and item lookups, move search, and regulation legality. Everything runs locally — normal queries never hit the network.
Setup
You'll need Node 18+. Clone the repo, then:
npm install
npm run buildThat compiles everything into dist/. Quick check that it works:
npm testRelated MCP server: Pokemon Showdown MCP Server
Connecting it to your assistant
This is a standard stdio MCP server, so any MCP client can launch it — you just point it at
the built dist/index.js.
Grab the absolute path to the entry point (you'll paste this into your client):
node -e "console.log(require('path').resolve('dist/index.js'))"Add it to your client's MCP config:
{ "mcpServers": { "pokemon-champions": { "command": "node", "args": ["/absolute/path/to/poke-mcp-tool/dist/index.js"] } } }Claude Desktop — Settings → Developer → Edit Config, then merge in the block above.
Claude Code —
claude mcp add pokemon-champions node /absolute/path/dist/index.js.Anything else — add an equivalent stdio entry (
command: node,args: [path]).
Restart the client. It should now list tools like
calculate_damageandfind_pokemon_by_move. Try asking it one of the questions up top.
Use the absolute path — the client runs from its own working directory, so a relative one won't resolve.
Hosting it online (Cloudflare Workers)
Want people to use it without installing anything — or from Claude on the web or your phone? Deploy it as a remote HTTP server and they just paste a URL. It runs on Cloudflare Workers' free tier.
Every tool is read-only over public data, so the hosted server is stateless and needs no
login or API key — there's no OAuth to set up. Workers has no filesystem, so the datasets are
bundled into the Worker (src/worker.ts) instead of read from disk; the local
stdio server is untouched.
npm install
npx wrangler login # one-time: authorize Wrangler with your free Cloudflare account
npm run dev:worker # optional: test locally (real Workers runtime, no account needed)
npm run deploy:worker # deploy — prints your public URLThe MCP endpoint is the printed URL plus /mcp (e.g.
https://pokemon-champions-mcp.<you>.workers.dev/mcp); a plain GET / is a health check.
Add that /mcp URL as a custom connector in Claude (Settings → Connectors; requires a paid
plan, or one connector on Free) or as a remote MCP server in Cursor. Config lives in
wrangler.toml.
Tools
Tool | What it answers |
| "Does my Mystic Water Blastoise OHKO that Garchomp?" — full damage/percent range, hits-to-KO, and the human-readable calc string. Auto-fills stats/typing/ability from the Champions dex (so Mega Staraptor uses Contrary, and even Champions-only Megas like Mega Eelektross calc correctly). Handles items, weather, terrain, Tera, crits, multi-hit, and Doubles spread reduction. |
| The multiplier (0–4x) of an attacking type against 1–2 defending types. |
| Base stats, typing, abilities, weight, and full movelist for a Pokémon (Mega forms accepted, e.g. |
| Effect, how-to-obtain, and category (Hold Item / Mega Stone / Berry) for a held item, e.g. |
| Browse the held-item catalog, optionally filtered by |
| Whether a Pokémon — and optionally listed moves and/or held |
| "Who can run Fake Out in M-B?" — every Pokémon legal in a regulation that can learn a given move, with the move's type/category/base power. Name-tolerant ( |
| The pool of moves usable in a regulation (everything learnable by at least one legal Pokémon), each with type, category, base power, and how many Pokémon learn it. Filter by |
| The regulation's legal roster, each with its dex number, typing, base stats, and abilities. Filter by |
| Which regulations are available locally, with each one's metadata and counts. |
Good to know
A few things that reflect how the format actually works, and which the tools tell you about in their output rather than hiding:
There are no per-move bans. A move is "legal" if a legal Pokémon can learn it, so
list_legal_movesis really the pool of learnable moves — and a move with no legal learners (e.g. Spore in M-B) shows up as unusable.Mega legality follows the base species.
check_legality("Mega Staraptor")resolves via Staraptor, unless that specific Mega is separately excluded (M-B drops Mega Garchomp Z and Mega Lucario Z).A handful of Champions-original ability effects aren't simulated. Stats, typing, and the ability name are accurate, but a brand-new ability's special mechanic may not factor into the damage number.
Refreshing the data
The server only ever reads its data files; the scrapers below are run by hand when the game changes. They pull from Serebii.
npm run scrape -- m-b # regulation legality (roster + bans + legal items)
npm run scrape:items # held-item catalog (effects, locations, categories)
npm run scrape:dex # per-Pokémon stats, typing, abilities, learnsetsPass a different id to the first one for future regulations (npm run scrape -- m-c). The
scrapers are deliberately forgiving — if a page changes shape they warn and write what they
found instead of crashing.
Layout
src/server.ts the 9 MCP tools (transport-agnostic; no Node-only or filesystem code)
src/index.ts stdio entry — mounts server.ts on stdio (the local default)
src/worker.ts Cloudflare Workers entry — mounts server.ts on HTTP, with data bundled in
src/diskdata.ts Node-only: reads the JSON datasets from disk and registers them (stdio)
src/calc.ts damage formula + type effectiveness
src/dex.ts Pokémon lookups (data/champions-dex.json; injected or disk-loaded)
src/items.ts item lookups (data/champions-items.json; injected or disk-loaded)
src/movedex.ts move search, regulation-scoped
src/regulations.ts legality checks over regulations/*.json (injected or disk-loaded)
src/names.ts Pokémon-name normalization (Mega word order, base species)
scripts/ the standalone scrapers
data/, regulations/ generated data (committed; bundled into the Worker)
test/smoke.ts in-memory MCP client exercising every tool
wrangler.toml Cloudflare Workers config (hosted deployment)Available Tools
10 toolscalculate_damageCalculate battle damage (Pokémon Champions)A
Calculate the damage one Pokémon deals to another with a given move in Pokémon Champions (VGC-style, defaults to Doubles). Wraps the trusted @smogon/calc engine, so abilities (Contrary, Intimidate, ...), items, weather, terrain, Tera, crits, multi-hit, screens and Doubles spread reduction are all handled correctly. For moves whose power builds up over a battle — Rage Fist (per hit taken), Last Respects (per fainted ally) — pass moveContext so the base power scales correctly; or pin any variable-power move with moveContext.basePowerOverride. Answers questions like "does my Choice Band Staraptor-Mega OHKO that Garchomp?". Returns the damage range, percent range, hits-to-KO, and the human-readable calc string.
| Name | Required | Description | Default |
|---|---|---|---|
| move | Yes | The move the attacker uses, e.g. "Close Combat". | |
| field | No | Battle field/side conditions. Defaults to Doubles. | |
| attacker | Yes | The attacking Pokémon and its set. | |
| defender | Yes | The defending Pokémon and its set. | |
| moveContext | No | Battle-history context for moves whose base power accumulates (Rage Fist, Last Respects), or a raw basePowerOverride for any other variable-power move. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully discloses behavior: it wraps the @smogon/calc engine, handles abilities/items/weather/terrain/crits/multi-hit/screens/Doubles spread, and explains moveContext for variable-power moves. It also describes the return values (damage range, percent range, hits-to-KO, calc string).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: it starts with the main purpose, then details engine capabilities, special move handling, example usage, and outputs. Each sentence contributes meaningful information without wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested schemas, no output schema, no annotations), the description is highly complete. It explains key mechanics, special cases, and return values, making it sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by explaining the purpose of moveContext for Rage Fist/Last Respects and basePowerOverride, plus gives a concrete usage example that clarifies parameter roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates damage between two Pokémon with a given move, specific to Pokémon Champions. It includes an explicit example question and distinguishes itself from sibling tools like type_effectiveness and get_pokemon by focusing on damage calculation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context with the example 'does my Choice Band Staraptor-Mega OHKO that Garchomp?' indicating when to use the tool. It does not explicitly mention alternatives, but the context is clear without needing exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_legalityCheck regulation legality (Pokémon Champions)A
Check whether a Pokémon — and optionally specific moves and/or held items — is legal in a given Pokémon Champions regulation (e.g. "m-b"). Reads purely from local regulation JSON (fully offline). If the regulation file is missing, returns an error telling you to run the scraper. If the regulation has no per-move or per-item legality data, that is stated explicitly rather than guessed.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Optional list of held-item names to check for legality, e.g. ["Life Orb"]. | |
| moves | No | Optional list of move names to check for legality. | |
| pokemon | Yes | Pokémon species name to check. | |
| regulation | Yes | Regulation id, e.g. "m-b". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool reads purely from local JSON (offline), returns an error if the regulation file is missing and tells to run the scraper, and explicitly states when per-move/per-item data is absent rather than guessing. This is valuable behavioral context, though it does not describe the return format or other potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary purpose followed by essential edge-case caveats. Every sentence earns its place, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description covers important operational aspects: offline source, missing-file error, and explicit handling of absent data. It does not specify the exact return value structure, but the purpose and key edge cases are well enough described for an agent to select and invoke the tool correctly. Sibling context also helps frame its role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with per-parameter descriptions, so the baseline is 3. The description mentions optional moves/items and gives an example regulation, but these details already appear in the schema. It does not add meaningful new semantics beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: checking whether a Pokémon, plus optional moves/items, is legal under a given regulation, with an example ('m-b'). It distinguishes itself from sibling tools like list_legal_moves or list_legal_pokemon by focusing on a single check rather than listing all legal options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool—when you need a legality check for a specific Pokémon and optional moves/items—but it does not explicitly name alternatives or state when not to use it. It provides clear context about offline operation and error behavior, but lacks explicit comparison to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_pokemon_by_moveFind legal Pokémon that learn a move (Pokémon Champions)A
Given a move and a Pokémon Champions regulation (e.g. "m-b"), list every Pokémon that is legal in that regulation AND can learn the move. Answers "who can run Fake Out in M-B?" or "which legal mons get Spore?". Learnsets come from the Champions dex; the move's type/category/base power are included when the engine knows the move. NOTE: Champions publishes no per-move bans, so "legal move" means a legal Pokémon can learn it. Defaults to regulation "m-b".
| Name | Required | Description | Default |
|---|---|---|---|
| move | Yes | Move name, e.g. "Fake Out", "Will-O-Wisp", "Spore". | |
| regulation | No | Regulation id (e.g. "m-b"). Defaults to "m-b". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description takes on the full burden of disclosure. It explains the data source (Champions dex), that move stats are included when known, and the important caveat that Champions publishes no per-move bans. This provides meaningful insight beyond the schema, though it omits potential edge cases like unknown move/regulation handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the first sentence states the primary action, followed by illustrative examples, data source details, an important note, and the default. Every sentence adds value and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description must explain return values. It partially does by stating 'list every Pokémon' and noting that move stats are included, but it does not specify the exact output format (e.g., names vs. objects) or behavior for empty results/unknown values. This leaves some gaps given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description reinforces the parameter meanings with examples and the default regulation, but does not add substantial new details beyond the schema. It does clarify the intended usage of the parameters in context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 ('list') and resource ('every Pokémon that is legal in that regulation AND can learn the move'). It distinguishes itself from siblings like list_legal_pokemon and list_legal_moves by combining both move and regulation filters, and provides concrete example questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by explaining the inputs (move and regulation) and showing example queries like 'who can run Fake Out in M-B?'. It also mentions the default regulation and clarifies the legality semantics. However, it does not explicitly contrast with alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itemLook up a held item (Pokémon Champions)A
Look up a single Pokémon Champions held item by name (e.g. "Choice Scarf", "Garchompite", "Sitrus Berry"): returns its in-game effect, how to obtain it, its category (Hold Item / Mega Stone / Berry), and whether it can be held in battle. Data comes from the Champions items page (Serebii). The "source" field shows whether the answer came from the Champions catalog or the @smogon/calc fallback (which lacks effect/location text). Optionally pass a regulation id (e.g. "m-b") to also get whether the item is legal there.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Item name, e.g. "Life Orb", "Charizardite X", or "Lum Berry". | |
| regulation | No | Optional regulation id (e.g. "m-b") to also check item legality. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the burden of behavioral disclosure. It details the returned fields (effect, obtain method, category, holdability), the data source, and importantly explains the 'source' field and the @smogon/calc fallback lacking effect/location text. It also clarifies the effect of the optional regulation parameter. This is rich, non-obvious behavioral context beyond a simple 'looks up' statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized: the first sentence states the core purpose with examples, followed by return fields, data source/fallback nuance, and optional parameter behavior. Every sentence contributes new information, and the purpose is front-loaded. No filler or redundant restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of an output schema, the description compensates by enumerating the key return components (effect, how to obtain, category, holdability, source) and the fallback behavior. It also mentions the source of the data (Serebii) and the optional regulation legality check. This is sufficient for a user to understand what the tool returns and when the output might be incomplete, making it contextually complete for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage with descriptions for both parameters. The description adds value by providing concrete example names for 'name' and explaining what the regulation id does (e.g., 'm-b' checks legality). This goes beyond the schema's bare descriptions, enhancing practical understanding of how to use the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool looks up a single Pokemon Champions held item by name, with concrete examples (e.g., 'Choice Scarf', 'Garchompite'). This specific verb-resource pairing ('look up a single... item') distinguishes it from siblings like list_items (listing multiple) and get_pokemon (Pokemon data).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies a clear use case: lookup by name with optional regulation filter, which implies when to use it. It does not explicitly name alternatives or exclusions, but the distinction from a list operation is evident through 'single' and by-name lookup. The mention of the fallback source also helps set expectations, though no sibling alternatives are directly referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pokemonLook up a Pokémon (Pokémon Champions)A
Look up a Pokémon by name (Mega forms accepted, e.g. "Staraptor-Mega" or "Mega Staraptor") in Pokémon Champions: returns base stats, typing, abilities, and weight. Data comes from the Champions Pokédex (Serebii) so game-original Mega Evolutions are accurate — e.g. Mega Staraptor has Contrary, which @smogon/calc gets wrong. Also returns the Pokémon's full learnable movelist ("moves"). The "source" field shows whether the answer came from the Champions dex or the @smogon/calc fallback. Optionally pass a regulation id (e.g. "m-b") to also get whether the Pokémon is legal there and its regulation-legal moves.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Pokémon species name, e.g. "Garchomp", "Staraptor-Mega", or "Mega Raichu X". | |
| regulation | No | Optional regulation id (e.g. "m-b") to also check legality. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes on the full burden. It discloses the data source (Champions Pokédex/Serebii), the @smogon/calc fallback, the 'source' field to indicate which source was used, and the accuracy advantage for Mega evolutions. This goes beyond a bare 'lookup' and provides meaningful behavioral context, though it doesn't mention error cases or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences but packs in the main lookup purpose, return fields, an example of Mega naming, a data-source note, the source field, and the optional regulation behavior. Every sentence carries meaning, and it is front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a lookup tool with no output schema, the description explains the key return values (stats, typing, abilities, weight, moves, source) and the optional legality data. It covers the main use cases and edge cases of Mega forms. It does not describe the exact structure of the output, but the list of fields is sufficient for an agent to understand what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying accepted naming variants for Mega forms ('Staraptor-Mega' or 'Mega Staraptor'), and explaining that the optional regulation parameter checks legality and legal moves. This goes beyond the schema's terse examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Look up a Pokémon by name,' then enumerates the returned data (base stats, typing, abilities, weight, movelist, source). It also clarifies the tool's unique scope (Champions Pokédex, Mega forms) and distinguishes it from potential siblings by mentioning the source field and optional legality check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for basic Pokémon lookups and emphasizes Mega evolution accuracy, but does not explicitly compare to sibling tools like check_legality or list_legal_moves. It mentions an optional regulation id for legality, yet doesn't state when to prefer dedicated legality tools. Context is present but exclusions/alternatives are not explicitly addressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_itemsList held items (Pokémon Champions)A
Browse the items a Pokémon can hold in Pokémon Champions: Hold Items (Choice Scarf, Life Orb, Leftovers, ...), Mega Stones (Garchompite, Charizardite X, ...), and Berries (Sitrus, Lum, type-resist berries, ...). Each item includes its in-game effect, how to obtain it, and its category. Data is scraped from the Champions items page (Serebii). Optionally filter by category or a name substring, and pass a regulation id (e.g. "m-b") to mark which items are legal there. Answers "what berries can I hold?" or "which Mega Stones exist in Champions?".
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter to one category: "Hold Item", "Mega Stone", "Berry", or "Miscellaneous". | |
| regulation | No | Optional regulation id (e.g. "m-b") to mark each item legal/illegal there. | |
| nameContains | No | Case-insensitive substring to filter item names, e.g. "berry" or "choice". | |
| includeNonHeld | No | Include non-held Miscellaneous items (tickets/coupons). Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the data source (Serebii scraped page), what each item includes (effect, how to obtain, category), and the optional regulation legality marking. It does not mention pagination or data freshness, but for a read-only list tool this is reasonable context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the verb and resource. Each sentence adds value: what is listed, what data each item provides, and how to filter/use regulation. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately explains the item content and filtering semantics for a read-only list tool with 4 optional parameters and no output schema. It could mention includeNonHeld explicitly in the narrative, but the schema already covers it, and the description still gives a solid overall picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds extra meaning by explaining the category filter using actual categories (Hold Items, Mega Stones, Berries) and clarifies that the regulation id marks which items are legal there, going beyond the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with 'Browse the items a Pokémon can hold in Pokémon Champions' and enumerates categories (Hold Items, Mega Stones, Berries), clearly distinguishing it from sibling tools like get_item (singleton item lookup) and list_legal_moves. It also states the kinds of questions it answers, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use cases by giving example questions like 'what berries can I hold?' and explaining optional filtering and regulation marking. However, it does not explicitly contrast with alternatives (e.g., 'for a single item, use get_item'), so no direct when-not guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_legal_movesList legal moves in a regulation (Pokémon Champions)A
List the moves available in a Pokémon Champions regulation (e.g. "m-b") — i.e. every move learnable by at least one legal Pokémon — each with its type, category (Physical/Special/Status), base power, and how many legal Pokémon can learn it. Optionally filter by name substring, move type (e.g. "Fire"), or category. Answers "what Fairy moves are usable in M-B?" or "is Glacial Lance legal here?". NOTE: Champions publishes no per-move bans, so this is the pool of learnable moves, not a separate curated allowlist. Defaults to regulation "m-b".
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter to one move type, e.g. "Fire", "Fairy". | |
| category | No | Filter by category: "Physical", "Special", or "Status". | |
| regulation | No | Regulation id (e.g. "m-b"). Defaults to "m-b". | |
| nameContains | No | Case-insensitive substring to filter move names, e.g. "beam" or "punch". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral disclosure. It reveals output structure (type, category, base power, count), the default regulation, and the semantic nuance of 'legal moves' being the learnable pool. The note about no per-move bans is a non-obvious behavioral trait that helps avoid misinterpretation. This goes well beyond schema information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) yet information-dense. The main action verb comes first, followed by scope, output fields, filtering options, example queries, and a critical clarification. Every sentence serves a purpose: defining the tool, illustrating usage, and preventing a misunderstanding. There is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list-style tool with 4 optional parameters and no output schema, the description fully covers what the tool does, what it returns, when to use it, and a crucial domain nuance. Given the sibling tools, it clearly positions itself for move-pool queries and provides sufficient context for an agent to select it and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, so baseline is 3. The description repeats parameter filtering options (name substring, type, category) and the default regulation, which are already in schema descriptions. It adds no new parameter-level syntax or format details beyond the schema, so no elevation beyond baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses a specific verb 'List' with a clearly defined resource ('moves available in a Pokémon Champions regulation'). It explicitly states the scope (every move learnable by at least one legal Pokémon) and differentiates from siblings by focusing on the move pool rather than individual legality checks or Pokémon listings. Examples of questions it answers further cement its distinct purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context with examples: 'Answers "what Fairy moves are usable in M-B?" or "is Glacial Lance legal here?"'. Notably clarifies a key scope limitation ('Champions publishes no per-move bans') and that the result is the learnable pool, steering users away from expecting a curated allowlist. This is strong guidance compared to typical descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_legal_pokemonList legal Pokémon in a regulation (Pokémon Champions)A
List the Pokémon legal in a Pokémon Champions regulation (e.g. "m-b") — the regulation's legal pool — each enriched with its National Dex number, typing, base stats, and abilities from the Champions dex. Optionally filter by name substring or by type (e.g. "Dragon"). Answers "what Fairy types are legal in M-B?" or "show me the M-B roster". Reads the regulation's legal-Pokémon allowlist directly (the complement to list_legal_moves). Defaults to regulation "m-b".
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter to one type, e.g. "Dragon", "Fairy". | |
| regulation | No | Regulation id (e.g. "m-b"). Defaults to "m-b". | |
| nameContains | No | Case-insensitive substring to filter Pokémon names, e.g. "char" or "mega". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the data source ('reads the regulation's legal-Pokémon allowlist directly'), the enriched return fields (National Dex number, typing, base stats, abilities), default behavior, and optional filtering. It could additionally state that the operation is read-only/no side effects, but the language strongly implies a non-mutating listing operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose, and includes concrete examples, a sibling reference, and default behavior without redundancy. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, yet the description explains what the response contains (enriched Pokémon data with specific fields). It also covers filtering behavior, default regulation, and the relationship to list_legal_moves. For a read-only list tool with three optional parameters, this is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes all three parameters (100% coverage), so the baseline is 3. The description adds value by giving concrete filter examples ('Dragon', 'mega'), clarifying that filters are optional, and reinforcing the default for `regulation`. This goes beyond merely restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and identifies the exact resource ('Pokémon legal in a Pokémon Champions regulation'), includes concrete examples like 'm-b', and explicitly contrasts itself with the sibling tool list_legal_moves. This clearly distinguishes the tool from its siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by naming the complement (list_legal_moves), giving example questions ('what Fairy types are legal in M-B?'), and noting the default regulation. However, it does not explicitly state when not to use this tool or compare it with other siblings like check_legality or get_pokemon, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_regulationsList available regulations (Pokémon Champions)A
List the Pokémon Champions regulations currently available locally (the JSON files in regulations/), with each one's metadata (name, date range, source URL, last-scraped timestamp) and counts of legal Pokémon/moves. Cheap way to know what legality data this server has before calling check_legality.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses the local file-based nature, the 'cheap' operational cost, and the output structure. While it doesn't explicitly mention side effects or errors, the listing operation is clearly read-only and the description adds useful behavioral context beyond a bare list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and immediately states the verb and resource. The first sentence packs in essential details (file location, returned metadata, counts), and the second provides usage guidance. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (no parameters, no output schema, no annotations), the description fully covers the tool's purpose, output contents, data source, and usage context. It tells the agent exactly what to expect from the response (metadata fields and counts), making it complete for a simple listing operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline score is 4. The description correctly omits parameter explanations since none exist, and the schema trivially covers all parameters. No additional semantic detail is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List'), a clear resource ('Pokémon Champions regulations'), and adds detail about the data source ('JSON files in regulations/') and the exact contents (metadata and counts). It distinguishes itself from siblings by focusing on regulation metadata and explicitly positioning itself as a precursor to check_legality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly provides a usage context: 'Cheap way to know what legality data this server has before calling check_legality.' This tells the agent when to use the tool and names the relevant successor tool, giving clear guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_effectivenessType effectiveness multiplier (Pokémon Champions)A
Given an attacking type and 1 or 2 defending types, return the damage multiplier (0, 0.25, 0.5, 1, 2, or 4) and a short explanation, for Pokémon Champions. Derived from the type chart bundled in @smogon/calc. Answers "how effective is Fighting vs a Flying/Psychic Pokémon?".
| Name | Required | Description | Default |
|---|---|---|---|
| attackingType | Yes | The move's type, e.g. "Fighting". | |
| defendingTypes | Yes | The defending Pokémon's type(s), 1 or 2 entries. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses the exact output values (0, 0.25, 0.5, 1, 2, 4), the inclusion of a short explanation, the game context (Pokémon Champions), and the data source (@smogon/calc). It does not describe edge cases like duplicate defending types, but the schema's enum constraints mitigate that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding value: what it does, output/scope, and an example. No fluff or repetition of schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter calculator with a clear output (multiplier and explanation), the description is complete. It states the input types, output range, and gives a concrete use case, making it sufficient without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters with enums and descriptions, covering 100% of parameters. The description adds only the example of 'Fighting' vs 'Flying/Psychic' to illustrate usage, not new semantic details beyond the schema. So baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning type effectiveness multipliers for Pokémon Champions, with a specific verb 'return' and the resource (attacking type vs defending types). The example question and mention of @smogon/calc distinguish it from sibling tools like calculate_damage, which likely compute actual damage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete example ('Fighting vs a Flying/Psychic') that implicitly shows when to use the tool, but it does not explicitly mention alternatives or exclusion criteria. Given sibling calculate_damage, a clearer statement of 'use this for multipliers, not damage' would improve guidance.
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.
10 tool updates
v0.1.0- First observed
calculate_damage - First observed
check_legality - First observed
find_pokemon_by_move - First observed
get_item - First observed
get_pokemon - First observed
list_items - First observed
list_legal_moves - First observed
list_legal_pokemon - First observed
list_regulations - First observed
type_effectiveness
TDQS
Scored across 10 tools
Each tool targets a distinct query type—damage calculation, type chart, Pokémon data, legality, items, and move/regulation lists. No two tools appear to do the same thing; even list_items vs get_item follow the standard browse/detail pattern.
Most tools follow a verb_noun pattern (calculate_damage, get_pokemon, list_regulations, check_legality), but 'type_effectiveness' is a noun phrase rather than a command, and the verbs vary (list, get, check, find). Still, the naming is readable and predictable within action groups.
With 10 tools, the server is well-scoped for its purpose, covering damage calc, type matchups, Pokémon lookup, legality, items, and regulation queries without redundancy. This falls comfortably within the ideal 3-15 range.
The tool surface covers the core workflows: damage calculation, type effectiveness, Pokémon data, legality checks, item browsing, and legal move/Pokémon lists. Minor gaps like a dedicated get_move tool are not critical because list_legal_moves and get_pokemon already provide move information.
Maintenance
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
Provide detailed Pokémon data and information through a standardized MCP interface. Enable LLMs an…
Look up Pokemon TCG Pocket cards, sets, packs, and evaluate decks with battle simulations.
Look up Pokémon, moves, abilities, items, natures, and type matchups from PokéAPI v2.
Real sold prices, history & PSA population for graded Pokémon cards (EN/JP/CN). Knows nicknames.
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables interaction with live Pokémon data through PokeAPI, providing comprehensive Pokémon information, battle calculations, moveset validation, and team analysis. Supports searching Pokémon and moves, calculating stats, checking type effectiveness, and analyzing team synergies with in-memory caching for improved performance.9-
- AlicenseAqualityDmaintenanceProvides Pokemon Showdown competitive battle data to AI assistants, enabling lookup of Pokemon stats, moves, abilities, items, type matchups, and strategic information through natural language queries.85MIT
- AlicenseAqualityDmaintenanceProvides accurate Pokemon data and Gen 9 damage calculation tools including stats, moves, type effectiveness, damage calculations, and accuracy checks for Pokemon battles.8MIT
- AlicenseNot gradedqualityDmaintenanceA high-precision damage calculator for Pokemon Scarlet and Violet, supporting 16-step random rolls, type effectiveness, terastal, and weather effects. Enables users to calculate damage, compare moves, search Pokemon/moves/items, and analyze KO probabilities.MIT