Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
ASEPRITE_PATHNoFull path to the Aseprite executable. The server looks for Aseprite in this order: the ASEPRITE_PATH environment variable, aseprite/build/bin/ inside the package folder, the default Steam and installer locations for Windows, macOS and Linux, and finally aseprite on PATH.
ASEPRITE_MCP_PORTNoPort the server listens on for the bridge extension. Change it in the extension's MCP Bridge dialog too.41234
ASEPRITE_USER_DIRNoAseprite's user folder, where install_extension puts the extension. Defaults to the platform default.
ASEPRITE_MCP_WORKDIRNoBase directory for relative file paths. Defaults to the server's working directory (the directory the client started the server in).
ASEPRITE_MCP_LIVE_TIMEOUT_MSNoHow long a live call waits for Aseprite to answer.55000
ASEPRITE_MCP_BATCH_TIMEOUT_MSNoHow long a batch call may run before the process is killed.120000

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
statusA

Shows the Aseprite executable in use, its version, and whether a live Aseprite is connected to the bridge.

install_extensionA

Copies the bridge extension into Aseprite's user extensions folder. A running Aseprite must be restarted to load it.

launch_asepriteA

Starts the Aseprite GUI with the bridge extension and waits for it to connect, enabling live mode. The first time, Aseprite asks to allow the script's network and file access; tick 'Give full trust' / 'Don't show again' in that dialog.

run_luaA

Runs Lua code inside Aseprite with the full scripting API (app, Sprite, Image, Layer, Color, ...). Globals: args (your args object), sprite (resolved sprite or app.sprite), MCP (helper runtime: MCP.color(), MCP.layer(spr, ref), MCP.sprite_info(spr) ...). print output is captured. The return value is sent back as JSON. Use api_docs for the API reference.

run_commandA

Executes any Aseprite menu command (app.command.) with parameters, e.g. Flip, Rotate, Outline, BrightnessContrast, ColorQuantization, LinkCels, ReverseFrames, AutocropSprite. See list_commands for names and parameters. Strings like '#ff0000' become Colors; {x,y,width,height} becomes a Rectangle. ui=false is added unless allowUi is true.

list_commandsA

Lists Aseprite commands usable with run_command, with their parameters (extracted from the Aseprite source).

api_docsA

Reads the Aseprite Lua API reference (bundled from github.com/aseprite/api). Without a topic, lists topics. Topics include app, sprite, layer, cel, image, color, palette, tag, slice, tileset, selection, dialog, websocket, and command/.

cliA

Runs the Aseprite command line in batch mode (aseprite -b ) and returns its output. Useful for --sheet/--data exports, --split-layers, --list-tags, --save-as with {layer}/{frame} templates, --scale, --color-mode, etc. See https://www.aseprite.org/docs/cli/.

app_stateB

Returns Aseprite's current state: open sprites, active sprite/layer/frame, foreground/background colors, tool, brush, timeline range and editor zoom (live).

set_activeB

Changes what is active in the UI: sprite/layer/frame, foreground/background color, tool, brush, editor zoom, and the timeline range (selected frames/layers/colors). Mostly useful in live mode.

undo_redoB

Undoes or redoes steps on a sprite (live mode; batch processes have no history between calls).

list_preferencesA

Lists Aseprite preference sections and options (from pref.xml) for use with the preferences tool.

preferencesA

Gets or sets an Aseprite preference (app.preferences..), a tool preference (tool=) or a per-sprite document preference (document=true). Use list_preferences to discover names.

list_spritesB

Lists sprites open in Aseprite.

new_spriteB

Creates a new sprite. In batch mode 'file' is required (the sprite is saved there).

open_spriteA

Opens a sprite file (any format Aseprite reads: .aseprite, .png, .gif, .jpg, .webp, .bmp, .tga, .pcx, .ico, .flc, .qoi, .psd...) and returns its structure. In live mode it opens a tab.

get_sprite_infoA

Returns a sprite's full structure: size, color mode, frames and durations, layer tree (with opacity, blend mode, visibility...), tags, slices, tilesets, palette size, grid, selection and active layer/frame.

save_spriteA

Saves a sprite (Save / Save As), or with copy=true saves a copy without changing the sprite's file name. The extension picks the format. Single-image formats get one file per frame (name1.png, name2.png...); the result lists the files written.

close_spriteC

Closes an open sprite (live mode).

set_sprite_propertiesB

Changes sprite metadata: filename, user data, tab color, transparent color index, pixel ratio, grid bounds, user properties, color space.

resize_spriteB

Scales the whole sprite (all layers and frames). Give width and/or height, or scale.

canvas_sizeB

Grows or shrinks the canvas without scaling pixels: either margins (left/top/right/bottom, negative values cut) or a new width/height with an anchor.

crop_spriteB

Crops the sprite to a rectangle, to the selection (mode='selection'), or trims empty borders (mode='auto').

change_color_modeC

Converts the sprite to RGB, grayscale or indexed, with optional dithering.

flip_rotateB

