aseprite-ai-artist
Allows AI agents to draw and edit pixel art directly in an open Aseprite document, including creating and modifying sprites, layers, frames, tags, and cels, with tools for pixel-level drawing, selection, recoloring, and validation.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aseprite-ai-artistDraw me a 32x32 knight with a 4-frame idle animation."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Aseprite AI Artist
Let a coding agent draw pixel art in your open Aseprite window — not in a copy, not on disk, in the document you are looking at.
One MCP server, one Aseprite extension, and a pixel-art rulebook the agent actually has to follow. Works with Claude Code, Codex CLI, Gemini CLI, Cursor, VS Code and Windsurf from the same one-line config.
npx @with-pebbly/aseprite-ai-artist install --all --agents
npx @with-pebbly/aseprite-ai-artist install-extension
# restart Aseprite, restart your agentRequires Aseprite 1.3+ and Node 20.10+.
What it does
"Draw me a 32×32 knight in the PICO-8 palette, then a 4-frame idle."
The agent inspects the document, picks a palette, blocks in a silhouette, looks at what it drew, shades with proper hue shifting, rigs the character onto layers, animates, tags the cycle, validates, and tells you what it compromised on. In your window, undoable, one Ctrl+Z per edit.
Related MCP server: aseprite_mcp
What makes it different
It works everywhere, not just in Claude Code. Most Aseprite MCP projects put
their craft knowledge in a Claude Code plugin. Codex, Gemini and Cursor then get
raw tools and none of the discipline — which is most of what separates a sprite
from coloured noise. Here the rules and workflows are served over MCP as
rules:// and skill:// resources and as MCP prompts, so every client gets
them from one source of truth.
Eighteen tools, not ninety. Every tool schema sits in the model's context on
every turn, whether or not you are drawing. Grouping by noun with an op enum,
plus batch arrays, covers the same ground at roughly a sixth of the cost — and
makes batching the default, so one draw call is one undo step for you.
One config line on every OS. No compiled binary, no per-platform path, no
native dependencies. npx and go.
It has to look at its own work. look gives the agent an upscaled preview,
an exact one-glyph-per-pixel text grid, a filmstrip of every animation frame,
and a pixel-level diff between frames. validate then checks the sprite
mechanically before anything gets called finished.
It cannot quietly wreck your file. When Aseprite is not attached, every tool
refuses immediately with doNotFallBackToDisk rather than timing out — because
an agent that "recovers" by editing the .aseprite file makes changes you never
see and your next save overwrites.
There is a whole page on the other projects in this space, what was taken from them, and where they are still better.
Install
See docs/INSTALL.md for per-client detail and troubleshooting.
Claude Code
The plugin brings the /pixel-* skills, the specialist subagents and the hooks,
not just the tools:
/plugin marketplace add with-pebbly/aseprite-ai-artist
/plugin install aseprite-ai-artistEverything else
npx @with-pebbly/aseprite-ai-artist install codex # ~/.codex/config.toml
npx @with-pebbly/aseprite-ai-artist install gemini # ~/.gemini/settings.json
npx @with-pebbly/aseprite-ai-artist install cursor # ~/.cursor/mcp.json
npx @with-pebbly/aseprite-ai-artist install --all # all of the aboveExisting config is backed up first. --dry-run shows the change without making
it. --project writes into the repository instead of your home directory.
Check it
npx @with-pebbly/aseprite-ai-artist doctorThe tools
Eighteen, grouped by noun. Full reference in docs/TOOLS.md.
Session |
|
Looking |
|
Drawing |
|
Structure |
|
Colour & quality |
|
Assets |
|
Plus run_lua as an escape hatch, off by default.
The skills
Workflows the agent follows, served to every client:
pixel-brief · pixel-new · pixel-palette · pixel-draw · pixel-shade ·
pixel-rig · pixel-animate · pixel-tileset · pixel-review · pixel-fix ·
pixel-export
And in Claude Code, four specialist subagents: pixel-critic (visual QA), palette-smith (colour), rig-builder (layer rigs), animation-director (cycle planning).
The rules
The craft is encoded in rules/ and served as rules:// resources —
palette discipline, hue-shifted shading, silhouette and proportion, outlines and
edges, animation timing, layer rigging, and a review checklist. Skills reference
rules rather than restating them, so a rule has exactly one place to be wrong.
The mechanical parts are enforced by the tools themselves: draw and recolor
snap to the palette by perceptual distance and report every colour they moved,
so an agent that never reads a word of the rulebook still cannot casually widen
your palette.
How it works
your agent ──stdio/MCP──▶ server ──ws:9932──▶ bridge ──ws:9931──▶ AsepriteAseprite's Lua WebSocket is a client only, so the bridge holds the listening socket. It runs as its own singleton process so that restarting the MCP server — which agent hosts do freely — does not drop your Aseprite connection, and so a second agent window can attach without stealing the first one's replies.
Details in docs/ARCHITECTURE.md and the ADRs.
Development
npm install
npm run build
npm test # TypeScript: colour, render, bridge, MCP surface
npm run test:extension # Lua handlers, headless, against a real spriteThe Lua tests run the real command handlers inside aseprite -b against a real
sprite — the only way to prove that side works without a human clicking.
Security
The bridge binds 127.0.0.1 only, on both ports. There is no remote surface and
no authentication because there is nothing remote to authenticate. run_lua is
arbitrary code execution inside the app holding your unsaved work, and is off
unless you turn it on.
Licence
MIT. See LICENSE.
Aseprite is a trademark of Igara Studio S.A. This project is not affiliated with or endorsed by them.
Available Tools
18 toolscelCelsADestructive
Manage cels — one layer's image on one frame. Ops: 'list', 'create', 'clear', 'delete', 'move', 'copy', 'link', 'unlink', 'set' (position/opacity). 'move' is how you shift a whole limb between frames without redrawing it; 'link' shares one image across frames so a static part of a cycle stays in sync.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Cel origin, for 'set' and 'move'. | |
| y | No | ||
| dx | No | Relative move. | |
| dy | No | ||
| op | Yes | ||
| frame | No | 1-based frame number. Omit to use the active frame. | |
| layer | No | Layer name. Omit to use the active layer. | |
| frames | No | For 'link' across a range. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| opacity | No | ||
| toFrame | No | ||
| toLayer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| cels | No | |
| sprite | Yes | |
| applied | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false; the description builds on that by explaining the state effects of 'move' and 'link' and clarifying that 'set' modifies position/opacity. No contradiction with the annotations; the added semantics go beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the definition and op list come first, then focused detail on the non-obvious move and link operations. No filler, no repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-op, 12-parameter tool, the description covers the core concept and the most confusing workflows, while an output schema exists so return values need no explanation. Minor ambiguity remains around 'clear' vs 'delete' and 'copy', but the essential guidance is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is approximately 50%, so the description is expected to help clarify undocumented parameters. It adds op-level context (position/opacity for 'set', frames for 'link', between-frames movement for 'move'), but leaves dx/dy, toFrame/toLayer, and the parameter implications of 'clear'/'delete'/'copy' implied rather than stated. Adequate, not thorough.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and a defined resource ('Manage cels — one layer's image on one frame') and enumerates the full operation set. The definition clearly distinguishes cels from sibling tools like layer or frame, and the move/ink examples clarify what the resource represents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete when-to-use guidance for the two least obvious operations: 'move' for shifting a limb between frames without redrawing, and 'link' for sharing an image across frames to keep a static part in sync. It doesn't name excluded sibling tools explicitly, but the scenarios give an agent enough context to select the right cel operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drawDrawA
Apply a batch of drawing operations to one cel, as a single undoable action. Ops: pixels, line, polyline, rect, ellipse, fill, replace, dither, gradient, clear, blit. Batch aggressively — a whole sprite in one call is normal and correct, and it means the user can undo your work with one Ctrl+Z. Set paletteLock (default true) to snap every colour to the sprite's palette by perceptual distance before anything is written, so you cannot silently widen a curated palette. Ops run in array order, so paint fills before outlines and outlines before highlights.
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | Applied in order, in one transaction. | |
| frame | No | 1-based frame number. Omit to use the active frame. | |
| label | No | Name shown in Aseprite's undo history. Describe the intent, e.g. 'shade helmet'. | |
| layer | No | Layer name. Omit to use the active layer. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| createCel | No | Create the cel if the target layer/frame has none. | |
| paletteLock | No | Snap every colour to the nearest palette entry (CIELAB ΔE). Set false only when the user asked to introduce new colours. | |
| selectionOnly | No | Clip every op to the current selection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| frame | Yes | |
| layer | Yes | |
| bounds | No | Bounding box actually touched. |
| sprite | Yes | |
| opsApplied | Yes | |
| colorsSnapped | Yes | Colours palette-lock moved, and how far. A large ΔE means the palette lacks that colour. |
| pixelsChanged | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior beyond the annotations: operations are applied as a single undoable action, paletteLock snaps colors perceptually before writes, ops run in array order, and the tool cannot silently widen the palette. This gives an agent a clear model of side effects and sequencing, especially useful since the annotations are all false and uninformative.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences: first states what it does, second gives the critical batching/undo guidance, third covers ordering and palette safety. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 11 op types and 8 parameters, the description covers the essential behavioral model: batching, undo, paletteLock, and execution order. The rich input schema and output schema cover parameter details and return values, so the remaining gaps (e.g., selection-only clipping, createCel behavior) are adequately handled by schema descriptions rather than requiring narrative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description reinforces paletteLock semantics and op ordering, but these are also present in the schema ('Applied in order, in one transaction', 'Snap every colour to the nearest palette entry'). It adds little genuinely new meaning beyond the structured schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Apply a batch of drawing operations to one cel'. The list of supported ops (pixels, line, rect, fill, etc.) makes the tool's scope unmistakable and clearly distinguishes it from sibling tools like frame, layer, or transform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage direction: batch aggressively, treat one whole sprite as a normal call, and rely on the single-undo behavior. It also explains when paletteLock should be kept at its default. It does not explicitly name alternative tools for non-drawing actions, but the operational guidance for how to use the tool is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exportExportADestructive
Write game-ready files. Ops: 'png' (single frame), 'gif' (animation), 'spritesheet' (packed sheet plus a JSON atlas with per-frame and per-tag data), 'frames' (numbered PNGs), 'aseprite' (save a copy of the source). Spritesheet is what an engine actually consumes: pass sheetType and byTag to control layout. Exporting does not save the working document — use sprite_manage op 'save' for that.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| path | Yes | Output file path. For 'frames', a pattern like 'walk_{frame}.png'. | |
| tags | No | Export only these tags. | |
| trim | No | Trim transparent margins; the atlas keeps the original offsets. | |
| byTag | No | Split the sheet by animation tag. | |
| frame | No | 1-based frame number. Omit to use the active frame. | |
| scale | No | Integer upscale, nearest-neighbour. | |
| layers | No | Export only these layers. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| padding | No | Pixels between frames; prevents bleed at non-integer zoom. | |
| sheetType | No | Spritesheet layout. | horizontal |
| includeJson | No | Write a sibling JSON atlas for 'spritesheet'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| atlas | No | |
| files | Yes | |
| frame | No | Which frame a single-frame export wrote. Defaults to the active frame, which is not always the one you drew on. |
| width | No | |
| height | No | |
| sprite | Yes | |
| frameCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructive/read/write, so description doesn't need to repeat safety; it adds the critical side-effect boundary: exporting writes files but does not save the working document, and aseprite saves a copy. It also reveals atlas output content (per-frame and per-tag data), which annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler; first sentence carries the core action and op menu, second covers the key layout guidance and the save distinction. Front-loaded and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters and a schema with 92% coverage plus an output schema, the description need only supply orientation and decision criteria, which it does. The only omitted details (paraminterplay around layers/tags/trim) are already in the property descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 92% schema description coverage, baseline iss met; description adds a layer beyond schema by explaining what each op produces and directing the agent to sheetType and byTag for layout control. This helps select among enum values without reopening the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb+resource ('Write game-ready files') and enumerates each op with its output type, distinguishing export from document-saving. It also identifies spritesheet as the engine-consumable format, making the tool's purpose concrete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States a clear use case for spritesheet ('what an engine actually consumes') and explicitly names the alternative for a different need ('use sprite_manage op save for that'). The when-not boundary (exporting does not save) is explicit, so an agent can route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frameFramesBDestructive
Manage animation frames. Ops: 'list', 'add', 'duplicate', 'delete', 'set_duration', 'activate', 'reorder'. Durations are milliseconds per frame and carry most of the life in a cycle — hold a contact pose longer than a pass pose. Use count to add several at once and durations to set a whole cycle's timing in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| count | No | ||
| frame | No | 1-based frame number. Omit to use the active frame. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| toIndex | No | For 'reorder'. | |
| linkCels | No | For 'duplicate': share the cel image instead of copying it, so edits apply to both. | |
| durations | No | Per-frame durations from frame 1, for 'set_duration'. | |
| afterFrame | No | Insert position. Default: at the end. | |
| durationMs | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| frames | No | |
| sprite | Yes | |
| frameCount | Yes | |
| activeFrame | No | |
| totalDurationMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior, and the description adds useful context about durations being milliseconds and about using count for bulk addition. However, it does not disclose side effects such as index shifting after deletion or reorder behavior, relying partially on the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose. The extra guidance on durations and count is useful and earns its place, though the contact-pose analogy is slightly stylistic rather than essential.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-operation tool with nine parameters, the description gives useful tips but does not map operations to their relevant parameters. An agent may still need to infer which parameters apply to each op, though the schema and output schema help fill some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage, the description adds meaning for count and durations, which are otherwise under-documented. It does not fully compensate for all undocumented parameters like durationMs, but it provides valuable context for the most nuanced timing-related parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as managing animation frames and lists the supported operations. It is specific enough to distinguish from siblings like layer or cel, but it does not explicitly differentiate itself from those sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for frame-related operations and offers practical tips for count and durations. However, it does not explicitly state when to prefer this tool over siblings, nor does it provide exclusions or conditions for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
layerLayersADestructive
Manage layers. Ops: 'list', 'create', 'rename', 'delete', 'reorder', 'set' (visibility/opacity/blend/lock), 'group', 'ungroup', 'merge', 'duplicate', 'activate'. Pass batch to run several in one undoable action — building a rig in one call is the normal use. A character that will be animated wants its parts on separate layers (head, torso, arm-far, arm-near, leg-far, leg-near) before any frames exist; splitting baked pixels apart later is far more work.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | Single operation. Use `batch` instead for several. | |
| name | No | ||
| batch | No | Array of operation objects, each shaped like the single-op arguments. Applied in order. | |
| index | No | Target stack position for 'reorder'; 0 is bottom. | |
| names | No | For 'merge' and bulk 'group'. | |
| parent | No | Group layer to nest under. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| newName | No | ||
| opacity | No | ||
| visible | No | ||
| editable | No | ||
| blendMode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| layers | No | |
| sprite | Yes | |
| applied | No | |
| activeLayer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply destructiveHint=true, so the description does not need to restate destructiveness. It adds valuable context that batch is undoable and that layer management must happen before animation frames, but it does not disclose what delete/merge actually destroy or how irreversible operations behave outside batch. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences: an operation list, a batch directive, and an animation best-practice warning. Each sentence earns its place and the most actionable guidance is front-loaded. The operation enumeration is long but necessary for a multi-op tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-op, 12-param tool with zero required parameters, this description is incomplete. It never states which parameters each operation needs, how a target layer is identified for rename/delete/set/activate, or how reorder/group/merge combine with index, names, and parent. An agent would still have to guess the op-parameter contract, so the tool is not fully callable from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the batch parameter and clarifies 'set' as visibility/opacity/blend/lock, plus gives a concrete layer-naming pattern. However, with schema description coverage at 50%, it fails to map operations to parameters such as name vs newName, index for reorder, or names for merge/group. The schema partially compensates, but the description does not close the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly identifies the resource ('Manage layers') and the explicit operation list ('list', 'create', 'rename', 'delete', etc.) gives a concrete boundary. It does not explicitly contrast with sibling tools such as frame or cel, so it misses the top score, but the purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context: use batch to run several operations in one undoable action, building a rig in one call is normal, and layer parts should exist before frames to avoid costly pixel splitting. It does not list exclusions or when to prefer sibling tools, but the practical guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookLook at the spriteARead-only
See what is actually on the canvas. Ops: • 'preview' — a nearest-neighbour upscaled PNG of the active frame (~1024px long edge). Use for overall read: silhouette, colour, whether it looks like the thing. • 'ascii' — an exact text grid, one glyph per pixel with a colour legend and coordinate rulers. Use to verify precise pixel positions and values, to count cells, or on any client without vision. Capped at 64×64; pass a region to crop. • 'filmstrip' — every frame composited into one image. The only reliable way to review an animation, since a vision model reads just the first frame of a GIF. • 'diff' — a pixel-level text diff between two frames: '.' unchanged, '-' erased, glyph = the new colour. Use it to confirm exactly what an edit touched. Draw, then look, then fix. Do not report a sprite finished without looking at it.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | preview | |
| frame | No | 1-based frame number. Omit to use the active frame. | |
| layer | No | Read a single layer instead of the composited image. | |
| scale | No | Integer upscale for image ops. Omitted means auto. | |
| region | No | Crop. Required for 'ascii' on sprites larger than 64×64. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| toFrame | No | Diff: the later frame. | |
| fromFrame | No | Diff: the earlier frame. |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| rows | No | |
| text | No | The grid, for 'ascii' and 'diff'. |
| scale | No | |
| width | Yes | |
| frames | No | |
| height | Yes | |
| legend | No | glyph → #rrggbb. |
| sprite | Yes | |
| columns | No | |
| totalPixels | No | |
| changedPixels | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses substantial behavioral details absent from the annotations: preview is a nearest-neighbour upscaled PNG around 1024px, ascii is capped at 64×64 and includes a colour legend and rulers, filmstrip composites every frame because vision models only read the first frame of a GIF, and diff uses specific glyphs for unchanged/erased/changed pixels. These details go far beyond the readOnlyHint and openWorldHint annotations and help the agent predict exact tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but tightly organized as a bullet list where each operation is a single line with purpose and output. The opening one-liner sets scope, the ops cover the full tool vocabulary, and the closing workflow sentence ('Draw, then look, then fix') earns its place by reinforcing when to invoke the tool. No filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 8 parameters, an output schema, and read-only annotations, the description covers the essential operational context: what each op returns, when to use each, size limits, and a recommended loop. The description is complete enough for an agent to select and invoke the tool correctly without needing supplementary documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high at 88%, so the schema already documents most parameters. The description adds significant semantic value by explaining what each op value means and how parameters like region interact with ascii's size cap. It stops short of explaining every parameter's edge case, but the combination of schema and description is strong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource ('See what is actually on the canvas') and then enumerates four concrete operations with distinct outputs: preview, ascii, filmstrip, and diff. This clearly distinguishes the tool from siblings like read_pixels and validate by scoping it to visual inspection of the sprite/canvas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Every operation is paired with an explicit use case ('Use for overall read', 'Use to verify precise pixel positions', 'The only reliable way to review an animation', 'Use it to confirm exactly what an edit touched'). The description also gives a workflow directive ('Draw, then look, then fix') and warns against reporting a sprite finished without looking, making selection criteria explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
palettePaletteA
Read and shape the sprite's palette. Ops: • 'get' — current palette with per-colour usage counts. • 'set' — write specific indices, or replace the palette wholesale. • 'preset' — load a bundled palette (pico8, gameboy, gameboy-pocket, cga, 1bit, grayscale-8). • 'load' — read a .gpl/.hex/.pal/.png palette file from disk. • 'ramp' — generate a hue-shifted ramp from a base colour and append it. Shadows rotate toward blue, highlights toward orange; a ramp that only changes brightness is the clearest tell of machine-made pixel art. • 'analyze' — report ramp structure, contrast, near-duplicate entries and colours used in the art that are not in the palette. Decide the palette before drawing. Retro-fitting one onto finished art means repainting.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| base | No | Base colour for op 'ramp'. | |
| path | No | Palette file for op 'load'. | |
| steps | No | Ramp length. | |
| colors | No | For op 'set': the colours to write. | |
| preset | No | Preset key for op 'preset'. | |
| spread | No | How far the ramp reaches into shadow and light. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| replace | No | For op 'set'/'preset': replace the whole palette instead of merging. | |
| remapArt | No | When replacing a palette, repaint existing pixels to the nearest new colour instead of leaving them off-palette. | |
| startIndex | No | For op 'set': where `colors` starts. Ignored when `replace` is true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| ramp | No | |
| size | No | |
| usage | No | |
| colors | No | |
| sprite | No | |
| analysis | No | |
| availablePresets | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the bare annotations by describing operation effects: 'set' writes or replaces, 'ramp' appends a hue-shifted ramp, and 'analyze' reports palette issues. However, it does not disclose which operations are destructive or how replacing/remapping affects existing pixels, leaving meaningful behavioral gaps for a mutation-capable tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The bulleted operation list is well organized and front-loaded, making the tool's capabilities scannable. The closing 'Decide the palette before drawing' advice is useful, though the artistic commentary about machine-made pixel art is slightly extraneous and could be trimmed without losing operational clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters, six operations, and an output schema, the description plus schema provide a complete picture. The description covers each operation's purpose, key inputs, and output highlights, while parameter details are handled by the high-coverage schema. The workflow warning also helps the agent apply the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 91% schema coverage, the schema already documents most parameters, so the baseline is 3. The description adds value by mapping operations to their relevant inputs, e.g. 'load' reads .gpl/.hex/.pal/.png files, 'preset' lists bundled palettes, and 'ramp' describes base-colour behavior. This enriches parameter understanding beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's resource and action: 'Read and shape the sprite's palette,' and enumerates six distinct operations with concrete outcomes. It does not explicitly contrast itself with nearby siblings like 'recolor', but the operation list makes the scope understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives practical workflow guidance: 'Decide the palette before drawing. Retro-fitting one onto finished art means repainting,' which tells the agent when in a workflow this tool belongs. It does not name alternative tools or explicitly say when not to use it, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preflightPreflightARead-only
Check that Aseprite is connected and report what this session can do. Call this FIRST in any pixel-art task and stop if ready is false — every editing tool writes into the user's open Aseprite window, and there is no useful fallback when that window is not there.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ready | Yes | True only when Aseprite is attached and accepting commands. |
| features | Yes | Optional capabilities this extension build supports. |
| directive | Yes | What to do next, in one sentence. |
| activeSprite | No | |
| asepriteVersion | No | |
| bridgeConnected | Yes | |
| pluginConnected | Yes | |
| extensionVersion | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: the tool returns a readiness condition (`ready`), instructs halting when false, and reveals that all editing tools depend on the open window. The readOnlyHint annotation is consistent with the check/report behavior, and no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core purpose is front-loaded, followed immediately by the critical usage directive and consequence. Every clause contributes actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter preflight tool, the description is complete: it names the operation, gives the call order, provides the failure condition, and explains the underlying dependency. An output schema exists to describe the return values, so no additional return-format detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters and 100% schema description coverage, the baseline is 4. The description does not need to explain parameters, and it fulfills the requirement by adding no irrelevant parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Check') and resource ('Aseprite is connected') and adds the reporting function ('report what this session can do'). This clearly distinguishes preflight as a connectivity/session-check tool from sibling editing tools like layer, draw, and transform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs 'Call this FIRST in any pixel-art task' and provides the stop condition ('stop if ready is false'). It also explains why this matters, that every editing tool writes into the user's open Aseprite window with no useful fallback, giving the agent a clear decision rule and rationale.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_pixelsRead pixelsARead-only
Read a rectangular region as structured data: a list of distinct colours plus a row-major index grid. Use this when you need to compute over pixels (sample a palette from art, find a silhouette edge, copy a region) rather than just look at them. For eyeballing, 'look' is cheaper.
| Name | Required | Description | Default |
|---|---|---|---|
| frame | No | 1-based frame number. Omit to use the active frame. | |
| layer | No | Layer name. Omit to use the active layer. | |
| region | No | Omit to read the whole canvas. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| composite | No | Read the flattened image. False reads only the target layer's cel. |
Output Schema
| Name | Required | Description |
|---|---|---|
| x | Yes | |
| y | Yes | |
| grid | Yes | Row-major indices into `colors`. |
| width | Yes | |
| colors | Yes | Distinct colours; index 0 is fully transparent. |
| height | Yes | |
| sprite | Yes | |
| uniqueColors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=true and openWorldHint=false, the safety profile is covered. The description adds meaningful behavior beyond annotations by specifying the exact return structure ('list of distinct colours plus a row-major index grid') and a performance/cost hint ('look is cheaper'). This gives an agent useful expectations about result shape and relative cost, going beyond the safety annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler: the first defines the operation and output, the second gives concrete use cases, the third names the cheaper alternative for visual inspection. Information is front-loaded and every sentence earns its place, making the description efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with five optional parameters, a nested region object, and an output schema, the description is fully sufficient. It covers the result format, when to use the tool, and when to prefer a sibling. The schema handles parameter details and an output schema exists, so nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents all five parameters, including defaults and fallback behavior (e.g., 'Omit to use the active frame'). The description does not add parameter-specific details, but its mention of 'row-major index grid' and 'rectangular region' clarifies the semantics of the region and output. Baseline 3 is appropriate because the schema carries the parameter-documentation burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read a rectangular region as structured data: a list of distinct colours plus a row-major index grid.' This precisely states both the operation and the output format, leaving no ambiguity about what the tool does. It also differentiates from siblings by contrasting with 'look' ('For eyeballing, look is cheaper'), making the tool's niche clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells an agent when to use this tool: 'Use this when you need to compute over pixels (sample a palette from art, find a silhouette edge, copy a region) rather than just look at them.' It then names the alternative ('look') and the condition for choosing it ('For eyeballing'), giving direct routing guidance instead of leaving it to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recolorRecolorA
Change colours in a region by intent, staying palette-legal. Ops: • 'shade' — darken or lighten with proper hue shifting (shadows cool, highlights warm). Use this instead of picking a darker hex by hand. • 'snap' — pull off-palette pixels onto the nearest palette colour by perceptual (CIELAB) distance. • 'replace' — swap one exact colour for another. • 'hue_shift' — rotate hue, e.g. to make a colour variant of a finished sprite. • 'desaturate' — drop toward grey, useful for a value check. Operates on a region's distinct colours in one pass, so a 64×64 recolour is one undo step, not four thousand.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| to | No | For 'replace'. | |
| from | No | For 'replace'. | |
| frame | No | 1-based frame number. Omit to use the active frame. | |
| layer | No | Layer name. Omit to use the active layer. | |
| amount | No | For 'shade': negative darkens, positive lightens. One ramp step is roughly 0.15. | |
| region | No | Omit to affect the whole cel. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| degrees | No | For 'hue_shift'. | |
| strength | No | For 'desaturate'. | |
| selectionOnly | No | ||
| clampToPalette | No | Snap the result back onto the palette. Turn off only when growing the palette deliberately. |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| sprite | Yes | |
| mapping | Yes | Exactly which colour became which, and how many pixels each move touched. |
| pixelsChanged | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnly=false and destructiveHint=false; the description adds meaningful behavioral nuance beyond that: it operates on distinct colours in one pass, produces a single undo step, and enforces palette legality by intent. This helps set expectations about scope and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a front-loaded summary, a compact bulleted list of operations, and a closing note on the undo-step behavior. Every sentence earns its place, and the format is easy for an agent to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with an output schema and 83% schema coverage, the description covers the behavioral essentials: the five modes, when to use them, palette constraints, region scope, and single-undo-step behavior. The schema handles parameter defaults and valid ranges, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), but the description adds semantic value beyond the schema by explaining perceptual concepts such as 'shadows cool, highlights warm', 'CIELAB distance', and 'value check'. It also clarifies that amount is a ramp step and how each op relates to the relevant parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Change colours in a region by intent, staying palette-legal.' It then enumerates five concrete operations (shade, snap, replace, hue_shift, desaturate), which clearly distinguishes this tool from siblings like draw or palette.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each operation is paired with a use case, e.g., 'shade' is recommended instead of picking a darker hex by hand, and 'desaturate' is useful for a value check. It does not explicitly name sibling tools as alternatives, but the intent-based guidance is strong enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
referenceReference imageA
Bring an external image into the sprite as a reference layer, so you can trace proportions or sample colours from it. Ops: 'import' (place an image on a locked, semi-transparent layer above the art), 'sample_palette' (read its dominant colours without importing), 'list', 'remove'. Importing at a different size uses nearest-neighbour; a photo scaled down to 32×32 is a starting point for a silhouette, never a finished sprite.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| op | Yes | ||
| fit | No | How to size the image against the canvas. | contain |
| name | No | Layer name. Default: 'reference'. | |
| path | No | Image file to read. | |
| colors | No | For 'sample_palette'. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| opacity | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| layer | No | |
| width | No | |
| height | No | |
| sprite | Yes | |
| palette | No | Dominant colours with their share of the image. |
| references | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only readOnlyHint:false and openWorldHint:false in annotations, the description carries the behavioral burden and delivers: importing places the image on a locked, semi-transparent layer above the art, size changes use nearest-neighbour resampling, and a photo scaled to 32×32 is explicitly characterized as a silhouette starting point. This discloses mutation, layer placement, transparency, and resampling behavior that annotations alone cannot convey. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly 4 sentences, purpose-first: main goal, compact op list with embedded semantics, and a single closing caveat that earns its place by preventing misuse. No fluff or repetition of the schema. The op list is dense yet scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, 4 ops, and an output schema (so return values need not be described), the description covers the ope semantics, the laryal behavior, opacity context, and a size-related quality warning. Minor gaps remain: 'remove' and 'list' behaviors are left to the reader's inference, and the relationship between opacity and the import op is only implicit. This is solid but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 56%, so the schema partially documents parameters (size, sprite have descriptions), and the description adds genuine meaning to the critical required parameter `op` by explaining what each enum value does behaviorally. It also aligns 'semi-transparent' with the opacity parameter. Other parameters like x/y are positional and self-evident with defaults, so the lack of dedicated parameter prose is acceptable, though a 5 would require systematically richer guidance for opacity and size.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource pair ('Bring an external image into the sprite as a reference layer') and gives the concrete use cases (tracing proportions, sampling colours). The four ops are each given a one-line semantic ('import' places a locked, semi-transparent layer; 'sample_palette' reads colours without importing), which clearly delineates the tool's scope from siblings like palette, layer, and read_pixels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear context for each op: import is for placing a reference layer, sample_palette is for reading dominant colours 'without importing', list and remove round out lifecycle management. It also gives a practical caveat about when an import result is acceptable (a starting point, 'never a finished sprite'). It does not explicitly name sibling alternatives or state when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
selectSelectionAIdempotent
Read or change the active selection. Ops: 'get', 'none', 'all', 'rect', 'ellipse', 'color' (select every pixel matching a colour), 'invert', 'grow', 'shrink'. A selection scopes draw, transform and recolor, which is usually cheaper and safer than masking by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| mode | No | How this selection combines with the existing one. | replace |
| rect | No | ||
| color | No | For op 'color'. | |
| frame | No | 1-based frame number. Omit to use the active frame. | |
| layer | No | Layer name. Omit to use the active layer. | |
| amount | No | Pixels, for grow/shrink. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| tolerance | No | ||
| contiguous | No | For op 'color'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| empty | Yes | |
| bounds | No | |
| sprite | Yes | |
| pixelCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the tool reads or changes the active selection and that the selection subsequently scopes drawing, transforms, and recoloring. This adds behavioral context beyond the annotations, which already flag readOnlyHint=false and idempotentHint=true. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences front-load the purpose, list all operations, and provide a cost/benefit rationale. Every phrase earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations, the description sufficiently covers the conceptual model and op variety. Minor details like how mode combines with the existing selection or how rect coordinates are specified are left to the schema, which is acceptable for a tool with rich structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already cover frame, layer, amount, sprite, color, and contiguous, and the enum values are self-explanatory. The description adds meaning only for the 'color' operation ('select every pixel matching a colour'). With schema coverage at 70%, the description provides modest additional value but does not compensate for undocumented params like rect and mode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read or change the active selection') and enumerates all nine operations. The selection resource is clearly distinct from sibling tools like layer, draw, transform, and recolor, so an agent can tell them apart without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains that a selection scopes draw, transform, and recolor, and that it is usually cheaper and safer than masking by hand. This gives clear contextual guidance for when to use the tool, though it does not explicitly name sibling alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sprite_infoSprite infoARead-only
Full structured state of a sprite: dimensions, colour mode, palette, every layer (with opacity, blend mode, visibility, group nesting), every frame with its duration, animation tags, slices and the current selection. Read this before editing — guessing at layer names or frame counts is the most common way an agent corrupts someone's file.
| Name | Required | Description | Default |
|---|---|---|---|
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| includeSlices | No | ||
| includePalette | No | Include the full palette as hex. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| tags | Yes | |
| width | Yes | |
| frames | Yes | |
| height | Yes | |
| layers | Yes | |
| slices | No | |
| palette | No | |
| filename | No | |
| colorMode | Yes | |
| selection | No | |
| frameCount | Yes | |
| activeFrame | No | |
| activeLayer | No | |
| transparentIndex | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, and the description adds useful behavioral context: reading full state before editing prevents file corruption from guesswork. No contradictions with annotations exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the essential information with no filler. The core purpose is front-loaded in the first sentence, and the second sentence provides a high-value usage warning that earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only inspection tool with an output schema, the description is complete: it enumerates what state is available, signals when to call it, and explains why it matters. Missing details like optional parameter behavior are already covered by the input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with 'sprite' and 'includePalette' already documented in the schema. The description itself adds no additional parameter-level guidance, and 'includeSlices' lacks schema documentation, but its meaning is reasonably inferable from the name and the return-state list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning the full structured state of a sprite, enumerating dimensions, color mode, palette, layers, frames, tags, slices, and selection. It is specific about the resource and content, but it does not explicitly distinguish itself from sibling tools like 'look' or 'read_pixels'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear when-to-use instruction: 'Read this before editing.' It also explains why using it beforehand matters by warning against guessing layer names or frame counts. It does not mention alternatives or when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sprite_manageManage spritesADestructive
Open, create, focus, resize, save and close sprites in the running Aseprite session. Ops: 'list' (open documents), 'new', 'open', 'activate', 'save', 'save_as', 'close', 'resize_canvas', 'set_properties'. Canvas resize keeps existing pixels — pass an anchor to say where they land.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| path | No | File path for 'open' and 'save_as'. | |
| force | No | Allow 'close' to discard unsaved changes. Ask the user before setting this. | |
| width | No | ||
| anchor | No | Where existing pixels sit after 'resize_canvas'. | center |
| height | No | ||
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| colorMode | No | For 'new'. Indexed keeps a sprite honest about its palette. | |
| pixelAspect | No | e.g. '1:1' or '1:2'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| path | No | |
| width | No | |
| height | No | |
| sprite | No | |
| sprites | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this tool can mutate state. The description adds one meaningful behavioral detail: canvas resize preserves existing pixels and uses an anchor to position them. It does not go further to explain what 'close' does to unsaved changes or that 'save' overwrites files, but the destructive annotation covers the general risk and the schema's 'force' parameter says to ask the user before discarding changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact—two sentences—and front-loads the action verb set before listing operations. The operation list is organized and scannable, and the resize note earns its place by adding targeted behavior not obvious from op names alone. There is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with nine operations and nine parameters, the description gives a solid overview but leaves meaningful gaps: it never explains what 'set_properties' changes, nor does it map which parameters belong to which operation (e.g., 'new' likely needs width/height/colorMode, while 'open' needs path). The schema's per-parameter descriptions partly fill this, and an output schema exists, but the description itself still requires the agent to infer operation-parameter pairings. This is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description does add value by defining what 'list' returns (open documents) and by explaining the anchor's role in canvas resize. The schema already documents path, force, sprite, colorMode, pixelAspect, and anchor, leaving op, width, and height unduscussed in both schema and description; however, op is self-describing via its enum and width/height are intuitive integers. Overall the description complements the schema but does not fully compensate for the minimal param guidance on op-specific required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Open, create, focus, resize, save and close sprites') and names the resource (sprites in the running Aseprite session), which gives an agent a clear subject and action set. It also enumerates all supported operations, making the tool's scope explicit and distinguishing it from sibling tools that operate on layers, frames, or cels. The title alone is generic, but the description fully specifies what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description sets a clear context—operations inside the running Aseprite session—and gives a list of operations, which implicitly tells an agent this is the sprite-management entry point. However, it does not explicitly state when to prefer this over siblings like sprite_info or layer, nor does it call out exclusions such as 'for layer-only changes use the layer tool.' The resize guidance ('keeps existing pixels — pass an anchor') is useful but is op-level instruction, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tagAnimation tagsBDestructive
Manage animation tags — the named frame ranges a game engine imports as 'idle', 'walk', 'attack'. Ops: 'list', 'create', 'update', 'delete'. Tag every cycle before export; an untagged spritesheet is a pile of frames the engine cannot address.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| to | No | Last frame, 1-based, inclusive. | |
| from | No | First frame, 1-based, inclusive. | |
| name | No | ||
| color | No | Tag colour in the timeline, #rrggbb. | |
| repeat | No | 0 means loop forever. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| newName | No | ||
| direction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| tags | Yes | |
| sprite | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false and destructiveHint=true, so the mutation profile is known. The description adds no further operational behavior such as whether update/overwrite existing tags, what delete removes, or lifecycle consequences beyond saying untagged spritesheets are unusable — which is workflow context, not tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core definition, then ops, then workflow guidance. The 'pile of frames' phrase is evocative but slightly ornamental; otherwise every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity multi-op tool (9 params, 4 operations, an output schema) and the description does not specify op-parameter contracts, e.g. what create requires vs update vs delete. The 'tag before export' guidance and annotations help, but an agent still cannot reliably decide the correct param set for each op from this definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description contributes the key model that tags are named frame ranges, giving meaning to name/from/to, and it restates the op enum. However, it does not map which parameters are valid for each operation, nor explain newName or direction; with only 56% schema coverage, that leaves meaningful gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource ('animation tags') and explains what tags are (named frame ranges imported as 'idle', 'walk', 'attack'), and it enumerates the supported operations. It is clear enough to distinguish from sibling frame/cel tools, though 'Manage' is somewhat generic and the target sprite is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear operational context: 'Tag every cycle before export', telling the agent when tags must be maintained. It does not explicitly name alternatives or say when not to use this tool, so it falls short of fully explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tilesetTilesetsA
Work with Aseprite tilemap layers. Ops: 'list', 'create_layer', 'get' (tiles as a packed image plus indices), 'stamp' (place tiles by grid coordinate), 'pack' (deduplicate a hand-painted mockup into a tileset plus a reconstructing tilemap), 'export' (Tiled .tsj, Godot .tres or JSON, with the packed PNG beside it). Requires an extension build advertising the 'tileset' feature — check preflight first.
| Name | Required | Description | Default |
|---|---|---|---|
| op | Yes | ||
| name | No | ||
| path | No | Output path for 'export' and 'get'. | |
| frame | No | 1-based frame number. Omit to use the active frame. | |
| layer | No | Layer name. Omit to use the active layer. | |
| tiles | No | For 'stamp'. x/y are tile-grid cells, not pixels. | |
| format | No | tiled | |
| layout | No | Autotile layout for 'export'. | grid |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| tileWidth | No | ||
| tolerance | No | For 'pack': treat near-identical tiles as one. | |
| tileHeight | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| files | No | |
| layer | No | |
| sprite | Yes | |
| tilesets | No | |
| tileCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With minimal annotations (readOnlyHint false, openWorldHint false), the description carries the burden and largely meets it: it discloses mutating operations (create_layer, stamp, pack, export) and reveals output side effects such as produced files (Tiled .tsj, Godot .tres, JSON, packed PNG). It does not explicitly mention file overwriting or undo implications, but the operational effects are clear enough for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences, front-loaded with the tilemap-layer scope and then enumerating operations efficiently. There is no fluff, though the packed operation list would benefit from slight structural separation for readability. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, 6-operation tool, the description gives a solid overview of available operations, outputs, and the preflight prerequisite. The presence of an output schema covers return-value expectations. It lacks a per-op parameter matrix, but the combination of op parentheticals, schema field descriptions, and preflight guidance is sufficient for initial correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is moderate at 58%, and the description adds operation-level meaning (e.g., what each op achieves) rather than parameter-level syntax. It does not elaborate on undocumented parameters such as 'name', 'tileWidth', or 'tileHeight', and per-op required-parameter combinations are left implicit. This aligns with a baseline score of 3: helpful but not comprehensive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly identifies the resource (Aseprite tilemap layers) and lists six specific operations with clarifying parentheticals: 'get' returns a packed image plus indices, 'stamp' places tiles by grid coordinate, 'pack' deduplicates a mockup, and 'export' writes Tiled/Godot/JSON formats. This scope clearly distinguishes the tool from sibling tools like 'layer' or 'export' by focusing on tilemap-specific workflows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the tool is for tilemap layers and adds a concrete prerequisite: it requires an extension build advertising the 'tileset' feature and advises checking preflight first. It does not explicitly name sibling alternatives or when-not-to-use cases, but the tilemap-layer scope provides clear contextual boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transformTransformA
Move, flip, rotate or scale pixels. Ops: 'translate', 'flip', 'rotate', 'scale', 'outline', 'crop_to_content'. Rotation is only clean at 90° multiples — arbitrary angles destroy pixel art, so anything else needs allowLossy. Scaling is nearest-neighbour and integer-only for the same reason.
| Name | Required | Description | Default |
|---|---|---|---|
| dx | No | ||
| dy | No | ||
| op | Yes | ||
| axis | No | For 'flip'. | |
| angle | No | Degrees, clockwise. For 'rotate'. | |
| color | No | Outline colour, for 'outline'. | |
| frame | No | 1-based frame number. Omit to use the active frame. | |
| layer | No | Layer name. Omit to use the active layer. | |
| scope | No | What the transform applies to. 'selection' falls back to the cel when nothing is selected. | selection |
| factor | No | For 'scale'. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| thickness | No | ||
| allowLossy | No | Permit a non-90° rotation or non-integer scale. Ask the user first. |
Output Schema
| Name | Required | Description |
|---|---|---|
| op | Yes | |
| scope | Yes | |
| bounds | No | |
| sprite | Yes | |
| pixelsChanged | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only and not destructive, so the description does not need to restate that. It adds useful behavioral context: arbitrary rotations can visually ruin pixel art, non-90° angles need allowLossy, and scaling is nearest-neighbour/integer-only. This goes beyond the structured annotations and helps the agent choose safe settings.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the behavior, the op list, and the key constraints without wasted words. The core action is front-loaded, and the caveats follow naturally. The em-dash and short clauses keep it scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with six ops, the definition could explain outline and crop_to_content more explicitly, but the schema covers most parameter meanings and an output schema exists. The description properly highlights the only genuinely dangerous behaviors (lossy rotation and scaling). The remaining gaps like thickness are minor and inferable from op name plus schema bounds.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes most parameters, including axis, angle, color, scope, factor, and allowLossy. The description adds conceptual rationale for rotation and scale constraints, but does not explain dx/dy semantics, thickness, frame, layer, or sprite. With 69% schema coverage, the description only partially compensates for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb phrase ('Move, flip, rotate or scale pixels') and enumerates all six operations by name. It names the resource ('pixels') and the operation set precisely, which clearly separates it from siblings like draw or recolor. Even without mentioning sibling tools, an agent can identify this as the geometric-transform tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives implicit usage guidance by listing operations and warning that non-90 rotation and non-integer scale require allowLossy. However, it never says when to prefer an alternative tool or when not to use this one. The limits it mentions are parameter-level constraints, not cross-tool routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validateValidateARead-only
Lint a sprite against pixel-art rules and report concrete, located problems. Checks: off-palette colours, orphan/stray pixels, broken or doubled outlines, banding, unintentional anti-aliasing on a hard-edged sprite, odd-pixel asymmetry, empty layers, untagged frames, inconsistent frame timing, and cross-frame volume drift in an animation. Run this before telling the user a sprite is finished. It answers 'is this actually done' with evidence rather than optimism.
| Name | Required | Description | Default |
|---|---|---|---|
| checks | No | Omit to run everything. | |
| sprite | No | Sprite filename or id. Omit to use the sprite Aseprite has focused. | |
| strict | No | Treat style warnings as failures. Use when the user asked for a specific discipline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| score | Yes | |
| passed | Yes | |
| sprite | Yes | |
| summary | Yes | |
| findings | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, and the description consistently describes a non-mutating lint operation. It adds meaningful behavioral detail by stating the tool reports 'concrete, located problems' and evaluates an entire checklist, including animation-level concerns, so the agent knows it will get diagnostic evidence rather than a binary pass/fail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior is stated in the first sentence, and the long checklist sentence is dense but every item maps to a real check an agent can act on. The closing guidance is memorable and earns its place by defining the tool's purpose as evidence over optimism.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only diagnostic tool with three optional parameters, the description plus a fully-covered schema and an output schema leave no major gaps: the agent knows what the tool checks, when to call it, that it is non-destructive, and that results are located reports rather than opinions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage, so the baseline is 3, but the description earns an extra point by expanding the meaning of the check names into concrete concepts (off-palette colours, stray pixels, broken outlines, banding, volume drift). This helps an agent decide which subset of checks to request, even though it does not name the parameters explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a precise verb and object: 'Lint a sprite against pixel-art rules', then enumerates the specific rule categories it checks. It clearly distinguishes itself from related siblings like preflight by framing the output as evidence-based completion assessment rather than a generic validation step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to run: 'Run this before telling the user a sprite is finished,' giving an unambiguous trigger. It does not name an alternative tool to use instead in other situations, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
18 tool updates
v0.1.0- First observed
cel - First observed
draw - First observed
export - First observed
frame - First observed
layer - First observed
look - First observed
palette - First observed
preflight - First observed
read_pixels - First observed
recolor - First observed
reference - First observed
select - First observed
sprite_info - First observed
sprite_manage - First observed
tag - First observed
tileset - First observed
transform - First observed
validate
TDQS
Each tool targets a distinct Aseprite domain (layers, frames, cels, tags, palette, drawing, inspection, export) and the op lists are detailed enough for an agent to choose correctly. Minor overlap exists — 'draw' and 'recolor' both replace colors, and 'look'/'read_pixels' are alternative inspection paths — but the descriptions disambiguate them.
Tool names are consistently lowercase and readable but follow mixed conventions: resource nouns ('ayer', 'frame', 'cel'), bare verbs ('look', 'draw', 'validate'), and snake_case compounds ('sprite_info', 'read_pixels', 'sprite_manage'). There is no single verb_noun pattern, though the module-per-domain naming is still navigable.
18 tools is a bit above the ideal 3-15 range, but each tool maps to a major Aseprite feature (sprite lifecycle, layers, frames, cels, tags, palette, export, validation, tilesets) and carries a rich set of ops. The count feels justified for the breadth rather than padded.
The surface covers the full pixel-art workflow: create/open/save files, read and modify sprite state, draw and edit pixels, manage layers/frames/cels/tags, palette work, recoloring, reference import, validation, and game-ready export. No dead-end operation remains — every edit path has a corresponding inspect or export path.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
AI game assets for agents: consistent sprites, 2D animations, tiles, maps, music and engine exports.
- AnimGenOAuthcom.animgen
Create AI animations and export transparent sprite sheets, alpha video, frames, and game assets.
Generate game assets with AI for 2D games, including sprites, tilesets, and animations.
Build a game's 2D art layer with your agent: characters, animations, tilesets, levels, 5 engines.
Related MCP Servers
- AlicenseCqualityBmaintenanceEnables AI assistants to control Aseprite for drawing and editing images through its API.59505MIT
- AlicenseAqualityCmaintenanceEnables AI sprite generation and semantic tools for Aseprite, allowing LLMs to create pixel art, add animations, and manage projects with visual feedback.61GPL 3.0
- AlicenseCqualityCmaintenanceEnables AI assistants to control Aseprite for creating pixel art and animated sprites, with 104 tools covering canvas, drawing, animation, palettes, effects, and more.100MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to visually interact with LibreSprite for real-time pixel art creation and automated drawing with self-healing capabilities.MIT
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/with-pebbly/aseprite-ai-artist'
If you have feedback or need assistance with the MCP directory API, please join our Discord server