MCP GameBoy Server
The MCP GameBoy Server allows LLMs to interact with a GameBoy emulator through various functions:
Control GameBoy Buttons: Press UP, DOWN, LEFT, RIGHT, A, B, START, and SELECT with adjustable frame duration
Load ROMs: Load GameBoy ROM files using the
load_romtoolRetrieve Screen Data: Get the current GameBoy screen frame
Check ROM Status: Verify if a ROM is loaded
List Available ROMs: View all available GameBoy ROM files
Wait Frames: Pause execution for a specified number of frames
Web Interface: Control the emulator and upload ROMs via
http://localhost:3001/emulatorMCP Integration: Use with MCP clients like
@modelcontextprotocol/inspectoror FLUJO
Supports configuration through environment variables, particularly for specifying ROM paths and server settings like port number.
Provides a web server in SSE mode for ROM selection through a browser interface, allowing the GameBoy emulator to be accessed via HTTP.
Supports installation via Git clone, allowing users to download the MCP server from its repository.
Enables installation directly from GitHub repositories, including integration with FLUJO via GitHub URL parsing.
Supports installation and management of dependencies through npm, with commands for building and running the server.
Built using the Model Context Protocol TypeScript SDK, providing type-safe implementation of the GameBoy emulator server.
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., "@MCP GameBoy Serverpress A to jump over the pipe"
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.
MCP GameBoy Server
Overview
A Model Context Protocol (MCP) server for serverboy, allowing LLMs to interact with a GameBoy emulator. Your LLM can...
Load ROMS
Press Keys
Look at the Gameboy Screen
skip frames
You can...
control the gameboy emulator using the @modelcontextprotocol/inspector
control the gameboy emulator (and upload ROMs) using a web-interface at http://localhost:3001/emulator
install the gameboy emulator in your favorite MCP-Client
Related MCP server: MCP Server For Local
Features
Supports both stdio and SSE transports
Provides tools for GameBoy controls (up, down, left, right, A, B, start, select)
Provides tools to load different ROMs
Provides tools to get the current screen
All tools return an ImageContent with the latest screen frame
Installation
Installing via Smithery
To install GameBoy Emulator Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @mario-andreschak/mcp-gameboy --client claudeInstalling in FLUJO
Click Add Server
Copy & Paste Github URL into FLUJO
Click Parse, Clone, Install, Build and Save.
Manual Installation
# Clone the repository
git clone https://github.com/yourusername/mcp-gameboy.git
cd mcp-gameboy
# Install dependencies
npm install
# Build the project
npm run buildInstalling via Configuration Files
!! ATTENTION : Many MCP Clients require to specify the ROM-Path in the .env vars as an absolute path
To integrate this MCP server with Cline or other MCP clients via configuration files:
Open your Cline settings:
In VS Code, go to File -> Preferences -> Settings
Search for "Cline MCP Settings"
Click "Edit in settings.json"
Add the server configuration to the
mcpServersobject:{ "mcpServers": { "mcp-gameboy": { "command": "node", "args": [ "/path/to/mcp-gameboy/dist/index.js" ], "disabled": false, "autoApprove": [] } } }Replace
/path/to/mcp-gameboy/dist/index.jswith the actual path to theindex.jsfile in your project directory. Use forward slashes (/) or double backslashes (\\) for the path on Windows.Save the settings file. Cline should automatically connect to the server.
Usage
Environment Variables
!! ATTENTION : Many MCP Clients require to specify the ROM-Path in the .env vars as an absolute path
Create a .env file in the root directory with the following variables:
# Server configuration
PORT=3001
# ROM path for stdio mode
ROM_PATH=./roms/dangan.gbRunning in stdio Mode
In stdio mode, the server uses the ROM path specified in the ROM_PATH environment variable. It will open a browser window to display the GameBoy screen.
npm run startRunning in SSE Mode
In SSE mode, the server starts an Express server that serves a web page for ROM selection.
npm run start-sseThen open your browser to http://localhost:3001 to select a ROM.
Tools
The server provides the following tools:
press_up: Press the UP button on the GameBoypress_down: Press the DOWN button on the GameBoypress_left: Press the LEFT button on the GameBoypress_right: Press the RIGHT button on the GameBoypress_a: Press the A button on the GameBoypress_b: Press the B button on the GameBoypress_start: Press the START button on the GameBoypress_select: Press the SELECT button on the GameBoyload_rom: Load a GameBoy ROM fileget_screen: Get the current GameBoy screen
All tools return an ImageContent with the latest screen frame.
Implementation Details
This server is built using the Model Context Protocol (MCP) TypeScript SDK. It uses:
McpServerfrom@modelcontextprotocol/sdk/server/mcp.jsfor the server implementationStdioServerTransportfrom@modelcontextprotocol/sdk/server/stdio.jsfor stdio transportSSEServerTransportfrom@modelcontextprotocol/sdk/server/sse.jsfor SSE transportserverboyfor the GameBoy emulationexpressfor the web server in SSE modecanvasfor rendering the GameBoy screen
License
MIT
Available Tools
13 toolsget_screenA
Get the current GameBoy screen (advances one frame)
| 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 full burden. It discloses the key behavioral trait that the tool 'advances one frame', which is crucial for understanding its side effect. However, it doesn't mention other important aspects like whether this requires a loaded ROM, what happens if no ROM is loaded, or what the output format looks like, leaving gaps in behavioral understanding.
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 concise at 8 words, front-loading the core purpose ('Get the current GameBoy screen') and following with the critical behavioral detail ('advances one frame'). Every word earns its place with no 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 has no parameters, no annotations, and no output schema, the description provides adequate basic information but lacks completeness. It doesn't specify what 'Get' returns (image data? state description?), prerequisites (must a ROM be loaded?), or error conditions. For a tool that presumably returns visual data, more context about the output would be helpful.
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 with 100% schema description coverage, so the schema already fully documents the lack of inputs. The description appropriately doesn't waste space discussing parameters, maintaining focus on the tool's purpose and behavior. 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 the current GameBoy screen') and distinguishes it from siblings by specifying it 'advances one frame', which differentiates it from tools like 'wait_frames' or button presses. It uses a precise verb+resource combination that leaves no ambiguity about what the tool does.
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 mentioning 'advances one frame', suggesting this should be used when needing to capture screen state while progressing the emulation. However, it doesn't explicitly state when NOT to use it or name alternatives among siblings like 'wait_frames' for different timing needs, so it falls short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_rom_loadedA
Check if a ROM is currently loaded in the emulator
| 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 full burden of behavioral disclosure. It clearly indicates a read-only check operation ('Check if a ROM is currently loaded'), which implies non-destructive behavior. However, it lacks details on return values (e.g., boolean or status message), error conditions, or dependencies on other tools like 'load_rom'. No contradiction with annotations exists since none are provided.
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 ('Check'), making it easy to understand at a glance. Every part of the sentence earns its place by specifying the action and target.
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, no output schema), the description is adequate but has gaps. It explains what the tool does but does not cover behavioral aspects like return format or error handling. For a read-only check tool, this is minimally viable, but additional context on output 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?
The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description does not need to compensate for any parameter gaps. It appropriately focuses on the tool's function without unnecessary parameter details, aligning 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 tool's purpose with a specific verb ('Check') and resource ('ROM'), making it immediately understandable. It distinguishes from siblings like 'load_rom' (which loads ROMs) and 'list_roms' (which lists available ROMs), though it doesn't explicitly differentiate from all siblings. The purpose is not vague or 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 in the context of checking ROM status in an emulator, but it does not provide explicit guidance on when to use this tool versus alternatives. For example, it doesn't specify if this should be used before loading a ROM or to verify a successful load. No misleading information is present, but the guidance is limited to implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_romsA
List all available GameBoy ROM files
| 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 full burden of behavioral disclosure. It states the tool lists ROMs but doesn't describe return format (e.g., list of filenames, metadata), pagination, error conditions, or performance characteristics. This leaves significant gaps for an agent to understand how to interpret results.
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, efficient sentence that directly states the tool's function with zero wasted words. It is appropriately sized and front-loaded, making it easy for an agent to parse 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 the lack of annotations and output schema, the description is incomplete for a read operation. It doesn't explain what 'list' entails (e.g., format, structure, or limitations), leaving the agent uncertain about how to handle the output. For a tool with no structured behavioral hints, more context is needed.
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 with 100% schema description coverage, so no parameter documentation is needed. The description appropriately focuses on the tool's purpose without redundant parameter details, meeting the baseline for parameterless 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 ('List') and resource ('all available GameBoy ROM files'), distinguishing it from sibling tools like load_rom (which loads a specific ROM) or get_screen (which retrieves screen state). It precisely communicates the tool's function without ambiguity.
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 retrieving ROM lists, but lacks explicit guidance on when to use this versus alternatives like is_rom_loaded (which checks a specific ROM's status) or load_rom (which loads a ROM). It provides basic context but no exclusions or comparative advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_romC
Load a GameBoy ROM file
| Name | Required | Description | Default |
|---|---|---|---|
| romPath | Yes | Path to the ROM file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose behavioral traits like whether loading replaces a current ROM, requires specific file formats, has side effects, or returns any confirmation. This leaves significant gaps for a mutation tool.
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, efficient sentence with zero wasted words. It's appropriately sized for a simple tool and front-loads the core action, making it easy to parse 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?
For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after loading (e.g., success indicators, error handling, or interaction with other tools like 'get_screen'), leaving critical context gaps for an agent.
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 schema fully documents the 'romPath' parameter. The description adds no additional meaning beyond what's in the schema, such as file format requirements or path examples, meeting the baseline for high coverage.
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') and resource ('a GameBoy ROM file'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'list_roms' or 'is_rom_loaded', which prevents a perfect score.
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 like 'list_roms' or 'is_rom_loaded'. It doesn't mention prerequisites (e.g., whether a ROM must be listed first) or exclusions, leaving usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_aB
Press the A button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 states the action but doesn't disclose behavioral traits like whether this is a read-only or destructive operation, what happens if no GameBoy is connected, whether it requires specific permissions, or what the expected outcome is. The description is minimal and lacks important operational 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?
The description is a single, efficient sentence with zero wasted words. It's appropriately sized for a simple tool and front-loads the essential information immediately.
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 happens after pressing the button, whether there's visual/audio feedback, error conditions, or how this interacts with other tools like wait_frames or get_screen. For a tool that likely triggers game state changes, more context is needed.
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 schema already fully documents the single parameter (duration_frames). The description doesn't add any parameter semantics beyond what's in the schema, but since schema coverage is high, the baseline score of 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 states the specific action ('Press') and target resource ('the A button on the GameBoy'), distinguishing it from sibling tools like press_b, press_up, etc. It's unambiguous about what physical/virtual button is being activated.
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 (GameBoy button pressing) but doesn't explicitly state when to use this tool versus alternatives like press_b or press_start. No guidance is provided about prerequisites (e.g., whether a ROM must be loaded first) or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_bB
Press the B button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 states the action but lacks details on effects (e.g., in-game response, timing), prerequisites (e.g., requires a loaded ROM), or side effects (e.g., might trigger game events). This is a significant gap for a tool that likely interacts with a game system.
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, efficient sentence with zero waste. It is front-loaded with the core action and resource, making it immediately clear and appropriately sized for a simple 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 the complexity of interacting with a GameBoy (implied by sibling tools like load_rom and get_screen), the description is incomplete. With no annotations, no output schema, and minimal behavioral context, it fails to address key aspects like how the press integrates with game state or what feedback to expect, leaving gaps for effective tool 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?
Schema description coverage is 100%, so the schema already documents the 'duration_frames' parameter fully. The description adds no additional parameter semantics beyond what the schema provides, such as typical usage scenarios or effects of varying durations, meeting the baseline for high schema coverage.
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') and target resource ('the B button on the GameBoy'), distinguishing it from sibling tools like press_a, press_up, etc. It precisely identifies what the tool does without ambiguity.
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?
No guidance is provided on when to use this tool versus alternatives. While the description implies it's for pressing the B button, it doesn't specify contexts (e.g., in-game actions, menu navigation) or exclusions compared to other press_* tools, leaving usage unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_downA
Press the DOWN button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 action but does not explain what 'Press' entails (e.g., is it a tap, hold, or toggle?), potential side effects on the GameBoy state, or any constraints like rate limits or prerequisites. This leaves significant gaps in understanding the tool's 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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded, with zero waste, making it easy to understand at a glance.
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 low complexity (one optional parameter) and no output schema, the description is minimally complete but lacks depth. It covers the basic action but does not address behavioral aspects like how the press interacts with the GameBoy or what to expect after invocation, leaving room for improvement in 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 input schema has 100% description coverage, with the parameter 'duration_frames' clearly documented in the schema. The description does not add any meaning beyond what the schema provides, as it mentions no parameters. With high schema coverage, the baseline score of 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 states the specific action ('Press') and target resource ('DOWN button on the GameBoy'), distinguishing it from sibling tools like press_a, press_b, press_left, press_right, press_up, press_select, and press_start. It precisely identifies what the tool does without ambiguity.
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 in the context of GameBoy button pressing, but does not explicitly state when to use this tool versus alternatives like press_up or press_left. It provides basic context but lacks guidance on exclusions or specific scenarios for choosing this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_leftA
Press the LEFT button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 states the action but lacks behavioral details such as whether this requires a loaded ROM, what happens if pressed without context, or any side effects. The description is minimal and does not compensate for the absence of annotations.
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, efficient sentence that directly states the tool's purpose without any wasted words. It is appropriately sized and front-loaded, making it easy to understand at a glance.
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 (one parameter with full schema coverage, no output schema), the description is adequate but lacks context about when or why to use it, especially relative to siblings. It covers the basic action but does not provide enough guidance for optimal agent decision-making in a gaming 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 mentions no parameters, while the input schema has one parameter with 100% coverage. Since there are zero parameters described in the description, it meets the baseline of 4, as it does not need to compensate for schema gaps. The schema fully documents the parameter.
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') and target resource ('the LEFT button on the GameBoy'), distinguishing it from sibling tools like press_a, press_b, etc. It precisely communicates what the tool does without ambiguity.
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 GameBoy button pressing but provides no explicit guidance on when to use this tool versus alternatives (e.g., press_right, press_up) or any prerequisites. It relies on the tool name and context for implied usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_rightA
Press the RIGHT button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 action but lacks details on effects (e.g., how it interacts with the GameBoy state), error conditions, or performance traits. The description is minimal and does not compensate for the absence of annotations.
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 with zero waste, front-loading the essential action. It is appropriately sized for a simple tool and efficiently communicates the purpose without 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 low complexity (one optional parameter, no output schema, no annotations), the description is minimally adequate but lacks context on behavioral aspects. It covers the basic action but does not provide completeness for a tool that interacts with a system (GameBoy), leaving gaps in understanding effects or usage scenarios.
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 100%, with the parameter 'duration_frames' fully documented in the schema. The description does not add any parameter semantics beyond what the schema provides, so it meets the baseline score of 3 for high schema coverage without extra value.
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') and target resource ('the RIGHT button on the GameBoy'), distinguishing it from sibling tools like press_a, press_b, press_left, etc. It precisely identifies what the tool does without ambiguity.
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 the right button in a GameBoy context, but provides no explicit guidance on when to use this tool versus alternatives (e.g., press_left, press_up) or any prerequisites. Usage is inferred from the action and sibling names, but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_selectB
Press the SELECT button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 mentions pressing the button but lacks behavioral details such as whether this requires the GameBoy to be powered on, if it simulates a physical press, potential side effects, or error conditions. This is inadequate for a mutation tool with zero annotation coverage.
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, efficient sentence that directly states the tool's purpose with no wasted words. It is appropriately sized and front-loaded, making it easy to understand at a glance.
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 performs an action (pressing a button) with no annotations or output schema, the description is incomplete. It lacks context on prerequisites (e.g., GameBoy state), behavioral outcomes, or error handling, which are crucial for an agent to use it correctly in a gaming emulation 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 does not mention the parameter 'duration_frames', but the input schema has 100% coverage with a clear description. Since schema coverage is high, the baseline is 3, as the schema adequately documents the parameter without needing additional explanation in the description.
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') and target resource ('the SELECT button on the GameBoy'), distinguishing it from sibling tools like press_a, press_b, etc. It precisely communicates what the tool does without ambiguity.
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?
No guidance is provided on when to use this tool versus alternatives like other button-press tools (e.g., press_start, press_a) or in what context (e.g., during gameplay, menus). The description only states the action without usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_startA
Press the START button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 action ('Press') but doesn't describe what happens when the button is pressed (e.g., does it trigger a menu, pause the game, or have other effects?), whether it requires the GameBoy to be in a specific state, or any error conditions. This leaves significant gaps in understanding the tool's behavior beyond the basic action.
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, direct sentence with zero waste—it states the action and target without unnecessary words. It's front-loaded with the core purpose, making it highly efficient and easy to parse for an AI agent.
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 low complexity (one optional parameter, no output schema, no annotations), the description is minimally adequate but lacks context about behavioral outcomes or prerequisites. It covers the basic action but doesn't explain what pressing START does in the GameBoy context, which could be critical for correct usage. Without annotations or output schema, more detail 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?
The schema description coverage is 100%, with the single parameter 'duration_frames' fully documented in the schema. The description doesn't add any parameter semantics beyond what the schema provides (e.g., it doesn't explain what a 'frame' is in this context or typical values). With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.
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') and target resource ('the START button on the GameBoy'), distinguishing it from sibling tools like press_a, press_b, press_up, etc. It precisely identifies which button is being pressed, leaving no ambiguity about its function.
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 press the START button, but provides no explicit guidance on when to use this tool versus alternatives (e.g., other button-pressing tools or waiting). It doesn't mention prerequisites like whether a game must be loaded or if the GameBoy is powered on, leaving usage context incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_upB
Press the UP button on the GameBoy
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to hold the button |
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 action ('Press') but does not explain what pressing the button actually does in the context (e.g., triggers a game input, may affect game state), whether it requires a loaded ROM, or any side effects like timing or interactions with other tools. This leaves significant gaps for a tool that likely interacts with game state.
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 with zero wasted words. It is front-loaded with the core action and target, making it highly efficient and easy to parse.
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 of a tool that interacts with a GameBoy emulator (implied by sibling tools like load_rom and get_screen), the description is incomplete. It lacks context on prerequisites (e.g., needing a ROM loaded), behavioral details (e.g., how pressing affects game state), and there is no output schema to clarify return values. With no annotations and minimal description, it does not provide enough information for safe and effective 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 description does not mention parameters at all. However, the input schema has 1 parameter with 100% description coverage (duration_frames is well-documented in the schema). Since schema coverage is high, the baseline score is 3, as the description adds no additional parameter information 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 the specific action ('Press') and target resource ('the UP button on the GameBoy'), distinguishing it from sibling tools like press_a, press_b, press_down, etc. It precisely communicates what the tool does without ambiguity.
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 does not mention scenarios for pressing UP (e.g., navigating menus, moving characters) or differentiate it from other directional buttons like press_down, press_left, or press_right. Usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_framesC
Wait for a specified number of frames
| Name | Required | Description | Default |
|---|---|---|---|
| duration_frames | No | Number of frames to wait |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden of behavioral disclosure. The description only states what the tool does ('wait for frames') but doesn't disclose critical behavioral traits like whether this is a blocking operation, how it interacts with other tools (e.g., can other actions be queued during the wait), what happens if interrupted, or timing implications. For a timing tool with zero annotation coverage, this is inadequate.
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 concise - a single sentence that directly states the tool's function with zero wasted words. It's front-loaded with the essential information and earns its place efficiently.
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 that this is a timing/waiting tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'wait' means operationally (blocking vs. non-blocking), what constitutes a 'frame' in this context, how this interacts with other emulation tools, or what the agent should expect after the wait completes. For a tool that controls timing in what appears to be a game emulation environment, this leaves significant gaps.
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%, with the single parameter 'duration_frames' clearly documented in the schema as 'Number of frames to wait' with a default of 100 and exclusiveMinimum of 0. The description adds no additional parameter semantics beyond what the schema already provides. Baseline 3 is appropriate when the schema does the heavy lifting.
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 ('wait') and the resource ('frames'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like press_a or press_b, which are also timing-related actions in a gaming/emulation context. The description is specific but lacks sibling distinction.
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. In a gaming emulation context with tools like press_a, press_b, and various press directions, there's no indication of whether wait_frames should be used for timing delays between actions, loading screens, or other scenarios. No explicit when/when-not or alternative tools are mentioned.
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.
13 tool updates
v1.0.0- First observed
get_screen - First observed
is_rom_loaded - First observed
list_roms - First observed
load_rom - First observed
press_a - First observed
press_b - First observed
press_down - First observed
press_left - First observed
press_right - First observed
press_select - First observed
press_start - First observed
press_up - First observed
wait_frames
TDQS
Every tool has a clearly distinct purpose with no ambiguity. The button press tools are all uniquely named for specific buttons, and the other tools handle distinct emulator operations like screen capture, ROM management, and frame control. There is no overlap in functionality.
All tools follow a consistent verb_noun pattern with snake_case throughout. The naming is perfectly predictable: 'get_screen', 'list_roms', 'load_rom', 'press_a', 'wait_frames', etc. There are no deviations in naming conventions.
13 tools is well-scoped for a GameBoy emulator server. Each tool earns its place with clear purposes: ROM management (3 tools), button controls (8 tools), screen capture (1 tool), and frame control (1 tool). This provides comprehensive coverage without bloat.
The tool surface is nearly complete for GameBoy emulation, covering ROM loading, button inputs, screen capture, and frame control. A minor gap exists in reset/unload functionality, but agents can work around this by reloading ROMs. Core emulator workflows are well-supported.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
A Model Context Protocol server for Wix AI tools
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that allows LLMs to interact with web content through standardized tools, currently supporting web scraping functionality.1MIT
- AlicenseCqualityFmaintenanceA customizable Model Context Protocol server implementation that enables AI models to interact with external tools including weather queries, Google search, and camera control functionality.114Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that allows LLMs to interact with Game Boy games through PyBoy emulation, providing capabilities to load ROMs, control games, capture screens, save/load states, and maintain game knowledge.1MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides LLMs with Pokémon data access and battle simulation capabilities, including an interactive web interface.-
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/mario-andreschak/mcp-gameboy'
If you have feedback or need assistance with the MCP directory API, please join our Discord server