Blender integration through the Model Context Protocol
Aseprite Claude Connector is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Let Claude draw in a running Aseprite, and export straight to Godot or Unity
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user aseprite-claude-connector-mcp '--' uvx aseprite-claude-connector
# 2 — ask your agent for something these tools do
# add_reference_image, change_summary, explain_changes and 184 more
Aseprite Claude Connector costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Aseprite Claude Connector as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user aseprite-claude-connector-mcp '--' uvx aseprite-claude-connectorReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take ASEPRITE_MCP_BACKEND (live (default) or headless), ASEPRITE_PATH (Path to the Aseprite executable (auto-detected if unset)), ASEPRITE_RELAY_URL (Relay HTTP base for the live backend (default http://127.0.0.1:9878)), ASEPRITE_MCP_NO_UPDATE_CHECK (Set to disable the daily PyPI update check) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
187 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Put a sketch or reference on a faded, locked layer on top of the sprite, across every frame, and keep the active layer as it was, so drawing lands on the art.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_path | string | yes | — |
| opacity | integer | no | — |
| fit | boolean | no | — |
| layer_name | string | no | — |
| file | string | no | — |
A short list of what Claude changed this session, oldest first: each edit, how many times in a row, the frames and layers it touched, and pixels changed. Repeats on the same layer are merged. `last` limits it to the most recent edits. It covers the most recent 500 edits since the server started,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| last | integer | no | — |
Say which Aseprite tool, menu, or shortcut would do what Claude just did, so you pick up the technique. Covers the `last` most recent edits, newest repeats merged. Shortcuts are Aseprite's defaults.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| last | integer | no | — |
Start recording this session: a picture of the active frame is kept after every edit, for `stop_recording to turn into a GIF timelapse. Each picture is one more read of the sprite, so edits run a little slower while it's on. Starting again throws away what's recorded. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| max_frames | integer | no | — |
| file | string | no | — |
Stop recording and write the timelapse GIF to `out_path. It's zoomed with sharp pixels to fit max_size, and the final picture holds for a beat before it loops. Larger GIFs take longer to encode, so raise max_size` with care.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| out_path | string | yes | — |
| frame_ms | integer | no | — |
| max_size | integer | no | — |
Redraw a character's eyes, frame by frame, to give it an expression:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| eyes | array | yes | — |
| keys | array | no | — |
| layer | string | no | — |
| style | object | no | — |
| file | string | no | — |
Swing a wing, arm, tail or ear about its joint across frames. `outline is a polygon round the part, in canvas pixels [[x, y], ...]; keep it to the part itself (not the face or chest beside it). pivot` is the joint.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| outline | array | yes | — |
| pivot | array | yes | — |
| keys | array | yes | — |
| layer | string | no | — |
| band | integer | no | — |
| shadow | string | no | — |
| file | string | no | — |
Breathing, hops and sways: everything above the row `feet_y moves while the feet below it stay planted. Put feet_y` at the top of the feet.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| feet_y | integer | yes | — |
| keys | array | yes | — |
| layer | string | no | — |
| file | string | no | — |
Move floating symbols ("!", "?", Zzz, hearts, sparkles) off a character's layer onto a new layer, and animate them there. `boxes are [x, y, w, h] round each symbol (or group); only pixels not joined to the body are taken, so a box can overlap a wing. They're found on from_frame` and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| boxes | array | yes | — |
| keys | array | no | — |
| layer | string | no | — |
| name | string | no | — |
| from_frame | integer | no | — |
| file | string | no | — |
Compare sprites of one character or set: the open sprites (live; `only picks them by filename or tag), or files`. Reports colours so close they should be one (the drift you get from pixelating poses separately), the colours only one sprite uses, and how tall the subject stands on frame 1 of…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tolerance | number | no | — |
| only | array | no | — |
| files | array | no | — |
Put sprites of one character or set on one shared palette: colours closer than `tolerance that stand in for each other (one sprite uses one, another sprite the other) merge into whichever is used most, across the open sprites (live; only picks them by filename or tag) or files`. Alpha is…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tolerance | number | no | — |
| only | array | no | — |
| files | array | no | — |
Set individual pixels: `pixels` is a list of
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pixels | array | yes | — |
| file | string | no | — |
Stroke connected line segments through `points (ordered [x, y] pairs); close=True joins the last point back to the first. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| points | array | yes | — |
| color | string | yes | — |
| close | boolean | no | — |
| file | string | no | — |
Draw a rectangle on the active layer + frame. `color is #rrggbb or #rrggbbaa. fill` false draws only the outline. One undo step (live).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| color | string | yes | — |
| fill | boolean | no | — |
| file | string | no | — |
Draw a 1px line from (x1,y1) to (x2,y2). One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x1 | integer | yes | — |
| y1 | integer | yes | — |
| x2 | integer | yes | — |
| y2 | integer | yes | — |
| color | string | yes | — |
| file | string | no | — |
Draw a circle centered at (center_x, center_y). `fill true fills the disk. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| center_x | integer | yes | — |
| center_y | integer | yes | — |
| radius | integer | yes | — |
| color | string | yes | — |
| fill | boolean | no | — |
| file | string | no | — |
Flood-fill the contiguous same-color region at (x, y). Most reliable on RGB sprites. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| color | string | yes | — |
| file | string | no | — |
Draw an ellipse centered at (center_x, center_y) with independent x/y radii.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| center_x | integer | yes | — |
| center_y | integer | yes | — |
| radius_x | integer | yes | — |
| radius_y | integer | yes | — |
| color | string | yes | — |
| fill | boolean | no | — |
| file | string | no | — |
Fill a rectangle with a linear gradient from `color1 to color2`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| color1 | string | yes | — |
| color2 | string | yes | — |
| direction | string | no | — |
| dither | boolean | no | — |
| bands | integer | no | — |
| file | string | no | — |
Fill a rectangle with a uniform ordered (Bayer 4x4) dither mixing `color1 and color2. density 0..1 is the fraction of color2 — 0.5 is an even checker-style mix. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| color1 | string | yes | — |
| color2 | string | yes | — |
| density | number | no | — |
| file | string | no | — |
Add a 1px outline around the opaque pixels of a layer, in `color — readability against busy backgrounds. selective true ignores color and darkens each neighbouring pixel's own color instead, for a softer outline that follows the art (RGB sprites). diagonal` true also outlines…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| color | string | no | — |
| diagonal | boolean | no | — |
| selective | boolean | no | — |
| layer | string | no | — |
| all_frames | boolean | no | — |
| file | string | no | — |
See the canvas: returns a frame as an image, scaled up with sharp pixels.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| frame | integer | no | — |
| layer | string | no | — |
| x | integer | no | — |
| y | integer | no | — |
| width | integer | no | — |
| height | integer | no | — |
| selection | boolean | no | — |
| scale | integer | no | — |
| max_size | integer | no | — |
| background | string | no | — |
| file | string | no | — |
See an animation: returns a tag or frame range as one image, frames left to right and top to bottom. Defaults to every frame, capped at 64. A range of up to 6 frames is a strip and longer ones are a grid, unless `columns is set. The result lists each cell's frame and duration. layer`,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tag | string | no | — |
| from_frame | integer | no | — |
| to_frame | integer | no | — |
| columns | integer | no | — |
| layer | string | no | — |
| scale | integer | no | — |
| max_size | integer | no | — |
| background | string | no | — |
| file | string | no | — |
See motion: returns `frame as an image with earlier frames ghosted in red and later frames in blue, so the whole arc shows at once. Defaults to the active frame. The picture form of render_onion_composite. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| frame | integer | no | — |
| prev | integer | no | — |
| next | integer | no | — |
| opacity | number | no | — |
| scale | integer | no | — |
| max_size | integer | no | — |
| background | string | no | — |
| file | string | no | — |
Fill in `count frames between the key pose on from_frame and the one on the next frame, then return a picture of the result. Unlike tween_frames` it handles a pose that changes shape: both poses slide toward each other and trade pixels through an ordered dither, so no new colors appear.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_frame | integer | yes | — |
| count | integer | no | — |
| layer | string | no | — |
| easing | string | no | — |
| smear | boolean | no | — |
| max_size | integer | no | — |
| file | string | no | — |
Lay down a timed, tagged walk or run skeleton to draw over. It adds `frames` frames (an even number, 4-16), or uses the sprite if it's a blank single frame, with a locked faded guide layer and an empty art layer above it, which it leaves active. The near limbs are light blue and the far limbs…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| body_height | integer | yes | — |
| frames | integer | no | — |
| gait | string | no | — |
| facing | string | no | — |
| tag | string | no | — |
| file | string | no | — |
Set frame durations from a preset, over a tag or a frame range (every frame by default). `ease_in starts slow and speeds up, ease_out slows to a stop, ease_in_out does both, hold keeps the last frame on screen, and bounce` hangs at the middle and snaps through both ends.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| preset | string | yes | — |
| tag | string | no | — |
| from_frame | integer | no | — |
| to_frame | integer | no | — |
| base_ms | integer | no | — |
| strength | number | no | — |
| file | string | no | — |
Check whether an animation loops cleanly: compares its last frame with its first against the steps inside the loop. `verdict is smooth, jump, duplicate (the last frame repeats the first, which stutters), static, or pingpong, and seam_bbox` says where a jump is, ready to…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| tag | string | no | — |
| from_frame | integer | no | — |
| to_frame | integer | no | — |
| file | string | no | — |
Insert `count in-between frames between from_frame and to_frame that slide the start frame's art toward where the end frame's art sits, so it works for moved cels and for art redrawn in a new place. It moves the art without reshaping it, and refuses if the art hasn't moved. easing`:…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_frame | integer | yes | — |
| to_frame | integer | yes | — |
| count | integer | no | — |
| layer | string | no | — |
| easing | string | no | — |
| file | string | no | — |
Fade a layer's cels across [from_frame..to_frame]: opacity
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_frame | integer | yes | — |
| to_frame | integer | yes | — |
| from_opacity | integer | yes | — |
| to_opacity | integer | yes | — |
| layer | string | no | — |
| easing | string | no | — |
| file | string | no | — |
Append a motion-smear frame blending `from_frame and to_frame`:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_frame | integer | yes | — |
| to_frame | integer | yes | — |
| layer | string | no | — |
| file | string | no | — |
Pixel-exact diff of two composited frames: changed-pixel count and ratio, the bounding box of the change, and whether they're identical. Use it to verify an animation actually moves — or that an edit didn't leak into frames it shouldn't touch. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| frame_a | integer | yes | — |
| frame_b | integer | yes | — |
| file | string | no | — |
Write a PNG of `frame with up to prev earlier frames ghosted in red and next later frames ghosted in blue (Aseprite's onion-skin convention) at the given ghost opacity — so you can *see* the motion arc in one image. Does not modify the sprite. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| frame | integer | yes | — |
| output_path | string | yes | — |
| prev | integer | no | — |
| next | integer | no | — |
| opacity | number | no | — |
| file | string | no | — |
Measure the transparent 'sticker' padding around the content: content bounding box, per-side padding (left/right/top/bottom), fill ratio, and distinct opaque color count. Read-only. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Audit the active sprite against project conventions and return per-check pass/fail. Any rule you pass is checked: exact canvas size
| Parameter | Type | Required | Notes |
|---|---|---|---|
| expected_width | integer | no | — |
| expected_height | integer | no | — |
| max_colors | integer | no | — |
| grid_multiple | integer | no | — |
| require_symmetric_padding | boolean | no | — |
| file | string | no | — |
Write sprite strips GameMaker cuts up by itself: one
| Parameter | Type | Required | Notes |
|---|---|---|---|
| output_dir | string | yes | — |
| name | string | no | — |
| file | string | no | — |
Pack several sprites into one texture, with every frame of each, plus a JSON map in the hash layout of Aseprite's sprite-sheet export. Frames that repeat exactly share pixels. `sprites` are files on disk or, live, the file names of open sprites; unsaved sprites can't be named. The JSON goes…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sprites | array | yes | — |
| out_png | string | yes | — |
| out_json | string | no | — |
| padding | integer | no | — |
Export every `.aseprite in folder (first frame) to an image, optionally integer-upscaled by scale. Non-destructive: writes <name>.<format> to out_dir (default = folder); never modifies the source. Continues past per-file errors. Headless. (file` is ignored — this operates…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folder | string | yes | — |
| out_dir | string | no | — |
| format | string | no | — |
| scale | integer | no | — |
| recursive | boolean | no | — |
| file | string | no | — |
Resize every `.aseprite in folder (first frame, nearest-neighbor) and write images to out_dir. Give either scale (multiplier) or explicit width/height`. Non-destructive; continues past per-file errors. Headless.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folder | string | yes | — |
| out_dir | string | no | — |
| scale | number | no | — |
| width | integer | no | — |
| height | integer | no | — |
| format | string | no | — |
| recursive | boolean | no | — |
| file | string | no | — |
Palette-lock every `.aseprite in folder: snap each sprite (first frame, alpha preserved) to a palette and export images to out_dir. Give a preset (gameboy/pico8/cga) or an explicit palette` list of #rrggbb. Non-destructive;
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folder | string | yes | — |
| out_dir | string | no | — |
| preset | string | no | — |
| palette | array | no | — |
| format | string | no | — |
| recursive | boolean | no | — |
| file | string | no | — |
Stamp an image at each [x, y] in `points` (points are stamp centers).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| points | array | yes | — |
| source_path | string | no | — |
| source_rect | array | no | — |
| layer | string | no | — |
| file | string | no | — |
Create a new sprite. Live: opens a new untitled sprite in the editor and makes it the sprite Claude works on, even if the artist clicks another tab.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| width | integer | yes | — |
| height | integer | yes | — |
| color_mode | string | no | — |
| file | string | no | — |
Grow (or shrink, with negatives) the canvas per side WITHOUT scaling content — existing pixels keep their positions relative to the old origin. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| left | integer | no | — |
| top | integer | no | — |
| right | integer | no | — |
| bottom | integer | no | — |
| file | string | no | — |
Slice a sheet PNG into animation frames: cells are read row-major at the given frame size onto a new "imported" layer, adding frames as needed. The sheet's dimensions must be exact multiples of the frame size. One undo step. Headless: pass `file` (the target sprite).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| sheet_path | string | yes | — |
| frame_width | integer | yes | — |
| frame_height | integer | yes | — |
| file | string | no | — |
Empty the cel at the given layer + frame (transparent).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | no | — |
| frame | integer | no | — |
| file | string | no | — |
Move the cel's top-left origin to (x, y).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| layer | string | no | — |
| frame | integer | no | — |
| file | string | no | — |
Set the cel's opacity (0-255).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| opacity | integer | yes | — |
| layer | string | no | — |
| frame | integer | no | — |
| file | string | no | — |
Find pixels and colors that look like accidents, and return a picture of
| Parameter | Type | Required | Notes |
|---|---|---|---|
| frame | integer | no | — |
| layer | string | no | — |
| rare | integer | no | — |
| near | integer | no | — |
| max_size | integer | no | — |
| file | string | no | — |
Recolor the sprite into team colors or seasons in one batch. `variants maps each variant's name to a color swap, like {"red": {"#3050c0": "#c03030"}, "green": {"#3050c0": "#30a040"}}. Writes one strip <name>_<variant>.png per variant into output_dir`, frames left to right, and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| variants | object | yes | — |
| output_dir | string | yes | — |
| tag | string | no | — |
| name | string | no | — |
| file | string | no | — |
Replace every pixel matching `from_color (within tolerance, a 0-255 RGB distance) with to_color across the active cel, preserving each pixel's alpha unless to_color carries its own. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_color | string | yes | — |
| to_color | string | yes | — |
| tolerance | integer | no | — |
| file | string | no | — |
Snap every opaque pixel of the active cel to its nearest color in the sprite's palette (alpha preserved) — enforce palette discipline after intake or shading. RGB sprite; one undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Shift the active cel's colors in HSL: `hue_shift degrees (-360..360), saturation a multiplier (1.0 = unchanged), lightness` a delta (-1..1).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| hue_shift | number | no | — |
| saturation | number | no | — |
| lightness | number | no | — |
| file | string | no | — |
Return a color histogram of the composited sprite: distinct opaque color count, total opaque pixels, and the `top most-used colors with counts — a palette-drift check for the art-QA loop. Read-only. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| top | integer | no | — |
| file | string | no | — |
Search Aseprite's Lua scripting API reference, bundled with this server.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
| limit | integer | no | — |
Search Aseprite's user manual: how features work in the editor, such as tilemaps, onion skinning, or slices. The first search downloads the manual from GitHub to your cache, then it refreshes every 30 days.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | yes | — |
| limit | integer | no | — |
Make a frame active, so the next edits land on it. Headless forgets this between calls, so use it as a step in `edit_batch` there.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| number | integer | yes | — |
| file | string | no | — |
Make a layer active, so the next edits land on it. `name may be a "Group/Layer" path. Headless forgets this between calls, so use it as a step in edit_batch` there.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
Undo the last edit on the active sprite (live editor).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Redo the last undone edit (live editor).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Export the active sprite to a file; format is chosen by `out_path extension (.png, .gif, ...). A multi-frame sprite saved to a single-image format is split into <name>1.ext, <name>2.ext, ...; a multi-frame sprite saved to .gif` becomes one animated GIF (all frames, honoring per-frame…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| out_path | string | yes | — |
| file | string | no | — |
Pack all frames into a single sprite-sheet image (optionally writing a JSON atlas to `data_path). sheet_type is rows | columns | horizontal | vertical | packed. Does not modify the sprite. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| out_path | string | yes | — |
| data_path | string | no | — |
| sheet_type | string | no | — |
| file | string | no | — |
Export every image layer (recursing into groups) as its own PNG in `out_dir, named <sanitized-layer-name>.png`. Hidden layers are exported too; every layer's original visibility is restored afterwards, so the document ends exactly as it started. A multi-frame sprite splits each layer into…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| out_dir | string | yes | — |
| file | string | no | — |
Export each animation tag's frame range as its own file in
| Parameter | Type | Required | Notes |
|---|---|---|---|
| out_dir | string | yes | — |
| format | string | no | — |
| file | string | no | — |
Adjust the active cel's brightness and contrast, each -100..100 (0 = unchanged). Alpha is preserved. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| brightness | integer | no | — |
| contrast | integer | no | — |
| file | string | no | — |
Invert the active cel's RGB (alpha untouched). One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Convert the active cel to grayscale (Rec. 601 luma), keeping alpha.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Blur the active cel with an alpha-weighted box kernel. `radius` 1-4 (1 = 3x3). Transparent neighbors don't darken edges. One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| radius | integer | no | — |
| file | string | no | — |
Sharpen the active cel (unsharp mask over a 3x3 neighborhood).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| strength | number | no | — |
| file | string | no | — |
Write the animation (or one `tag) as a looping .gif or animated .png at path, scaled up scale times with sharp pixels (4 turns a 384x128 banner into 1536x512). Each frame keeps its own duration. An animated PNG keeps transparency; a GIF is laid on background` (#rrggbb, black…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | — |
| scale | integer | no | — |
| tag | string | no | — |
| background | string | no | — |
| file | string | no | — |
Turn rough sketched strokes into clean pixel-art lines: `thin` brings thick strokes down to one pixel, and the doubled corner pixels freehand lines leave are removed, as Aseprite's pixel-perfect brush would have drawn them.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | no | — |
| thin | boolean | no | — |
| specks | boolean | no | — |
| all_frames | boolean | no | — |
| frame | integer | no | — |
| file | string | no | — |
Append a new empty frame.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Duplicate frame `number` (1-based).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| number | integer | yes | — |
| file | string | no | — |
Delete frame `number` (1-based). Cannot delete the last frame.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| number | integer | yes | — |
| file | string | no | — |
Set frame `number`'s duration in milliseconds.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| number | integer | yes | — |
| ms | integer | yes | — |
| file | string | no | — |
Append `count` empty frames in one undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| count | integer | yes | — |
| file | string | no | — |
Set every frame in [from_frame..to_frame] to `ms` milliseconds.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_frame | integer | yes | — |
| to_frame | integer | yes | — |
| ms | integer | yes | — |
| file | string | no | — |
Reverse frame order (cels on every layer, plus durations) — the whole sprite by default, or the inclusive [from_frame..to_frame] range. One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| from_frame | integer | no | — |
| to_frame | integer | no | — |
| file | string | no | — |
Configure the editor's onion-skin view: on/off, ghost counts each direction, and whether ghosting stays inside the current tag. A view preference — visually meaningful in the live editor. (For a rendered onion-skin image any backend can produce, use `render_onion_composite`.)
| Parameter | Type | Required | Notes |
|---|---|---|---|
| active | boolean | yes | — |
| prev_frames | integer | no | — |
| next_frames | integer | no | — |
| loop_tag | boolean | no | — |
| file | string | no | — |
Export the sprite into a game project in one action, ready to select in the engine. `game_dir is the project folder; it's remembered, so leave it out after the first time. Godot is detected from project.godot, Unity from Assets plus ProjectSettings`, and any other folder gets a plain…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| game_dir | string | no | — |
| name | string | no | — |
| pixels_per_unit | integer | no | — |
| file | string | no | — |
Export a horizontal sprite sheet AND a Godot 4 `SpriteFrames .tres beside it, with one animation per tag, keeping each frame's timing, the tag's direction, and its repeat count. No tags gives one looping default animation. Export inside a Godot project and the res://` path is worked…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| png_path | string | yes | — |
| file | string | no | — |
Report backend health plus this server's version and whether a newer release exists. Live: whether Aseprite is connected + its version.
Takes no parameters.
Get the active sprite's size, color mode, and layer/frame/tag lists.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Summarize the active sprite in one call: size, color mode, the layer tree with visibility and blend modes, frame timing, tags, slices, palette, the selection, and what's active. Frame durations and palette colors stop at 64 entries; `count` always gives the full number.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Read one composited pixel (all layers) at (x, y) as #rrggbbaa.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| file | string | no | — |
Attach typed key/value metadata to the sprite (Aseprite's Properties system — stored in the .aseprite file itself). Values may be strings, numbers, or booleans. Useful for provenance ("generated_by", spec IDs) and pipeline state. One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| entries | object | yes | — |
| file | string | no | — |
Read the sprite's typed key/value metadata (Properties).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Read a composited pixel region as a grid of #rrggbbaa strings — the AI feedback loop for 'what does the canvas look like now'. Capped at 4096 px;
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| file | string | no | — |
Draw a 2:1 isometric box. The footprint diamond is centered at (center_x, center_y) with the given `half_width (full tile width = 2×half_width), rising height px. Top/left/right faces are auto-shaded from color` (#rrggbb, light from top-left) with stroke + highlight.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| center_x | integer | yes | — |
| center_y | integer | yes | — |
| half_width | integer | yes | — |
| height | integer | yes | — |
| color | string | yes | — |
| file | string | no | — |
Draw a vertical isometric cylinder (tank/silo/chimney): top ellipse + shaded body + front rim, auto-shaded from `color. top_y is the top of the body. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| center_x | integer | yes | — |
| top_y | integer | yes | — |
| radius | integer | yes | — |
| height | integer | yes | — |
| color | string | yes | — |
| file | string | no | — |
Scanline-fill an arbitrary polygon given `points (a list of [x, y] pairs, in order). color` is #rrggbb or #rrggbbaa. One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| points | array | yes | — |
| color | string | yes | — |
| file | string | no | — |
Draw a recessed docking socket/port on an isometric face — a light lit lip framing a dark recessed interior. `points = the 4 corner [x, y] pairs of a face (e.g. the face_se returned by draw_iso_box). This is the consistent I/O-port style. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| points | array | yes | — |
| file | string | no | — |
Add a new empty layer (optionally named) at the top of the stack.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | — |
| file | string | no | — |
Add a layer group. Move layers into it with `move_layer_to_group`;
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | no | — |
| file | string | no | — |
Move a layer inside a layer group.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | yes | — |
| group | string | yes | — |
| file | string | no | — |
The full layer tree, top of stack first: name, path, kind
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Delete the layer with the given name.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
Rename a layer.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| old_name | string | yes | — |
| new_name | string | yes | — |
| file | string | no | — |
Show or hide a layer.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| visible | boolean | yes | — |
| file | string | no | — |
Set a layer's opacity (0-255).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| opacity | integer | yes | — |
| file | string | no | — |
Flatten all layers into a single layer.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Set a layer's blend mode. One of: normal, multiply, screen, overlay, darken, lighten, color_dodge, color_burn, hard_light, soft_light, difference, exclusion, hue, saturation, color, luminosity, addition, subtract, divide.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| mode | string | yes | — |
| file | string | no | — |
Duplicate a layer (with its cels) above the original.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
Merge a layer into the layer directly beneath it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
Reorder a layer in the stack. `direction` is up | down | top | bottom (bottom = stack index 1).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| direction | string | yes | — |
| file | string | no | — |
Import an external image file (PNG, etc.) into a new layer at (x, y) — a reference/trace layer for concept-art intake. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_path | string | yes | — |
| layer_name | string | no | — |
| x | integer | no | — |
| y | integer | no | — |
| file | string | no | — |
Show a scene at another time of day: `dawn, noon, sunset, or night. Each colour's lightness, warmth, and saturation shift the way that light would, and each maps to one new colour, so the colour count stays the same. glows are lanterns or windows, [[x, y, radius], ...]`,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| time | string | yes | — |
| layers | array | no | — |
| strength | number | no | — |
| glows | array | no | — |
| all_frames | boolean | no | — |
| file | string | no | — |
Make a normal map so the art reacts to 2D lights in Godot and Unity: a torch moving past shades it. Forms round off over `bevel pixels from their outline, detail (0-1) lets bright areas stand forward, and strength` steepens it all. It goes on a hidden "Normal map" layer, and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | no | — |
| strength | number | no | — |
| bevel | integer | no | — |
| detail | number | no | — |
| all_frames | boolean | no | — |
| save_path | string | no | — |
| file | string | no | — |
Live editor only: current zoom, scroll, and which sprite pixel the mouse is over — lets an agent know what the artist is looking at.
Takes no parameters.
Live editor only: set the viewport zoom (1.0 = 100%) and/or scroll — e.g. zoom to the region you're about to edit so the artist can watch.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| zoom | number | no | — |
| scroll_x | integer | no | — |
| scroll_y | integer | no | — |
Live editor only: set mirror-painting symmetry — `mode is none, horizontal (mirror across a vertical axis), vertical, or both`; optionally place the axis lines. Affects the artist's subsequent brush strokes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mode | string | yes | — |
| x_axis | number | no | — |
| y_axis | number | no | — |
Live editor only: ask the ARTIST to click a point on the canvas (pivot, anchor, paint origin). Returns immediately; call
| Parameter | Type | Required | Notes |
|---|---|---|---|
| title | string | no | — |
Poll the result of `ask_point: done false while waiting, then the clicked x/y (or cancelled` if the artist pressed Esc).
Takes no parameters.
Withdraw a pending `ask_point` request (e.g. the artist stepped away and you're moving on).
Takes no parameters.
Live editor only: pop a small dialog IN Aseprite with a message and up to 4 option buttons (e.g. approve/redo). Non-blocking — call `get_dialog_choice` to collect the artist's pick.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| message | string | yes | — |
| options | array | yes | — |
| title | string | no | — |
Poll the result of `show_choice_dialog: done` false while the dialog is open, then the chosen button text.
Takes no parameters.
Live editor only: start counting edits the ARTIST makes to the active sprite (via `Sprite.events). Poll with get_watched_changes` — e.g.
Takes no parameters.
Poll the change counter started by `watch_changes (reset=True` zeroes it after reading).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| reset | boolean | no | — |
Detach the `watch_changes` listener.
Takes no parameters.
Run arbitrary Lua inside Aseprite and return its result (advanced escape hatch — equivalent to local code execution). `J(value) is available for JSON returns; wrap your own edits in app.transaction` for clean undo.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| code | string | yes | — |
| save | boolean | no | — |
| file | string | no | — |
| edit | boolean | no | — |
Return the active sprite's palette as #rrggbbaa hex strings.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Set palette entry `index to color` (#rrggbb or #rrggbbaa).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| index | integer | yes | — |
| color | string | yes | — |
| file | string | no | — |
Append `color` to the palette and return its new index.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| color | string | yes | — |
| file | string | no | — |
Replace the whole palette with `colors` (list of #rrggbb/#rrggbbaa).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| colors | array | yes | — |
| file | string | no | — |
Replace the palette with a built-in preset: gameboy | pico8 | cga.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
Generate a dark->light shading ramp from `base_color and APPEND it to the palette in order — ready for palette_ramp_walk. count` colors;
| Parameter | Type | Required | Notes |
|---|---|---|---|
| base_color | string | yes | — |
| count | integer | no | — |
| hue_shift | boolean | no | — |
| file | string | no | — |
Extract a palette (median-cut) from an external image file and, by default, set it as the active sprite's palette — the concept-art → locked-palette step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_path | string | yes | — |
| max_colors | integer | no | — |
| replace | boolean | no | — |
| file | string | no | — |
Reorder palette swatches by `luminance (default), hue, or saturation`. Intended for RGB sprites' swatch organization — on an INDEXED sprite this changes which color each pixel shows (indices aren't remapped). One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| by | string | no | — |
| ascending | boolean | no | — |
| file | string | no | — |
Derive the palette FROM the sprite's actual pixels (Aseprite's color quantization) — the inverse of `quantize_to_palette`. Returns the new palette as hex. One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| max_colors | integer | no | — |
| file | string | no | — |
Replace the sprite's palette from a palette file (.gpl, .pal, .ase, .png strip — anything Aseprite reads). One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | — |
| file | string | no | — |
Write the sprite's palette to a file (.gpl, .pal, .png — by extension).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | — |
| file | string | no | — |
Apply one of Aseprite's bundled extension palettes by resource ID — e.g. DB16, DB32, ARQ4, EDG16 (availability depends on the installed palette extensions). For gameboy/pico8/cga see `apply_preset_palette`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
Cut a character sheet (poses in a `columns x rows grid) into one pixel-art sprite per pose, all at the same scale and on ONE shared palette of colors colours (or palette), so the poses stay consistent with each other. Each cell is shrunk to width x height` (the cell's aspect…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_path | string | yes | — |
| columns | integer | yes | — |
| rows | integer | yes | — |
| width | integer | yes | — |
| height | integer | no | — |
| colors | integer | no | — |
| palette | array | no | — |
| names | array | no | — |
| remove_background | boolean | no | — |
| clear_edges | boolean | no | — |
| dither | string | no | — |
| layer_name | string | no | — |
| out_dir | string | no | — |
Turn a reference picture into pixel art on a new layer: the faithful way to recreate a photo or painting. The picture (or the `crop_* part of it, in its own pixels) is shrunk to width x height by averaging, so each pixel is the true colour of that area. height` defaults to the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_path | string | yes | — |
| width | integer | yes | — |
| height | integer | no | — |
| colors | integer | no | — |
| palette | array | no | — |
| dither | string | no | — |
| despeckle | boolean | no | — |
| crop_x | integer | no | — |
| crop_y | integer | no | — |
| crop_width | integer | no | — |
| crop_height | integer | no | — |
| layer_name | string | no | — |
| x | integer | no | — |
| y | integer | no | — |
| remove_background | boolean | no | — |
| clear_edges | boolean | no | — |
| file | string | no | — |
See how close the canvas is to a reference picture. Returns the reference shrunk to the canvas size, the canvas, and a heatmap (red = most different) side by side, plus scores out of 100: `score per pixel, shape_score` with fine detail blurred away (composition, values, and colour masses),…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| image_path | string | yes | — |
| layer | string | no | — |
| frame | integer | no | — |
| crop_x | integer | no | — |
| crop_y | integer | no | — |
| crop_width | integer | no | — |
| crop_height | integer | no | — |
| grid | integer | no | — |
| max_size | integer | no | — |
| file | string | no | — |
Animate a character made of part layers like a cut-out puppet. `poses are key poses: {"frame": 1, "part": "Arm", "angle": -20, "x": 0, "y": 1}, with angle in degrees clockwise and x/y a move in pixels; any left out are 0. Frames between keys are filled in (easing` is…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| poses | array | yes | — |
| frames | integer | yes | — |
| pivots | object | no | — |
| parents | object | no | — |
| loop | boolean | no | — |
| easing | string | no | — |
| duration_ms | integer | no | — |
| from_frame | integer | no | — |
| tag | string | no | — |
| file | string | no | — |
Set the safety rails for this session, or pass nothing to read them.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| dry_run | boolean | no | — |
| max_changed_pixels | integer | no | — |
Run several editing tools as one undo step, so one Ctrl-Z reverts them all.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| steps | array | yes | — |
| label | string | no | — |
| file | string | no | — |
"Fix this bit": run editing tools so they change only what's inside the current selection, as one undo step. Anything they'd do outside it, on any layer or frame, is put back. Steps are written as in `edit_batch. Select the area in Aseprite first; look with selection` shows what's…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| steps | array | yes | — |
| label | string | no | — |
| file | string | no | — |
Bring a still scene to life as a seamless loop. `layer (the active layer by default) is animated from from_frame` over
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | no | — |
| frames | integer | no | — |
| duration_ms | integer | no | — |
| wind | number | no | — |
| wavelength | integer | no | — |
| shimmer | number | no | — |
| glint | number | no | — |
| glint_color | string | no | — |
| particles | string | no | — |
| particle_count | integer | no | — |
| particle_colors | array | no | — |
| from_frame | integer | no | — |
| tag | string | no | — |
| seed | integer | no | — |
| file | string | no | — |
Separate a picture into parts on their own layers, like armour and meadow, so each can be edited or animated alone. `seeds` are points on each part:
| Parameter | Type | Required | Notes |
|---|---|---|---|
| seeds | array | yes | — |
| layer | string | no | — |
| frame | integer | no | — |
| hide_source | boolean | no | — |
| file | string | no | — |
Grow the canvas by `left/right/top/bottom pixels and fill the new space on layer (the active one) by continuing its own texture, like turning a portrait scene into a wide banner. Patches of patch pixels are copied from the sample_*` area (all of the layer by default) and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| left | integer | no | — |
| right | integer | no | — |
| top | integer | no | — |
| bottom | integer | no | — |
| layer | string | no | — |
| sample_x | integer | no | — |
| sample_y | integer | no | — |
| sample_width | integer | no | — |
| sample_height | integer | no | — |
| patch | integer | no | — |
| frame | integer | no | — |
| seed | integer | no | — |
| file | string | no | — |
Make pixelated or noisy art read as drawn: every patch of one colour smaller than `min_region pixels merges into the colour around it, if that colour is close (tolerance, 0-1; standout specks like flowers stay), and firm_edges` darkens the shadow side of strong edges with the art's own…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | no | — |
| min_region | integer | no | — |
| tolerance | number | no | — |
| firm_edges | boolean | no | — |
| all_frames | boolean | no | — |
| frame | integer | no | — |
| file | string | no | — |
Set a rectangular selection. Most meaningful on the live editor.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| file | string | no | — |
Select the whole canvas.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Clear the current selection.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Select an ellipse inscribed in the given rectangle. `mode is replace (default), add, or subtract` against the current selection.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| mode | string | no | — |
| file | string | no | — |
Select every pixel matching `color` (composited, within
| Parameter | Type | Required | Notes |
|---|---|---|---|
| color | string | yes | — |
| tolerance | integer | no | — |
| mode | string | no | — |
| file | string | no | — |
Invert the current selection against the canvas bounds.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Report whether a selection exists and its bounding rectangle.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Erase pixels to transparent. Pass an explicit rect (works everywhere, including headless), or pass nothing to erase the current selection — including non-rectangular ones (live editor). One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | no | — |
| y | integer | no | — |
| width | integer | no | — |
| height | integer | no | — |
| file | string | no | — |
Open a sprite file and make it the active document; returns its filename, size, and frame/layer counts. Live: opens a new tab in the editor and makes it the sprite Claude works on. Headless: each call is a fresh process, so this is a "can Aseprite read this file" probe returning the file's info —…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | — |
Save the active sprite to disk: to `path if given (save-as; the document's filename follows it), else to its own filename — errors if the sprite is untitled and no path is given. Live: persists the edits sitting in the open editor. Headless: mutating tools already save to file` on their…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | no | — |
| file | string | no | — |
Close the active sprite. Errors if it has unsaved changes unless `force=true` — save_sprite first, or force to discard them. Aimed at the live editor (frees the tab); headless has no persistent session, so there is nothing to close there.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| force | boolean | no | — |
Live editor only: make one of the open documents active, found by exact filename or basename match (e.g. "turret.aseprite"). Returns which sprite matched and how. Subsequent tools operate on it, even if the artist clicks another tab. Unsaved sprites share a name: pick those with `pin_sprite`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| filename | string | yes | — |
Live editor only: choose the sprite Claude's edits go to. Every tool then works on it even while the artist looks at another tab. Pick it by `filename (full path or basename), by a tag` it has (the way to tell unsaved sprites apart), or give neither to pin the sprite the artist has open now…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| filename | string | no | — |
| tag | string | no | — |
| unpin | boolean | no | — |
Live editor only: save open work into `folder as .aseprite` files, so nothing is lost when tabs are closed. Unsaved sprites are saved there and become those files (named after their first tag); sprites that already have a file and unsaved changes are COPIED there, leaving their own file…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folder | string | yes | — |
| all_sprites | boolean | no | — |
| only | array | no | — |
Live editor only: list every open document — filename (or
Takes no parameters.
Palette-constrained shading: brighten toward the light and darken away from it, snapping every pixel to the nearest palette color. `intensity ~0..1. RGB sprite only; one undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| light_direction | string | yes | — |
| intensity | number | no | — |
| file | string | no | — |
Shade by WALKING the arranged palette ±N indices toward lighter/darker (per light direction), instead of snapping to the luminance-nearest color — so hand-ordered shading ramps are respected. `steps` = max indices to walk at the fully-lit/shadowed edges. RGB sprite with an ordered ramp palette;
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| light_direction | string | yes | — |
| steps | integer | no | — |
| file | string | no | — |
Create a named slice (atlas region) at the given rectangle. Slices become Unity sprites via export_unity_slices. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| file | string | no | — |
Set a slice's pivot point, in pixels relative to the slice's top-left. This pivot is exported into the Unity `.meta by export_unity_slices. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| pivot_x | integer | yes | — |
| pivot_y | integer | yes | — |
| file | string | no | — |
Set a slice's 9-patch stretchable center rectangle (relative to the slice).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| file | string | no | — |
List every slice with its bounds, pivot, and 9-patch center. Read-only.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Delete the slice with the given name. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
Create an animation tag named `name spanning frames from_frame..to_frame` (1-based).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| from_frame | integer | yes | — |
| to_frame | integer | yes | — |
| file | string | no | — |
Delete the animation tag named `name`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| file | string | no | — |
List animation tags with their frame ranges.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Rename the animation tag `old_name to new_name`. One undo step.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| old_name | string | yes | — |
| new_name | string | yes | — |
| file | string | no | — |
Set the timeline label color of the tag `name (#rrggbb or #rrggbbaa). One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| color | string | yes | — |
| file | string | no | — |
Move the tag `name to span frames from_frame..to_frame (1-based, inclusive; validated against the sprite's frame count). One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| from_frame | integer | yes | — |
| to_frame | integer | yes | — |
| file | string | no | — |
Set the playback direction of the tag `name: forward | reverse | pingpong | pingpong_reverse. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| direction | string | yes | — |
| file | string | no | — |
Create a tilemap layer with its own tileset on a tile_width x tile_height grid. The new tileset starts with only tile 0, the reserved empty tile — use add_tile to append editable tiles. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| tile_width | integer | yes | — |
| tile_height | integer | yes | — |
| file | string | no | — |
Append an empty tile to a tilemap layer's tileset; returns the new tile's index and the tileset size. The first added tile is index 1 (tile 0 is the reserved empty tile). One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | yes | — |
| file | string | no | — |
Set pixels on one tile of a tilemap layer's tileset. `pixels is a list of {x, y, color} objects (color #rrggbb or #rrggbbaa; x/y relative to the tile's top-left). Pixels outside the tile are skipped and counted. Every placed instance of the tile updates. One undo step. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | yes | — |
| tile_index | integer | yes | — |
| pixels | array | yes | — |
| file | string | no | — |
Place tile references on a tilemap layer's cel. `tiles` is a list of {column, row, index} objects (0-based grid cells; index 0 erases to the empty tile). The cel is created or grown as needed, anchored at the sprite origin.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | yes | — |
| frame | integer | yes | — |
| tiles | array | yes | — |
| file | string | no | — |
Read a tilemap layer: tile size, tileset length, and the cel's grid size, pixel position, and tile-index grid (`tiles as rows of columns, flip flags stripped; capped at 64x64 with truncated set). Read-only. Headless: pass file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | yes | — |
| frame | integer | no | — |
| file | string | no | — |
Export a tilemap layer's tileset as a horizontal PNG strip (plus an Aseprite JSON atlas if `data_path` is given). The strip includes tile 0 (the empty tile) first, so tile index i sits at x = i * tile_width. Writes files but does not modify the sprite (it does make the layer active).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | yes | — |
| output_path | string | yes | — |
| data_path | string | no | — |
| file | string | no | — |
Make a texture repeat with no visible edge, for ground, walls, or water tiles. The layer (the active one by default) fills the canvas: it is shifted by half so its old edges meet in the middle, and that cross, `band pixels wide (an eighth of the size by default), is rebuilt from patch`-sized…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| layer | string | no | — |
| band | integer | no | — |
| patch | integer | no | — |
| frame | integer | no | — |
| seed | integer | no | — |
| file | string | no | — |
Build the 47-tile autotile set for one terrain (`fill_layer, like grass) over another (base_layer, like dirt, or clear), so a map painter picks the right edge and corner for every neighbour. Both textures come from the top-left size square of their layer, so make_seamless` them first.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| fill_layer | string | yes | — |
| size | integer | yes | — |
| name | string | yes | — |
| base_layer | string | no | — |
| edge | integer | no | — |
| outline | boolean | no | — |
| game_dir | string | no | — |
| out_dir | string | no | — |
| frame | integer | no | — |
| file | string | no | — |
Flip the whole sprite horizontally or vertically.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| direction | string | yes | — |
| file | string | no | — |
Scale the whole sprite to new pixel dimensions.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| width | integer | yes | — |
| height | integer | yes | — |
| file | string | no | — |
Crop the sprite to the given rectangle.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| x | integer | yes | — |
| y | integer | yes | — |
| width | integer | yes | — |
| height | integer | yes | — |
| file | string | no | — |
Rotate the whole sprite by 90, 180, or 270 degrees clockwise (lossless).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| degrees | integer | yes | — |
| file | string | no | — |
Trim transparent borders: shrink the canvas to the union of visible content across all layers and frames (Sprite > Trim). Errors if the sprite is fully transparent. Returns the old and new size. One undo step. Headless: pass `file`.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file | string | no | — |
Convert the sprite between rgb | gray | indexed color modes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| mode | string | yes | — |
| dithering | string | no | — |
| file | string | no | — |
Export a horizontal sprite sheet AND write the Unity `.meta beside it, pre-sliced into named Multiple-mode sprites (one per frame) — one action, no manual Sprite Editor pass. alignment` is one of center, top_left, top, top_right, left, right, bottom_left, bottom, bottom_right, custom;…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| png_path | string | yes | — |
| pixels_per_unit | integer | no | — |
| alignment | string | no | — |
| pivot_x | number | no | — |
| pivot_y | number | no | — |
| file | string | no | — |
Export the sprite as a single PNG AND write a Unity `.meta` with one Multiple-mode sprite per named slice, each carrying that slice's pivot — so an atlas laid out with slices imports into Unity already sliced *and* pivoted. No competitor's Aseprite→Unity path exports pivots. Requires slices…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| png_path | string | yes | — |
| pixels_per_unit | integer | no | — |
| file | string | no | — |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Aseprite Claude Connector or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
Tools were statically extracted from the published source (187 recovered), not enumerated from a running server. Tool-poisoning, Unicode-smuggling, capability and toxic-flow analysis ran on this inferred surface, but a mis-parsed registration could be missed or mis-attributed, so tool-derived findings are capped below “confirmed”. To grade the real runtime surface, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| tween_frames | no tags | |
| tween_cel_opacity | no tags | |
| smear_frame | no tags | |
| frame_diff | no tags | |
| render_onion_composite | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| measure_padding | no tags | |
| qa_sweep | no tags | |
| export_gamemaker | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| pack_atlas | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| batch_export | no tags | |
| batch_resize | no tags | |
| batch_apply_palette | no tags | |
| paint_with_stamp | no tags | |
| create_sprite | state-write | state-write: declares readOnlyHint: false |
| expand_canvas | no tags | |
| import_spritesheet | no tags | |
| clear_cel | state-write | state-write: declares destructiveHint: true |
| set_cel_position | no tags | |
| set_cel_opacity | no tags | |
| draw_eyes | no tags | |
| swing_part | no tags | |
| bob_body | no tags | |
| lift_symbols | no tags | |
| check_consistency | no tags | |
| match_palettes | no tags | |
| find_stray_pixels | no tags | |
| recolor_variants | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| replace_color | no tags | |
| quantize_to_palette | no tags | |
| adjust_hsl | no tags | |
| get_color_stats | no tags | |
| search_api_docs | no tags | |
| search_manual | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| draw_pixels | no tags | |
| draw_polyline | no tags | |
| draw_rectangle | no tags | |
| draw_line | no tags | |
| draw_circle | no tags | |
| fill_area | no tags | |
| draw_ellipse | no tags | |
| draw_gradient | no tags | |
| apply_dither | no tags | |
| add_outline | no tags | |
| select_frame | no tags | |
| select_layer | no tags | |
| undo | no tags | |
| redo | no tags | |
| export_sprite | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| export_spritesheet | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| export_layers | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| export_tags | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| adjust_brightness_contrast | no tags | |
| invert_colors | no tags | |
| desaturate | no tags | |
| box_blur | no tags | |
| sharpen | no tags | |
| export_animation | no tags | |
| clean_lines | no tags | |
| add_frame | no tags | |
| duplicate_frame | no tags | |
| delete_frame | state-write | state-write: declares destructiveHint: true |
| set_frame_duration | no tags | |
| add_frames | no tags | |
| set_frame_durations | no tags | |
| reverse_frames | no tags | |
| set_onion_skin | no tags | |
| export_to_game | external-sink | external-sink: keyword "export_to" |
| export_godot | no tags | |
| status | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_sprite_info | no tags | |
| describe_sprite | no tags | |
| get_pixel | no tags | |
| set_sprite_metadata | no tags | |
| get_sprite_metadata | no tags | |
| get_pixels | no tags | |
| draw_iso_box | no tags | |
| draw_iso_cylinder | no tags | |
| fill_polygon | no tags | |
| iso_recessed_panel | no tags | |
| add_layer | no tags | |
| add_group | no tags | |
| move_layer_to_group | no tags | |
| list_layers | no tags | |
| delete_layer | state-write | state-write: declares destructiveHint: true |
| rename_layer | no tags | |
| set_layer_visibility | no tags | |
| set_layer_opacity | no tags | |
| flatten_sprite | state-write | state-write: declares destructiveHint: true |
| set_layer_blend_mode | no tags | |
| duplicate_layer | no tags | |
| merge_layer_down | state-write | state-write: declares destructiveHint: true |
| move_layer | no tags | |
| import_image_as_layer | no tags | |
| relight_scene | no tags | |
| make_normal_map | no tags | |
| get_editor_state | no tags | |
| set_editor_view | no tags | |
| set_symmetry | no tags | |
| ask_point | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_asked_point | no tags | |
| cancel_ask_point | no tags | |
| show_choice_dialog | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| get_dialog_choice | no tags | |
| watch_changes | no tags | |
| get_watched_changes | no tags | |
| stop_watching_changes | no tags | |
| look | no tags | |
| look_animation | no tags | |
| look_onion | no tags | |
| run_lua | external-sink | external-sink: declares readOnlyHint: false, destructiveHint: true, openWorldHint: true |
| inbetween | no tags | |
| walk_cycle_template | no tags | |
| apply_timing | no tags | |
| check_loop | no tags | |
| get_palette | no tags | |
| set_palette_color | no tags | |
| add_palette_color | no tags | |
| set_palette | no tags | |
| apply_preset_palette | no tags | |
| generate_color_ramp | no tags | |
| extract_palette_from_image | no tags | |
| sort_palette | no tags | |
| palette_from_sprite | no tags | |
| load_palette | no tags | |
| save_palette | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| apply_bundled_palette | no tags | |
| split_sheet | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| pixelate_reference | no tags | |
| compare_to_reference | no tags | |
| animate_parts | no tags | |
| set_safety_rails | no tags | |
| edit_batch | no tags | |
| edit_in_selection | no tags | |
| ambient_motion | no tags | |
| split_into_layers | no tags | |
| extend_scene | no tags | |
| clean_pixel_art | no tags | |
| select_rectangle | no tags | |
| select_all | no tags | |
| deselect | no tags | |
| select_ellipse | no tags | |
| select_by_color | no tags | |
| invert_selection | no tags | |
| get_selection | no tags | |
| erase_area | state-write | state-write: declares destructiveHint: true |
| open_sprite | no tags | |
| save_sprite | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| close_sprite | state-write | state-write: declares destructiveHint: true |
| set_active_sprite | no tags | |
| pin_sprite | no tags | |
| save_all_sprites | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| list_sprites | no tags | |
| add_reference_image | no tags | |
| change_summary | no tags | |
| explain_changes | no tags | |
| start_recording | no tags | |
| stop_recording | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| apply_shading | no tags | |
| palette_ramp_walk | no tags | |
| create_slice | no tags | |
| set_slice_pivot | no tags | |
| set_slice_center | no tags | |
| list_slices | no tags | |
| delete_slice | state-write | state-write: declares destructiveHint: true |
| create_tag | no tags | |
| delete_tag | state-write | state-write: declares destructiveHint: true |
| list_tags | no tags | |
| rename_tag | no tags | |
| set_tag_color | no tags | |
| set_tag_range | no tags | |
| set_tag_direction | no tags | |
| create_tilemap_layer | no tags | |
| add_tile | no tags | |
| draw_on_tile | no tags | |
| set_tiles | no tags | |
| get_tilemap_info | no tags | |
| export_tileset | untrusted-input | untrusted-input: declares openWorldHint: true (interacts with entities outside the server) |
| make_seamless | no tags | |
| make_autotiles | no tags | |
| flip_sprite | no tags | |
| resize_sprite | no tags | |
| crop_sprite | state-write | state-write: declares destructiveHint: true |
| rotate_sprite | no tags | |
| autocrop_sprite | no tags | |
| set_color_mode | no tags | |
| export_unity_sprite | no tags | |
| export_unity_slices | no tags |
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 0.4.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Aseprite Claude Connector can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.