Flips and/or rotates the whole sprite, the active cel(s) of a layer/frame, or the selection.

add_layerB

Adds an image, group or tilemap layer, optionally inside a group or above/below another layer, with its properties set.

update_layerC

Changes layer properties: name, visibility, lock, opacity, blend mode, color, data, parent group, stack position.

delete_layerB

Deletes a layer (and its children if it is a group).

duplicate_layerB

Duplicates a layer with all its cels.

merge_layersA

Merges a layer into the one below (mode='down'), flattens all layers ('flatten'), or flattens only visible layers ('visible').

convert_layerB

Converts a layer: to a Background layer, from Background to a normal layer, or between image and tilemap layers.

add_framesA

Adds frames. By default copies the previous frame's cels; empty=true adds blank frames.

delete_framesB

Deletes one frame, a range, a list, or a tag's frames.

set_frame_durationA

Sets frame durations in milliseconds for one frame, a range, a list, a tag, or 'all'.

move_frameC

Moves a frame (with its cels) to another position.

get_celsA

Lists cels (layer/frame pairs with images) with bounds, opacity, z-index and data, filtered by layer and frames.

update_celB

Changes a cel: position (absolute x/y or relative dx/dy), opacity, z-index, color, data, properties, or moves it to another frame.

delete_celC

Deletes the cel(s) of a layer in the given frames.

copy_celB

Copies a cel's image to another layer/frame (and optionally another open sprite).

draw_pixelsA

Sets individual pixels on a layer/frame (one undo step). Either 'pixels' as [[x,y,color],...] / [{x,y,color}], or pixel art as 'rows' of characters with a 'legend' mapping each character to a color; rows start at (x,y). Unmapped ' ' and '.' are skipped; map '.' to 'transparent' to erase. The cel grows as needed; pixels outside the canvas are dropped.

get_pixelsA

Reads pixels of the rendered frame (all visible layers) or of one layer. Default format 'legend' returns rows of characters plus a legend of colors ('.' = transparent); 'hex' returns a grid of '#rrggbbaa' (null = transparent). Indexed sprites return palette indices.

use_toolA

Draws with an Aseprite tool as if the user dragged through 'points' (app.useTool). Tools: pencil, brush-like strokes with eraser/spray/blur/jumble, line, curve (4 points), rectangle, filled_rectangle, ellipse, filled_ellipse, paint_bucket (1 point), gradient, contour, polygon, and selection tools (rectangular_marquee, elliptical_marquee, lasso, polygonal_lasso, magic_wand).

draw_imageA

Draws an image file (PNG, etc.) into a layer/frame at (x,y). mode 'blend' composites over existing pixels, 'copy' overwrites the area, 'replace' swaps the whole cel image. Optional source crop, scale or target size.

clearB

Clears a layer's cel(s) to transparent (or fills with a color): whole cel, a rect, or the selected area.

replace_colorB

Replaces one color with another on a layer (or all layers) across frames, with optional per-channel tolerance (RGB).

apply_filterA

Applies an image filter command to the active cel(s) or selection: BrightnessContrast, HueSaturation, ColorCurve, ConvolutionMatrix, Despeckle, InvertColor, Outline, ReplaceColor. Params follow list_commands (e.g. Outline {color:'#000000', place:'outside', matrix:'circle'}; HueSaturation {hue, saturation, lightness, alpha}; BrightnessContrast {brightness, contrast}).

selectA

Creates or changes the selection: rect, ellipse, polygon, magic_wand (point), by_color, all, none, invert, reselect, content (layer pixels), modify (expand/contract/border), move (dx/dy), get, save or load (to/from a .msk or image file). The selection lives only in live mode or inside one run_lua call.

selection_editB

Acts on the selection: copy, copy_merged, cut, paste (optional x,y), delete, fill, stroke (with color), move_content / move_bounds (dx,dy, wrap), new_sprite, new_layer_via_copy, new_layer_via_cut, crop.

get_paletteB

Returns the sprite palette as '#rrggbbaa' colors (index 0 first).

set_paletteB

Changes the palette: set colors starting at 'start', replace it entirely, resize, load from a file (.gpl, .pal, .act, .ase, .png...) or a built-in preset (e.g. DB16, DB32, PICO-8...), or generate it from the sprite's colors (fromSprite).

save_paletteB

Saves the sprite palette to a file (.gpl, .pal, .act, .png, .ase, .hex...).

add_tagC

Adds an animation tag over a frame range.

update_tagC

Changes a tag's name, range, direction, repeats, color or data.

delete_tagA

Deletes a tag (frames are kept).

add_sliceB

Adds a slice (with optional 9-slice center and pivot), or duplicates one with copyFrom.

update_sliceD

Changes a slice.

delete_sliceC

Deletes a slice.

tilesetB

Tileset operations: list, add (tileSize, count), update (name, baseIndex, data), delete, add_tile, delete_tile, get_tile (pixels as rows+legend), set_tile (rows+legend or an image file). Tile index 0 is the empty tile.

tilemapA

