Drawing a rectangle by conversation is a demo. Resizing every sprite in a directory to half scale, or applying one palette across a folder with backups, is the work that would otherwise be an afternoon of clicking. The security settings deserve a look before you point it at anything: allowed_directories and a maximum file size are configurable, and they bound what generated Lua can touch.
A Python MCP server that generates Lua for Aseprite and runs it against your local installation. It covers drawing, palettes, export and bulk operations, with input validation and path-traversal protection between the model and your filesystem.
- create_canvas makes a sprite; add_layer and add_frame build up layers and animation frames
- draw_pixels, draw_line, draw_rectangle, draw_circle and fill_area cover drawing, with hex colours, fill and thickness options and a tolerance on the fill
- apply_preset_palette applies gameboy, gameboy-pocket, nes, pico-8, cga, monochrome or sepia; create_palette takes your own hex list
- extract_palette_from_image pulls colours out of a reference image, get_palette_info reports what a sprite uses, and remap_colors swaps one colour for another throughout
- export_sprite writes out with a scale and an optional frame range; export_layers writes each layer separately
- batch_resize, batch_export and batch_apply_palette process a directory with a file pattern, and batch_process_custom runs your own Lua across a file set
- Configuration through JSON or YAML sets canvas limits, parallel batch jobs, allowed directories and a maximum file size
Python 3.13 or newer and a separately installed copy of Aseprite. ASEPRITE_PATH must point at the executable — for example /Applications/Aseprite.app/Contents/MacOS/aseprite on macOS. Run with uv or as `python -m aseprite_mcp` from a checkout; ASEPRITE_MCP_LOG_LEVEL controls logging.
Build from source — clone the repository and build it, then point your client at the binary
