{"name":"io.github.SarutobiSasuke8/aseprite-agent-mcp","slug":"sarutobisasuke8-aseprite-agent-mcp","title":"Aseprite Agent MCP","description":"Create and verify pixel-art assets with atomic Aseprite edits and Phaser export.","url":"https://mcp.market/server/sarutobisasuke8-aseprite-agent-mcp","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"ai","tags":["ai"],"presence":{"score":18,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-10-16T21:05:56.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/SarutobiSasuke8/aseprite-agent-mcp","website":"https://pypi.org/project/aseprite-agent-mcp/","version":"0.3.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"aseprite-agent-mcp","version":"0.3.0","runtimeHint":"uvx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Path to your licensed Aseprite executable","isRequired":true,"format":"string","name":"ASEPRITE_PATH"},{"description":"Root directory for asset files","format":"string","name":"ASEPRITE_MCP_WORKSPACE"},{"description":"Tool profile, default core","format":"string","name":"ASEPRITE_MCP_TOOLS"},{"description":"Seconds to wait for a busy workspace","format":"string","name":"ASEPRITE_MCP_LOCK_WAIT"}]}],"tools":[{"name":"add_drop_shadow","description":"Add a hard drop shadow for a layer's artwork on a new layer placed beneath it.","write_action":true,"price_micros":0,"input_schema":null},{"name":"add_frame","description":"Append a new frame to the animation.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_group_layer","description":"Add a new (empty) group layer on top of the stack. Nest layers into it with add_layer(group=...) or move_layer(group=...).","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_layer","description":"Add a new (empty) normal layer on top of the stack.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_outline","description":"Add a pixel outline around the artwork on a layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_palette_color","description":"Append a colour to the end of the palette.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_reference_layer","description":"Add a dimmed, locked layer holding a reference image to trace over.","write_action":false,"price_micros":0,"input_schema":null},{"name":"add_slice","description":"Create a slice (named region) at (x, y, width, height).","write_action":true,"price_micros":0,"input_schema":null},{"name":"adjust_brightness_contrast","description":"Adjust brightness (-255..255, additive) and contrast (-255..255) of a layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"adjust_hue_saturation","description":"Shift hue (degrees) and scale saturation/lightness (percent, -100..100).","write_action":false,"price_micros":0,"input_schema":null},{"name":"apply_operations","description":"Apply edit operations atomically. See APPLY_DESCRIPTION for the op vocabulary.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ase_apply_and_preview","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"ase_export_cast_atlas","description":"Validate several character masters and export them as ONE Phaser atlas.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ase_export_phaser","description":"Validate a native master and export a Phaser bundle directory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ase_preview_animation","description":"Return a labelled contact sheet of every frame, scaled with nearest-neighbour.","write_action":false,"price_micros":0,"input_schema":null},{"name":"ase_validate_asset_contract","description":"Reopen a native master and check every frame against a contract.","write_action":false,"price_micros":0,"input_schema":null},{"name":"assemble_animation","description":"Clean 1..128 ordered PNG poses with one palette; save master, sheet and JSON.","write_action":false,"price_micros":0,"input_schema":null},{"name":"build_asset_from_spec","description":"Build the asset described by an ``aseprite_mcp.asset_spec.v1`` document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_layer","description":"Erase the target layer/frame cel to full transparency.","write_action":false,"price_micros":0,"input_schema":null},{"name":"copy_cel","description":"Copy a cel's image (and position) from one frame to another on the same layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"copy_frames_from","description":"Append frames from another sprite file, flattened onto one layer of this sprite.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_sprite","description":"Create a new sprite file and save it.","write_action":true,"price_micros":0,"input_schema":null},{"name":"crop_sprite","description":"Crop the canvas to the rectangle (x, y, width, height).","write_action":false,"price_micros":0,"input_schema":null},{"name":"delete_cel","description":"Delete a cel (the layer becomes empty at that frame).","write_action":true,"price_micros":0,"input_schema":null},{"name":"derive_mirrored_tag","description":"Create a new animation tag by mirroring an existing one (e.g. walk_left from walk_right).","write_action":true,"price_micros":0,"input_schema":null},{"name":"desaturate","description":"Desaturate toward grayscale by `amount` percent (0-100).","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_brush","description":"Stamp a custom brush shape at a list of points.","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_curve","description":"Draw a quadratic Bézier curve from (x0,y0) to (x1,y1) bending toward the control point (control_x, control_y). `steps` controls smoothness.","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_ellipse","description":"Draw an ellipse centred at (center_x, center_y) with the given radii.","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_image_base64","description":"Composite an inline base64-encoded PNG (or other image) onto a layer at (x, y).","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_line","description":"Draw a straight line from (x1,y1) to (x2,y2).","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_pixel_rows","description":"Draw a block of pixel art in one call, like a text-art bitmap.","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_pixels","description":"Plot individual pixels.","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_polyline","description":"Draw connected line segments through a list of points.","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_rectangle","description":"Draw a rectangle. filled=False draws a 1px outline, True fills it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"draw_symmetric_pixels","description":"Plot pixels together with their mirror image(s).","write_action":false,"price_micros":0,"input_schema":null},{"name":"duplicate_frame","description":"Duplicate an existing frame (1-based); the copy is inserted after it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"duplicate_layer","description":"Duplicate a layer (including its cels) as a new layer on top.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_frames","description":"Export each frame to its own image file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_gif","description":"Export the full animation as an animated GIF (honours frame durations & tags).","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_godot_spriteframes","description":"Export a sprite as a Godot 4 ``SpriteFrames`` resource (.tres) + a packed sheet.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_layer","description":"Export a single layer of one frame as a PNG (others excluded).","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_layers","description":"Export each layer to its own image file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_onion_skin","description":"Export a frame with neighbouring frames ghosted behind it (onion skin).","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_png","description":"Export one frame as a flattened PNG.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_slice_metadata","description":"Export every slice as engine-agnostic JSON (``aseprite_mcp.slice_metadata.v1``).","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_spritesheet","description":"Export frames into a single sprite-sheet image.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_tag_gif","description":"Export only the frames of a named animation tag as an animated GIF.","write_action":false,"price_micros":0,"input_schema":null},{"name":"export_tags","description":"Export each animation tag's frames to their own files.","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_palette","description":"Extract the unique colours used in a sprite (or another image).","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_area","description":"Flood fill (paint bucket): replace the contiguous region of matching colour starting at (x,y) on the target layer with `color`.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_checkerboard","description":"Fill a region with a 2-colour checkerboard of `size`-pixel squares.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_gradient","description":"Fill a region with a gradient.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_layer","description":"Fill the entire target layer/frame cel with a solid colour.","write_action":false,"price_micros":0,"input_schema":null},{"name":"flatten_sprite","description":"Flatten all layers into a single layer (in place).","write_action":false,"price_micros":0,"input_schema":null},{"name":"generate_ramp","description":"Generate a shading ramp from a base colour (dark -> light).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_cel","description":"Inspect a cel: whether it exists, its position, bounds, and opacity.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_palette","description":"Return the sprite's palette as a list of \"#RRGGBBAA\" colours.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_pixels","description":"Read the composited (all visible layers) pixel colours of a region.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_sprite_info","description":"Return structured info about a sprite: size, colour mode, frames (with durations), the full layer tree (names, opacity, blend mode, visibility), animation tags, and palette size.","write_action":false,"price_micros":0,"input_schema":null},{"name":"gui_available","description":"Check whether the Aseprite GUI can be launched (executable resolvable).","write_action":false,"price_micros":0,"input_schema":null},{"name":"health_check","description":"Run a self-test of the server and its Aseprite integration.","write_action":true,"price_micros":0,"input_schema":null},{"name":"import_generated_image","description":"Clean one PNG into a binary-alpha pixel grid, palette and editable master.","write_action":false,"price_micros":0,"input_schema":null},{"name":"import_image","description":"Create an editable .aseprite sprite from a flat image (.png/.bmp/.jpg/...).","write_action":true,"price_micros":0,"input_schema":null},{"name":"import_reference_sequence","description":"Import a sequence of images as per-frame references for rotoscoping.","write_action":false,"price_micros":0,"input_schema":null},{"name":"invert_colors","description":"Invert the RGB colours of a layer's pixels (alpha preserved).","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_slices","description":"List all slices in the sprite with their bounds, center, and pivot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_sprites","description":"List sprite/image files in the workspace directory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"load_palette","description":"Load a palette from a file (.gpl, .pal, .aseprite, .png, ...) and apply it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"main","description":"Run the curated agent server; never the unfiltered registry.","write_action":true,"price_micros":0,"input_schema":null},{"name":"merge_layer_down","description":"Merge a layer down into the layer directly beneath it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"mirror_layer","description":"Mirror one half of a layer onto the other (build symmetric artwork).","write_action":false,"price_micros":0,"input_schema":null},{"name":"move_layer","description":"Reorder a layer to a new 1-based stack index (1 = bottom-most).","write_action":false,"price_micros":0,"input_schema":null},{"name":"open_in_editor","description":"Open a sprite in the Aseprite GUI window (non-blocking) for live viewing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"plan_asset_spec","description":"Return the ordered build steps for an asset spec **without launching Aseprite**.","write_action":false,"price_micros":0,"input_schema":null},{"name":"recolor_sprite","description":"Replace colours across every layer, frame and palette entry of a sprite.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_frame","description":"Delete a frame (1-based). The sprite must have more than one frame.","write_action":true,"price_micros":0,"input_schema":null},{"name":"remove_layer","description":"Delete a layer (or group, including its children) by name or 1-based index.","write_action":true,"price_micros":0,"input_schema":null},{"name":"remove_slice","description":"Delete a slice by name.","write_action":true,"price_micros":0,"input_schema":null},{"name":"rename_layer","description":"Rename a layer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"render_preview","description":"Render a single frame to a PNG and return it as an image you can view.","write_action":false,"price_micros":0,"input_schema":null},{"name":"replace_color","description":"Replace every pixel matching `from_color` (within `tolerance` per channel) with `to_color`, on the chosen layer + frame.","write_action":false,"price_micros":0,"input_schema":null},{"name":"resize_canvas","description":"Resize the canvas WITHOUT scaling the artwork (adds or trims space).","write_action":false,"price_micros":0,"input_schema":null},{"name":"resize_palette","description":"Resize the palette to `size` entries (new entries are black).","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_sprite_as","description":"Save a copy of a sprite under a new path (optionally flattened).","write_action":false,"price_micros":0,"input_schema":null},{"name":"scale_sprite","description":"Scale the whole sprite (artwork included).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_all_frame_durations","description":"Set every frame's duration in milliseconds (uniform animation speed).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_cel_opacity","description":"Set a cel's opacity (0-255).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_cel_position","description":"Move a cel's image to position (x, y) within the canvas.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_color_mode","description":"Convert a sprite between colour modes (\"rgb\", \"indexed\", \"gray\").","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_frame_duration","description":"Set a single frame's duration in milliseconds (1-based frame).","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_layer_properties","description":"Update one or more layer properties. Only the arguments you pass are changed.","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_palette","description":"Replace the entire palette with the given list of colours.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_palette_color","description":"Set a single palette entry by index (0-based). Grows the palette if needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_slice","description":"Update an existing slice's bounds, name, colour, or data.","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_transparent_color","description":"Set which palette index is treated as transparent (indexed sprites only).","write_action":false,"price_micros":0,"input_schema":null},{"name":"sort_palette","description":"Sort the palette by \"hue\", \"luminance\" (default), \"saturation\", or \"value\".","write_action":false,"price_micros":0,"input_schema":null},{"name":"stamp_file","description":"Composite another image/sprite file onto a layer at (x, y).","write_action":false,"price_micros":0,"input_schema":null},{"name":"stamp_pattern","description":"Tile an image/sprite across a region to fill it with a repeating pattern.","write_action":false,"price_micros":0,"input_schema":null},{"name":"validate_asset_spec","description":"Validate an ``aseprite_mcp.asset_spec.v1`` document (does the *spec* make sense?).","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-10-16T21:40:26.772Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-16T21:40:26.697Z","components":{"code":{"score":25,"max":25,"notes":["57 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"aseprite-agent-mcp","version":"0.3.0","found":true,"license":"MIT","dependencyCount":2,"publishedAt":"2026-10-16T16:51:11.302490Z","repositoryUrl":"https://github.com/SarutobiSasuke8/aseprite-agent-mcp"}],"repo":{"found":true,"owner":"SarutobiSasuke8","repo":"aseprite-agent-mcp","archived":false,"pushedAt":"2026-10-16T21:05:56Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/35200840?v=4","ownerCreatedAt":"2018-01-07T19:41:23Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/35200840?v=4&s=128","source":"github"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-10-16T21:05:56.000Z","score":18}}}},"grade_history":[],"reviews":[]}