Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ASEPRITE_MCP_PORTNoWebSocket port (default 9123)9123
ASEPRITE_MCP_TOKENNoAuthentication token to use instead of the token file. Must match the token configured in the Aseprite MCP Bridge extension.
ASEPRITE_MCP_TIMEOUTNoPer-command timeout in milliseconds (default 15000)15000
ASEPRITE_MCP_ALLOW_LUANoSet to '1' to enable the aseprite_run_lua tool. This is an additional opt-in; the MCP Bridge window must also allow arbitrary Lua code.
ASEPRITE_MCP_TOKEN_FILENoLocation of the token file. Default is ~/.config/aseprite-mcp/token (or $XDG_CONFIG_HOME).

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
aseprite_statusA

Checks the connection and returns info about the active sprite: size, color mode, layers, frames, active layer/frame. Coordinates start at (0,0) in the top-left corner. The active sprite becomes the one all following tools work on.

aseprite_helpA

Returns the short usage guide (efficient workflow, pixel_map format, stamps, pixel-art tips). Read it once before drawing if your client did not show the server instructions.

aseprite_openA

Opens a file (.aseprite, .png, .gif, ...) as the active sprite.

aseprite_new_spriteB

Creates a new sprite and makes it active. Returns the sprite status.

aseprite_pixel_mapA

Most token-efficient way to draw many exact pixels: a palette of single-character keys and one text row per pixel row. '.' and space leave the pixel unchanged; map a key to '#00000000' to erase. One undo step. Example: palette {"k":"#222034","y":"#fbf236"}, rows ["..kk..", ".kyyk.", "kyyyyk"]. Repeated parts: define stamps once and draw them with place. Generated art: write the data to a .json file and pass file.

aseprite_set_pixelsA

Sets individual pixels exactly, as a single undo step. The color '#00000000' erases a pixel. For more than a few pixels prefer aseprite_pixel_map (far fewer tokens).

aseprite_drawA

Uses an Aseprite tool like a mouse stroke. line/rectangle/filled_rectangle/ellipse/filled_ellipse take 2 points (start, end; inclusive). pencil/eraser/spray take any number of points (freehand path). paint_bucket takes 1 point. curve takes 4 points. polygon/contour take the corner points.

aseprite_clearB

Clears the whole layer in the frame, or only a rectangle.

aseprite_layerB

Create (new, becomes active), activate (select), delete, rename, or show/hide (visible) a layer. Returns the sprite status.

aseprite_frameA

Animation: create a frame after the given/active one (new, copies it by default, becomes active), activate (select), delete, or set its duration (in seconds). To draw several frames at once use aseprite_animation. Returns the sprite status.

aseprite_copyA

Copies a rectangle of pixels, optionally flipped, to another position, layer or frame (one undo step). Without x/y it writes back in place, so flip='h' mirrors the region where it is. Symmetry example on a 16px-wide sprite: rect [0,0,8,16], flip 'h', x 8 mirrors the left half onto the right half.

aseprite_animationA

Draws several frames in ONE call, each as a pixel map, creating missing frames automatically. With copyPrevious (default) a new frame starts as a copy of the previous one, so each entry only needs the changed rows (use x/y and '.' to leave pixels unchanged; '.' never erases, map a key to '#00000000' for that). Parts that repeat across frames (head, body …) belong in stamps, placed per frame with place: [name, x, y]. For generated animations write frames/palette/stamps to a .json file and pass file. Returns the sprite status.

aseprite_outlineA

Adds a 1px outline around (outside) or on the edge of (inside) everything opaque on a layer, in one undo step. style 'selout' (default) derives each outline pixel from the colour it borders: darker and cooler on the shadow side, lighter on the side facing the top-left light – the classic selective outline. style 'solid' uses one colour. Works on sprites up to 128x128 (or pass rect). Semi-transparent pixels (alpha < 128) count as empty.

aseprite_historyC

Undoes or redoes steps.

aseprite_saveA

Saves the active sprite. Without path the existing file is overwritten. With copy=true only a copy is exported (e.g. as .png).

aseprite_batchA

