Aseprite MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| STEAM_PASSWORD | No | Steam password for installing Aseprite via SteamCMD (optional) | |
| STEAM_USERNAME | No | Steam username for installing Aseprite via SteamCMD (optional) | |
| STEAM_GUARD_CODE | No | Steam guard code for two-factor authentication (optional) |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| create_canvasB | Create a new Aseprite canvas with specified dimensions. Args: width: Width of the canvas in pixels height: Height of the canvas in pixels filename: Name of the output file (default: canvas.aseprite) |
| add_layerC | Add a new layer to the Aseprite file. Args: filename: Name of the Aseprite file to modify layer_name: Name of the new layer |
| add_frameC | Add a new frame to the Aseprite file. Args: filename: Name of the Aseprite file to modify |
| set_frameB | Set the active frame by index (1-based). Args: filename: Name of the Aseprite file to modify frame_index: Frame index starting at 1 |
| set_frame_durationB | Set the duration of a frame in milliseconds. Args: filename: Name of the Aseprite file to modify frame_index: Frame index starting at 1 duration_ms: Duration in milliseconds |
| set_layerB | Set the active layer by name. Args: filename: Name of the Aseprite file to modify layer_name: Layer name to activate create_if_missing: Create layer if it does not exist |
| draw_pixelsB | Draw pixels on the canvas with specified colors. Args: filename: Name of the Aseprite file to modify pixels: List of pixel data, each containing: {"x": int, "y": int, "color": str} where color is a hex code like "#FF0000" |
| draw_lineB | Draw a line on the canvas. Args: filename: Name of the Aseprite file to modify x1: Starting x coordinate y1: Starting y coordinate x2: Ending x coordinate y2: Ending y coordinate color: Hex color code (default: "#000000") thickness: Line thickness in pixels (default: 1) |
| draw_rectangleB | Draw a rectangle on the canvas. Args: filename: Name of the Aseprite file to modify x: Top-left x coordinate y: Top-left y coordinate width: Width of the rectangle in pixels (must be > 0) height: Height of the rectangle in pixels (must be > 0) color: Hex color code (default: "#000000") fill: Whether to fill the rectangle (default: False) |
| fill_areaB | Fill an area with color using the paint bucket tool. Args: filename: Name of the Aseprite file to modify x: X coordinate to fill from y: Y coordinate to fill from color: Hex color code (default: "#000000") |
| draw_circleB | Draw a circle on the canvas. Args: filename: Name of the Aseprite file to modify center_x: X coordinate of circle center center_y: Y coordinate of circle center radius: Radius of the circle in pixels color: Hex color code (default: "#000000") fill: Whether to fill the circle (default: False) |
| draw_pixels_atC | Draw pixels on a specific layer/frame. Args: filename: Name of the Aseprite file to modify layer_name: Layer name to target frame_index: Frame index starting at 1 pixels: List of pixel data with x/y/color create_if_missing: Create cel if it does not exist |
| draw_line_atC | Draw a line on a specific layer/frame. |
| draw_rectangle_atC | Draw a rectangle on a specific layer/frame. |
| draw_circle_atC | Draw a circle on a specific layer/frame. |
| fill_area_atC | Fill an area on a specific layer/frame. |
| draw_polygonC | Draw a polygon on a specific layer/frame. |
| draw_pathC | Draw a path using a polyline on a specific layer/frame. |
| apply_gradient_rectC | Apply a linear gradient fill to a rectangle. |
| export_spriteB | Export the Aseprite file to another format. Args: filename: Name of the Aseprite file to export output_filename: Name of the output file format: Output format (default: "png", can be "png", "gif", "jpg", etc.) |
| copy_spriteA | Copy a sprite to a new Aseprite file. Args: filename: Name of the Aseprite file to copy output_filename: Name of the output .aseprite file overwrite: Whether to overwrite if output exists |
| add_framesB | Add multiple frames to a sprite and optionally set their duration. Args: filename: Name of the Aseprite file to modify count: Number of frames to add duration_ms: Optional duration for each new frame in milliseconds |
| set_frame_duration_allB | Set the duration of all frames in milliseconds. Args: filename: Name of the Aseprite file to modify duration_ms: Duration in milliseconds |
| set_layer_visibilityB | Set layer visibility by name. Args: filename: Name of the Aseprite file to modify layer_name: Layer name to target visible: Whether the layer should be visible |
| set_layer_opacityB | Set layer opacity by name (0-255). Args: filename: Name of the Aseprite file to modify layer_name: Layer name to target opacity: Opacity value 0-255 |
| get_sprite_infoB | Return sprite info as JSON string (size, frame count, layers). Args: filename: Name of the Aseprite file to inspect |
| duplicate_frame_rangeA | Duplicate a frame range and append copies to the end. Args: filename: Name of the Aseprite file to modify start_frame: Starting frame index (1-based) end_frame: Ending frame index (1-based, inclusive) times: Number of times to append the range (default: 1) |
| set_cel_positionA | Set a cel's position in a specific layer and frame. Args: filename: Name of the Aseprite file to modify layer_name: Layer name to target frame_index: Frame index starting at 1 x: X position in pixels y: Y position in pixels create_if_missing: Create the cel if it does not exist source_frame_index: Optional frame to copy the cel image from |
| tween_cel_positionsA | Tween cel positions linearly across a frame range. Args: filename: Name of the Aseprite file to modify layer_name: Layer name to target start_frame: Starting frame index (1-based) end_frame: Ending frame index (1-based, inclusive) start_x: Starting X position in pixels start_y: Starting Y position in pixels end_x: Ending X position in pixels end_y: Ending Y position in pixels create_missing_cels: Create missing cels during tween source_frame_index: Optional frame to copy the cel image from |
| offset_cel_positionsA | Offset cel positions by a delta across a frame range. Args: filename: Name of the Aseprite file to modify layer_name: Layer name to target start_frame: Starting frame index (1-based) end_frame: Ending frame index (1-based, inclusive) dx: X delta in pixels dy: Y delta in pixels |
| create_celB | Create an empty cel on a layer/frame. Args: filename: Name of the Aseprite file to modify layer_name: Layer name to target frame_index: Frame index starting at 1 x: X position in pixels y: Y position in pixels |
| clear_celC | Delete a cel on a layer/frame. |
| copy_celC | Copy a cel from one frame to another. |
| copy_frameB | Copy all cels from a source frame to a target frame (or append). |
| propagate_frame_to_rangeB | Copy all layers from a source frame to a range of frames. Args: filename: Name of the Aseprite file to modify source_frame: Frame index to copy from (1-based) start_frame: Start frame index (1-based) end_frame: End frame index (1-based, inclusive) overwrite: Whether to overwrite existing cels (default: True) |
| set_tagC | Create or update an animation tag on the sprite. |
| set_onion_skinC | Configure onion skin settings for Aseprite. |
| propagate_celsA | Copy cels from a source frame to a range of frames for specific layers. Args: filename: Name of the Aseprite file to modify layer_names: List of layer names to copy source_frame: Frame index to copy from (1-based) start_frame: Start frame index (1-based) end_frame: End frame index (1-based, inclusive) replace: Whether to overwrite existing cels (default: True) |
| tween_cel_positions_easedC | Tween cel positions with easing across a frame range. |
| oscillate_cel_positionsC | Oscillate cel positions across a frame range using a sine wave. |
| tween_cel_opacity_easedC | Tween cel opacity with easing across a frame range. |
| tween_cel_scale_easedC | Tween cel scale with easing across a frame range. |
| start_preview_serverC | Start a simple HTTP server to preview exported sprites. Args: directory: Directory to serve port: Port to bind (default 8000) |
| stop_preview_serverA | Stop the preview HTTP server for a given port. Args: port: Port to stop (default 8000) |
| get_paletteC | Get the active sprite palette as a JSON array of hex colors. |
| set_paletteC | Set the active sprite palette using a list of hex colors. |
| remap_colors_in_cel_rangeC | Remap colors in a layer across a frame range using explicit mappings. |
| copy_layers_between_spritesA | Copy layers by name from a source sprite to a target sprite. Args: source_filename: Source .aseprite file target_filename: Target .aseprite file layer_names: List of layer names to copy replace: Overwrite existing cels in target layers create_missing_frames: Add frames to target if needed |
| animation_workflow_guideC | Return a concise English guide for optimized animation workflows. |
| ensure_layers_presentC | Ensure cels exist for layers across a frame range. |
| validate_sceneC | Validate presence of layers and cels across a frame range. Returns JSON with missing layers and missing cels. |
| audit_animationB | Audit animation frames for overlaps and out-of-range layer activity. overlap_pairs format: ["layerA,layerB", "layerC:layerD"] layer_frame_ranges format: ["layer:1-8,17-24", "clouds:1-12"] Returns JSON for AI consumption (summary, overlaps, out_of_range, optional cels). |
| animation_sanitizeC | Normalize animation consistency and optionally apply fixes. layer_frame_ranges format: ["layer:1-8,17-24", "clouds:1-12"] out_of_range_action: "set_opacity_zero", "delete_cels", "none" ignore_full_canvas_overlaps: skip overlap checks when a cel is full canvas Returns JSON for AI consumption (summary, layer_stats, alerts, overlaps). |
| get_pixel_colorB | Read the RGBA color of a single pixel. Args: filename: Aseprite file to read x: X coordinate y: Y coordinate layer_name: Layer to read from (uses active layer when empty) frame_index: Frame index starting at 1 |
| get_pixels_rectA | Read all pixel colors in a rectangular region. Args: filename: Aseprite file to read x: Top-left x coordinate y: Top-left y coordinate width: Width of the region height: Height of the region layer_name: Layer to read from (uses active layer when empty) frame_index: Frame index starting at 1 Returns: JSON array of {x, y, hex, r, g, b, a} objects |
| flip_layerB | Flip a layer's image horizontally or vertically. Args: filename: Aseprite file to modify layer_name: Layer name to flip frame_index: Frame index starting at 1 direction: "horizontal" or "vertical" |
| rotate_layerA | Rotate a layer's image 90, 180, or 270 degrees clockwise. Args: filename: Aseprite file to modify layer_name: Layer name to rotate frame_index: Frame index starting at 1 angle: Rotation angle: 90, 180, or 270 (clockwise) |
| resize_canvasB | Scale the canvas and all its content to new dimensions. Args: filename: Aseprite file to modify width: New canvas width in pixels height: New canvas height in pixels |
| crop_canvasA | Crop the canvas to the given rectangle, discarding content outside it. Args: filename: Aseprite file to modify x: Left edge of the crop area y: Top edge of the crop area width: Width of the crop area height: Height of the crop area |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/diivi/aseprite-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server