by diivi
MCP server for interacting with the Aseprite API
# Add to your Claude Code skills
git clone https://github.com/diivi/aseprite-mcpGuides for using mcp servers skills like aseprite-mcp.
Last scanned: 10/22/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-10-22T09:11:10.194Z",
"npmAuditRan": true,
"pipAuditRan": false,
"promptInjectionRan": true
}See how aseprite-mcp compares with popular alternatives.
aseprite-mcp is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by diivi. MCP server for interacting with the Aseprite API. It has 746 GitHub stars.
Yes. aseprite-mcp passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/diivi/aseprite-mcp" and add it to your Claude Code skills directory (see the Installation section above).
aseprite-mcp is primarily written in Python. It is open-source under diivi on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh aseprite-mcp against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
30 days in the Featured rail · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
A Python MCP server that gives AI assistants full control over Aseprite for creating pixel art and animated sprites.
123 tools across 18 categories — canvas, drawing, layers, animation, palettes, effects, slices, tilemaps, exports, visual-feedback/analysis tools, and a raw Lua escape hatch. The tool set is designed so an LLM has everything it needs to produce good pixel art, not just primitives: shading ramps with hue shifting, ordered dithering, outlines, retro palette presets with quantization, onion-skin renders, and frame diffing, bounds and lint checks for animation work.
The Fable 5 tasks recreate the benchmark from Draw Me a Swordsman by Lj Miranda, whose findings inspired this server's expanded toolset.
Aseprite Live – Watch an AI agent draw pixel art in Aseprite, live, in your browser
| Category | Tools | Description |
|---|---|---|
| Canvas | 7 | Create sprites, manage layers/frames, set the active state |
| Drawing | 16 | Pixels, text rows, lines, rectangles, circles, ellipses, polygons, paths, fills, gradients, isometric boxes |
| Text | 3 | Draw and measure text with bitmap sprite-sheet or TrueType fonts |
| Layers | 7 | Delete, rename, duplicate, reorder, blend modes, merge, flatten |
| Selection & Regions | 4 | Move, copy, and erase rectangular regions or colors |
| Effects | 12 | Outlines, color replacement, HSL adjustment, ordered dithering, native Aseprite filters |
| Animation | 24 | Frames, cels, tags, tweening with easing, propagation |
| Palette | 8 | Get/set palettes, retro presets, color ramps, quantization, color modes |
| Transform | 4 | Flip, rotate, resize, crop |
| Slices | 5 | Named regions, 9-patch centers, pivot points |
| Tilemap | 5 | Tilemap layers, tileset editing, tile placement |
| Export & Import | 8 | PNG, GIF, sprite sheets, per-layer/per-tag export, previews on a background, image import |
| Inspection | 6 | Read pixels (one layer, the visible composite, or as text rows) and sprite metadata |
| Analysis & Visual Feedback | 6 | Sprite previews the model can see, onion-skin renders, frame diffing, bounds, lint, color statistics |
| Quality | 4 | Validate and sanitize animation consistency |
| Scene | 1 | Copy layers between sprite files |
| Preview & Guide | 3 | Local HTTP preview server, workflow guide |
| Scripting | 1 | Raw Lua escape hatch for anything not covered above |
| Tool | Description |
|---|---|
create_canvas |
Create a new sprite with the given dimensions |
add_layer |
Add a new layer, optionally inside a named group |
add_group |
Add a new (optionally nested) group layer |
add_frame |
Append a new frame |
set_frame |
Set the active frame |
set_frame_duration |
Set one frame's duration in ms |
set_layer |
Set the active layer (optionally creating it) |
All _at variants target a specific layer/frame and can create the cel on demand. Coordinates are sprite-global.
draw_rows(filename="mug.aseprite", layer_name="mug", frame_index=1, x=4, y=2,
rows=[".WWWW..",
".WWWWKK",
".WWWW.K",
"..WW.K."],
legend={"W": "#F4F4F4", "K": "#8B5A2B"}, outline="#1A1C2C")
. (or any character missing from the legend) leaves a pixel untouched; read_rows returns pixels in the same format, so an edit is read, change a few characters, draw again.
| Tool | Description |
|---|---|
draw_pixels |
Plot individual pixels with per-pixel colors |
draw_pixels_at |
Plot pixels on a specific layer/frame |
draw_line / draw_line_at |
Lines with thickness |
draw_rectangle / draw_rectangle_at |
Outlined or filled rectangles |
draw_circle / draw_circle_at |
Outlined or filled circles |
draw_ellipse_at |
Outlined or filled ellipses with separate x/y radii |
draw_polygon |
Outlined or filled polygons from a point list |
draw_path |
Polyline through a point list with thickness |
fill_area / fill_area_at |
Paint-bucket flood fill |
apply_gradient_rect |
Smooth linear gradient fill in a rectangle |
draw_rows |
Pixels as rows of characters plus a colour legend, like ASCII art, with an optional 1px outline — the compact way to place hand-chosen detail (faces, hands, animals, handles) |
draw_iso_box |
Solid 2:1 isometric box with clean 2-1 edges and a colour per face, for furniture and props |
Aseprite's Lua API has no text drawing, so glyphs are rasterised on the server and composited into the sprite. Two font backends are supported: bitmap sprite-sheet fonts (the right choice for pixel art — glyphs are already pixels and size scales them by whole numbers) and TrueType .ttf/.otf files, rendered without antialiasing unless you ask for it.
Fonts are discovered in ~/.aseprite-mcp/fonts: a bitmap font is a directory containing font.json plus its sheet PNGs; a TrueType font is just the font file. Installed system fonts are listed too. font also accepts a direct path.
| Tool | Description |
|---|---|
list_text_fonts |
List the bitmap and TrueType fonts available to draw_text |
measure_text |
Width, height, advance and baseline extents — size a panel or centre a label without redrawing to find out |
draw_text |
Draw text with anchors, faux bold, outline, drop shadow and letter spacing |
Call measure_text first when the layout depends on the text: it returns the same metrics draw_text will use, so a label can be centred or a plate sized in one pass.
measure_text(text="MODERATOR", font="minecraft", size=2, bold=1)
-> width=115 height=15 advance_width=117 above_baseline=14 below_baseline=1 left_bearing=0
draw_text(filename="badge.aseprite", text="MODERATOR", x=64, y=17,
font="minecraft", size=2, anchor="baseline", bold=1,
color="#FFFFFF", shadow_color="#14237A")
Anchors are topleft/top/topright, left/center/right, bottomleft/bottom/bottomright, plus baselineleft/baseline/baselineright for pinning several labels to one baseline. Outline and shadow grow the stamp but never move the glyphs.
{
"name": "my-font",
"letter_gap": 1,
"space_width": 3,
"sheets": [{
"file": "sheet.png",
"cell_w": 8, "cell_h": 8,
"ascent": 7,
"chars": [" !\"#$%&'()*+,-./", "0123456789:;<=>?"]
}],
"overrides": {
"86": {"ascent": 7, "rows": ["#...#", "#...#", ".#.#.", "..#.."]}
}
}
Each sheet carries its own ascent, so sheets with different cell sizes still share a baseline — that is how a compact ASCII sheet and a taller accented sheet combine into one run. origin shifts the cell grid when the sheet has a margin, ink_rule: "dark" reads sheets that use an opaque white background to delimit variable-width glyph boxes, and advance: "box" takes the advance from the box rather than the ink. overrides replaces individual glyphs with hand-drawn rows,