Runs several operations in ONE call, in order (saves round trips and tokens). Each item is {"op": , ...the same arguments as the tool aseprite_}. Allowed ops: new_sprite, pixel_map, set_pixels, draw, clear, layer, frame, copy, animation, outline, history, save. Stops at the first error; earlier ops stay applied (each op is its own undo step). Returns one short result per op plus the final sprite status if layers/frames changed. Example: [{"op":"layer","action":"new","name":"bg"},{"op":"draw","tool":"filled_rectangle","points":[[0,0],[15,15]],"color":"#5fcde4"},{"op":"layer","action":"new","name":"fg"},{"op":"pixel_map","palette":{"k":"#000"},"rows":["kk"],"x":4,"y":4}]

aseprite_read_pixelsA

Reads pixels back in the same palette + rows format as aseprite_pixel_map, so you can inspect exact colors or copy/modify a region cheaply. '.' = fully transparent; trailing '.' are cut off. Without layer the visible, flattened frame is read; with layer only that layer. Pass the palette (or paletteName) you drew with to get the same keys back. Max 16384 pixels per call.

aseprite_paletteA

Stores named palettes (character -> color) on disk so they can be reused across sprites and sessions via paletteName in aseprite_pixel_map, aseprite_read_pixels, aseprite_animation. Actions: save (name + colors), list (all saved palettes), delete (name), from_image (name; collects the colors of the visible frame, or of layer/rect, and saves them with generated keys), ramp (builds hue-shifted shading ramps – cool, saturated shadows and warm highlights – from base colours; e.g. ramps [{"base":"#d63a3a","keys":"DmrRH"}] gives 5 keys dark->light with the base in the middle; saved when name is given).

aseprite_spritesA

Lists the sprites open in Aseprite (id, name, size, frames, which one is active). select (id or name) switches Aseprite to that sprite and makes it the one all following tools work on – use it after an 'artist switched sprites' error or to work on several sprites in turn.

aseprite_backupsA

Lists the automatic backup copies (newest first). A few seconds after the assistant changes a sprite, a copy is saved as .aseprite; the artist's own files are never overwritten. Open one with aseprite_open to restore it.

aseprite_selectionA

Returns the region the artist has selected in Aseprite ({empty:true} if nothing is selected), so a request like 'improve this part' needs no coordinates. Most tools also accept rect "selection" directly. mask=true adds the exact shape as rows ('#' selected) when it is not a plain rectangle.

aseprite_changesA

Watch mode for drawing together. The first call starts watching the active sprite. Later calls return only the pixels the ARTIST changed since the previous call (your own tool calls are not reported), as a pixel map of the changed region: '.' = unchanged, '-' = erased, other keys = new colours. Feed it to aseprite_pixel_map to build on it. peek=true looks without moving the baseline; reset=true starts over.

aseprite_viewA

Renders the visible, flattened frame as an upscaled PNG so you can look at and check the result yourself. Transparency is shown as a checkerboard. Use rect to zoom into a detail. Call it once after a drawing pass, not after every step. If your client cannot show images, use aseprite_read_pixels instead. critique=true instead returns ONE small sheet for self-review: colour, grayscale (value/contrast check), black silhouette (readability) and true 1x size; add 'deutan' to panels for a colour-blindness check. Max 128x128 px (or pass rect).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 23 tools

Disambiguation5/5

Each tool targets a distinct task: pixel_map/set_pixels/draw are clearly separated by bulk vs. individual vs. shape drawing, status/sprites by active vs. all sprites, and view/read_pixels by rendered image vs. pixel data. The descriptions explicitly note when to prefer one tool over another, so an agent is unlikely to select the wrong one.

Naming Consistency4/5

All tools share the aseprite_ prefix and lowercase snake_case, which is predictable and consistent. However, the suffix style mixes verb commands like draw, clear, copy, and view with noun commands like layer, frame, history, palette, and changes, rather than following a strict verb_noun pattern throughout.

Tool Count3/5

At 23 tools, the server sits in the 16-25 range that feels heavy for a single MCP server. That said, Aseprite is a broad pixel-art editor domain and nearly every tool has a distinct purpose, so the count is defensible though not tightly scoped.

Completeness4/5

Core pixel-art workflows are well covered: file open/new/save, drawing and reading pixels, layer and frame management, animation, palettes, undo/redo, and even collaborative change monitoring. Obvious gaps like canvas resize, layer reordering/opacity, or frame reordering are missing but can generally be worked around with copy and new operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues