Aseprite Agent MCP
Create and verify pixel-art assets with atomic Aseprite edits and Phaser export.
Connector by SarutobiSasuke8 · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/sarutobisasuke8-aseprite-agent-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.
- Tools
- 18 read · 56 write · 7 delete · 43 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Tools by what they do 124
Read from the source code; the running server may list different tools.
Read 18 · Look things up without changing anything.
ase_export_cast_atlasase_export_phaserase_preview_animationconvert_background_to_layerconvert_layer_to_backgroundextract_paletteget_celget_paletteget_pixelsget_sprite_infoget_tilemapgui_available
Show 6 more tools
list_sliceslist_spritesplan_asset_specrender_previewvalidate_asset_specvalidate_sprite_for_game_export
Write 56 · Create, change, send or run things.
add_frameadd_group_layeradd_layeradd_outlineadd_palette_coloradd_reference_layeradd_sliceadd_tagadd_tileapply_operationsase_apply_and_previewbuild_asset_from_spec
Show 44 more tools
copy_frames_fromcreate_character_spritecreate_icon_setcreate_rpg_item_sheetcreate_spritecreate_tilemap_layercreate_tileset_projectderive_mirrored_tagdraw_textexport_tag_gifexport_tagsfill_areafill_checkerboardfill_gradientfill_layerfill_tilefill_tilemapimport_generated_imageimport_imageimport_reference_sequencemake_4_frame_idle_animationmake_8_direction_walk_templatemerge_layer_downmove_layerrecolor_spriterename_layerreplace_colorresize_canvasresize_palettesave_sprite_asscale_spriteset_all_frame_durationsset_cel_opacityset_cel_positionset_color_modeset_frame_durationset_layer_propertiesset_paletteset_palette_colorset_sliceset_tagset_tileset_tilesset_transparent_color
Delete 7 · Delete, drop, revoke or wipe things.
add_drop_shadowclear_layerdelete_celremove_frameremove_layerremove_sliceremove_tag
Not yet classified 43 · We could not tell from the name and description.
adjust_brightness_contrastadjust_hue_saturationase_validate_asset_contractassemble_animationcopy_celcrop_spritedesaturatedraw_brushdraw_curvedraw_ellipsedraw_image_base64draw_line
Show 31 more tools
draw_pixel_rowsdraw_pixelsdraw_polylinedraw_rectangledraw_symmetric_pixelsduplicate_frameduplicate_layerexport_framesexport_game_asset_bundleexport_gifexport_godot_spriteframesexport_layerexport_layersexport_onion_skinexport_pngexport_slice_metadataexport_spritesheetflatten_spriteflip_spritegenerate_ramphealth_checkinvert_colorsload_palettemirror_layeropen_in_editorpaint_tile_pixelsrotate_spritesort_palettestamp_filestamp_patterntrim_sprite
Secrets and settings it asks for
Other settings (environment variables or headers).
ASEPRITE_MCP_LOCK_WAITASEPRITE_MCP_TOOLSASEPRITE_MCP_WORKSPACEASEPRITE_PATH
Network hosts it talks to 1
github.com· found in code
Files it touches
- Any path the agent passes to its tools
Tools (124)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
add_drop_shadowAdd a hard drop shadow for a layer's artwork on a new layer placed beneath it. Args: layer: The layer casting the shadow. offset_x, offset_y: Shadow offset in pixels. color: Shadow colour (often semi-transparent black, the default). opacity: Opacity (0-255) of the shadow layer. frame: Frame to build the shadow for.
add_frameAppend a new frame to the animation. Args: duration_ms: Frame duration in milliseconds (default 100). copy_from: If given (1-based), duplicate the content of that frame; otherwise the new frame is empty. Returns the new frame number and updated frame count.
add_group_layerAdd a new (empty) group layer on top of the stack. Nest layers into it with add_layer(group=...) or move_layer(group=...).
add_layerAdd a new (empty) normal layer on top of the stack. Args: name: Layer name. group: Optional name of an existing group layer to nest the new layer in. opacity: 0-255. blend_mode: normal, multiply, screen, overlay, darken, lighten, color_dodge, color_burn, hard_light, soft_light, difference, exclusion, hue, saturation, color, luminosity, addition, subtract, divide. visible: Initial visibility.
add_outlineAdd a pixel outline around the artwork on a layer. Args: color: Outline colour. thickness: Outline width in pixels (default 1). connectivity: 4 (orthogonal only) or 8 (includes diagonals, default). where: "outside" (grow into transparency, default) or "inside" (recolour the shape's border pixels).
add_palette_colorAppend a colour to the end of the palette.
add_reference_layerAdd a dimmed, locked layer holding a reference image to trace over. Args: image_file: The reference image/sprite. layer_name: Name for the new layer (default "reference"). opacity: Layer opacity (0-255); dim it so your art stands out. scale_to_fit: Resize the reference to the canvas size (smooth). x, y: Placement when not scaling to fit. Exclude this layer from exports with ignore_layer="<layer_name>".
add_sliceCreate a slice (named region) at (x, y, width, height). Args: center_*: Optional 9-patch center rectangle, **relative to the slice's top-left**. Provide all four to mark the stretchable middle. pivot_*: Optional pivot point (relative to the slice). color: Optional slice colour shown in the editor. data: Optional user data string.
add_tagCreate an animation tag spanning frames [from_frame, to_frame] (1-based). direction: "forward" (default), "reverse", "pingpong", or "pingpong_reverse". color: optional tag colour (shown in the timeline).
add_tileAdd a new tile to the layer's tileset (optionally filled with a solid colour). Returns the new tile's index.
adjust_brightness_contrastAdjust brightness (-255..255, additive) and contrast (-255..255) of a layer.
adjust_hue_saturationShift hue (degrees) and scale saturation/lightness (percent, -100..100).
apply_operationsDescription is built at runtime.
ase_apply_and_previewDescription is built at runtime.
ase_export_cast_atlasValidate several character masters and export them as ONE Phaser atlas. Each member is validated against its own contract; if any fails, nothing is written and every failure is returned. Characters are stacked as row blocks in one sheet.png. Atlas frames are "<character>/<tag>_<nn>" and animations are "<character>:<tag>", all under the atlas key `name`. Every frame of every master is reopened and compared pixel-for-pixel with the written sheet before publishing.
Show 109 more tools
ase_export_phaserValidate a native master and export a Phaser bundle directory. Writes sheet.png (one row per contract row), a Phaser hash atlas, animations.json (per-frame timing, repeat and yoyo from the contract), qa.json, contract.json and loader.js. The master and the written PNG are reopened and every RGBA pixel is compared before publishing. Animations are named "<contract name>:<row tag>". An existing directory is only replaced with replace=true, and only if it is a previous bundle; the swap is a rename, so a failed export leaves the old one intact.
ase_preview_animationReturn a labelled contact sheet of every frame, scaled with nearest-neighbour. With by_tag (default) each tag gets its own row, labelled with its name, frame range, playback and the frame numbers; untagged frames share a final row. The background is a checkerboard so transparency is visible, or any colour. Also returns the sprite info (frame timing in seconds, tags). This is a review sheet, not proof that the motion reads well. Args: scale: 1-16 pixel magnification. background: "checker" (default), a colour such as "#202020", or null for transparent. by_tag: One row per tag (True…
ase_validate_asset_contractReopen a native master and check every frame against a contract. Checks frame count, cell size, that each row's tag covers exactly its frames in order with the expected playback, binary alpha, palette membership, empty frames, and optional per-row foot/centre drift. Unknown contract fields are rejected. Rows are laid out in contract order starting at frame 1. Passing proves geometry and colours, not art quality: still review with ase_preview_animation.
assemble_animationClean 1..128 ordered PNG poses with one palette; save master, sheet and JSON. Bounding-box mode uses one shared scale, bottom-centres silhouettes and leaves an outline margin. Anchor mode scales same-size canvases and translates each source [x,y] to (width//2,height-2), refusing clipping. No pose synthesis is implied: inspect the preview for identity, timing and motion coherence. Output is atomically published only after master and PNG pixel verification. Use height=128 and colours=32..48 for detailed sprites. palette_first snaps one shared source palette before sampling; defaults retain the …
build_asset_from_specBuild the asset described by an ``aseprite_mcp.asset_spec.v1`` document. Executes the (validated) plan by dispatching each step to an existing tool: scaffolds the sprite for its `kind`, applies palette / extra layers / animation frames+tags / slices, and runs the requested exports. **Structure only — no pixels are drawn;** the returned manifest's `suggested_next_actions` hand the actual art back to you. Args: overwrite: Passed to the export steps (replace existing export files). The sprite itself is created no-clobber, so building over an existing ``<name>.aseprite`` rais…
clear_layerErase the target layer/frame cel to full transparency.
convert_background_to_layerConvert the Background layer back into a normal (transparent-capable) layer.
convert_layer_to_backgroundConvert a normal layer into the sprite's opaque Background layer.
copy_celCopy a cel's image (and position) from one frame to another on the same layer.
copy_frames_fromAppend frames from another sprite file, flattened onto one layer of this sprite. Use it to start every character from a shared base body or animation. The source frames are composited (all visible layers) and placed on `layer` of `filename`, keeping each frame's duration. If this sprite has a single empty frame (a fresh file), the first copied frame fills it instead of leaving a blank frame in front. Args: source: The .aseprite file to copy from (same width, height and colour mode). source_tag: Copy this tag's frames. Or give from_frame/to_frame (1-based, inclusive). With nei…
create_character_spriteScaffold a character sprite project: a transparent canvas with a tidy layer stack (body + details), an auto-generated shading palette ramp from `base_color`, and (optionally) an outlined placeholder body to draw over. Returns a ``workflow_manifest.v1`` manifest (sprite summary, created files, palette, and suggested next actions).
create_icon_setScaffold an icon set: a grid sheet with `count` icon cells, each a placeholder inside a named slice (`icon_0`, `icon_1`, …) for easy atlas export. Returns a ``workflow_manifest.v1`` manifest (kind "icon_set"); the per-icon regions appear as slices under `sprite.slices`.
create_rpg_item_sheetScaffold an RPG item sheet: a grid sheet with one named slice per item (default sword/shield/potion/coin/key/gem), each with a placeholder. Returns a ``workflow_manifest.v1`` manifest (kind "rpg_item_sheet"); item regions appear as slices (named after each item) under `sprite.slices`.
create_spriteCreate a new sprite file and save it. Args: filename: Output path. Relative paths go in the workspace. Use a .aseprite/.ase extension to keep layers & frames editable. width, height: Canvas size in pixels (1-65535). color_mode: "rgb" (default), "indexed", or "gray". background: Optional fill colour for the first layer (e.g. "#1d2b53"). Omit for a transparent canvas. overwrite: Replace `filename` if it already exists (default False = no-clobber). Returns the new sprite's structured info.
create_tilemap_layerCreate a tilemap layer with an empty grid. Args: name: Layer name. tile_width, tile_height: Tile size in pixels (sets the sprite grid). columns, rows: Grid size in tiles (default: enough to cover the canvas).
create_tileset_projectScaffold a tilemap project: a canvas sized columns×rows tiles, a tilemap layer, and a starter tileset (grass/dirt/water/stone by default, or your own [{"name","color"}] list). The grid is filled with the first tile to start. Returns a ``workflow_manifest.v1`` manifest with a tilemap block mapping tile names to their tileset indices.
crop_spriteCrop the canvas to the rectangle (x, y, width, height).
delete_celDelete a cel (the layer becomes empty at that frame).
derive_mirrored_tagCreate a new animation tag by mirroring an existing one (e.g. walk_left from walk_right). Copies every frame of `source_tag` to new frames at the end of the sprite, flips every layer's cel along `axis`, keeps each frame's duration, and tags the new frames `new_tag` with the source tag's playback direction. Other tags keep their exact ranges. Asymmetric details (a sword hand, a logo) flip too, so review the result with ase_preview_animation. Args: source_tag: Existing tag to mirror. new_tag: Name for the new tag; must not exist yet. axis: "horizontal" (left/right) or "vertical" (u…
desaturateDesaturate toward grayscale by `amount` percent (0-100).
draw_brushStamp a custom brush shape at a list of points. Args: brush: The brush as rows of characters. Any character other than space, '.', or '0' is a filled cell. e.g. a plus brush: ["010", "111", "010"]. points: Positions to stamp at, list of {"x": int, "y": int}. color: Colour to stamp the brush in. anchor: "center" (default) or "topleft" — where each point sits in the brush.
draw_curveDraw a quadratic Bézier curve from (x0,y0) to (x1,y1) bending toward the control point (control_x, control_y). `steps` controls smoothness.
draw_ellipseDraw an ellipse centred at (center_x, center_y) with the given radii. For a circle, use the same value for radius_x and radius_y. filled=False draws a 1px outline. antialias smooths a *filled* ellipse with sub-pixel coverage (RGB sprites only; ignored otherwise).
draw_image_base64Composite an inline base64-encoded PNG (or other image) onto a layer at (x, y). Useful for pasting externally generated artwork. `image_base64` may include a `data:image/png;base64,` prefix.
draw_lineDraw a straight line from (x1,y1) to (x2,y2). Args: pixel_perfect: Remove L-shaped corner pixels for a clean 1px pixel-art line. antialias: Smooth (Xiaolin Wu) line with alpha blending — RGB sprites only; ignored on indexed/gray. Takes precedence over pixel_perfect.
draw_pixel_rowsDraw a block of pixel art in one call, like a text-art bitmap. Each string in `rows` is one pixel row; each character is looked up in `key` and painted at (x + column, y + row), with (0,0) the top-left of the canvas. '.' and ' ' are left untouched unless `key` defines them. Any other character missing from `key` is an error, so typos never paint silently. Example: rows=["..oo..", ".oxxo.", "..oo.."], key={"o": "#203040", "x": "#f0c060"}. Args: rows: Up to 256 strings of up to 256 characters each. key: Single character -> colour ("#RRGGBB", "#RRGGBBAA", "r,g,b", "index:N", a name). …
draw_pixelsPlot individual pixels. Args: pixels: List of {"x": int, "y": int, "color": "#hex"?}. If a pixel omits "color", the shared `color` argument is used. color: Default colour for pixels that don't specify their own. layer: Target layer name or 1-based index (default: top layer). frame: Target frame, 1-based (default 1).
draw_polylineDraw connected line segments through a list of points. points: list of {"x": int, "y": int}. Set closed=True to connect the last point back to the first (outline a polygon). pixel_perfect removes L-corner pixels across the whole path for a clean pixel-art outline.
draw_rectangleDraw a rectangle. filled=False draws a 1px outline, True fills it.
draw_symmetric_pixelsPlot pixels together with their mirror image(s). mode: "horizontal" (mirror across vertical axis_x), "vertical" (across axis_y), or "both" (4-way radial symmetry). Axes default to the canvas centre.
draw_textDraw text onto a layer at (x, y) in a single colour. Args: text: The string (supports "\n" for multiple lines). x, y: Top-left position of the text. color: Text colour. scale: Integer pixel-scaling of the rendered glyphs (default 1). font_path: Optional path to a .ttf/.otf font. If omitted, a built-in bitmap font is used (best for tiny pixel text). font_size: Point size when a TrueType font_path is given. spacing: Extra pixels between lines. threshold: 0-255 cutoff; pixels brighter than this are drawn (lower = heavier text). Keeps glyphs crisp (…
duplicate_frameDuplicate an existing frame (1-based); the copy is inserted after it.
duplicate_layerDuplicate a layer (including its cels) as a new layer on top.
export_framesExport each frame to its own image file. output_pattern must contain "{frame}" (and optionally "{tag}", "{layer}"), e.g. "frames/walk_{frame}.png". Aseprite substitutes the values.
export_game_asset_bundleExport a sprite into a game-ready bundle directory: a flattened PNG, an animated GIF, a packed sprite sheet (+ JSON data), a GIF per animation tag, and a `manifest.json` describing everything. Args: overwrite: Replace existing bundle files (default False = no-clobber). Every planned output is checked up front, so the bundle fails before writing any file if a target already exists. Returns a ``workflow_manifest.v1`` manifest (the same object is also written to disk as manifest.json inside the bundle).
export_gifExport the full animation as an animated GIF (honours frame durations & tags). overwrite: Replace `output` if it already exists (default False = no-clobber).
export_godot_spriteframesExport a sprite as a Godot 4 ``SpriteFrames`` resource (.tres) + a packed sheet. Produces three files: a packed PNG sprite sheet, its JSON frame/tag metadata, and a ``SpriteFrames`` .tres that references the sheet via ``AtlasTexture`` regions — one Godot animation per Aseprite tag (or a single ``default`` animation if untagged), with per-frame timing taken from Aseprite frame durations. v1 emits ``SpriteFrames`` only (no pivot/origin/hitbox/9-slice). Aseprite tag direction isn't represented (Godot animations only loop or not); ``default_loop`` is applied to all. Args: output: Destinatio…
export_layerExport a single layer of one frame as a PNG (others excluded).
export_layersExport each layer to its own image file. output_pattern must contain "{layer}" (e.g. "layers/{layer}.png"); add "{frame}" too for animations. include_hidden also exports hidden layers.
export_onion_skinExport a frame with neighbouring frames ghosted behind it (onion skin). Args: frame: The in-focus frame (drawn fully opaque), 1-based. previous, next: How many earlier/later frames to ghost. ghost_opacity: Max opacity (0-255) of the nearest ghost; further frames fade. scale: Integer upscaling factor for the output PNG. overwrite: Replace an existing output file. Editable .ase/.aseprite masters are never replaced.
export_pngExport one frame as a flattened PNG. Args: output: Destination .png path. frame: Frame to export, 1-based (default 1). scale: Integer upscaling factor (default 1). overwrite: Replace `output` if it already exists (default False = no-clobber).
export_slice_metadataExport every slice as engine-agnostic JSON (``aseprite_mcp.slice_metadata.v1``). Each slice becomes ``{name, type, id, bounds, pivot, nine_slice, color, data, raw_data}``. **Type detection:** a slice's user-data JSON ``type`` wins; otherwise the name convention ``<type>:<id>`` (recognized types: hitbox, hurtbox, collision, interact, pivot, origin, attach, spawn, nine_slice — anything else becomes ``"custom"``, never an error). ``id`` comes from the data ``id`` or the name's ``:<id>`` suffix. ``nine_slice`` (Aseprite's 9-patch center) and ``pivot`` are emitted whenever the slice has them. Slic…
export_spritesheetExport frames into a single sprite-sheet image. Args: output: Destination sheet image (.png). sheet_type: one of horizontal, vertical, rows, columns, packed. scale: Integer upscaling factor. data_output: Optional .json path to also write frame/tag/slice metadata (JSON-array format) describing each frame's rectangle in the sheet. padding: Pixels of padding around/between frames. layer: Only include this layer. ignore_layer: Exclude this layer (e.g. a "reference" layer). split_layers: Lay out each layer as separate cels in the sheet. split_tags: Treat…
export_tag_gifExport only the frames of a named animation tag as an animated GIF. overwrite: Replace `output` if it already exists (default False = no-clobber).
export_tagsExport each animation tag's frames to their own files. output_pattern must contain "{tag}" (and usually "{frame}"), e.g. "anim/{tag}_{frame}.png".
extract_paletteExtract the unique colours used in a sprite (or another image). Args: from_image: Optional image/sprite to scan instead of `filename`. set_as_palette: Apply the extracted colours as `filename`'s palette. include_alpha: Treat differing alpha as distinct colours (default off). max_colors: Error out if more unique colours than this are found. Returns the list of "#RRGGBBAA" colours found.
fill_areaFlood fill (paint bucket): replace the contiguous region of matching colour starting at (x,y) on the target layer with `color`.
fill_checkerboardFill a region with a 2-colour checkerboard of `size`-pixel squares.
fill_gradientFill a region with a gradient. Args: colors: 2+ colour stops, e.g. ["#000000", "#ff004d", "#ffec27"], spread evenly. For dither=True, provide exactly 2 colours. gradient_type: "linear" or "radial". angle: Direction in degrees for linear gradients (0 = left->right). dither: Ordered (Bayer 4x4) dithering between 2 colours instead of smooth interpolation — great for limited palettes / retro looks. x, y, width, height: Region (defaults to the whole canvas).
fill_layerFill the entire target layer/frame cel with a solid colour.
fill_tileFill an existing tile's artwork with a solid colour.
fill_tilemapFill the entire tilemap grid with a single tile index.
flatten_spriteFlatten all layers into a single layer (in place).
flip_spriteFlip the entire sprite. direction: "horizontal" or "vertical".
generate_rampGenerate a shading ramp from a base colour (dark -> light). Produces `steps` colours by varying lightness across `light_range`, optionally rotating hue by `hue_shift` total degrees across the ramp (classic pixel-art hue shifting: cool shadows / warm highlights) and scaling saturation by `saturation_shift` percent across the ramp. Args: filename: If set with apply, write the ramp into that sprite's palette. apply: "none" (just return), "append" (add to palette), or "replace". Returns the ramp as a list of "#RRGGBB" colours (darkest first).
get_celInspect a cel: whether it exists, its position, bounds, and opacity.
get_paletteReturn the sprite's palette as a list of "#RRGGBBAA" colours.
get_pixelsRead the composited (all visible layers) pixel colours of a region. Returns rows of "#RRGGBBAA" hex strings. The region is capped at 64x64 (4096 pixels) per call to keep responses small — read in tiles for bigger areas.
get_sprite_infoReturn structured info about a sprite: size, colour mode, frames (with durations), the full layer tree (names, opacity, blend mode, visibility), animation tags, and palette size.
get_tilemapRead the tilemap as a 2D grid of tile indices, plus tile size and count.
gui_availableCheck whether the Aseprite GUI can be launched (executable resolvable).
health_checkRun a self-test of the server and its Aseprite integration. Returns whether Aseprite was found, its version, the resolved workspace, the number of registered tools, and whether a real create-sprite + export-PNG round-trip succeeds. `ok` is True only if the full round-trip works.
import_generated_imageClean one PNG into a binary-alpha pixel grid, palette and editable master. background is an explicit #RRGGBB border-connected colour key, not semantic segmentation. outline adds a 1px eight-neighbour border, clipped at the cell edge, and may add one palette colour. N colours excludes transparency. New output directory only. Returns a nearest-neighbour preview for review. width/height support 1..256px grids. palette_first snaps the source to one shared palette before sampling, useful with majority on generated shading.
import_imageCreate an editable .aseprite sprite from a flat image (.png/.bmp/.jpg/...). Args: input_image: Source raster image. output: Destination .aseprite path. overwrite: Replace an existing file at output. Defaults to False so masters are not clobbered.
import_reference_sequenceImport a sequence of images as per-frame references for rotoscoping. Each image is placed on its own frame in a single dimmed, locked layer (frames are created as needed). Draw your animation on a layer above, then exclude this layer at export with ignore_layer="<layer_name>".
invert_colorsInvert the RGB colours of a layer's pixels (alpha preserved).
list_slicesList all slices in the sprite with their bounds, center, and pivot.
list_spritesList sprite/image files in the workspace directory.
load_paletteLoad a palette from a file (.gpl, .pal, .aseprite, .png, ...) and apply it.
make_4_frame_idle_animationTurn a single-frame sprite into a 4-frame idle "bob" loop. Duplicates frame 1 to 4 frames, nudges `layer` down by `bob_pixels` on frames 2 and 4 for a subtle bob, sets uniform durations, and adds a looping tag. Returns a ``workflow_manifest.v1`` manifest (sprite summary + animation block).
make_8_direction_walk_templateScaffold an 8-direction walk-cycle template on an existing sprite: enough frames for `frames_per_direction` per direction, with one animation tag per direction (N, NE, E, SE, S, SW, W, NW by default). Frames are placeholders to draw over. Returns a ``workflow_manifest.v1`` manifest (kind "walk_template") with an animation block listing the directions/tags.
merge_layer_downMerge a layer down into the layer directly beneath it.
mirror_layerMirror one half of a layer onto the other (build symmetric artwork). Args: direction: "horizontal" (reflect left<->right) or "vertical" (top<->bottom). source_side: which half is copied: "first" (left/top) or "second" (right/bottom). axis: mirror line position (x for horizontal, y for vertical); default = centre.
move_layerReorder a layer to a new 1-based stack index (1 = bottom-most). Note: moves within the layer's current parent group.
open_in_editorOpen a sprite in the Aseprite GUI window (non-blocking) for live viewing. The window stays open and runs independently of this server. Keep editing the file with the other tools — Aseprite detects the on-disk change and prompts to reload (or reloads automatically, depending on your Aseprite preferences), so you can watch edits land without re-opening. Returns the launched process id. To stop watching, just close the Aseprite window yourself.
paint_tile_pixelsDraw individual pixels into a tile's artwork (tile-local coordinates). pixels: list of {"x", "y", "color"?}; falls back to the shared `color`.
plan_asset_specReturn the ordered build steps for an asset spec **without launching Aseprite**. The pure dry-run: each step is ``{tool, args, purpose}`` naming the existing tool that `build_asset_from_spec` would call. Returns a ``workflow_manifest.v1`` (kind ``asset_spec``) with the steps under `plan` and `dry_run=true`. If the spec is invalid, returns the validation report instead.
recolor_spriteReplace colours across every layer, frame and palette entry of a sprite. Use it to turn one character template into another (new shirt, hair, skin). Each source colour is matched per channel within `tolerance` and replaced by its target; every pixel is mapped once from its original value, so swaps such as A->B and B->A work. With `output`, the recoloured sprite is saved as a new file and the original is left untouched. Args: mapping: Source colour -> target colour, e.g. {"#3060c0": "#c03030"}. output: Optional new .aseprite path. Without it the sprite is edited in place. toleranc…
remove_frameDelete a frame (1-based). The sprite must have more than one frame.
remove_layerDelete a layer (or group, including its children) by name or 1-based index.
remove_sliceDelete a slice by name.
remove_tagDelete an animation tag by name.
rename_layerRename a layer.
render_previewRender a single frame to a PNG and return it as an image you can view. Use this to *see* your work. frame is 1-based; scale enlarges small sprites (default 8x) so individual pixels are visible.
replace_colorReplace every pixel matching `from_color` (within `tolerance` per channel) with `to_color`, on the chosen layer + frame.
resize_canvasResize the canvas WITHOUT scaling the artwork (adds or trims space). anchor controls where existing content sits in the new canvas: "top_left" (default) or "center".
resize_paletteResize the palette to `size` entries (new entries are black).
rotate_spriteRotate the entire sprite by 90, 180, or 270 degrees (clockwise).
save_sprite_asSave a copy of a sprite under a new path (optionally flattened). The original file is left untouched. Useful for exporting an editable .aseprite to another .aseprite, or snapshotting a version. overwrite: Replace `new_filename` if it already exists (default False = no-clobber).
scale_spriteScale the whole sprite (artwork included). Provide either `factor` (e.g. 2.0 to double) OR explicit `width`/`height`. method: "nearest" (crisp pixels, default) or "bilinear" (smooth).
set_all_frame_durationsSet every frame's duration in milliseconds (uniform animation speed).
set_cel_opacitySet a cel's opacity (0-255).
set_cel_positionMove a cel's image to position (x, y) within the canvas.
set_color_modeConvert a sprite between colour modes ("rgb", "indexed", "gray"). When converting to "indexed", dithering can be "none", "ordered", or "old" to control how RGB colours are mapped to the palette.
set_frame_durationSet a single frame's duration in milliseconds (1-based frame).
set_layer_propertiesUpdate one or more layer properties. Only the arguments you pass are changed.
set_paletteReplace the entire palette with the given list of colours. colors: list of colour strings, e.g. ["#000000", "#ffffff", "255,0,0"].
set_palette_colorSet a single palette entry by index (0-based). Grows the palette if needed.
set_sliceUpdate an existing slice's bounds, name, colour, or data.
set_tagUpdate an existing tag. Only the arguments you pass are changed. Note: changing from_frame/to_frame recreates the tag in place to update its range reliably across Aseprite versions.
set_tilePlace a tile (by tileset index, 0 = empty) at grid cell (column, row).
set_tilesPlace many tiles at once. tiles: list of {"column", "row", "index"}.
set_transparent_colorSet which palette index is treated as transparent (indexed sprites only).
sort_paletteSort the palette by "hue", "luminance" (default), "saturation", or "value". For indexed sprites the pixel indices are remapped so the image looks identical.
stamp_fileComposite another image/sprite file onto a layer at (x, y). Args: source: Path to a .aseprite/.png/.bmp/... to stamp in. x, y: Top-left placement on the target canvas. source_frame: Which frame of the source to use (1-based). opacity: 0-255. blend_mode: Blend mode for compositing (normal, multiply, …).
stamp_patternTile an image/sprite across a region to fill it with a repeating pattern. Args: source: Image/sprite to tile. x, y, width, height: Region to fill (defaults to the whole canvas). spacing_x, spacing_y: Gap between tiles. opacity, blend_mode: Compositing of each tile.
trim_spriteAuto-crop the canvas to the bounding box of all non-transparent content (across every frame).
validate_asset_specValidate an ``aseprite_mcp.asset_spec.v1`` document (does the *spec* make sense?). Checks the schema, kind, canvas, per-kind fields, palette, layers, animations (`frame_count`, not `frames`), slices, and export formats. Returns a ``workflow_manifest.v1`` (kind ``asset_spec``) with a `validation` block `{passed, checks, errors, warnings}`. This does **not** check a finished sprite against the spec — that's a separate future tool.
validate_sprite_for_game_exportCheck whether a sprite is game-ready against the criteria you specify. Runs a series of checks — does the file open, do dimensions match (exactly or as a tile multiple), is the colour mode allowed, are frame counts / required animation tags present, is the background transparent, is the palette within budget, do expected export files exist, and is sprite-sheet metadata readable — plus soft warnings for oversized canvases, missing tags, and default/blank layer names. All criteria are optional; only the ones you pass are enforced. Returns a ``workflow_manifest.v1`` manifest (kind "validation")…
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Weekly downloads
- 82
- Last commit
- Oct 16, 2026 (12 days ago)
- Last release
- Oct 16, 2026 (12 days ago)
- Last package publish
- Oct 16, 2026 (12 days ago)
From GitHub (fetched Oct 24, 2026) and the package registry.
Details
- Registry name
io.github.SarutobiSasuke8/aseprite-agent-mcp- Version
- 0.3.0
- Auth
- No auth
- Packages
- pypi aseprite-agent-mcp
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
More from SarutobiSasuke8
- 0.638score
GIMP Agent MCP
SarutobiSasuke8
Edit in GIMP 3 with AI agents: live previews, grouped edits, pixel measurements and recipes.
ConnectorAFreshness: ALocal★ 5↓ 123/wkClaude Code +5 - 0.619score
JobScout MCP
SarutobiSasuke8
Multi-source job discovery, deduplication and AI/Web3 classification for AI agents.
ConnectorAFreshness: ALocalRead-only★ 2Claude Code +5
Cite this page
Aseprite Agent MCP. Agent Mart. https://agentmart.dev/connectors/sarutobisasuke8-aseprite-agent-mcp (last updated 2026-10-24)