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) |
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
| 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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