MCP server that lets an AI assistant (e.g. Claude) draw live in Aseprite
Server has 15 tools with complete input schemas and descriptions. Naming follows verb_noun convention (get_pixels, set_pixels, draw, etc.). Descriptions are present and actionable (avg ~120 chars), explaining WHAT each tool does and WHEN to use it. However, several tools lack parameter-level descriptions (e.g., 'rect' in get_pixels is described as 'Rectangle [x, y, width, height]' but lacks guidance on coordinate system or bounds). Output schemas are not documented, LLMs cannot predict return structure. Error handling is minimal; no recovery guidance or categorization. Security is a concern: run_lua is gated by env var but no permission checks on other destructive tools (delete, clear, save). Composition is good, tools are single-purpose and chainable (e.g., get_pixels → set_pixels). Parameter constraints are mostly present (enums for tool names, color modes) but some are loose (e.g., 'points' in draw accepts arbitrary arrays with no validation hint).
Clear pixels in a rectangular region or entire layer
Draw shapes using Aseprite drawing tools (line, rectangle, filled_rectangle, paint_bucket, etc.)
Manage frames: create, delete, select, or change duration
Get pixel data from a sprite layer as RGBA hex strings, with optional flattening and rectangle clipping
Undo or redo actions
Get information about the active sprite, including dimensions, color mode, frame count, layers, and palette size
Manage layers: create, delete, rename, select, or change visibility
Output schemas not documented. LLMs cannot predict return structure for any tool. E.g., get_pixels returns RGBA hex strings but this is not declared in a schema. Agents cannot plan downstream operations or extract fields reliably.
Parameter descriptions lack detail on constraints and formats. E.g., 'rect' is described as '[x, y, width, height]' but no guidance on coordinate system, bounds checking, or whether negative values are allowed. 'points' in draw accepts arbitrary arrays with no validation hint.
Error handling is minimal. No recovery guidance, error categorization, or actionable messages. E.g., if a file path is invalid or a layer does not exist, the LLM receives no hint on what to do next.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Create a new sprite with specified width, height, color mode, and optional background color
Open an existing sprite file from the filesystem
Get or set the sprite's color palette
Execute arbitrary Lua code in Aseprite (only available if ASEPRITE_MCP_ALLOW_LUA=1)
Save the active sprite to a file, optionally exporting to a specific format
Draw pixels on the active layer at specified coordinates with colors
Take a PNG screenshot of the sprite or a region, with optional scaling, grid, and checkerboard
List all open sprites with their IDs and names
Destructive tools (delete, clear, save) lack confirmation or dry-run support. Agents can accidentally destroy work without a safety gate. run_lua is gated by env var but other destructive ops are not.
run_lua tool accepts arbitrary code with minimal description. Security risk if ASEPRITE_MCP_ALLOW_LUA=1 is set. Description does not warn of destructive capability or suggest safer alternatives.