PokéArena
MCPB · POKEARENA-MCP-0.1.1.MCPB
Play a real 6v6 Pokémon battle. Runs entirely in-process: no server, no API key, no setup.
Available components
Last scanned (19 hours ago)
Scores higher than 89% of MCPB servers
Category Entertainment and Games
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
- Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 66 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability77
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1650 tokens (~150/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Checks we ran (12)
- Source repository
- Provenance
- License
- Maintenance
- Security disclosure
- Schema quality
- Stability
- Tool coverage
- Injection markers
- Destructive annotations
- Judged manipulation
- MCP protocol
Checks we could not complete (4)
These are gaps on our side, not findings about this package. We only credit what we can confirm, so a category made up entirely of them scores 0.
- Malware scan in Supply Chain Security (scores 0 for this)No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
- Known CVEs in Supply Chain Security (scores 0 for this)Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
- Install scripts in Supply Chain Security (scores 0 for this)Install-script risk not yet assessed.
- Dependency health in Supply Chain Security (scores 0 for this)Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
Does not apply to this package (2)
- Endpoint SecurityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
- Transport & ReachabilityScored on hosted endpoints only. A package has no live endpoint of its own for us to probe.
The score does not measure everything. What the score does not measure →
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Nov 26 +1
- Stability: 0.97 → pass security
- 1 Nov 26 −1
- Stability: pass → 0.93 functional
- 26 Oct 26 +1
- Stability: 0.97 → pass security
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed mcpb/https://github.com/shaumik/PokeArena/releases/download/v0.1.1/pokearena-mcp-0.1.1.mcpb@0.1.1
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | mcpb |
| Reason | No attestation published |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
act ~213
Submit your action for this turn AND get the result back. Returns the next fog-of-war view once it is your turn again, or terminal:true with the winner when the battle ends — so a turn costs one call, not two. If the action was illegal, `error` says why and names the legal actions, `ready` is still true and the turn is still yours: pick from the view and call act again. `ready:false` means the result had not arrived within wait_seconds (only possible against a slow human opponent); call wait to keep blocking.
| Name | Type | Req | Description |
|---|---|---|---|
| index | integer | yes | move slot 0..3 for kind=move, or team slot 0..5 for kind=switch |
| kind | string | yes | 'move' to use the active Pokémon's move at Index, or 'switch' to swap to the team member at Index |
| wait_seconds | integer | – | how long to wait for the result before returning ready:false; clamped to [1,120], default 60 |
| Name | Type | Req | Description |
|---|---|---|---|
| accepted | boolean | yes | – |
| error | string | – | – |
| outcome | string | – | – |
| ready | boolean | yes | – |
| terminal | boolean | – | – |
| turn | integer | yes | – |
| view | object | – | – |
| winner | null|integer | – | – |
No examples provided.
find_pokemon ~121
Optional — start_battle's briefing already lists every legal species, so use this only to search a large roster or look something up mid-battle. Search the curated Pokédex by name substring. Returns lightweight matches (dex_no + name + types). The dataset is filtered to a subset — not every species is present. Call this first to discover what's available, then get_pokemon for the species you want to use in submit_team.
| Name | Type | Req | Description |
|---|---|---|---|
| query | string | yes | case-insensitive substring of the species name; empty string returns the first 30 entries |
| Name | Type | Req | Description |
|---|---|---|---|
| capped | boolean | – | – |
| matches | null|array | yes | – |
| total_in_dex | integer | yes | – |
No examples provided.
get_pokemon ~122
Optional — needed only for a species' full legal move list; the briefing already covers species, items and natures. Fetch full details for one species by dex_no, including its legal move list and ability slots. The move .id values and ability slugs returned here are exactly what submit_team expects (moves go in the picks[].moves array; the ability goes in the optional picks[].ability field — omit to default to abilities[0]).
| Name | Type | Req | Description |
|---|---|---|---|
| dex_no | integer | yes | the species' Pokédex number, e.g. 25 for Pikachu |
| Name | Type | Req | Description |
|---|---|---|---|
| abilities | null|array | – | – |
| base | object | yes | – |
| dex_no | integer | yes | – |
| moves | null|array | yes | – |
| name | string | yes | – |
| type1 | string | yes | – |
| type2 | string | – | – |
No examples provided.
join_battle ~202
Attach to an EXISTING battle on a separately running PokéArena arena — needs a battle_id someone already created and a gateway that is up. If you just want to play, use start_battle instead: it needs none of that. Use this only to face a human or another agent in a live arena. For a live vs-AI battle pass only battle_id; for pvp pass slot and join_token.
| Name | Type | Req | Description |
|---|---|---|---|
| battle_id | string | yes | the battle's UUID, as printed by the gateway when the battle was created |
| join_token | string | yes | the per-slot join token for a pvp battle; treat as a password — never log it. Omit (empty) to join a live vs-AI battle, which is tokenless |
| slot | string | yes | which trainer slot to claim: 'p1' or 'p2'. Ignored for live (vs-AI) battles, which always seat you as p1 |
| Name | Type | Req | Description |
|---|---|---|---|
| battle_id | string | yes | – |
| initial_view | object | – | – |
| opponent_trainer | string | yes | – |
| phase | string | yes | – |
| slot | string | yes | – |
| your_trainer | string | yes | – |
No examples provided.
leave_battle ~44
Cleanly close the WebSocket and release the session. If the battle is still in progress this is a forfeit. After this, join_battle can be called again.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| ok | boolean | yes | – |
No examples provided.
list_items ~80
Optional — start_battle's briefing already lists every legal item. List every held item a team may use, with a one-line description of what it does in this engine. Items are not species-restricted: any item here is legal on any Pokémon, one item per Pokémon. Use the .id values in the optional picks[].item field of submit_team.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| items | null|array | yes | – |
| total | integer | yes | – |
No examples provided.
list_natures ~119
Optional — start_battle's briefing already lists every nature and the same caps. List the 25 natures and the numeric team-building rules. Each nature raises one stat by 10% and lowers another by 10%; the five with no 'plus'/'minus' fields are neutral and change nothing. Also returns the battle level and the EV/IV caps submit_team enforces, so a spread can be planned against the real budget rather than an assumed one. Use a nature .id in the optional picks[].nature field of submit_team.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| natures | null|array | yes | – |
| rules | object | yes | – |
| total | integer | yes | – |
No examples provided.
start_battle ~264
START HERE — this is the entry point for playing PokéArena. Starts a real 6v6 Pokémon battle against the built-in AI, running entirely inside this process: no server to run, no docker compose, no API key, no second player, no setup of any kind. The response includes a `briefing` listing every legal species, item and nature plus the format rules, so you can write a team straight away — you do NOT need find_pokemon / get_pokemon / list_items / list_natures first. Then: submit_team (a Showdown paste), then act repeatedly until it returns terminal:true. Three calls reach the first move. Optional: `seed` makes the battle exactly reproducible; `opponent` picks 'heuristic' (default) or 'expectimax'.
| Name | Type | Req | Description |
|---|---|---|---|
| opponent | string | – | which built-in opponent to face: 'heuristic' (default, fast and solid) or 'expectimax' (searches ahead; slower, and not reliably stronger — see docs/deeper-search-played-worse.md) |
| seed | integer | – | optional seed pinning the battle's RNG and the opponent's team; the same seed with the same submitted team replays identically. Omit for a random battle |
| Name | Type | Req | Description |
|---|---|---|---|
| battle_id | string | yes | – |
| briefing | null|object | – | – |
| next_step | string | yes | – |
| opponent | string | yes | – |
| opponent_trainer | string | yes | – |
| phase | string | yes | – |
| seed | integer | yes | – |
| slot | string | yes | – |
| your_trainer | string | yes | – |
No examples provided.
submit_team ~348
Submit your 6-Pokémon team during the picker (OPEN) phase. Required after start_battle or join_battle while phase is 'open'. Write the team in the `team` field as a Showdown paste — one block per Pokémon separated by blank lines, using display names, e.g. "Alakazam @ Life Orb / Ability: Synchronize / EVs: 252 SpA / 252 Spe / Timid Nature / - Psychic / - Recover" with each on its own line. Only the species line and one move are required per Pokémon. start_battle's `briefing` lists every legal species, item and nature, plus the clauses — note the Item Clause bans two Pokémon holding the same item, which standard competitive play allows. On rejection this returns accepted=false with a `report` naming EVERY problem at once, each with the legal alternatives, so one fix pass is enough. `report.warnings` flags choices that are legal but probably weaker than intended. (`picks` remains as a structured alternative if you already have that shape.)
| Name | Type | Req | Description |
|---|---|---|---|
| picks | null|array | – | structured alternative to team: exactly 6 entries carrying dex_no, 1-4 move IDs from that species' learn list, and optional ability/item/nature/evs/ivs. Use team instead unless you already have this… |
| team | string | – | the team as a Showdown paste - one block per Pokemon separated by blank lines, e.g. 'Alakazam @ Life Orb Timid Nature EVs: 252 SpA / 252 Spe - Psychic - Recover'. Display names, not slugs. Preferred… |
| Name | Type | Req | Description |
|---|---|---|---|
| accepted | boolean | yes | – |
| report | null|object | – | – |
No examples provided.
view ~42
Rarely needed: act already returns the next view, so the turn loop does not require this. Use it only to re-read the current fog-of-war state without acting.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
wait ~95
Block until it's your turn, the battle ends, or the timeout elapses. You need this only for the FIRST turn (after submit_team) and to resume after an act that returned ready:false — act already returns the next view, so the steady-state loop is just act → act → act.
| Name | Type | Req | Description |
|---|---|---|---|
| timeout_seconds | integer | – | how long to block waiting for your turn; clamped to [1,120], default 60 |
| Name | Type | Req | Description |
|---|---|---|---|
| error | string | – | – |
| outcome | string | – | – |
| ready | boolean | yes | – |
| terminal | boolean | – | – |
| view | object | – | – |
| winner | null|integer | – | – |
No examples provided.
How do I install the PokéArena MCP server?
PokéArena ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. The MCP registry declares no SHA-256 for this bundle, so there is no published digest to check the download against.
mcpb · pokearena-mcp-0.1.1.mcpb
Download bundleThe MCP registry declares no SHA-256 for this bundle, so there is no published digest to check it against. Open it with an MCPB-capable host such as Claude Desktop.
What is the PokéArena MCP server?
PokéArena is an MCP server listed in the public MCP registry as io.github.shaumik/pokearena. Play a real 6v6 Pokémon battle. Runs entirely in-process: no server, no API key, no setup. This page covers its MCPB bundle (https://github.com/shaumik/PokeArena/releases/download/v0.1.1/pokearena-mcp-0.1.1.mcpb).
Is the PokéArena MCP server safe to use?
PokéArena scores 55 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the PokéArena MCP server expose?
PokéArena exposes 11 tools: act, find_pokemon, get_pokemon, join_battle, leave_battle, and 6 more. Their descriptions and schemas cost roughly 1,650 tokens of context every time the server is loaded.
What licence is the PokéArena MCP server under?
PokéArena declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.
What did VerifyMCP test on the PokéArena MCP server?
VerifyMCP ran 12 checks on PokéArena, covering Source repository, Provenance, License, Maintenance and 8 more. 4 items could not be completed, a gap on our side rather than a finding about PokéArena: Malware scan, Known CVEs, Install scripts and Dependency health. One category scores 0 for that reason, because we only credit what we can confirm. Endpoint Security and Transport & Reachability do not apply to an MCPB bundle, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.