Reads (action 'get') or writes (action 'set') the tile indices of a tilemap layer's cel. Set with 'cells' [{col,row,tile}] or 'rows' (2D array of tile indices, -1/null to skip) starting at col/row.

draw_textA

Draws text onto a layer. In live mode it uses Aseprite's text renderer with any font Aseprite knows (its built-in 'Aseprite' pixel font, or an installed system font by name such as 'Arial'). In batch mode, or with font='builtin', it uses a built-in 5x7 pixel font that can be scaled by whole numbers. Multi-line text with \n is supported.

draw_shapesA

Draws vector shapes with optional antialiasing: rect, rounded_rect, oval/ellipse, line, polyline, polygon, bezier (cubic, points = start then control1, control2, end per segment), or path (ops: move/line/cubic/close). Each shape is stroked (width) or filled. Antialiasing is off by default to keep hard pixel edges. For pixel-exact aliased shapes use_tool is closer to Aseprite's own tools.

link_celsA

Links cels so several frames share one image (edits to one show in all), or unlinks them. Linking needs live mode. Unlinking works in both modes.

palette_editA

Edits the palette structure: add or insert colors, remove entries, move entries, sort (by hue, saturation, value, lightness, luminance, red, green, blue, alpha), reverse a range, generate a ramp between two colors, or dedupe. In indexed sprites pixels are remapped so they keep their colors (set remapPixels=false to skip); pixels using removed colors move to the nearest remaining one.

view_settingsA

Reads or changes per-sprite view settings: grid (show, snap, bounds, color, opacity), pixel grid, symmetry mode and axes, tiled mode, onion skin, overlays (layer edges, selection edges, slices, auto guides, tile numbers, brush preview), checkerboard colors; and in live mode zoom, scroll, fit to screen, playback, timeline and preview window. Call with no options to read them.

clipboardA

Reads or writes the system clipboard: info, get_text, set_text, clear, get_image (returned as a preview image, or saved to 'file'), set_image (from an image file, or a rendered sprite frame/layer/rect).

duplicate_spriteB

Makes a copy of a whole sprite (all layers, frames, tags, slices). In batch mode 'file' is required.

propertiesA

Gets, sets, deletes or replaces custom properties on a sprite, layer, cel, tag, slice, tileset or tile. With pluginKey ('publisher/extension') it reads/writes that extension's properties instead of the user properties.

recent_eventsA

Live mode: returns what happened in Aseprite since a sequence number: sprite changes (including undo/redo), switching sprite/layer/frame, commands run, and color changes. Events caused by MCP calls are hidden unless includeMcp is true. Pass the returned lastSeq as 'since' next time.

ask_userA

Live mode: shows a dialog in Aseprite and waits for the user to answer. Can show text plus input fields (entry, number, slider, check, combobox, color, label) and buttons. Returns the pressed button and field values.

render_previewA

Renders frames as an image you can look at (nearest-neighbor upscaled, transparency shown as a checkerboard). Multiple frames are laid out in a grid in frame order. Use this after edits to check the result.

exportA

Exports a copy of the sprite to any format (png, gif, webp, jpg, bmp, tga, pcx, ico, qoi, flc, svg, css, ...). Options: scale, a tag or a 1-based frame range, a slice, specific layers, or a filename template like 'out_{frame}.png' ({frame} counts from 0). Single-image formats with several frames get one file per frame (name1.png, name2.png..., or starting from a trailing number in the name); the result lists every file written.

export_sprite_sheetB

Exports a sprite sheet image plus optional JSON data (File > Export Sprite Sheet). Supports layouts, padding, trimming, extrusion, splitting by layers/tags, tilesets, and listing layers/tags/slices in the JSON.

import_sprite_sheetB

Opens an image and slices it into frames (File > Import Sprite Sheet). Optionally saves the result.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.9/5.0

Scored across 73 tools

Disambiguation3/5

Many tools target distinct resources and actions, but there is meaningful overlap among drawing tools (use_tool, draw_shapes, draw_pixels, draw_image, draw_text) and execution tools (run_command, run_lua, cli). Generic names like preferences, properties, status, and app_state also require careful reading to avoid misselection. Descriptions help, but boundaries are not always obvious.

Naming Consistency3/5

All names use snake_case, which keeps them readable, but the conventions are mixed: verb_noun (list_sprites, add_layer), noun-only (tileset, clipboard, preferences), and noun_verb (selection_edit, palette_edit). There is no single predictable pattern across the set.

Tool Count1/5

With 73 tools, this is far beyond the well-scoped 3-15 range and qualifies as an extreme mismatch by the rubric's 50+ threshold. Even for a broad application like Aseprite, the volume is likely to overwhelm an agent selecting the right tool.

Completeness5/5

The surface covers sprites, layers, frames, cels, tags, slices, tilesets, tilemaps, palettes, selections, drawing, filters, import/export, preferences, clipboard, events, and dialogs. It provides full CRUD and lifecycle operations across the Aseprite domain with no obvious gaps.