pyxel-mcp
This server lets an AI agent run and inspect Pyxel games headlessly — validating scripts, simulating input, capturing screenshots/frames, and reading game state, assets, audio, and pixels — without opening a window.
Validate scripts with AST parsing and anti-pattern checks before running (
validate_script).Run and screenshot a script after N frames, with scale and timeout control (
run_and_capture).Capture multiple frames for animation/transition verification (
capture_frames, comma-separated frame list).Simulate play by sending scheduled keyboard/mouse input and capturing frames (
play_and_capture).Read game state: dump App instance attributes as JSON, single-frame or multi-frame diffs (
inspect_state).Inspect the screen as a compact palette-index grid for programmatic comparison (
inspect_screen).Compare two frames to find changed pixels, percentage, and regions — visual regression testing (
compare_frames).Analyze palette/color usage and contrast issues across Pyxel's 16 colors (
inspect_palette).Inspect sprites: pixel data, symmetry checks, color usage in an image bank (
inspect_sprite).Render a whole image bank (256×256) as a screenshot to check sheet organization (
inspect_bank).Inspect tilemaps: tile grid, usage stats, bounding box, imgsrc (
inspect_tilemap).Analyze layout: text positions, horizontal balance, centering problems (
inspect_layout).Render audio: export a sound or music slot to WAV with waveform/note analysis (
render_audio).Get Pyxel info: package location, examples path, API stubs (
pyxel_info).
Note: the schema's tool names and granularity differ from the README's documented 8-tool set (e.g., run, read_image, read_tilemap, read_audio, diff_frames), so clients should follow the schema as the source of truth.
Enables AI to autonomously run, verify, and iterate on retro game programs created with the Pyxel engine, providing tools for Python script validation, state inspection, and visual/audio analysis.
Click on "Deploy 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., "@pyxel-mcpRun main.py and capture a screenshot to verify the game visuals"
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.
pyxel-mcp
Let AI agents play, watch, and measure Pyxel games. pyxel-mcp is an MCP server that runs a Pyxel script headlessly, feeds it scheduled input, stops when a condition holds, and hands back the facts: screenshots, pixel grids, game state, assets, audio, and frame diffs.
Why
An agent can write a Pyxel game in seconds, but it cannot open a window, press the arrow keys, or look at the screen. Editor-bound engines solve this with MCP servers that live inside the editor. Pyxel has no editor process to attach to, so pyxel-mcp drives the game itself:
Headless and deterministic. Every call runs the script in a fresh subprocess with SDL dummy drivers, an optional RNG seed, and a frame budget. The same call gives the same frames on a laptop or in CI.
Input as data. Buttons, axes, and mouse position are scheduled per frame, so a playtest is a JSON document the agent can rerun and extend.
Stop on the event, not the clock.
until="score >= 1"ends the run at the first frame where a game attribute holds, and"frame": "end"snapshots capture that moment.Facts, not scores. Tools report pixels, values, and measurements. Deciding whether the game is good stays with the agent and the person asking for it.
See the frame in the result.
inline: truereturns a PNG as MCP image content, so the model looks at the screen without a second file read.
Related MCP server: Aseprite MCP
Install
Register the stdio server with your client:
claude mcp add --scope user pyxel -- uvx pyxel-mcpcodex mcp add pyxel -- uvx pyxel-mcpgemini mcp add pyxel uvx pyxel-mcpFor Cursor (~/.cursor/mcp.json), a project-scoped Claude Code .mcp.json, or any other client that reads the common JSON format, add:
{
"mcpServers": {
"pyxel": {
"command": "uvx",
"args": ["pyxel-mcp"]
}
}
}VS Code uses .vscode/mcp.json with a top-level servers key and "type": "stdio"; Codex CLI can also be configured in ~/.codex/config.toml as [mcp_servers.pyxel]. Run uvx pyxel-mcp install to print every variant.
Claude Code users can instead install the pyxel-skill plugin, which registers this server together with the skill that teaches agents how to use it:
claude plugin marketplace add kitao/pyxel-skill && claude plugin install pyxel@pyxel-skillRestart the client after changing its configuration. The server writes this diagnostic to stderr:
[pyxel-mcp] starting - 8 toolsPython 3.11+ is required, and Pyxel >= 2.9.6 is installed as a dependency. Script tools execute local Python in subprocesses to isolate Pyxel state, but they do not sandbox untrusted code. See SECURITY.md.
How an agent uses it
flowchart LR
W["Write or edit<br>game.py"] --> V["validate"]
V --> R["run<br>inputs · until · snapshots"]
R --> O{"Inspect facts<br>state · pixels · log"}
O -- "defect" --> W
O -- "looks right" --> A["read_image · read_tilemap<br>read_audio · diff_frames"]
A --> D["Report evidence"]The loop is deliberately small. The separate pyxel-skill project teaches agents when to use each tool and what counts as enough evidence; this package only supplies the observations.
Tools
Every script argument is a file path, not Python source. Relative asset paths inside the script resolve from the script's directory, exactly as under python game.py.
Tool | Returns |
| Syntax errors and recognizable Pyxel code patterns, without executing. |
| Headless frames, scheduled input, logs, and |
| Installed versions, paths, bundled examples, and resource URIs. |
| Palette colors and image-bank indices in use. |
| Image-bank pixels and an optional PNG render. |
| Tile coordinates, source bank, usage counts, bounds, and an optional render. |
| A rendered sound or music WAV plus measurable audio data. |
| Pixel differences between two PNG files. |
All tools declare input and output schemas. Every result includes ok and errors.
Captured PNGs can travel inside the result: set inline: true on a screen_image snapshot, or inline=true on read_image and read_tilemap, and the PNG is returned as MCP image content next to the structured data. A single inline frame may omit its output path; the file is then written under the system temp directory and its path is still reported, so diff_frames and later comparisons keep working. At most 12 images are embedded per call.
Example
Hold right, jump at frame 25, stop as soon as the score changes, and look at that frame:
{
"script": "/absolute/path/game.py",
"frames": 600,
"random_seed": 7,
"inputs": [
{"frame": 0, "buttons": ["KEY_RIGHT"]},
{"frame": 25, "buttons": ["KEY_RIGHT", "KEY_SPACE"]},
{"frame": 26, "buttons": ["KEY_RIGHT"]}
],
"until": "score >= 1",
"snapshots": [
{"kind": "state", "frame": "end", "attrs": ["score", "player.x"]},
{"kind": "screen_image", "frame": "end", "scale": 3, "inline": true}
]
}The result reports until_met, the reached frame_count, the requested state values, the PNG path, and the PNG itself as image content. Artifact paths you choose must be absolute. Read log even when ok is true, and inspect captured images directly when appearance matters.
Resources
pyxel://run-snapshots-schema— completerun.snapshotsgrammar, including"end", ranges, andinline.pyxel://validation-patterns— categories reported byvalidate.pyxel://palette/default— default palette table.pyxel://examples/{name}— source for an example bundled with the installed Pyxel package; discover names withpyxel_info.
Update
uvx caches packages. Force a refresh with:
uvx --refresh-package pyxel-mcp pyxel-mcp installTroubleshooting
If tools do not appear, look for the
starting - 8 toolsdiagnostic and restart the client.If
runfails, inspecterrors,exit_status, andlog.If a script cannot find an asset, check the path relative to the script file, not to the client's working directory.
If a validation category is unfamiliar, read
pyxel://validation-patterns.
Related
Pyxel — the retro game engine this server observes.
pyxel-skill — the Agent Skill that turns these tools into a build-and-verify workflow.
CHANGELOG.md — what changed in each release.
MCP Registry
mcp-name: io.github.kitao/pyxel-mcp
License
MIT — see LICENSE.
Available Tools
14 toolscapture_framesB
Capture screenshots at multiple frame points for animation verification.
Returns multiple images captured at specified frame numbers. Useful for verifying animations, transitions, and time-based effects.
Args: script_path: Absolute path to the .py script to run. frames: Comma-separated frame numbers to capture (default: "1,15,30,60"). scale: Screenshot scale multiplier (default: 1). timeout: Maximum seconds to wait for the script (default: 30).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| frames | No | 1,15,30,60 | |
| scale | No | ||
| timeout | No |
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 mentions that the tool 'returns multiple images' and has a timeout parameter, which adds some context. However, it lacks details on critical behaviors like error handling, file output formats, permissions needed, or whether it modifies any state, leaving significant gaps for a tool with no 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 well-structured and front-loaded, starting with the core purpose, followed by return values, usage context, and parameter details in a bullet-like format. Every sentence adds value without redundancy, making it efficient and easy to scan.
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 provides a good foundation with purpose, usage, and parameter semantics. However, it lacks details on output behavior (e.g., image format, storage location), error cases, and how it integrates with sibling tools, making it incomplete for a tool with 4 parameters and complex functionality like animation verification.
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 by explaining each parameter: 'script_path' as an absolute path to a .py script, 'frames' as comma-separated frame numbers with a default, 'scale' as a screenshot scale multiplier, and 'timeout' as maximum seconds to wait. This provides clear context beyond the bare schema, though it could specify formats (e.g., image types) more explicitly.
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: 'Capture screenshots at multiple frame points for animation verification.' It specifies the verb ('capture'), resource ('screenshots'), and context ('animation verification'), making it easy to understand. However, it doesn't explicitly differentiate from sibling tools like 'play_and_capture' or 'run_and_capture', 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 implied usage guidance by stating it's 'useful for verifying animations, transitions, and time-based effects,' which gives context for when to use it. However, it doesn't explicitly mention when not to use it or name alternatives among the sibling tools, such as how it differs from 'compare_frames' or 'play_and_capture'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_framesA
Compare screenshots at two frames and report pixel differences.
Captures the screen as color grids at two frames and computes a diff. Returns changed pixel count, percentage, and which screen regions changed. Use this for visual regression testing.
Args: script_path: Absolute path to the .py script to run. frame_a: First frame number (default: 1). frame_b: Second frame number (default: 30). timeout: Maximum seconds to wait for the script (default: 15).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| frame_a | No | ||
| frame_b | No | ||
| timeout | No |
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 behavioral traits such as capturing screens, computing diffs, and returning metrics (changed pixel count, percentage, regions). However, it lacks details on permissions, rate limits, error handling, or what happens if the script fails, which are important for a tool that runs external scripts with a timeout.
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, starting with the core purpose, followed by a brief explanation of the process, usage context, and parameter details. Each sentence adds value without redundancy, making it efficient 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's complexity (running scripts, comparing frames) and no annotations, the description does a good job covering purpose, usage, and parameters. Since an output schema exists, it need not explain return values, but it still mentions what is returned. It could be more complete by addressing potential failures or dependencies, but it's largely adequate.
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 meaning by explaining each parameter's role: 'script_path' as an absolute path to a .py script, 'frame_a' and 'frame_b' as frame numbers with defaults, and 'timeout' as maximum wait seconds. This clarifies semantics beyond the schema's basic titles, though it could provide more context on valid ranges or formats.
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 ('compare screenshots', 'captures the screen', 'computes a diff') and resources ('screenshots at two frames', 'color grids'). It distinguishes from siblings by focusing on visual comparison rather than inspection or capture operations, making its function 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 provides clear context for usage ('Use this for visual regression testing'), which implicitly suggests when to use it. However, it does not explicitly state when not to use it or name alternatives among siblings like 'capture_frames' or 'inspect_screen', leaving some guidance gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_bankA
Visualize an entire Pyxel image bank as a single screenshot.
Renders the full 256x256 pixel contents of an image bank, showing all sprites and tiles at once. Useful for verifying sprite sheet organization and finding available space.
Args: script_path: Absolute path to the .py script to run. bank: Image bank index 0-2 (default: 0). scale: Screenshot scale multiplier (default: 1). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| bank | No | ||
| scale | No | ||
| timeout | 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 that the tool generates a screenshot and has a timeout, which are useful behavioral traits. However, it lacks details on permissions, rate limits, or what happens on failure, leaving gaps for a tool with no 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 appropriately sized and front-loaded, starting with the core purpose, followed by usage context, and ending with a structured parameter list. Every sentence adds value without redundancy, making it 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 no annotations, no output schema, and 4 parameters with 0% schema coverage, the description is somewhat complete but has gaps. It explains the tool's purpose and parameters well but lacks details on output format (e.g., file type of screenshot), error handling, or dependencies, which are important for a visualization tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining each parameter's purpose (e.g., 'Absolute path to the .py script to run' for script_path) and default values, effectively documenting all parameters beyond the bare schema, though it could provide more detail on constraints like valid ranges for scale.
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 ('visualize', 'renders') and resource ('Pyxel image bank', 'full 256x256 pixel contents'), distinguishing it from siblings like inspect_sprite or inspect_tilemap by focusing on the entire bank visualization rather than specific elements.
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 ('useful for verifying sprite sheet organization and finding available space'), but does not explicitly mention when not to use it or name alternatives among the sibling tools, such as inspect_sprite for individual sprites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_layoutB
Analyze screen layout, text alignment, and visual balance.
Detects text positions, checks horizontal balance, and identifies centering issues. Use this to verify UI layout quality.
Args: script_path: Absolute path to the .py script to run. frames: Frame number to analyze (default: 5). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| frames | No | ||
| timeout | No |
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 but provides minimal behavioral information. It mentions what the tool detects (text positions, balance issues) but doesn't disclose execution characteristics like whether it's read-only/destructive, permission requirements, rate limits, or what happens on timeout. For a tool with 3 parameters and no 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 well-structured with purpose statement, functional details, and parameter explanations in separate sections. It's appropriately sized with no redundant information. The parameter section could be slightly more concise, but overall it's efficient and front-loaded with the core purpose.
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 3 parameters with 0% schema coverage but good parameter documentation in the description, plus the existence of an output schema (which means return values don't need explanation), the description is moderately complete. However, for a tool that analyzes visual layouts and runs scripts, more behavioral context about execution and results would be helpful despite the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description includes an 'Args' section that explains all 3 parameters with meaningful context beyond the schema (which has 0% description coverage). It clarifies that script_path is 'Absolute path to the .py script to run', frames is 'Frame number to analyze' with default, and timeout is 'Maximum seconds to wait'. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Analyze screen layout, text alignment, and visual balance' with specific verbs like 'detects', 'checks', and 'identifies'. It distinguishes from siblings like inspect_screen or inspect_sprite by focusing on layout analysis rather than general screen inspection or sprite-specific checks. However, it doesn't explicitly contrast with all siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context: 'Use this to verify UI layout quality' which implies when to use it. However, it doesn't explicitly state when NOT to use it or mention alternatives among the many sibling tools (e.g., when to use inspect_screen instead). The guidance is 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.
inspect_paletteA
Analyze color usage and contrast in a Pyxel screenshot.
Captures the screen and reports which of Pyxel's 16 colors are used, their distribution, background color, and potential contrast issues.
Args: script_path: Absolute path to the .py script to run. frames: Frame number to analyze (default: 5). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| frames | No | ||
| timeout | No |
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 of behavioral disclosure. It explains that the tool captures the screen and analyzes colors, which implies read-only behavior, but doesn't specify if it requires specific permissions, has side effects, or details about error handling. It mentions default values for parameters, which is helpful, but lacks information on rate limits, performance characteristics, or what happens if the script fails.
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, starting with a clear purpose statement followed by bullet points for parameters. Every sentence adds value: the first explains the tool's function, and the parameter descriptions provide essential context without redundancy. There's no wasted text, making it 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 tool's moderate complexity (3 parameters, no annotations, but with an output schema), the description is fairly complete. It covers the purpose, parameters, and implied behavior, though it could benefit from more behavioral details like error handling. Since an output schema exists, it doesn't need to explain return values, which helps. However, without annotations, some safety or operational context is missing.
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 significant meaning beyond the input schema, which has 0% description coverage. It explains that 'script_path' is for a '.py script to run', 'frames' is the 'Frame number to analyze' with a default, and 'timeout' is the 'Maximum seconds to wait for the script' with a default. This clarifies the purpose and usage of all three parameters, compensating well for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Analyze color usage and contrast'), the target resource ('Pyxel screenshot'), and the detailed outputs ('reports which of Pyxel's 16 colors are used, their distribution, background color, and potential contrast issues'). It distinguishes itself from siblings like 'inspect_screen' or 'capture_frames' by focusing specifically on color palette analysis rather than general screen inspection or frame capture.
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 'inspect_screen' or 'capture_frames'. It mentions what the tool does but doesn't specify scenarios where color analysis is preferred over other inspection methods, nor does it mention prerequisites or exclusions. The context is implied through the tool's name and description but lacks explicit usage instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_screenA
Capture screen as a compact color index grid.
Returns the screen contents as a 2D array of Pyxel palette indices (0-15). Much smaller than a screenshot image and enables programmatic comparison. Each row is a string of hex digits (0-f).
Args: script_path: Absolute path to the .py script to run. frames: Frame number to capture (default: 5). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| frames | No | ||
| timeout | No |
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 runs a script, captures at a specific frame, and has a timeout, which are useful behavioral traits. However, it does not mention potential side effects (e.g., if the script execution modifies state), error handling, or performance implications, leaving gaps 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, starting with the core purpose, then detailing the return format, and finally listing parameters with brief explanations. Every sentence adds value without redundancy, making it efficient 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 complexity of running a script and capturing screen data, with no annotations but an output schema (implied by 'Returns'), the description is fairly complete. It covers the tool's purpose, output format, and parameters, but could benefit from more behavioral context (e.g., error cases or prerequisites) 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?
Schema description coverage is 0%, so the description must compensate. It adds meaning by explaining that 'script_path' is an absolute path to a .py script, 'frames' is the frame number to capture with a default, and 'timeout' is the maximum wait time in seconds. This clarifies the purpose and usage of parameters beyond the bare schema, though it could provide more detail on format constraints.
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 ('Capture screen as a compact color index grid') and distinguishes it from siblings by specifying it returns Pyxel palette indices in a 2D array format, unlike tools like 'capture_frames' or 'play_and_capture' which likely handle different capture methods or outputs.
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 programmatic comparison of screen contents in a compact format, but does not explicitly state when to use this tool versus alternatives like 'capture_frames' or 'compare_frames'. It provides context but lacks explicit guidance on exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_spriteA
Inspect sprite pixel data from a Pyxel image bank.
Reads pixel data, checks horizontal/vertical symmetry, and reports color usage. Use this to verify sprite quality and find asymmetries.
Args: script_path: Absolute path to the .py script to run. image: Image bank index, 0-2 (default: 0). x: X position in the image bank (default: 0). y: Y position in the image bank (default: 0). w: Width of the region to inspect (default: 8). h: Height of the region to inspect (default: 8). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| image | No | ||
| x | No | ||
| y | No | ||
| w | No | ||
| h | No | ||
| timeout | No |
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 of behavioral disclosure. It describes what the tool does (reads, checks, reports) and mentions a timeout parameter, but it does not cover other important traits like error handling, permissions needed, rate limits, or whether it's read-only or destructive. The description adds some context but leaves gaps in 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 appropriately sized and front-loaded, starting with the core purpose and usage context before detailing parameters. The 'Args' section is structured but slightly verbose; every sentence earns its place by clarifying parameters, though it could be more concise by integrating parameter details into the flow.
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 (7 parameters, no annotations, but with an output schema), the description is fairly complete. It covers purpose, usage, and parameter semantics, but lacks behavioral details like error handling or output format. Since an output schema exists, the description doesn't need to explain return values, making it adequate but with minor gaps in transparency.
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 provides semantic meaning for all 7 parameters in the 'Args' section, explaining what each parameter represents (e.g., 'Absolute path to the .py script to run', 'Image bank index, 0-2', 'X position in the image bank'). This adds significant value beyond the bare schema, though it could be more integrated into the main description text.
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 ('inspect sprite pixel data', 'reads pixel data', 'checks horizontal/vertical symmetry', 'reports color usage') and distinguishes it from siblings by focusing on sprite analysis rather than frames, palettes, tilemaps, or other Pyxel components. It explicitly mentions the resource ('Pyxel image bank') and the goal ('verify sprite quality and find asymmetries').
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 ('to verify sprite quality and find asymmetries'), but it does not explicitly mention when not to use it or name specific alternatives among the sibling tools. It implies usage for sprite inspection but lacks explicit exclusions or comparisons to tools like inspect_bank or inspect_tilemap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_stateA
Read game object attributes at specific frames for debugging.
Captures the App instance (the class that calls pyxel.run()) and dumps its attributes as JSON. Supports single frame or comma-separated multi-frame timeline with automatic diff between frames.
Args: script_path: Absolute path to the .py script to run. frames: Frame number(s) to inspect, comma-separated (default: "60"). Use multiple frames for timeline diff: "10,30,60" attributes: Comma-separated attribute names to inspect (default: all). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| frames | No | 60 | |
| attributes | No | ||
| timeout | No |
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 behavioral traits such as capturing the App instance, dumping attributes as JSON, supporting single/multi-frame inspection with automatic diff, and having a timeout. However, it does not mention permissions, rate limits, or error handling, leaving some gaps for a debugging 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 appropriately sized and front-loaded, starting with the core purpose. The Args section is well-structured but slightly verbose. Every sentence adds value, though it could be more streamlined by integrating the parameter explanations more seamlessly.
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 (debugging tool with 4 parameters) and no annotations, the description is fairly complete. It explains the tool's behavior, parameters, and has an output schema (implied by 'dumps its attributes as JSON'), reducing the need to detail return values. However, it could better address error cases or prerequisites.
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 meaning beyond the schema by explaining each parameter's purpose: 'script_path' as the absolute path to run, 'frames' for frame numbers with examples, 'attributes' for attribute names, and 'timeout' as maximum wait seconds. This covers all parameters effectively, though not exhaustively.
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 ('Read', 'Captures', 'dumps') and resources ('game object attributes', 'App instance', 'attributes as JSON'). It distinguishes from siblings by focusing on debugging through attribute inspection rather than visual capture or other inspections like 'inspect_bank' or 'inspect_sprite'.
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 debugging and mentions multi-frame timeline diff, but does not explicitly state when to use this tool versus alternatives like 'capture_frames' or 'compare_frames'. It provides some context but lacks clear exclusions or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_tilemapA
Inspect tilemap content, tile usage, and layout.
Reads tilemap data and reports tile grid, usage statistics, bounding box of non-empty tiles, and imgsrc setting.
Args: script_path: Absolute path to the .py script to run. tilemap: Tilemap index 0-7 (default: 0). frames: Frame at which to read tilemap (default: 1). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| tilemap | No | ||
| frames | No | ||
| timeout | No |
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 of behavioral disclosure. It mentions reading tilemap data and reporting specific outputs (tile grid, usage statistics, bounding box, imgsrc setting), which gives some insight into behavior. However, it lacks details on permissions, error handling, or performance characteristics like rate limits that would be important for a tool interacting with scripts and tilemaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by a clear breakdown of parameters. Every sentence earns its place by either explaining functionality or parameter usage, with no wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no annotations, but with an output schema), the description is reasonably complete. It explains what the tool inspects and details all parameters. Since an output schema exists, it doesn't need to describe return values. However, it could improve by addressing sibling tool differentiation or behavioral constraints like script execution safety.
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 provides clear explanations for all four parameters: 'script_path' as an absolute path to a .py script, 'tilemap' as an index 0-7, 'frames' as a frame number, and 'timeout' as maximum seconds. This adds significant meaning beyond the bare schema, though it could benefit from more context on valid script types or timeout implications.
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 ('inspect', 'reads', 'reports') and resources ('tilemap content, tile usage, and layout'), making it easy to understand what it does. However, it doesn't explicitly differentiate from sibling tools like 'inspect_layout' or 'inspect_screen', which might have overlapping inspection functions.
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. With sibling tools like 'inspect_layout', 'inspect_screen', and 'inspect_sprite' available, there's no indication of what makes this tool specific to tilemaps or when to choose it over other inspection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
play_and_captureA
Play a game by sending simulated input and capture screenshots.
Simulates keyboard/mouse input at specific frames and captures screenshots at specified frame points. Use this to test input-dependent game logic (menus, movement, shooting) without manual play.
Args: script_path: Absolute path to the .py script to run. inputs: JSON array of input events. Each event: {"frame": N, "keys": ["KEY_SPACE", ...], "mouse_x": X, "mouse_y": Y} Keys are held from their frame until a later entry changes them. Default state: no keys pressed, mouse at (0,0). frames: Comma-separated frame numbers to capture screenshots (default: "1,30,60"). scale: Screenshot scale multiplier (default: 1). timeout: Maximum seconds to wait for the script (default: 30).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| inputs | Yes | ||
| frames | No | 1,30,60 | |
| scale | No | ||
| timeout | 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 describes key behaviors like simulating keyboard/mouse input, capturing screenshots at frames, and default states, but lacks details on permissions, rate limits, error handling, or what happens after timeout. It adds value but is incomplete 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 well-structured with a purpose statement, usage context, and a clear 'Args' section. Every sentence earns its place, but it could be slightly more concise by integrating the default explanations into the parameter list more tightly. It is front-loaded with the core functionality.
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 (5 parameters, no annotations, no output schema), the description is moderately complete. It covers parameters well but lacks output details (e.g., what screenshots look like), error scenarios, or integration with sibling tools. For a tool with simulation and capture, more behavioral context would be beneficial.
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 fully. It provides detailed semantics for all 5 parameters, including format examples for 'inputs' (JSON array with frame, keys, mouse coordinates), default values for 'frames', 'scale', and 'timeout', and explanations of key holding behavior. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('play a game by sending simulated input and capture screenshots') and distinguishes it from siblings like 'capture_frames' or 'run_and_capture' by emphasizing input simulation for testing game logic. It explicitly mentions testing menus, movement, and shooting without manual play.
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 ('to test input-dependent game logic without manual play'), but it does not explicitly state when not to use it or name specific alternatives among the sibling tools. The guidance is helpful but lacks explicit exclusions or comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pyxel_infoA
Get Pyxel installation info: package location, examples path, and API stubs path.
| 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 implies a read-only operation ('Get') and specifies the three data points returned, which is helpful. However, it doesn't disclose behavioral traits like error handling (e.g., if Pyxel isn't installed), performance (e.g., fast local lookup), or output format details (though an output schema exists).
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 front-loads the core action ('Get Pyxel installation info') and immediately lists the specific outputs, making it easy to parse. Every word contributes directly to understanding the tool's function.
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 (0 parameters, read-only operation) and the presence of an output schema (which handles return values), the description is reasonably complete. It clearly states what information is retrieved. However, it lacks context on usage scenarios or error conditions, which would be beneficial 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?
The tool has 0 parameters, and schema description coverage is 100% (empty schema). The description doesn't need to explain parameters, so it appropriately focuses on the tool's purpose. No additional parameter semantics are required, making this above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get') and the resource ('Pyxel installation info'), listing the exact information returned (package location, examples path, API stubs path). It distinguishes itself from sibling tools like 'capture_frames' or 'inspect_sprite' by focusing on installation metadata rather than game state inspection.
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., Pyxel must be installed), typical use cases (e.g., debugging setup), or exclusions (e.g., not for runtime game data). With 13 sibling tools, this lack of context leaves the agent guessing about appropriate selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_audioA
Render a Pyxel sound or music to WAV and return waveform analysis.
Runs the script to set up sounds (without starting the game loop), then renders the specified sound or music to WAV and analyzes the audio. Returns note sequence with timing, frequency, and volume data.
Args: script_path: Absolute path to the .py script to run. sound_index: Sound slot to render, 0-63 (default: 0). Ignored when music_index is set. duration_sec: Duration in seconds. 0 = auto-detect from sound length (10s for music). timeout: Maximum seconds to wait for the script (default: 10). music_index: Music slot to render, 0-7. When set (>=0), renders the full multi-channel music mix instead of a single sound.
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| sound_index | No | ||
| duration_sec | No | ||
| timeout | No | ||
| music_index | No |
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 behaviors: it runs scripts without starting game loops, auto-detects durations (0 = auto-detect), has timeout defaults, and returns specific analysis data (note sequence with timing, frequency, volume). However, it doesn't mention potential side effects like file creation or resource usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with purpose statement upfront, followed by behavioral context, then detailed parameter explanations. Every sentence adds value, though the Args section formatting could be slightly more concise.
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 (5 parameters, audio rendering/analysis functionality) and the presence of an output schema (which handles return values), the description provides complete context: clear purpose, parameter semantics, behavioral details, and differentiation between sound vs music rendering modes.
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 all 5 parameters in detail: script_path requirements (absolute path), sound_index range (0-63) and interaction with music_index, duration_sec behavior (0 = auto-detect), timeout purpose, and music_index significance (>=0 triggers music rendering). This adds substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Render a Pyxel sound or music to WAV and return waveform analysis'), identifies the resource (Pyxel sound/music), and distinguishes it from siblings by focusing on audio rendering and analysis rather than visual inspection or game execution.
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 about when to use sound_index vs music_index ('Ignored when music_index is set', 'When set (>=0), renders the full multi-channel music mix instead of a single sound'), but doesn't explicitly mention when to use this tool versus sibling tools like play_and_capture or run_and_capture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_and_captureA
Run a Pyxel script and capture a screenshot after N frames.
Args: script_path: Absolute path to the .py script to run. frames: Number of frames to render before capturing (default: 60). scale: Screenshot scale multiplier (default: 1). timeout: Maximum seconds to wait for the script (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes | ||
| frames | No | ||
| scale | No | ||
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the action (run script, capture screenshot) and timeout behavior, but doesn't address critical aspects like error handling, what happens if the script crashes, whether it requires specific permissions, or what the output format is. For a tool with 4 parameters and no annotations, this leaves significant 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 perfectly structured with a clear purpose statement followed by a well-organized Args section. Every sentence earns its place, with no redundant information. The front-loaded purpose statement immediately communicates the tool's function.
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 4 parameters, no annotations, and no output schema, the description provides adequate parameter semantics but lacks information about return values, error conditions, and behavioral constraints. For a tool that executes scripts and captures output, more context about what gets returned and potential failure modes would be beneficial.
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 provides essential semantic context for all 4 parameters: script_path requires absolute path to .py file, frames controls rendering before capture, scale is a screenshot multiplier, and timeout limits execution. This compensates well for the schema's lack of descriptions, though it doesn't specify value ranges or constraints.
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 ('Run a Pyxel script and capture a screenshot') with precise resource targeting ('.py script'), and distinguishes it from sibling tools like 'play_and_capture' by specifying it captures after N frames rather than during playback. The verb+resource combination is explicit 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 context through parameter defaults (frames=60, scale=1, timeout=10) but doesn't explicitly state when to use this tool versus alternatives like 'play_and_capture' or 'capture_frames'. It provides basic operational context but lacks comparative guidance or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_scriptA
Validate a Pyxel script without running it.
Performs AST parsing and checks for common Pyxel anti-patterns. Much faster than run_and_capture for catching syntax errors and obvious mistakes before execution.
Args: script_path: Absolute path to the .py script to validate.
| Name | Required | Description | Default |
|---|---|---|---|
| script_path | Yes |
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 of behavioral disclosure. It effectively describes key traits: it's a non-executing validation tool (implied read-only/safe), performs AST parsing, checks for anti-patterns, and is optimized for speed. It doesn't mention error formats, rate limits, or authentication needs, but covers the core behavior well for a validation 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 efficiently structured with a clear purpose statement upfront, followed by implementation details and speed comparison, ending with parameter documentation. Every sentence adds value: the first states what it does, the second explains how, the third provides usage context, and the fourth clarifies the parameter.
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 (validation with AST parsing), no annotations, 0% schema coverage, but presence of an output schema, the description is mostly complete. It explains purpose, usage context, and parameter meaning well. The output schema likely handles return values, so the description appropriately focuses on behavioral context rather than output 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?
With 0% schema description coverage for the single parameter, the description compensates by explaining 'script_path' as 'Absolute path to the .py script to validate.' This adds crucial semantic context beyond the schema's basic string type. However, it doesn't specify path format requirements or file existence expectations.
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 ('Validate a Pyxel script without running it') and resource ('.py script'), distinguishing it from siblings like 'run_and_capture' by emphasizing it's a pre-execution check. It explicitly mentions what it does (AST parsing, checking for anti-patterns) versus what it doesn't do (running the script).
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 ('for catching syntax errors and obvious mistakes before execution') and when to use alternatives ('Much faster than run_and_capture'). It clearly differentiates from sibling tools by positioning it as a pre-execution validation step.
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.
14 tool updates
v0.8.0- First observed
capture_frames - First observed
compare_frames - First observed
inspect_bank - First observed
inspect_layout - First observed
inspect_palette - First observed
inspect_screen - First observed
inspect_sprite - First observed
inspect_state - First observed
inspect_tilemap - First observed
play_and_capture - First observed
pyxel_info - First observed
render_audio - First observed
run_and_capture - First observed
validate_script
TDQS
Scored across 14 tools
Each tool has a clearly distinct purpose targeting specific aspects of Pyxel game development: capture_frames for animation verification, compare_frames for visual regression, inspect_* tools for analyzing different game components (bank, layout, palette, screen, sprite, state, tilemap), play_and_capture for input testing, pyxel_info for installation details, render_audio for sound analysis, run_and_capture for basic execution, and validate_script for syntax checking. There is no functional overlap between tools.
Tool names follow a highly consistent verb_noun pattern throughout: capture_frames, compare_frames, inspect_bank, inspect_layout, inspect_palette, inspect_screen, inspect_sprite, inspect_state, inspect_tilemap, play_and_capture, pyxel_info, render_audio, run_and_capture, validate_script. All use snake_case with clear action verbs (capture, compare, inspect, play, render, run, validate) followed by specific nouns.
14 tools is well-scoped for the Pyxel game development domain, covering animation verification, visual testing, component inspection, input simulation, audio analysis, script validation, and system information. Each tool serves a distinct purpose in the testing/debugging workflow, with no redundant or trivial tools.
The toolset provides comprehensive coverage for Pyxel game testing and debugging, including visual verification (capture_frames, compare_frames), component analysis (7 different inspect_* tools), input testing (play_and_capture), audio analysis (render_audio), and script validation (validate_script). Minor gaps might include tools for performance profiling or network testing, but these are outside the core visual/audio debugging focus.
Maintenance
Related MCP Connectors
Generate authentic pixel art - sprites, animations, and tilesets - from any MCP client
MCP server for building and testing AI agents with multi-model experimentation and insights.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for programmatically creating and editing Aseprite sprites, enabling AI agents to draw, manage layers and frames, and iterate until the desired result is achieved.MIT
- AlicenseBqualityCmaintenanceAn MCP server that lets AI agents create and edit Aseprite sprites headlessly, enabling pixel art, animation, and export via 98 tools.1008MIT
- FlicenseAqualityDmaintenanceAn MCP server that enables AI coding agents to create pixel art programmatically by providing canvas manipulation tools and PNG export.1018 npm2-
- AlicenseNot gradedqualityAmaintenanceAn AI-native game engine MCP server that enables AI agents to create, modify, and run games using 53 tools for scene creation, physics, audio, 3D rendering, and AI-generated images and music.1MIT