PokeMCP
The PokeMCP server enables Claude AI to play Pokémon Fire Red through the mGBA emulator by providing tools across four main areas:
Input Controls
Press individual buttons (A, B, START, SELECT, directions, L/R) or sequences with customizable timing
Hold buttons for extended durations (e.g., walking multiple tiles, fast-forwarding text)
Wait a specified number of frames through animations or transitions
Screen Capture
Take screenshots of the current game screen at any time or after input/waiting
Game State Reading (RAM)
Full state summary: player location, badges earned, money, party Pokémon (species, level, HP, moves), and battle status
Detailed party info: stats, moves with PP, IVs, and friendship values
Battle state: active Pokémon HP and moves, plus enemy species, level, and HP
Save/Load State
Save and load emulator states to slots (1–9) for progress management or replaying scenarios
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., "@PokeMCPCheck my current party's health and tell me where I am."
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.
PokeMCP - AI Plays Pokemon Fire Red
An MCP server that lets Claude play Pokemon Fire Red through the mGBA emulator. Built for YouTube content — Claude has its own personality, names its Pokemon, trash-talks its rival, and reacts to everything happening in the game.
How It Works
Claude <-> FastMCP Server (Python) <-> TCP Socket <-> Lua Script (inside mGBA)Split gameplay model:
Claude handles: Battles, dialog, menus, naming (trainer/rival/Pokemon), team strategy
Human operator handles: Overworld navigation (walking to destinations)
Navigation is purely visual — Claude reads screenshots to understand the game world
RAM reading is used only for party Pokemon stats, battle data, badges, and money
Related MCP server: mGBA MCP Server
Prerequisites
mGBA v0.10+ — mgba.io
Python 3.12+
uv —
pip install uvPokemon Fire Red ROM — US v1.0 (game code: BPRE)
Setup
1. Install dependencies
uv sync2. Load the Lua script in mGBA
Open mGBA and load your Pokemon Fire Red ROM
Go to Tools > Scripting
File > Load Script → select
lua/mgba_server.luaConsole should show:
MCP Server listening on 127.0.0.1:5555
3. Configure Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"pokemon-firered": {
"command": "C:\\Users\\YOUR_USER\\AppData\\Roaming\\Python\\Python312\\Scripts\\uv.exe",
"args": ["--directory", "C:/path/to/mGba MCP", "run", "mgba-mcp"]
}
}
}Note: Use the full path to
uv.exe— Claude Desktop may not have it in PATH. Find it withpython -c "import shutil; print(shutil.which('uv'))".
4. Play!
Start a conversation with Claude. It will invent a personality, pick a trainer name, and start playing.
Available Tools
Tool | Description |
| Press a GBA button and get a screenshot |
| Press a sequence of buttons with timing |
| See the current game screen |
| Read badges, money, party Pokemon, battle state from RAM |
| Detailed party info (stats, moves, IVs) |
| Battle details (your/enemy Pokemon, HP, moves, PP) |
| Save emulator state (slots 1-9) |
| Load emulator state |
| Wait through animations/transitions |
| Hold a button for extended walking/scrolling |
What Claude Reads from RAM
Party Pokemon — Species, level, HP, moves with PP, stats, IVs, status conditions
Badges — Which gym badges have been earned
Money — Current funds (XOR-decrypted)
Battle state — Enemy Pokemon species, level, HP, moves
Navigation and dialog are handled visually through screenshots only.
Claude's Personality
Each session, Claude invents a unique persona:
Picks its own trainer name and rival name
Names every Pokemon with creative nicknames
Has strong opinions about Pokemon, moves, and characters
Gets emotionally invested — celebrates wins, mourns faints
Narrates its thought process for the audience
All commentary in Spanish for YouTube content
Project Structure
├── pyproject.toml
├── src/mgba_mcp/
│ ├── server.py # FastMCP tools + personality instructions
│ ├── connection.py # TCP client for mGBA communication
│ ├── game_state.py # Pokemon Fire Red RAM parser
│ └── constants.py # Memory addresses and lookup tables
├── lua/
│ └── mgba_server.lua # Lua TCP server loaded into mGBA
└── data/
├── pokemon_species.json
├── pokemon_moves.json
└── map_names.jsonTips for YouTube Recording
Save states are your friend — save before gyms, important battles, or risky catches
Let Claude fail — mistakes and reactions are entertaining content
Navigate for Claude — walk to destinations, let Claude handle the rest
Nudge when stuck — tell Claude "we're at the Pokemon Center" or "there's a trainer ahead"
The game is in English but Claude comments in Spanish — great for bilingual content
Important Notes
ROM must be US v1.0 (BPRE) for memory addresses to work
Load the Lua script in mGBA before starting Claude Desktop
mGBA must stay open while playing
The Lua script auto-detects the ROM and warns if it doesn't match
License
MIT
Available Tools
10 toolsget_battle_stateA
Get current battle information.
Returns your active Pokemon's HP and moves with PP, and the enemy Pokemon's species, level, and HP. Returns a message if not in battle.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and does well by disclosing key behavioral traits: it describes what information is returned (HP, moves with PP, species, level), the conditional behavior ('Returns a message if not in battle'), and that it's a read-only operation (implied by 'Get'). It doesn't mention error conditions or performance characteristics.
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 perfectly front-loaded with the core purpose in the first sentence, followed by specific return details. Both sentences earn their place by providing essential information without any redundancy or unnecessary elaboration.
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 moderate complexity (battle state retrieval), no annotations, 0 parameters, and the presence of an output schema, the description is complete enough. It clearly explains what the tool does, what information it returns, and the conditional behavior when not in battle. The output schema will handle return value details.
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 has 0 parameters with 100% coverage, so the schema fully documents the lack of parameters. The description appropriately doesn't discuss parameters, maintaining focus on the tool's purpose and output. This meets the baseline expectation for zero-parameter tools.
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 specific action ('Get current battle information') and distinguishes it from siblings by focusing on battle-specific data rather than general game state, party information, or input actions. It precisely identifies what information is retrieved (active Pokemon HP/moves, enemy Pokemon species/level/HP).
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 for when to use this tool ('Get current battle information') and implicitly distinguishes it from siblings like 'get_game_state' (general state) and 'get_party' (party info). However, it doesn't explicitly state when NOT to use it or name specific alternatives for battle-related queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_game_stateA
Read the full game state from RAM.
Returns a summary of: player location, badges, money, party Pokemon (species, level, HP, moves), and whether a battle is active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 that the tool reads from RAM and returns a summary of specific game aspects, which helps understand its read-only nature and output format. However, it lacks details on potential side effects, error conditions, or performance characteristics like latency 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 front-loaded with the core purpose in the first sentence, followed by a concise list of returned data. Every sentence adds value without redundancy, making it efficient and well-structured for quick understanding.
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 simplicity (0 parameters, no annotations, but with an output schema), the description is mostly complete. It explains what the tool does and what it returns, which is sufficient for a read operation. However, it could benefit from more behavioral context, such as any limitations or dependencies, to fully compensate for the lack of annotations.
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 has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, focusing instead on the tool's purpose and output. This meets the baseline for tools with no 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 explicitly states the action ('Read the full game state from RAM') and specifies the resource ('game state'), distinguishing it from siblings like get_battle_state or get_party by covering a broader scope. It clearly articulates what the tool does without being tautological.
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 context by detailing what information is returned (e.g., player location, badges, party Pokemon), suggesting it should be used when a comprehensive game state overview is needed. However, it does not explicitly state when to use this tool versus alternatives like get_battle_state or get_party, nor does it provide exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_partyA
Get detailed info about all party Pokemon.
Returns species, level, HP, stats, moves with PP, IVs, and friendship for each Pokemon in the party.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 return data structure, which adds value beyond the schema, but does not mention behavioral traits like whether this is a read-only operation, potential performance impacts, or error conditions. The description is informative but incomplete for behavioral transparency.
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 front-loaded with the core purpose in the first sentence, followed by specific return details. Both sentences are necessary and efficient, with zero wasted words, making it highly concise and well-structured.
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 has 0 parameters, 100% schema coverage, and an output schema, the description provides sufficient context by detailing the return values. However, it could improve by addressing behavioral aspects like read-only nature or error handling, though the output schema likely covers return structure.
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 has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on output semantics, listing the returned fields, which aligns with the baseline for zero 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 specific action ('Get detailed info') and resource ('all party Pokemon'), distinguishing it from siblings like get_battle_state or get_game_state. It explicitly lists the data returned, making the purpose unambiguous and distinct.
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 when party Pokemon details are needed, but provides no explicit guidance on when to use this tool versus alternatives like get_battle_state or get_game_state. It lacks any mention of prerequisites, exclusions, or comparative context with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_screenshotB
Capture the current game screen without pressing any buttons.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool captures the screen without pressing buttons, which implies a read-only, non-destructive operation, but doesn't specify what the output is (e.g., image format, resolution), whether it requires specific game states, or any rate limits. For a tool with zero annotation coverage, this is a significant gap in transparency.
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 a single, clear sentence that efficiently conveys the tool's purpose without any wasted words. It is front-loaded with the core action and resource, making it highly concise and well-structured for quick understanding.
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 annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., an image file, base64 data, or error conditions), which is critical for a screenshot tool. With no structured data to compensate, the description should provide more context about the output and any behavioral constraints.
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 0 parameters, and the schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics, and it appropriately doesn't mention any. Baseline for 0 parameters is 4, as it avoids unnecessary information.
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 ('Capture') and resource ('current game screen'), and distinguishes it from siblings by specifying 'without pressing any buttons'. However, it doesn't explicitly differentiate from other screen-related tools that might exist in the sibling list, keeping it at a 4 rather than a 5.
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 context by stating 'without pressing any buttons', which suggests this tool should be used when you need a screenshot without interacting with the game. However, it doesn't provide explicit guidance on when to use this versus alternatives like get_battle_state or get_game_state, nor does it mention any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hold_buttonA
Hold a button for an extended period and return a screenshot.
Different from press_button in that it's designed for longer holds like walking multiple tiles or fast-forwarding text with B held.
Args: button: The button to hold frames: Number of frames to hold (default 30, ~500ms)
| Name | Required | Description | Default |
|---|---|---|---|
| button | Yes | ||
| frames | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly describes the tool's behavior: holding a button for an extended period and returning a screenshot. It specifies the default duration (30 frames, ~500ms) and mentions the return value (screenshot). However, it doesn't mention potential side effects like game state changes or whether this affects other operations.
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 perfectly structured and concise. The first sentence states the core functionality, the second differentiates from siblings, and the parameter section clearly explains each argument. Every sentence earns its place with no wasted words, and the information is front-loaded with the most important details first.
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 2-parameter tool with no annotations and no output schema, the description does an excellent job covering the essentials: purpose, differentiation, parameters, and behavior. The only minor gap is that while it mentions returning a screenshot, it doesn't describe the format or content of that screenshot. Given the tool's relative simplicity, this is a strong description.
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?
With 0% schema description coverage, the description fully compensates by explaining both parameters. It defines 'button' as 'The button to hold' and 'frames' as 'Number of frames to hold' with a default value and time conversion. The description adds meaningful context about what these parameters mean in practice, going beyond what the bare 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 the tool's purpose with a specific verb ('hold') and resource ('button'), and explicitly distinguishes it from its sibling 'press_button' by explaining it's designed for longer holds. The description provides concrete examples of use cases like walking multiple tiles or fast-forwarding text with B held.
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 states when to use this tool versus alternatives by directly comparing it to 'press_button' and specifying it's for 'longer holds'. It provides clear context about appropriate use cases (walking multiple tiles, fast-forwarding text) and implicitly suggests when not to use it (for short button presses).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_stateA
Load an emulator state from a slot and return a screenshot.
Args: slot: Save slot number (1-9)
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions loading a state and returning a screenshot, but lacks details on behavioral traits: e.g., whether this overwrites current state, requires specific emulator conditions, has side effects like pausing the game, or handles errors (e.g., invalid slot). For a mutation-like tool with zero annotation coverage, this is a significant gap in transparency.
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 appropriately sized and front-loaded: the first sentence clearly states the purpose and output, followed by a concise 'Args' section for parameters. Every sentence earns its place with no wasted words, making it easy to scan and understand quickly.
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 1 parameter with 0% schema coverage and an output schema (which handles return values), the description is mostly complete: it covers the tool's purpose, parameter meaning, and output. However, as a state-loading tool with no annotations, it should ideally mention potential side effects or prerequisites (e.g., requires a saved state to exist), slightly reducing completeness for this context.
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 description adds meaningful semantics beyond the schema: it explains that 'slot' is a 'Save slot number (1-9)', which clarifies the parameter's purpose and valid range (1-9). The schema only indicates it's an integer with default 1, so the description compensates well for the 0% schema description coverage. However, it doesn't detail what happens if slot is out of range or already empty.
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 action ('Load an emulator state') and the resource ('from a slot'), and specifies the output ('return a screenshot'). It distinguishes from siblings like 'save_state' (opposite operation) and 'get_screenshot' (just screenshot without loading). However, it doesn't explicitly differentiate from 'get_game_state' or 'get_battle_state', which might retrieve similar information without loading a save.
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 when needing to load a saved emulator state and get a visual confirmation via screenshot. It doesn't explicitly state when to use this vs. alternatives like 'get_game_state' (which might retrieve state without loading) or 'save_state' (for saving instead). No exclusions or prerequisites are mentioned, leaving usage context somewhat implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_buttonA
Press a GBA button and return a screenshot of the result.
Args: button: The button to press (A, B, START, SELECT, UP, DOWN, LEFT, RIGHT, L, R) hold_frames: Number of frames to hold the button (default 10, ~167ms)
| Name | Required | Description | Default |
|---|---|---|---|
| button | Yes | ||
| hold_frames | No |
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 core behavior (press button, return screenshot) and timing details (hold_frames default and conversion to ms), but does not mention side effects (e.g., game state changes), error conditions, or response format. It adds some context but leaves behavioral gaps.
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 front-loaded with the core purpose in the first sentence, followed by a structured 'Args:' section. Every sentence earns its place by providing essential information without redundancy. It is appropriately sized for a two-parameter tool.
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 annotations and no output schema, the description is moderately complete. It covers the action and parameters well, but lacks details on the returned screenshot (format, dimensions) and potential errors. For a tool with visual output and game interaction, more context on results and side effects would improve completeness.
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 0%, so the description must compensate. It adds meaningful semantics: it explains 'button' as the GBA button to press with enumerated values, and 'hold_frames' as duration with default and time conversion (~167ms). This goes beyond the schema's bare enums and types, though it doesn't fully document all nuances (e.g., frame rate assumptions).
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 specific action ('Press a GBA button') and the outcome ('return a screenshot of the result'), distinguishing it from siblings like 'hold_button' (which holds without screenshot) and 'get_screenshot' (which only captures without pressing). The verb+resource combination is precise and 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?
The description implies usage for pressing GBA buttons to see visual results, but does not explicitly state when to use this vs. alternatives like 'press_buttons' (plural) or 'hold_button'. It provides context (GBA emulation) but lacks explicit guidance on tool selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_buttonsA
Press a sequence of buttons and return a screenshot after the last one.
Useful for menu navigation like selecting options or entering text.
Args: sequence: List of button presses. Each entry: {"button": "A", "hold_frames": 10, "release_frames": 5} hold_frames defaults to 10, release_frames defaults to 5.
| Name | Required | Description | Default |
|---|---|---|---|
| sequence | Yes |
TDQS
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 key behavioral traits: it performs actions (button presses) and returns a screenshot, implying it's not read-only and may have side effects. However, it lacks details on permissions, rate limits, or what happens if the sequence fails, which are important for a tool with 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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by usage context and detailed parameter explanation. Every sentence adds value without redundancy, making it efficient and well-structured for quick understanding.
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 complexity (a tool with side effects and no annotations or output schema), the description is mostly complete. It covers purpose, usage, and parameters well. However, it lacks details on error handling or the screenshot format, which could be important for an agent. Without an output schema, some return value context is missing, but it's sufficient for basic use.
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 description coverage is 0%, so the description must compensate fully. It adds significant meaning beyond the schema: it explains that 'sequence' is a list of button presses, provides the structure of each entry (e.g., 'button', 'hold_frames', 'release_frames'), and specifies default values. This fully documents the parameter semantics, making it easy for an agent to invoke correctly.
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: 'Press a sequence of buttons and return a screenshot after the last one.' It specifies the verb ('press'), resource ('buttons'), and outcome ('return a screenshot'), distinguishing it from siblings like 'press_button' (single press) and 'get_screenshot' (no pressing). However, it doesn't explicitly contrast with all siblings, such as 'hold_button', which is why it's not a 5.
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 for usage: 'Useful for menu navigation like selecting options or entering text.' This gives practical examples of when to use it. It implies usage over 'press_button' for sequences, but doesn't explicitly state when not to use it or name alternatives, preventing a score of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_stateB
Save the emulator state to a slot.
Args: slot: Save slot number (1-9)
| Name | Required | Description | Default |
|---|---|---|---|
| slot | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool saves state but doesn't mention whether this is a destructive operation (overwrites existing saves), requires specific permissions, has side effects, or details the response format. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
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 appropriately sized and front-loaded, with the main purpose stated first and parameter details following. Both sentences earn their place by clarifying the action and parameter semantics. It could be slightly more structured but remains efficient without waste.
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 (a mutation with no annotations) and the presence of an output schema (which reduces the need to explain return values), the description is minimally adequate. It covers the basic action and parameter meaning but lacks behavioral details like side effects or error conditions, leaving room for improvement in completeness.
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 description adds meaningful context beyond the input schema, which has 0% description coverage. It explains that 'slot' is a 'Save slot number (1-9)', providing range constraints and purpose that aren't in the schema. With only one parameter, this compensates well for the low schema coverage, though it doesn't cover default values or other nuances.
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 ('Save') and resource ('emulator state'), and distinguishes it from sibling tools like 'load_state' and 'get_game_state'. However, it doesn't explicitly differentiate from all siblings, such as 'get_battle_state' or 'get_party', which are read operations rather than write operations.
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 no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an active emulator session), exclusions, or compare it to siblings like 'load_state' for restoring saved states. Usage is implied only by the action described, with no explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_framesA
Wait for a number of frames without input, then screenshot.
Useful for waiting through animations, text, or transitions. At ~60fps, count=60 is approximately 1 second.
Args: count: Number of frames to wait (default 60)
| Name | Required | Description | Default |
|---|---|---|---|
| count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: waiting without input, then automatically taking a screenshot. It includes performance context (frame rate approximation) but doesn't specify error handling or output format details.
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 perfectly structured and concise: a clear purpose statement, usage guidelines, timing context, and parameter explanation in just four sentences. Every sentence adds value with zero redundancy or 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?
For a single-parameter tool with no annotations or output schema, the description provides excellent coverage of purpose, usage, and parameter semantics. The only minor gap is not explicitly describing the screenshot output format, but given the tool's simplicity and clear sibling context, this is a minor omission.
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 has 0% description coverage, so the description must fully compensate. It provides clear semantics for the single parameter: explains what 'count' represents (number of frames to wait), provides a default value (60), and adds crucial context about timing conversion (frames to seconds). This goes well beyond what the bare 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 the tool's purpose with specific verbs ('wait for a number of frames', 'screenshot') and distinguishes it from siblings like get_screenshot (which only captures) or press_button (which interacts). It explicitly identifies the resource (frames) and outcome (screenshot).
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 explicit guidance on when to use this tool ('waiting through animations, text, or transitions') and includes a practical timing reference ('~60fps, count=60 is approximately 1 second') that helps differentiate it from time-based waiting alternatives not present in the sibling list.
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. Dates show when Glama detected each change.
10 tool updates
v0.1.0- First observed
get_battle_state - First observed
get_game_state - First observed
get_party - First observed
get_screenshot - First observed
hold_button - First observed
load_state - First observed
press_button - First observed
press_buttons - First observed
save_state - First observed
wait_frames
TDQS
Each tool has a clearly distinct purpose with no overlap: get_battle_state, get_game_state, and get_party provide different scopes of game information, while press_button, hold_button, press_buttons, wait_frames, get_screenshot, save_state, and load_state handle distinct input/output operations. The descriptions explicitly differentiate tools like hold_button vs. press_button, preventing confusion.
All tool names follow a consistent verb_noun pattern (e.g., get_battle_state, press_button, save_state), using snake_case throughout. The naming is predictable and readable, with no deviations in style or convention across the set.
With 10 tools, the count is well-scoped for an emulator control server, covering core functions like state retrieval, input simulation, and save management. Each tool earns its place without redundancy, fitting a typical range for such a domain.
The tool set provides comprehensive coverage for emulator interaction, including reading game state, simulating inputs, and managing saves. A minor gap exists in lacking direct emulation control tools (e.g., reset, speed adjustment), but agents can work around this using existing tools for most workflows.
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
Live browser debugging for AI assistants — DOM, console, network via MCP.
OpenAI-compatible LLM MCP (7 tools); chat via balance key or x402 USDC on Base
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
- bluffnetOAuthgg.bluffnet
Live Texas Hold'em for AI agents. The tools teach the rules; the bluffing is up to your model.
Related MCP Servers
- AlicenseAqualityDmaintenanceA Model Context Protocol server that enables LLMs to interact with a GameBoy emulator, providing tools for controlling the GameBoy, loading ROMs, and retrieving screen frames.1332MIT
- FlicenseAqualityDmaintenanceEnables programmatic control of the mGBA emulator for Game Boy, Game Boy Color, and Game Boy Advance games, including screenshot capture, memory reading, sprite data dumping, and custom Lua script execution for automated testing and game analysis.63-
- AlicenseNot gradedqualityDmaintenanceSimulates a Pokemon battle system by providing tools for managing Pokemon, executing turn-based combat, and analyzing type effectiveness. It enables AI models to facilitate interactive battles, generate random creatures, and implement complex battle strategies.13ISC
- AlicenseAqualityBmaintenanceMCP server for the mGBA Game Boy Advance emulator. Read and write GBA memory, inject button presses, take screenshots, save/load state, and step the emulator through a Lua bridge.18361MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/adamescj/PokeMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server