
Aseprite MCP Tools
Give AI assistants full control over Aseprite to create pixel art and animated sprites.
Add to your client
Copy the config for your MCP client and paste it into its config file.
Paste into ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"aseprite-mcp-tools": {
"command": "/opt/homebrew/bin/uv",
"args": [
"--directory",
"/path/to/repo",
"run",
"-m",
"aseprite_mcp"
]
}
}
}Step-by-step guides: Add to Claude Desktop · Add to Cursor · Add to Windsurf
Before you start
- Python 3.13+
- uv package manager
- Aseprite (set ASEPRITE_PATH in .env if it is not on your PATH)
About Aseprite MCP Tools
Aseprite MCP Tools is a Python MCP server that lets AI assistants create and edit pixel art and animated sprites by driving a real Aseprite installation in batch mode. It surfaces 104 tools across 17 categories — from canvas/layer/frame management and primitive drawing to higher-level pixel-art helpers like shading ramps, ordered dithering, outlines, retro palette presets, and quantization. For animation it offers cel lifecycle tools, eased position/opacity/scale tweens, oscillation, tags, and a visual-feedback loop (scaled frame exports, onion-skin renders, frame diffing, color statistics) so the model can inspect and correct its own work. A raw Lua escape hatch (run_lua_script) covers anything the dedicated tools don't. Exports cover PNG, GIF, sprite sheets, per-layer and per-tag output, plus a local HTTP preview server.
Tools & capabilities (94)
create_canvasCreate a new sprite with the given dimensions.
add_layerAdd a new layer, optionally inside a named group.
add_groupAdd a new (optionally nested) group layer.
add_frameAppend a new frame.
set_frameSet the active frame.
set_frame_durationSet one frame's duration in ms.
set_layerSet the active layer (optionally creating it).
draw_pixelsPlot individual pixels with per-pixel colors.
draw_pixels_atPlot pixels on a specific layer/frame.
draw_line / draw_line_atDraw lines with thickness.
draw_rectangle / draw_rectangle_atDraw outlined or filled rectangles.
draw_circle / draw_circle_atDraw outlined or filled circles.
draw_ellipse_atDraw outlined or filled ellipses with separate x/y radii.
draw_polygonDraw outlined or filled polygons from a point list.
draw_pathDraw a polyline through a point list with thickness.
fill_area / fill_area_atPaint-bucket flood fill.
apply_gradient_rectSmooth linear gradient fill in a rectangle.
delete_layerDelete a layer by name.
rename_layerRename a layer.
duplicate_layerDuplicate a layer with all cels, opacity, and blend mode, optionally into a group.
reorder_layerMove a layer to a position in the stack.
set_layer_blend_modeSet blend mode (multiply, screen, overlay, ... 19 modes).
merge_layer_downMerge a layer into the one below it.
flatten_spriteFlatten all layers into one.
move_regionCut a rectangle of pixels and paste it elsewhere.
copy_regionCopy a rectangle to another position, layer, or frame.
erase_regionMake a rectangle transparent.
erase_colorMagic-eraser: make all pixels of a color transparent (with tolerance).
outline_celAdd a 1px outline around all opaque pixels.
replace_colorReplace one color with another (with tolerance), preserving alpha.
adjust_hslShift hue/saturation/lightness of a cel — palette swaps, night scenes, shadows.
apply_dither_gradientTwo-color gradient using Bayer 4x4 ordered dithering.
apply_dither_patternUniform dithered mix of two colors at a given density.
add_framesAppend N frames with optional duration.
delete_frameDelete a frame.
set_frame_duration_allSet every frame's duration.
duplicate_frame_rangeDuplicate a frame range N times.
copy_frame / propagate_frame_to_rangeCopy all cels of a frame to other frames.
create_cel / clear_cel / copy_celCel lifecycle on a layer/frame.
propagate_celsCopy selected layers' cels across a frame range.
set_cel_positionPlace a cel at x,y.
set_cel_opacitySet a single cel's opacity.
offset_cel_positionsShift cels by a delta across frames.
tween_cel_positionsLinear position tween across frames.
tween_cel_positions_easedPosition tween with easing (ease_in/out, smoothstep).
tween_cel_opacity_easedOpacity tween with easing.
tween_cel_scale_easedScale tween with easing and anchor.
oscillate_cel_positionsSine-wave motion (bobbing, breathing, hovering).
set_tag / delete_tagAnimation tags with direction (forward/reverse/pingpong).
set_layer_visibility / set_layer_opacityLayer-level visibility and opacity.
set_onion_skinConfigure onion-skin UI prefs (see render_onion_skin for batch use).
get_sprite_infoSprite metadata: size, layers, frames, durations, tags.
get_paletteRead the palette as hex colors.
set_paletteSet the palette from a list of hex colors.
list_palette_presetsList built-in retro palettes.
apply_palette_presetApply a preset: gameboy, pico8, c64, cga, dawnbringer16, dawnbringer32, grayscale_4, monochrome.
generate_color_rampBuild a dark-to-light shading ramp with hue shifting from a base color.
quantize_to_paletteSnap every pixel to the nearest palette color.
remap_colors_in_cel_rangeRemap specific colors across a frame range.
set_color_modeConvert between RGB, grayscale, and indexed.
flip_layerFlip a cel horizontally or vertically.
rotate_layerRotate a cel 90/180/270 degrees.
resize_canvasScale the sprite to new dimensions.
crop_canvasCrop to a rectangle.
create_sliceCreate a named rectangular region.
set_slice_centerSet the 9-patch stretchable center.
set_slice_pivotSet the pivot point.
list_slicesList all slices with bounds, centers, pivots as JSON.
delete_sliceDelete a slice.
create_tilemap_layerAdd a tilemap layer with its own tileset and tile grid.
draw_on_tilePaint pixels into a tileset tile (auto-appends new tiles).
set_tilesPlace tiles on the map by grid position.
get_tile_atRead which tile occupies a grid cell.
get_tilemap_infoTile size, tile count, and map dimensions as JSON.
export_spriteExport to PNG, GIF, JPG, and other formats.
export_frameExport one frame as PNG with integer upscaling — the core visual-feedback loop: draw, export at 8x, look, iterate.
export_spritesheetSprite sheet (horizontal/vertical/rows/columns/packed) with optional JSON metadata and per-tag filtering.
export_layersOne PNG per layer.
export_tagExport an animation tag as GIF or PNG sequence.
import_image_as_layerImport a PNG into a layer (references, premade parts).
copy_spriteDuplicate the .aseprite file.
get_pixel_colorRead one pixel's RGBA.
get_pixels_rectRead a rectangle of pixels as JSON.
render_onion_skinRender a frame over translucent ghosts of neighboring frames — check motion continuity without opening Aseprite.
compare_framesDiff two frames: changed pixel count, percentage, bounding box.
get_color_statsColor histogram of a frame — catches palette drift and near-duplicate colors.
ensure_layers_presentCreate missing cels for layers across a frame range.
validate_sceneReport missing layers/cels as JSON.
audit_animationAudit frames for overlaps and out-of-range layer activity.
animation_sanitizeNormalize layer order, coverage, and overlaps.
copy_layers_between_spritesCopy layers by name from one .aseprite file to another.
start_preview_server / stop_preview_serverServe exported files over local HTTP.
animation_workflow_guideReturns a step-by-step workflow guide for the LLM.
run_lua_scriptExecute arbitrary Aseprite Lua in batch mode — the escape hatch when no dedicated tool fits. Runs unrestricted code on the host; only pass scripts you trust.
What this server can do
Aseprite MCP Tools provides tools for these capabilities — tap one to see every MCP server that does the same:
When to use it
- Have an AI assistant draw a still pixel-art character from a text prompt and export it upscaled.
- Generate multi-frame sprite animations (e.g. an attack sequence) and export them as GIF or sprite sheets.
- Plan and apply palettes — retro presets, hue-shifted shading ramps, and quantization — for consistent pixel art.
- Iterate visually: export frames at high zoom, render onion skins, and diff frames so the model can correct its own work.
- Build tilemaps and 9-patch slices for game assets.
Security notes
The `run_lua_script` tool executes arbitrary Aseprite Lua code on the host in batch mode — only pass scripts you trust. Several tools read and write `.aseprite` files and export images to the local filesystem.
Aseprite MCP Tools FAQ
Do I need Aseprite installed?
Yes. The server drives a real Aseprite binary in batch mode. Install Aseprite locally and set ASEPRITE_PATH in .env if it is not on your PATH, or run via the provided Docker image (which can install Aseprite via SteamCMD with Steam credentials).
How do I run it?
Add the mcpServers config block to your MCP client, pointing the uv command at the cloned repo directory and running `-m aseprite_mcp`. It requires Python 3.13+ and the uv package manager. A Docker image and docker-compose setup are also provided.
Is the raw Lua tool safe?
run_lua_script executes arbitrary, unrestricted Aseprite Lua on the host. Only pass scripts you trust.
What can it produce?
104 tools span drawing, layers, animation (eased tweens, oscillation, tags), palettes, effects, slices, tilemaps, and exports to PNG, GIF, and sprite sheets, plus analysis tools for visual feedback.
Alternatives to Aseprite MCP Tools
Compare all alternatives →Popular community server that feeds Figma layout data to coding agents via a Figma API token.
Generate beautiful, modern UI components from natural-language descriptions inside your IDE.
Give AI assistants full access to shadcn/ui v4 components, blocks, demos, and metadata across React, Svelte, Vue, and React Native.
Compare Aseprite MCP Tools with: