Skip to main content
Glama

aseprite-mcp

An MCP server for Aseprite, the pixel art and sprite animation editor. It exposes 73 tools that cover sprites, layers, frames, cels, drawing, selections, palettes, tags, slices, tilemaps, filters, preferences and export. Anything without a dedicated tool is still reachable through run_command, which runs any of Aseprite's 183 menu commands, and run_lua, which runs arbitrary Lua against the full scripting API.

The server can run Aseprite two ways. Batch mode starts a headless aseprite -b process for each call and works on files. Live mode talks to an Aseprite window you have open, so you watch the edits happen and can undo them.

The full parameter reference for every tool is in docs/tools.md.

Requirements

  • Node.js 20 or newer.

  • Aseprite 1.3. Development and testing used 1.3.18.6. A bought copy from Steam or the Aseprite website works, and so does a build from source.

The server looks for Aseprite in this order: the ASEPRITE_PATH environment variable, aseprite/build/bin/ inside the package folder, the default Steam and installer locations for Windows, macOS and Linux, and finally aseprite on PATH. If yours is somewhere else, set ASEPRITE_PATH to the executable. On macOS that is Aseprite.app/Contents/MacOS/aseprite, not the .app folder.

Related MCP server: aseprite-mcp

Install

There is nothing to install by hand. MCP clients start the server with npx.

For Claude Code:

claude mcp add aseprite -- npx -y aseprite-mcp

With a custom Aseprite location:

claude mcp add aseprite -e ASEPRITE_PATH="D:/Tools/Aseprite/Aseprite.exe" -- npx -y aseprite-mcp

For Claude Desktop, Cursor, VS Code and other clients that read a JSON config, add this to the mcpServers section:

{
  "mcpServers": {
    "aseprite": {
      "command": "npx",
      "args": ["-y", "aseprite-mcp"],
      "env": {
        "ASEPRITE_PATH": "C:/Program Files/Aseprite/Aseprite.exe"
      }
    }
  }
}

Leave out env if Aseprite is in one of the default locations. Ask the client to call the status tool to confirm the server found the executable.

To run from a clone instead:

git clone https://github.com/shin2344234/aseprite-mcp.git
cd aseprite-mcp && npm install && npm run build

Then point the client at node /path/to/aseprite-mcp/dist/index.js.

Batch and live mode

Every tool takes a backend parameter. The default, auto, uses live mode when an Aseprite window is connected and batch mode otherwise. Pass "live" or "batch" to force one.

In batch mode each call is a fresh Aseprite process. Tools that touch a sprite need sprite set to a file path, and tools that change it save the file when they finish. Pass save: false to leave the file alone, which is useful for a dry run. Selections, undo history and unsaved sprites do not carry over from one call to the next. Batch mode has no fonts beyond a built-in 5x7 pixel font, no event log and no dialogs.

Live mode needs the bridge extension inside Aseprite. Ask the client to call launch_aseprite, which copies the extension into Aseprite's extensions folder and opens the window. You can also call install_extension and start Aseprite yourself. The extension connects to the server over a WebSocket on 127.0.0.1:41234. Once it is connected, sprite is optional and defaults to the active sprite, and the active layer, frame and selection stay put between calls. Every change goes through Aseprite's undo history.

The first time the extension opens its socket, Aseprite's script security asks for permission. The same prompt can appear the first time a live call writes a file. Choosing "Give full trust to this script" stops it coming back. If a live call times out, an unanswered prompt like this is the usual cause.

The extension adds File > Scripts > MCP Bridge... to Aseprite, which shows the connection state and lets you change the port. It reconnects on its own when the server restarts.

Conventions

Coordinates are canvas pixels with (0, 0) at the top left. Frame numbers, layer indices, tag indices and slice indices start at 1. Palette indices start at 0, matching Aseprite.

A color can be "#rrggbb", "#rrggbbaa", a CSS-style name such as "red" or "transparent", a palette index as a number, or an object: {r,g,b,a}, {h,s,v,a}, {h,s,l,a} or {gray,a}.

A layer can be its name, a path through groups such as "Body/Arm", or the index that get_sprite_info reports.

Relative file paths resolve against ASEPRITE_MCP_WORKDIR, which defaults to the directory the client started the server in. export and save_sprite return the full list of files they wrote, because Aseprite writes numbered files for multi-frame PNG exports.

What the tools cover

The groups below match the sections of docs/tools.md.

Group

Tools

Setup and status

status, install_extension, launch_aseprite

Generic access

run_lua, run_command, list_commands, api_docs, cli

Application state

app_state, set_active, undo_redo, list_preferences, preferences, view_settings

Sprites

list_sprites, new_sprite, open_sprite, get_sprite_info, save_sprite, close_sprite, duplicate_sprite, set_sprite_properties, resize_sprite, canvas_size, crop_sprite, change_color_mode, flip_rotate

Layers

add_layer, update_layer, delete_layer, duplicate_layer, merge_layers, convert_layer

Frames

add_frames, delete_frames, set_frame_duration, move_frame

Cels

get_cels, update_cel, delete_cel, copy_cel, link_cels

Drawing and pixels

draw_pixels, get_pixels, use_tool, draw_shapes, draw_text, draw_image, clear, replace_color, apply_filter

Selection and clipboard

select, selection_edit, clipboard

Palette

get_palette, set_palette, palette_edit, save_palette

Tags, slices and properties

add_tag, update_tag, delete_tag, add_slice, update_slice, delete_slice, properties

Tilesets and tilemaps

tileset, tilemap

Rendering and export

render_preview, export, export_sprite_sheet, import_sprite_sheet

Live session

recent_events, ask_user

A few of these do more than the name suggests.

render_preview returns an upscaled PNG of the sprite that the model can look at. Transparent pixels sit on a checkerboard aligned to the sprite's pixels, frames are laid out side by side with gray gutters, and an optional grid marks each pixel.

get_pixels returns a region as character rows plus a legend that maps each character to a color. draw_pixels accepts the same format, so a model can read a sprite, change a few characters and write it back.

use_tool drives Aseprite's own tools along a list of points, the same as dragging the mouse: pencil, line, curve, rectangles, ellipses, paint bucket, spray, gradient, contour, polygon, blur, jumble, eraser and the marquee, lasso and magic wand selection tools. It takes ink, opacity, tolerance, pixel-perfect mode and custom image brushes.

draw_shapes draws rectangles, rounded rectangles, ovals, lines, polylines, polygons, cubic beziers and free paths through Aseprite's vector drawing context. Antialiasing is off unless you ask for it.

draw_text uses Aseprite's text renderer in live mode, with its bundled fonts or any installed system font. Aseprite loads fonts only when its window is open, so in batch mode the tool falls back to a built-in 5x7 font that scales by whole numbers.

palette_edit adds, inserts, removes, moves, sorts, reverses, dedupes and generates ramps. In indexed sprites it remaps every cel and tile so pixels keep their colors.

view_settings reads and changes the grid, pixel grid, symmetry, tiled mode, onion skin, overlays and checkerboard. In live mode it also covers zoom, scroll, playback, the timeline and the preview window.

recent_events reports what the person at the keyboard did since the last check: edits, undo and redo, switching sprite, layer or frame, commands run and color changes. Changes made by MCP calls are left out by default.

ask_user opens a dialog in Aseprite with text, inputs and buttons, waits for an answer and returns it. It gives up after timeoutSeconds, 300 by default, and returns timedOut: true.

list_commands lists every menu command with its parameter names and defaults, taken from Aseprite's C++ source. api_docs serves the Lua API reference from the bundled copy of aseprite/api. cli runs the Aseprite command line for things like --sheet, --split-layers and --list-tags.

Configuration

Variable

Default

Meaning

ASEPRITE_PATH

search, see Requirements

Full path to the Aseprite executable.

ASEPRITE_MCP_PORT

41234

Port the server listens on for the bridge extension. Change it in the extension's MCP Bridge dialog too.

ASEPRITE_MCP_WORKDIR

the server's working directory

Base directory for relative file paths.

ASEPRITE_MCP_BATCH_TIMEOUT_MS

120000

How long a batch call may run before the process is killed.

ASEPRITE_MCP_LIVE_TIMEOUT_MS

55000

How long a live call waits for Aseprite to answer.

ASEPRITE_USER_DIR

the platform default

Aseprite's user folder, where install_extension puts the extension.

Troubleshooting

If status reports that Aseprite was not found, set ASEPRITE_PATH. With Steam, the executable is in steamapps/common/Aseprite inside your Steam library folder.

If live calls time out, look at the Aseprite window for a script security prompt or another modal dialog. Aseprite runs scripts on its UI thread, so an open dialog blocks every call.

If status says the bridge is not connected while Aseprite is open, check that the extension is enabled under Edit > Preferences > Extensions and that its port matches ASEPRITE_MCP_PORT. Only one server process can own the port. A second server, for example from a second client window, keeps working in batch mode and retries the port every 15 seconds.

Commands that need a timeline range, such as ReverseFrames, return false in batch mode because a headless process has no timeline. link_cels needs live mode for the same reason. Unlinking works in both.

How it works

Each operation is a handler in lua/runtime.lua. The TypeScript server in src/ validates the tool arguments, resolves paths and sends the call to one of two runners.

For batch mode, src/batch.ts writes the request to a temp file and runs aseprite -b --script-param ... --script lua/runner.lua. The runner loads the runtime, dispatches the call, saves the sprites it changed and writes the response file. Calls run one at a time.

For live mode, extension/plugin.lua opens a WebSocket client inside Aseprite. On connect, the server sends the source of runtime.lua, so the extension never needs updating when handlers change. Tool calls and results travel as JSON frames over the same socket. The server pings every 5 seconds, and the extension reconnects after 15 seconds without a message.

During a live call the runtime turns off Aseprite's "format doesn't support layers", overwrite and per-format option alerts, then puts the user's settings back. It also commits any floating pixels left by a paste or a selection transform, before and after the call, so each call sees plain cel contents.

Aseprite bugs worked around

These are in Aseprite 1.3.18.6 itself.

The gradient tool crashes headless Aseprite with an access violation. It reads dithering settings from the context bar, which does not exist in batch mode. use_tool draws linear gradients in Lua in batch mode instead.

The SaveFileCopyAs command object is reused between calls in the GUI and appends fromFrame and toFrame to the previous call's frame list, so a range export writes extra frames. Those parameters are also 0-based. export takes 1-based ranges and exports a trimmed copy of the sprite.

When a WebSocket onreceive callback raises a Lua error, Aseprite stops the socket for good and never sends a close event. The bridge wraps every callback in pcall.

The app.range setters do nothing while the timeline is closed. link_cels and set_active open the timeline before setting a range.

ReselectMask refuses to run from a script, even right after a deselect. select keeps the last selection it cleared and restores that.

Development

npm install
npm run build

npm run docs regenerates docs/tools.md from the schemas the built server registers. Run it after changing any tool.

npm test calls all 73 tools through a real MCP client over stdio in batch mode and fails if any tool goes uncalled. Most calls are followed by a check of the result: pixels read back with get_pixels, layer and frame structure, palette contents and files on disk. npm run test:live does the same against a GUI instance it starts itself, and adds selection editing, cel linking, undo, events, view controls and dialogs. The batch run makes 170 checks and the live run 197. The live run checks ask_user through its timeout. Set ASK_USER=1 and click OK in Aseprite to check the button path too.

node test/call.mjs <tool> '<json args>' makes a single call, which helps when debugging a handler.

The data files under data/ come from Aseprite's source tree. With the source checked out in aseprite/:

python scripts/extract_commands.py aseprite data/api data/commands.json
python scripts/extract_prefs.py aseprite data/preferences.json

scripts/build-aseprite.bat builds Aseprite from source on Windows with the Visual Studio 2022 Build Tools, using a prebuilt Skia m124 from aseprite/skia unpacked to deps/skia. The server finds a build in aseprite/build/bin/ without any configuration.

License

The server, Lua runtime and extension are MIT licensed. See LICENSE.

The Lua API reference in data/api is a copy of aseprite/api, MIT licensed by Igara Studio and David Capello, with its license in data/api/LICENSE.txt.

Aseprite itself is not included. Its EULA does not allow redistributing the source or binaries, so you need your own copy, bought or built from source for personal use.

Available Tools

73 tools
add_framesA

Adds frames. By default copies the previous frame's cels; empty=true adds blank frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoFrame number for the first new frame (default: end)
saveNoBatch mode: write changes back to the sprite file (default true)
countNo
emptyNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
copyFromNoFrame to copy (default: the frame before 'at')
durationMsNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, correctly signaling a non-destructive mutation. The description adds genuinely useful context beyond that: the default of copying the previous frame's cels and the empty=true override. It omits save/backend behavior, but that is documented in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero filler, with the primary action front-loaded and the key behavioral default immediately following.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with annotations and no output schema, the description covers the core default behavior adequately but leaves the return value, batch-mode effects, and sibling routing unaddressed. It is minimally sufficient rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, with 'empty', 'count', and 'durationMs' lacking descriptions. The description compensates for 'empty' (blank vs copied frames) and hints at copyFrom's default, but says nothing about count or durationMs, so it only partially bridges the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

'Adds frames' states a specific verb and resource, clearly distinguishing it from delete_frames and move_frame. The added clause about cel-copying behavior further sharpens what the operation does, though it never explicitly names a sibling to route against.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage via the 'empty=true adds blank frames' distinction, which steers the agent toward the right option for blank vs cloned frames. However, it offers no explicit when-to-use guidance relative to copy_cel/link_cels or any prerequisites, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_layerB

Adds an image, group or tilemap layer, optionally inside a group or above/below another layer, with its properties set.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoPosition of 'image'
yNo
dataNoUser data text
nameNo
saveNoBatch mode: write changes back to the sprite file (default true)
typeNo
aboveNoPlace directly above this layer
belowNoPlace directly below this layer
colorNoTimeline color
frameNoFrame for 'image' (default 1)
imageNoFill the new layer (image or reference) with this image
parentNoGroup layer to move into; '' moves to the top level
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
opacityNo
visibleNo
editableNofalse locks the layer
tileSizeNoTilemap layers: tile size
blendModeNonormal, multiply, screen, overlay, darken, lighten, color_dodge, color_burn, hard_light, soft_light, difference, exclusion, hue, saturation, color, luminosity, addition, subtract, divide
collapsedNoGroup layers only
continuousNo
propertiesNoUser-defined properties to set (object.properties)
stackIndexNoPosition among siblings (1 = bottom)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, establishing a non-destructive write. The description adds that properties are set at creation time, which is useful, but omits significant behavior such as the save default (writes back to the sprite file) and backend selection between live and batch modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly packed sentence with the core action and its main modifiers front-loaded. No filler, though packing four clauses leaves some ambiguity about ordering semantics.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 23-parameter creation tool with no output schema and nested objects, the one-sentence description is thin. The important file-write semantics of save/backend and the group-parenting behavior are left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 74% across 23 parameters, so the schema carries most documentation. The description adds only the layer-type and placement vocabulary already implied by the schema; it does not clarify ambiguous params like save, backend, or properties.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (adds) and resource (layer), enumerating the creatable layer types and placement options. This clearly separates it from siblings like update_layer, delete_layer, and duplicate_layer, though it never names them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use add_layer versus alternatives (convert_layer, duplicate_layer, add_slice), nor any prerequisites or exclusions. The placement options are described as capabilities, not as selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_sliceB

Adds a slice (with optional 9-slice center and pivot), or duplicates one with copyFrom.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
pivotNoPivot relative to the slice; false removes it
boundsNo
centerNo9-slice center, relative to the slice; false removes it
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
copyFromNoSlice to duplicate
propertiesNoUser-defined properties to set (object.properties)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a mutation (readOnlyHint=false) that is not destructive (destructiveHint=false), which matches an additive 'add' operation. The description adds the duplication path via copyFrom, but says nothing about persistence/save semantics, batch vs live backend implications, or what happens to existing slices - all relevant for an 11-parameter mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the primary action front-loaded and the alternate mode appended. No filler or restatement of the tool name beyond what is needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate but thin for an 11-parameter, nested-object, no-required-parameter mutation tool with no output schema. Important operational context - save/batch behavior and what a call with no arguments does - is left entirely to the schema rather than the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 73%, so the schema already documents most parameters (save, color, pivot, center, sprite, backend, copyFrom). The description only gestures at three of them (center, pivot, copyFrom) without adding format or constraint detail beyond the schema, so it lands at the baseline rather than compensating for the uncovered parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Adds a slice') and names the two operating modes: normal add versus duplication via copyFrom. It does not explicitly differentiate itself from the sibling update_slice/delete_slice, though the verb makes the distinction largely inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this tool over update_slice or delete_slice, and no mention of prerequisites (e.g. that a slice generally needs bounds). The only routing hint is the copyFrom duplication mode, which is described as a capability rather than a when-to-use condition.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

add_tagC

Adds an animation tag over a frame range.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
dataNo
fromNo
nameNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
aniDirNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
repeatsNo0 = infinite
propertiesNoUser-defined properties to set (object.properties)

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive write. The description adds the frame-range scope of a tag, which is useful, but it omits the live-vs-batch and save behaviors that the schema hints at. With annotations carrying the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. It is appropriately sized for its content, though the brevity reflects under-specification rather than tight editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 11 params, batch/live backends, a save toggle, and no output schema, one sentence is far too thin. Key behaviors like persistence and mode selection are left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

11 parameters with only 55% schema description coverage, and the description mentions none of them. Undocumented params (from, to, name, data, aniDir) get no help from either source; only 'frame range' loosely implies from/to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Adds an animation tag') plus scope ('over a frame range'). It clearly distinguishes from delete_tag and update_tag by virtue of 'adds', though it never names or contrasts those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of the sibling tools (update_tag, delete_tag) that would help an agent choose. Usage is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

api_docsA
Read-only

Reads the Aseprite Lua API reference (bundled from github.com/aseprite/api). Without a topic, lists topics. Topics include app, sprite, layer, cel, image, color, palette, tag, slice, tileset, selection, dialog, websocket, and command/.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoe.g. 'image', 'app', 'command/ExportSpriteSheet'

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=true, a low bar for a doc reader. The description adds genuinely useful behavior beyond that: the content is bundled from github.com/aseprite/api, and omitting the topic switches the tool into a listing mode. It does not describe the shape of the returned reference text, but for a safe read-only lookup this is a solid disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The core action and the no-argument fallback are front-loaded, and the topic list is placed last where it is only needed after the agent has decided to call the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining the return. It says it 'reads the API reference' but never states the return format (prose, markdown, structured sections) or whether results are chunked. For a single-parameter, read-only doc tool the missing pieces are minor, but not fully covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, setting the baseline at 3, but the description goes beyond the schema by enumerating the full set of valid topic names and showing the command/<CommandName> pattern. That materially helps the agent construct a valid topic value rather than guessing from the schema's three examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource: 'Reads the Aseprite Lua API reference,' with the source repo named. The description also explains the no-argument behavior (lists topics), so an agent can distinguish this documentation-lookup tool from execution siblings like run_lua or run_command 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: pass a topic to read a specific section, omit it to enumerate available topics. It enumerates the topic vocabulary (app, sprite, layer, cel, image, ...) so the agent knows what it can ask for, but it never states when to prefer this over alternatives such as list_commands or use_tool, nor any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_filterA

Applies an image filter command to the active cel(s) or selection: BrightnessContrast, HueSaturation, ColorCurve, ConvolutionMatrix, Despeckle, InvertColor, Outline, ReplaceColor. Params follow list_commands (e.g. Outline {color:'#000000', place:'outside', matrix:'circle'}; HueSaturation {hue, saturation, lightness, alpha}; BrightnessContrast {brightness, contrast}).

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
filterYes
paramsNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
channelsNoe.g. 'rgba', 'rgb', 'a'

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is largely covered and the description is consistent with it. The description adds the supported-filter enumeration, which is real behavioral content, but says nothing about live-vs-batch effects, the save-writeback behavior, or whether edits are undoable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences with the core action and filter list front-loaded and the parameter examples second. Dense but no filler; a small readability cost from cramming all examples into one sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, nested-object mutation tool with no output schema, the description covers only the filter/params axis; the frame, layer, sprite, backend, and save parameters are left entirely to the schema. It is adequate to invoke the tool, but the batch-vs-live behavior and write-back semantics an agent needs for correct use go unmentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The 'params' property in the schema is an open object with no documented shape, so the description's concrete examples (Outline {color, place, matrix}; HueSaturation {hue, saturation, lightness, alpha}; BrightnessContrast {brightness, contrast}) carry information the schema cannot. It stops short of covering ColorCurve, ConvolutionMatrix, Despeckle, InvertColor, and ReplaceColor, so the gain is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Applies') and resource ('image filter command') plus the exact scope ('active cel(s) or selection'), and enumerates the eight supported filters, which makes the tool easy to identify. It does not, however, contrast itself with neighboring mutators like replace_color or draw_pixels, so sibling differentiation is left to the reader.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the agent infers this is the tool for the listed filters, and the pointer that 'Params follow list_commands' is a useful routing hint to a sibling. There is no explicit when-to-use/when-not guidance or description of prerequisites (active sprite, connected live session, etc.).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

app_stateB
Read-only

Returns Aseprite's current state: open sprites, active sprite/layer/frame, foreground/background colors, tool, brush, timeline range and editor zoom (live).

ParametersJSON Schema
NameRequiredDescriptionDefault
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the reported data is current/live ('editor zoom (live)'), hinting at the live-vs-batch distinction, but never states whether the headless batch fallback returns stale or partial state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that enumerates the return fields with no filler; the tool's purpose is knowable from the first four words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the field enumeration usefully carries the return contract, and the one optional parameter is covered by the schema. It stops short of explaining behavior differences between the live and batch backends.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'backend' enum is fully documented in the schema. The description's '(live)' mention gestures at the same live/batch choice but adds no syntax or default details beyond what the schema already gives.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Returns') and resource ('Aseprite's current state') and enumerates the exact fields returned, which effectively separates it from per-sprite readers like get_sprite_info. It does not name a sibling tool it is not, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says what is returned but never states when to reach for this tool versus status, get_sprite_info, or recent_events, nor any exclusions. Usage is only faintly implied by the read-state framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ask_userA

Live mode: shows a dialog in Aseprite and waits for the user to answer. Can show text plus input fields (entry, number, slider, check, combobox, color, label) and buttons. Returns the pressed button and field values.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNo
titleNo
fieldsNo
buttonsNoDefault ['OK', 'Cancel']
timeoutSecondsNoClose the dialog and return timedOut=true after this many seconds (default 300)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only readOnlyHint=false in annotations, the description carries most of the burden and delivers: it is blocking (waits for user), live-mode-only, and interactive. It does not explain the readOnlyHint=false side effect nor the timeout behavior, but the core behavioral traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the live-mode constraint, with no filler. Slightly list-like in the field-type enumeration but each clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does explain the return ('returns the pressed button and field values'). For a 5-param interactive tool it covers the essentials, though it omits timeout semantics and nested field detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 40%, below the 50% threshold, so the description must compensate. It lists the field types (entry, number, slider, check, combobox, color, label), mentions buttons, and states the return value, mapping meaning onto the fields/buttons params, though nested field attributes (min, max, value, decimals) remain undocumented anywhere.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: it shows a dialog in Aseprite and waits for the user to answer. It also names the interaction surface (text, input fields, buttons) and the return. No sibling tool does anything similar, so it is inherently distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The leading 'Live mode:' clause implies a mode prerequisite, giving some usage context. However, it names no alternatives, no when-not conditions, and no guidance on when to prefer this over plain scripting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

canvas_sizeB

Grows or shrinks the canvas without scaling pixels: either margins (left/top/right/bottom, negative values cut) or a new width/height with an anchor.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNo
leftNo
saveNoBatch mode: write changes back to the sprite file (default true)
rightNo
widthNo
anchorNo
bottomNo
heightNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
trimOutsideNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-destructive mutation, and the description adds useful behavioral detail that negative margin values cut pixels. It does not cover persistence (save default true), backend auto/live/batch behavior, or reversibility — though save and backend are documented in the schema, so the gap is moderate rather than severe. No contradiction with destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with zero filler, and the core behavior ('without scaling pixels') is front-loaded before the parameter modes. It could be marginally clearer about whether the two modes are mutually exclusive, but it earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool at 27% schema coverage with no output schema and no descriptive annotations, the description covers the core spatial parameters adequately but is silent on trimOutside, anchor value effects, and the live-vs-batch save implications. Adequate but with clear gaps for a tool this size.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 27%, so the description carries real weight and it does explain left/top/right/bottom direction semantics and that negatives cut, plus the width/height+anchor mode. It leaves anchor selection meaning, trimOutside, and whether the two modes can be combined unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (grows/shrinks) and resource (canvas) plus the key differentiator 'without scaling pixels', which implicitly separates it from resize_sprite. It doesn't name the sibling explicitly, but an agent can distinguish it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'either margins ... or width/height with an anchor' clause gives useful mode-selection context for the two ways to call it. However there is no explicit guidance on when to choose canvas_size over crop_sprite, resize_sprite, or trimOutside, so usage is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

change_color_modeC

Converts the sprite to RGB, grayscale or indexed, with optional dithering.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes
saveNoBatch mode: write changes back to the sprite file (default true)
rgbmapNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
toGrayNo
backendNoauto (default): live Aseprite if connected, else headless batch
ditheringNo
fitCriteriaNo
ditheringFactorNo
ditheringMatrixNoe.g. 'bayer2x2', 'bayer4x4', 'bayer8x8'

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile (a non-destructive write) is already conveyed and the description does not contradict it. The description adds the optional-dithering trait but says nothing about persistence, batch vs live execution, or what happens to the sprite data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, which is well-structured. It is arguably too terse for a 10-parameter tool, but as conciseness it works.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 10 parameters, 40% schema coverage, and no output schema, the description leaves major gaps: how modes interact with dithering/rgbmap, whether changes are saved, and the batch-vs-live distinction. It is far from complete enough to guide correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description must compensate for the many undocumented parameters (mode, rgbmap, toGray, fitCriteria, ditheringFactor, ditheringMatrix), yet it only alludes to dithering. The mode enum values are restated but no format, defaults, or interactions are explained beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (converts) and resource (sprite) plus the three target color modes, so an agent can tell it apart from siblings like replace_color or palette_edit. It stops short of naming any sibling explicitly, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternative-tool guidance at all. The agent must infer that this is for changing a sprite's color mode rather than for palette or per-pixel color edits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clearB
Destructive

Clears a layer's cel(s) to transparent (or fills with a color): whole cel, a rect, or the selected area.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast frame of a range
tagNoUse the frames of this tag
fromNoFirst frame of a range
rectNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
framesNo'all' or a list of frame numbers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
useSelectionNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, and the description aligns with that by stating cels are cleared to transparent (or overwritten with a color), which is genuinely additive detail about what is lost. It does not disclose undo/reversibility, the live-vs-batch implications, or the default save-to-file behavior, so it only modestly exceeds what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the core action and appends the fill alternative and the three scope modes without wasted words. No filler, no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, destructive, no-output-schema tool, the description covers the operation and its target granularity but omits operational context such as batch-mode/save semantics, live-vs-batch behavior, and reversibility. The rich schema compensates for the parameter gaps, but behavioral context is thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, above the 80% threshold, so the schema already documents nearly all 12 parameters thoroughly (color formats, frame ranges, tags, sprite/layer targeting, save flag). The description restates the targeting modes but adds no syntax or format meaning beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (clears) and resource (a layer's cel(s)) with the outcome spelled out: to transparent, or filled with a color. The three target scopes (whole cel, rect, selected area) further pin down what it does. It does not name or contrast with the obvious sibling delete_cel, so it stops short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description enumerates the ways the region can be targeted but gives no when-to-use guidance, prerequisites, or exclusions relative to alternatives like delete_cel, draw_pixels, or replace_color. An agent must infer selection from the parameter schema alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

cliA

Runs the Aseprite command line in batch mode (aseprite -b ) and returns its output. Useful for --sheet/--data exports, --split-layers, --list-tags, --save-as with {layer}/{frame} templates, --scale, --color-mode, etc. See https://www.aseprite.org/docs/cli/.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsYesArguments after -b, e.g. ['in.aseprite', '--scale', '4', '--save-as', 'out.png']
timeoutSecondsNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply readOnlyHint=false, so the description carries most of the burden. It discloses the batch-mode execution and that output is returned, but does not warn about the key behavioral traits of arbitrary CLI execution: arbitrary file writes from --save-as/--sheet, working-directory assumptions, or the timeoutSeconds budget. Useful context, but not the full safety picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the invocation form, followed by concrete flag examples and a canonical doc link. No sentence is padding, and the most important information comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that shells out to an external binary with no output schema and an undocumented timeout parameter, the description is adequate but thin. It says output is returned but omits where files are written, what the effective working directory is, and how timeouts manifest, all of which matter for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%: 'args' is documented in the schema with an example, while 'timeoutSeconds' is undocumented in both schema and description. The description's flag list helps an agent construct args, but adds no semantics for the timeout-bound parameter, so the baseline 3 fits.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Runs the Aseprite command line in batch mode (aseprite -b <args>) and returns its output'), which is concrete and distinguishable from wrappers like run_lua. It does not explicitly name sibling alternatives such as export_sprite_sheet or run_lua, so an agent must infer the boundary from the tool list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The list of example flags ('--sheet/--data exports, --split-layers, --list-tags, --save-as...') implies the cases where this raw-CLI escape hatch is useful. However, it never says when to prefer the dedicated siblings (export, export_sprite_sheet, run_lua) instead, leaving routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clipboardA

Reads or writes the system clipboard: info, get_text, set_text, clear, get_image (returned as a preview image, or saved to 'file'), set_image (from an image file, or a rendered sprite frame/layer/rect).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoget_image: save here; set_image: load from here
rectNo
textNo
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
actionYes
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only provide readOnlyHint=false, which is coarse for a tool that contains both reads (info, get_text, get_image) and writes (set_text, clear, set_image); the description never separates the read actions from the mutating ones. It does add useful behavior beyond the annotation, e.g. get_image returning a preview versus writing to file, and how backend selection works, but it never says that 'clear' or 'set_text' overwrite/destroy existing clipboard content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that leads with read/write scope and then tucks action details into parentheticals. It is long and dense but nearly every clause carries information; the only slight redundancy is restating 'file' semantics that the schema already documents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given six action modes, eight parameters, a nested rect object, and no output schema, the description covers mode selection and one return form (image preview) but is silent on what info/get_text return, what clear does to existing content, and failure behavior (e.g. no image on clipboard, headless backend limits). Adequate but with clear gaps for a tool this broad.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, with 'rect', 'text', and 'action' documented only by the enum, yet the description compensates by binding parameters to actions: 'file' for get_image save / set_image load, and 'sprite frame/layer/rect' as set_image sources. That action-to-parameter mapping is genuine added meaning beyond the schema, though the full action/parameter matrix (e.g. which actions accept 'text') is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reads or writes the system clipboard') and then enumerates all six action modes with their sub-behavior, so an agent knows exactly what the tool covers. It does not, however, differentiate from adjacent siblings such as 'clear', 'get_pixels', 'draw_image', or 'render_preview', which overlap conceptually with some of these actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The action enumeration implicitly tells the agent which mode to pick for text vs. image vs. metadata, and the backend note ('auto (default): live Aseprite if connected, else headless batch') plus 'Batch mode needs a file path' give real operational context. There is no explicit when-to-use/when-not guidance and no routing to alternative tools for image transfer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

close_spriteC
Destructive

Closes an open sprite (live mode).

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
discardChangesNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is partly covered. However, the description does not disclose the important behavioral facts: what happens to unsaved changes, how save/discardChanges interact, or how the batch backend differs from live. For a destructive close operation this is a meaningful gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no padding, which is good for front-loading, but the parenthetical qualifier is arguably misleading rather than earning its place. Brevity here reflects under-specification more than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required, four-parameter destructive operation with no output schema, the description omits the data-loss semantics and backend-dependent behavior an agent needs to call it safely. It is not complete enough to invoke confidently without inspecting the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, with save and discardChanges undocumented in both schema and description, and the description adds no parameter meaning at all. It fails to compensate for the coverage gap on the two parameters that determine whether closing destroys work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ("Closes an open sprite") that an agent can readily distinguish from open_sprite and save_sprite. The "(live mode)" qualifier is ambiguous though, since the schema's backend enum supports auto/live/batch, implying the scope is narrower or different than the tool actually is.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to choose this tool versus save_sprite or open_sprite, nor any prerequisite or exclusion guidance. The only contextual hint is the trailing "(live mode)", which is not elaborated and is muddled by the backend enum.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

convert_layerB

Converts a layer: to a Background layer, from Background to a normal layer, or between image and tilemap layers.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
saveNoBatch mode: write changes back to the sprite file (default true)
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered; the description adds nothing further. It never states whether existing pixel data is preserved, whether converting to/from Background flattens anything, or whether the change is undoable, which matters for a layer-type mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that packs the three supported conversions without filler. It is efficient, though the colon-list construction is slightly dense and could be split for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With five parameters (one required), 80% schema coverage, and no output schema, the description need not explain return values, but it should say what happens to the layer's content after conversion. For a mutation tool with no output schema, the absence of any side-effect statement leaves a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80% and the 'save', 'layer', 'sprite', and 'backend' parameters are documented in the schema, so the baseline of 3 applies. The description lists the conversion modes that correspond to the 'to' enum but adds no syntax or defaulting nuance beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (converts) and resource (a layer) and enumerates the three conversion modes, which map cleanly onto the 'to' enum values. It is distinguishable from sibling mutators like update_layer or add_layer, though it never explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The enumerated conversion directions imply when the tool is appropriate (changing layer type), but there is no explicit guidance on when to prefer it over update_layer or add_layer, and no mention of prerequisites such as needing an open sprite or a tilemap-capable document for the image/tilemap conversions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_celB

Copies a cel's image to another layer/frame (and optionally another open sprite).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
saveNoBatch mode: write changes back to the sprite file (default true)
spriteNoDestination sprite
backendNoauto (default): live Aseprite if connected, else headless batch
toFrameNo
toLayerNo
fromFrameNo1-based frame number. Defaults to the active frame (or 1).
fromLayerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
fromSpriteNoSource sprite (default: same)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare this is a write operation (readOnlyHint=false) that is non-destructive, so safety is partly covered. The description adds that the copy can target a different sprite, but does not disclose whether an existing destination cel is overwritten (potential content loss), nor the live-vs-batch backend implications. Some added context, but a key mutation consequence is left implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-formed sentence with the operation front-loaded and the optional extension parenthetically scoped. No wasted words, though it is quite terse for a 10-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter mutation with no output schema and minimal annotations, the description omits the meaning of the x/y parameters and the overwrite/return behavior. Annotations carry the safety profile, which lowers the bar, but the description leaves gaps an agent would need to close by opening the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 10 parameters and only 60% schema description coverage, the description's mention of 'another layer/frame' and 'another open sprite' loosely maps to toLayer/toFrame/sprite, but adds no syntax or format detail. The x, y coordinates go entirely unaddressed in both the description and (by coverage gap) parts of the schema, so it only marginally compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Copies) and resource (a cel's image) with the destination scope (another layer/frame, optionally another sprite). It distinguishes the operation from sibling tools like link_cels (which links rather than copies) and duplicate_layer (which duplicates whole layers). It stops short of explicitly naming a sibling, but the function is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when it applies (moving a cel's image to a target) but offers no explicit when-to-use vs alternatives, no prerequisites, and no note about how it differs from link_cels or get_cels/update_cel workflows. Nothing routes the agent among the copy-adjacent siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

crop_spriteB

Crops the sprite to a rectangle, to the selection (mode='selection'), or trims empty borders (mode='auto').

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
rectNo
saveNoBatch mode: write changes back to the sprite file (default true)
byGridNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is covered structurally. The description adds no behavioral context beyond the mode semantics — it never mentions the live-vs-batch backend distinction or that in batch mode changes are written back to the sprite file (default save=true) before and after a crop.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that names the operation first and then the three modes, with no filler. Slightly dense parenthetical structure, but every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter, mutation-capable tool with no output schema and 50% schema coverage, the description is thin: it omits where changes land (live canvas vs file), the meaning of byGrid, and the rect parameter's semantics. It is adequate to call the tool in the simplest case but leaves real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: save, sprite, and backend are documented in the schema, while mode, rect, and byGrid are not. The description partially compensates by explaining what the 'selection' and 'auto' mode values mean (the enum names alone don't convey this), but it says nothing about rect's coordinate space or what byGrid does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (crops) and resource (the sprite) and enumerates the three operating modes, so the agent knows exactly what the call does. It does not differentiate itself from nearby siblings such as resize_sprite, canvas_size, or selection_edit, which is the only missing piece for a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The mode-to-behavior mapping ('selection' crops to selection, 'auto' trims empty borders) implies when each mode applies, but there is no explicit when-to-use guidance, no exclusions, and no routing to alternatives like resize_sprite or selection_edit for related operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_celC
Destructive

Deletes the cel(s) of a layer in the given frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast frame of a range
tagNoUse the frames of this tag
fromNoFirst frame of a range
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
framesNo'all' or a list of frame numbers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description's added clause ('of a layer in the given frames') merely restates scope already encoded in the layer/frames parameters, and it says nothing about reversibility, batch-vs-live side effects, or the save/batch write-back behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the verb and scope front-loaded and no filler. It is efficient, though the brevity comes at the cost of the operational context this nine-parameter tool needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with nine parameters, zero required fields, and a live/batch backend switch, a one-line description leaves meaningful gaps: default resolution across layer/frame/sprite, batch mode requiring a file path, and whether undo is available. With no output schema, the description also gives no sense of what the call returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters are documented in the schema itself, including defaults for frame, layer, sprite, and backend. The description mentions layer and frames but adds no syntax, precedence, or default-resolution meaning beyond what the schema provides, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Deletes the cel(s) of a layer in the given frames'), so an agent immediately knows the operation. However, it offers no differentiation from near siblings like delete_frames, delete_layer, update_cel, or copy_cel, which share the same sprite-editing domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus delete_frames (which removes frames entirely) or clear/replace_color alternatives. No prerequisites, no note on how layer/frame defaults are resolved at call time, and no mention that deletion is undoable via undo_redo.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_framesB
Destructive

Deletes one frame, a range, a list, or a tag's frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast frame of a range
tagNoUse the frames of this tag
fromNoFirst frame of a range
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
framesNo'all' or a list of frame numbers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description usefully widens the perceived blast radius by noting that a tag, list, or range can be deleted in one call, but it says nothing about reversibility/undo, the save-to-disk side effect, or per-backend behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler — the verb and the four modes come first. Given an 8-parameter destructive tool, it is arguably under-specified rather than over-long, but there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-parameter destructive tool with no output schema, the description covers the core action but not the operational context: no mention of undo, of the save/batch side effect, or of mutual exclusivity among the targeting parameters. The schema carries most of the weight.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each of the 8 parameters is already documented in-schema; baseline is 3. The description's enumeration of delete modes loosely maps to frames/from/to/tag but adds no format or precedence detail (e.g. what happens if multiple selectors are supplied).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (deletes) plus resource (frames) with the four targeting modes enumerated — single frame, range, list, or tag — which tells the agent the tool's blast radius. It does not differentiate itself from adjacent destructive siblings like delete_cel, delete_layer, or delete_tag, so a 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance at all: it does not say which selector to prefer (e.g. use from/to for a contiguous range vs frames for an arbitrary list), nor does it mention the live-vs-batch distinction in the backend parameter. The agent must infer invocation strategy entirely from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_layerB
Destructive

Deletes a layer (and its children if it is a group).

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoBatch mode: write changes back to the sprite file (default true)
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the write/destructive nature is covered structurally. The description adds genuinely useful behavioral context — cascading deletion of children for group layers — but says nothing about undo/reversibility or the effect of the save/batch flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. The most consequential fact (cascading child deletion) is stated immediately and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with four parameters and no output schema, the definition covers the cascade behavior but omits whether the deletion is undoable and how save/backend interact with persistence. Annotations carry the safety signal, so 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all four parameters (save, layer, sprite, backend) are thoroughly documented in the schema itself. The description adds no parameter-level detail, so the baseline of 3 for fully-covered schemas applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (deletes) and resource (layer), plus the important cascade scope — children are removed when the target is a group. That scope detail helps distinguish it from sibling mutations like delete_cel or delete_frames, but it does not explicitly name or contrast those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use, prerequisites, or alternative guidance despite many nearby deletion siblings (delete_frames, delete_cel, delete_tag, delete_slice). The agent must infer the context of use entirely from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_sliceC
Destructive

Deletes a slice.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoBatch mode: write changes back to the sprite file (default true)
sliceYes
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

C2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known. The description adds nothing beyond that — it says nothing about whether deletes are undoable, that the operation mutates a sprite file, or how batch/live mode affects persistence. No contradiction with annotations, but no value added either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single three-word sentence is not conciseness — it is under-specification. There is nothing front-loaded or structured, just a name restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with four parameters, live/batch execution modes, and a save-to-file side effect, this description is far too thin. The absence of an output schema is fine, but the critical batch persistence behavior and slice-identifier semantics are left entirely unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, but the one required parameter (slice) has no description in either the schema or the description, so the agent cannot tell whether it takes a name or an index. The description contributes zero parameter meaning and does not compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Deletes a slice." restates the tool name delete_slice with no additional specificity — it is essentially a tautology. It gives no hint of scope (which slice, how identified) or how it differs from sibling slice tools such as add_slice, update_slice, or delete_frames.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like update_slice or delete_frames, no prerequisites, and no mention of the live-vs-batch distinction. An agent must infer everything from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_tagA
Destructive

Deletes a tag (frames are kept).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYes
saveNoBatch mode: write changes back to the sprite file (default true)
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the safety profile is covered. The description adds the one piece of context annotations cannot convey: the destruction is scoped to the tag metadata only and frames are retained. It says nothing about idempotency when the tag is absent or undo behavior, but the key "what gets destroyed" fact is stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the critical scope qualifier front-loaded in parentheses. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, no-output-schema tool, the description covers the essential scope of deletion but omits behavior on a missing tag, undo/rollback expectations, and any note that batch mode requires a file path (only in the sprite schema description). Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and save/sprite/backend carry their own descriptions, so the schema does most of the work. However, the required 'tag' parameter has no description and accepts string or integer without the description clarifying whether it is a name or an id, leaving a real ambiguity unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Deletes a tag") with an immediate scope clarification, which cleanly separates it from add_tag, update_tag, and the frame/layer deletion siblings. It does not name a sibling for disambiguation, but the resource is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus update_tag (e.g. renaming a tag) or whether prerequisites exist. The agent must infer the use case purely from the verb and noun.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_imageA

Draws an image file (PNG, etc.) into a layer/frame at (x,y). mode 'blend' composites over existing pixels, 'copy' overwrites the area, 'replace' swaps the whole cel image. Optional source crop, scale or target size.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
fileYes
modeNo
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
scaleNo
widthNo
heightNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
opacityNo
blendModeNo
sourceRectNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by defining each mode's effect: 'blend' composites, 'copy' overwrites the area, 'replace' swaps the whole cel image. That is real behavioral disclosure for a mutating tool whose annotations only say readOnly=false/destructive=false. It does not mention undo/reversibility or that batch mode writes to disk, which would complete the picture.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the core action and destination, then mode semantics, then the optional transforms. Every clause adds information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation tool with no output schema and minimal annotations, the description covers the destination and modes but omits return/error behavior, undo implications, and the live-vs-batch save semantics. It is enough to attempt a basic call but not enough to use the tool confidently across backends.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (33%), so the description must carry weight, and it does explain mode semantics plus the existence of source crop, scale and target size. However, it says nothing about x/y placement origin, opacity, blendMode, frame/layer/sprite resolution, or the save/batch distinction, leaving many of the 15 parameters undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Draws an image file (PNG, etc.) into a layer/frame at (x,y)'), which implicitly separates it from draw_pixels, draw_shapes and draw_text by input type. No sibling is named explicitly, so an agent must infer the boundary rather than being told it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: you use it when you have an image file to place. There is no explicit 'use this instead of draw_pixels/draw_shapes when...' guidance, and no note about when live vs batch backend is required (only the schema covers backend/save).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_pixelsA

Sets individual pixels on a layer/frame (one undo step). Either 'pixels' as [[x,y,color],...] / [{x,y,color}], or pixel art as 'rows' of characters with a 'legend' mapping each character to a color; rows start at (x,y). Unmapped ' ' and '.' are skipped; map '.' to 'transparent' to erase. The cel grows as needed; pixels outside the canvas are dropped.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoLeft of the rows grid (default 0)
yNoTop of the rows grid (default 0)
rowsNo
saveNoBatch mode: write changes back to the sprite file (default true)
blendNoAlpha-blend over existing pixels instead of replacing
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
legendNo
pixelsNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false. The description adds genuinely useful behavior: a single undo step, the cel auto-growing, out-of-canvas pixels being silently dropped, and the '.'-to-transparent erase convention. It does not disclose what the tool returns or how errors surface, but the added context is well beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: purpose first, then the two input forms, then edge-case rules. No filler, no repetition of the name or schema, and the erase convention is grouped with the mapping rules it belongs to.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter mutation tool with no output schema, the description covers the tricky invocation semantics (dual input formats, coordinate origin, erasure, clipping) well. It could say more about blend/save/batch mode and return behavior, but the schema fills those and the critical pixel-writing semantics are complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 73%, so most parameters carry their own descriptions. The description still adds real meaning by explaining the pixels vs rows/legend duality, that rows start at (x,y), and the skip/mapping rules for ' ' and '.'. It leaves blend, save/batch, and backend semantics to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Sets individual pixels on a layer/frame") and immediately characterizes the scope with "one undo step." It distinguishes itself from drawing-oriented siblings (draw_shapes, draw_image, draw_text) by describing per-pixel vs grid input, though it never names an alternative tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description effectively explains the two mutually exclusive invocation modes (explicit pixels vs rows+legend) and their semantics, which is real usage guidance. However, it gives no when-to-use-this-vs-draw_image/draw_shapes guidance and no prerequisite context for choosing a backend or frame/layer target.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_shapesA

Draws vector shapes with optional antialiasing: rect, rounded_rect, oval/ellipse, line, polyline, polygon, bezier (cubic, points = start then control1, control2, end per segment), or path (ops: move/line/cubic/close). Each shape is stroked (width) or filled. Antialiasing is off by default to keep hard pixel edges. For pixel-exact aliased shapes use_tool is closer to Aseprite's own tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoBatch mode: write changes back to the sprite file (default true)
colorNoDefault color for shapes without one
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
widthNoDefault stroke width
shapesYes
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
opacityNoOpacity of the whole drawing when composited
antialiasNoDefault antialiasing (false)
blendModeNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations marking it as a non-read-only, non-destructive write, the description adds behavioral detail: antialiasing is off by default to preserve hard pixel edges, and each shape is stroked or filled. It stops short of describing save/write-back defaults or permission needs, but adds useful context beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the purpose and supported shapes, then covers stroke/fill, antialiasing default, and sibling routing in three compact sentences with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, 11-parameter drawing tool, the description covers shape semantics and antialiasing well, and the schema covers most remaining parameters. It could mention save/write-back behavior or target frame/layer defaults more directly, but output schema absence is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 82%, so parameters are already well documented; the description still adds value by explaining bezier point ordering ('start then control1, control2, end per segment') and path op semantics. It leaves many top-level parameters (frame, layer, save, opacity, blendMode) to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Draws vector shapes') and enumerates all supported shape primitives, and it names use_tool as the alternative for pixel-exact aliased work, so an agent can distinguish its role from sibling drawing tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear routing rule for one alternative: pixel-exact aliased shapes should use use_tool. It does not compare against draw_pixels or draw_image, but it gives enough antialiasing context to decide when vector drawing is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_textA

Draws text onto a layer. In live mode it uses Aseprite's text renderer with any font Aseprite knows (its built-in 'Aseprite' pixel font, or an installed system font by name such as 'Arial'). In batch mode, or with font='builtin', it uses a built-in 5x7 pixel font that can be scaled by whole numbers. Multi-line text with \n is supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
fontNo'builtin', 'Aseprite', or a system font name (live mode)
saveNoBatch mode: write changes back to the sprite file (default true)
sizeNoFont size for Aseprite/system fonts (default 6)
textYes
alignNoHorizontal alignment relative to x
colorNoDefault black
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
scaleNoInteger scale for the builtin font
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
opacityNo
lineHeightNoOther fonts: pixels from one line to the next
lineSpacingNoBuiltin font: pixels between lines (default 1)
measureOnlyNoOnly return the text size, draw nothing
letterSpacingNoBuiltin font: pixels between letters (default 1)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations establish only that this is a non-read-only, non-destructive mutate, so the description is free to add the more interesting behavioral detail: that rendering differs fundamentally between live and headless batch mode, and that font availability depends on the backend. It does not spell out persistence semantics (only the save param description hints at that) or error behavior, which keeps it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the purpose before mode-specific detail, with no filler or repetition of the tool name. The middle sentence is dense but each clause carries distinct information about renderer selection. Slightly compressed prose keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 18-parameter mutation tool with no output schema, the description covers the single most consequential complexity: the live/batch split and its effect on fonts, scaling, and persistence. The remaining parameters (align, opacity, letterspacing, measureOnly) are adequately covered by schema descriptions. It could say more about what happens to the target layer/cel, but the essentials are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 78%, so the baseline is already a 3, and the description earns above that by clarifying what font accepts ('builtin', Aseprite's pixel font, or a named system font) and that its effect is mode-dependent. It also documents multi-line support via \n, a behavior absent from the schema. It doesn't touch the remaining ~22% of undocumented parameters, so it is not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opening sentence gives a specific verb+resource ("Draws text onto a layer"), which cleanly separates it from draw_shapes and draw_pixels. It then explains the two rendering paths, adding precision about what "draw text" actually means here. It stops short of naming the sibling tools it competes with, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains which mode triggers which font renderer (live vs batch, or font='builtin'), which implicitly tells the agent when each behavior applies. However, it gives no explicit guidance on when to prefer draw_text over draw_pixels/draw_image, nor any prerequisites such as needing a connected Aseprite for live mode. Usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_layerB

Duplicates a layer with all its cels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
saveNoBatch mode: write changes back to the sprite file (default true)
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds one behavioral fact beyond annotations — that cels are carried along — but says nothing about whether the duplicated cels are linked or independent (relevant given the link_cels sibling), how the new layer is named, or how it interacts with the save/backend mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no waste and the core action front-loaded. It is arguably under-specified rather than over-verbose, so it does not reach a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with five parameters, no output schema and no required fields, the description is too thin: it omits how the copy is named, whether it lands on the active layer context, and how save/backend defaults affect the write. The schema and annotations carry most of the load, leaving the description incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the schema already documents 'save', 'layer', 'sprite', and 'backend' thoroughly. The description adds no parameter-level detail beyond the implicit cels scope, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Duplicates a layer') and adds scope ('with all its cels'), so the agent knows exactly what the operation produces. It does not, however, distinguish itself from neighboring tools such as duplicate_sprite, copy_cel, or add_layer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus copy_cel, link_cels, add_layer, or duplicate_sprite, and no mention of prerequisites or context. The agent must infer usage purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_spriteB

Makes a copy of a whole sprite (all layers, frames, tags, slices). In batch mode 'file' is required.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so safety is covered; the description usefully adds that the copy spans all layers/frames/tags/slices. However, it says nothing about where the copy lands, how it is named, or what handle the agent gets back for the new sprite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and the batch constraint second. No filler, though the second sentence is somewhat redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should explain what the caller receives (e.g. the new sprite's id/name) so the copy can be referenced; that is missing. For a 3-param duplication tool it is adequate but leaves this practical gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the 'sprite' param description already states 'Batch mode needs a file path,' so the description's 'file is required in batch mode' largely restates schema content rather than adding new meaning. The undocumented 'file' parameter still lacks format details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('makes a copy') and resource ('a whole sprite') and enumerates scope (all layers, frames, tags, slices). The phrase 'whole sprite' implicitly distinguishes it from the sibling duplicate_layer, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is the conditional 'In batch mode file is required,' which is parameter usage rather than tool-selection guidance. It never says when to prefer duplicate_sprite over new_sprite, duplicate_layer, or open_sprite, nor 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.

exportA

Exports a copy of the sprite to any format (png, gif, webp, jpg, bmp, tga, pcx, ico, qoi, flc, svg, css, ...). Options: scale, a tag or a 1-based frame range, a slice, specific layers, or a filename template like 'out_{frame}.png' ({frame} counts from 0). Single-image formats with several frames get one file per frame (name1.png, name2.png..., or starting from a trailing number in the name); the result lists every file written.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
fileYes
scaleNo
sliceNo
aniDirNo
boundsNo
layersNoExport only these layers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
toFrameNo
fromFrameNo
ignoreEmptyNo
playSubtagsNo
filenameFormatNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds real behavioral context beyond them: single-image formats emit one file per frame, the trailing-number / templated naming scheme, and that the result lists every file written. It stops short of stating overwrite semantics or permission needs, but it is well above the annotation-only bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, purpose front-loaded, with the options and the multi-file output behavior packed into the following sentences. Dense but every sentence carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter tool with a nested bounds object, two enums, and no output schema, the description usefully explains the return ('lists every file written') but leaves multiple parameters unexplained. It is adequate but not complete enough to call all 14 params correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 21%, so the description must carry the load; it explains scale, tag, 1-based frame range, slice, layers, and the filename template ({frame} counting from 0), which maps to several parameters. It still leaves bounds, aniDir, ignoreEmpty, and playSubtags undocumented in both schema and description, so it only partially compensates for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Exports a copy of the sprite') plus the output surface ('any format' with a format list), so an agent immediately knows this writes image files. It does not, however, differentiate from the very close sibling export_sprite_sheet or save_sprite, leaving the agent to infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It enumerates the options (scale, tag, frame range, slice, layers, filename template), which implies how to use the tool, but never states when to reach for it over export_sprite_sheet, render_preview, or save_sprite, and offers no when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_sprite_sheetB

Exports a sprite sheet image plus optional JSON data (File > Export Sprite Sheet). Supports layouts, padding, trimming, extrusion, splitting by layers/tags, tilesets, and listing layers/tags/slices in the JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
rowsNo
trimNo
typeNo
layerNo
widthNo
heightNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
columnsNo
extrudeNo
listTagsNo
splitGridNo
splitTagsNo
dataFormatNo
listLayersNo
listSlicesNo
trimByGridNo
trimSpriteNo
ignoreEmptyNo
splitLayersNo
dataFilenameNo
fromTilesetsNo
innerPaddingNo
shapePaddingNo
borderPaddingNo
tagnameFormatNo
filenameFormatNo
powerOfTwoSizeNo
mergeDuplicatesNo
textureFilenameYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, which is consistent with a file-writing export. The description adds useful context by disclosing that output is an image plus optional JSON data with various feature toggles, but says nothing about where files land, whether existing files are overwritten, or the required textureFilename behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with the core purpose front-loaded and the menu path and capability list following. No filler, though the capability list is dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 31-parameter, side-effectful export with no output schema and near-zero schema coverage, the description is too thin. It omits the required textureFilename role, output destination conventions, and interaction between the many layout/split/trim options.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 6% across 31 parameters, so the description carries real weight. It usefully groups features (layouts, padding, trimming, extrusion, splitting by layers/tags, tilesets, listing layers/tags/slices) that map to parameters like type, innerPadding/shapePadding/borderPadding, trim, extrude, splitLayers/splitTags, fromTilesets, and listLayers/listTags/listSlices, but gives no per-parameter semantics or formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Exports) and resource (sprite sheet image plus optional JSON data), and references the exact menu path File > Export Sprite Sheet. It clearly conveys the resource and output shape, though it never explicitly distinguishes itself from the sibling generic 'export' tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no when-to-use guidance, no exclusions, and no mention of the sibling 'export' or 'import_sprite_sheet' tools. An agent must infer that this is the sprite-sheet-specific path from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flip_rotateB

Flips and/or rotates the whole sprite, the active cel(s) of a layer/frame, or the selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
flipNo
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
rotateNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
targetNo
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is known. The description adds the operation's scope targets but is silent on whether edits are applied live vs. batched, whether they are undoable, and how flip and rotate combine in a single call. Some useful behavioral context, but notable gaps remain.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the operation front-loaded and the affected targets enumerated. No filler, though the enumeration could be slightly better ordered by default scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with no output schema and 63% schema coverage, the description is barely adequate. It never addresses the live-vs-batch distinction, the save behavior, or how simultaneous flip+rotate are applied, leaving an agent to rely on parameter descriptions alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 63% and the schema itself documents the key ambiguities (save defaults true, frame defaults, layer/sprite resolution, backend auto). The description's scope sentence loosely mirrors the target enum but adds no format, ordering, or default information beyond the schema. Baseline 3 is appropriate when the schema carries most of the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (flips/rotates) and names the resources it affects (whole sprite, active cel(s) of a layer/frame, or the selection). An agent immediately understands the operation and its scope. It doesn't explicitly distinguish itself from siblings, but no sibling overlaps this transform operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description lists the three operation scopes, which implies when to use the tool, but gives no explicit when-to-use guidance, prerequisites, or alternatives. The caller must infer how target selection interacts with the other parameters.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_celsA
Read-only

Lists cels (layer/frame pairs with images) with bounds, opacity, z-index and data, filtered by layer and frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast frame of a range
tagNoUse the frames of this tag
fromNoFirst frame of a range
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
framesNo'all' or a list of frame numbers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine value beyond that by enumerating the returned fields (bounds, opacity, z-index, data), which matters because there is no output schema, and by stating that results are filtered by layer and frames.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the operation, defines the resource, lists the returned data, and states the filtering dimension with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter read tool with no output schema, the description supplies the return shape and the filtering scope, while the schema carries all parameter defaults and constraints. It does not discuss batch-mode caveats or volume/pagination limits, so it is solid but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already documents defaults, allowed values, and formats for all 8 parameters. The description's 'filtered by layer and frames' merely restates a subset of those parameters without adding syntax or format detail, so baseline 3 is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Lists') and resource ('cels'), and defines a cel as a layer/frame pair with images, which clearly separates it from the sibling mutators update_cel, delete_cel, copy_cel and link_cels. It does not name a sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The read-only listing intent is implied by 'Lists' and the annotations, but the description gives no explicit when-to-use guidance, no exclusions, and does not point to alternatives such as get_pixels or get_sprite_info. Usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_paletteB
Read-only

Returns the sprite palette as '#rrggbbaa' colors (index 0 first).

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description usefully contributes the output format '#rrggbbaa' and ordering ('index 0 first'), but says nothing about live-vs-batch behavior or failure modes beyond what the schema's backend description provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that delivers purpose and return format with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only getter with no output schema, stating the color format is the most important missing piece and it is present. However, the ambiguous index parameter and unstated relationship between returned indices and the index input leave a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%; the sprite and backend params are documented in the schema, but index has no description. The description's '(index 0 first)' refers to the returned color ordering, not the index parameter, and with index minimum=1 the 0-vs-1 indexing distinction is left ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Returns the sprite palette') and adds the return format, which cleanly separates it from set_palette, save_palette, and palette_edit. It does not explicitly name a sibling alternative, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no reference to alternatives such as get_sprite_info or palette_edit. Usage is only implied by the verb 'Returns'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pixelsA
Read-only

Reads pixels of the rendered frame (all visible layers) or of one layer. Default format 'legend' returns rows of characters plus a legend of colors ('.' = transparent); 'hex' returns a grid of '#rrggbbaa' (null = transparent). Indexed sprites return palette indices.

ParametersJSON Schema
NameRequiredDescriptionDefault
rectNo
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoRead only this layer (default: the composited frame)
formatNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
maxPixelsNoSafety limit on area (default 16384)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral detail about output shape (character rows + legend vs '#rrggbbaa' grid, transparency markers, indexed sprites returning palette indices), but says nothing about the maxPixels safety limit or failure conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, and the format semantics follow in compact clauses. Every sentence carries information; the density is high with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly takes on the burden of describing return values, which it does for both formats and for indexed sprites. For a 7-parameter, all-optional read tool this is close to complete, with only the maxPixels limit behavior left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, and the description meaningfully extends the 'format' enum by explaining what each mode returns (legend characters plus color legend with '.' = transparent; hex grid with null = transparent). It also clarifies composited-frame vs single-layer reading, though it leaves rect, frame, backend, and maxPixels to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Reads') and resource ('pixels'), and scopes it to the rendered frame across all visible layers or a single layer. The read counterpart to draw_pixels is distinguishable from the verb alone, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies the read use case and offers a scope choice (whole frame vs one layer), but gives no explicit when-to-use vs alternatives like draw_pixels, get_cels, or render_preview, and no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_sprite_infoA
Read-only

Returns a sprite's full structure: size, color mode, frames and durations, layer tree (with opacity, blend mode, visibility...), tags, slices, tilesets, palette size, grid, selection and active layer/frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
includeCelsNoAlso list every cel

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe, read-only operation. The description goes beyond that by detailing the return structure (size, color mode, frames, layer tree, tags, slices, tilesets, palette size, grid, selection), which is valuable because there is no output schema. It does not discuss live-vs-batch output differences, but that is handled in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the main purpose front-loaded, followed by an efficient colon list. It is appropriately sized for a read tool and avoids filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating the returned structure, and annotations cover safety. The schema handles parameters completely. Minor gaps remain around how live vs batch mode affects the returned structure, but the description is largely complete for this read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents sprite, backend, and includeCels. The description adds no parameter-level meaning beyond what the schema already provides, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns a sprite's full structure') and enumerates the returned fields, making the tool's scope clear. It does not explicitly distinguish itself from overlapping siblings like list_sprites, get_cels, or get_palette, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers no when-to-use guidance, no prerequisites, and no alternatives such as list_sprites or get_palette. The schema handles parameter defaults, but the description itself provides no routing information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_sprite_sheetB

Opens an image and slices it into frames (File > Import Sprite Sheet). Optionally saves the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
fileYes
typeNo
saveAsNoSave the imported sprite here (needed in batch mode)
backendNoauto (default): live Aseprite if connected, else headless batch
paddingNo
frameWidthYes
frameHeightYes
partialTilesNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the mutation/safety profile is partly covered. The description adds that saving the result is optional, which is useful beyond the annotations, but it says nothing about the live vs batch backend behavior, failure modes, or what the slicing produces.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no filler; the operation is stated first and the save caveat second. It is efficient, though perhaps terse given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 10 parameters at 20% schema coverage, no output schema, and a write-capable operation, the description is too thin. An agent lacks guidance on the frame-grid parameters, the meaning of type, and how the optional save interacts with batch mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% across 10 parameters; saveAs and backend are the only documented ones, and the description touches saveAs only obliquely ('Optionally saves the result'). Critical params like frameWidth, frameHeight, type, x/y, padding, and partialTiles are unexplained in both schema and description, so the description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource: opens an image and slices it into frames, with the parenthetical menu path (File > Import Sprite Sheet) anchoring it. This distinguishes it from siblings like open_sprite and export_sprite_sheet, though it doesn't name those alternatives directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the UI menu reference and the note that saving is optional, but there is no explicit when-to-use guidance, no statement of when to prefer this over open_sprite or export_sprite_sheet, and no prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

install_extensionA

Copies the bridge extension into Aseprite's user extensions folder. A running Aseprite must be restarted to load it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false. The description adds genuine behavioral context: the copy destination (user extensions folder) and the non-obvious prerequisite that a running Aseprite must be restarted to load it. It does not state overwrite behavior or whether the extension source is bundled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero waste. The core action is front-loaded and the restart caveat follows immediately as the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-param, no-output mutation, the description covers what happens and the restart requirement. It stops short of noting whether an existing installed extension is overwritten, which would matter on re-runs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline there is nothing for the description to disambiguate. The description correctly implies no inputs are required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Copies') and a precise resource ('the bridge extension into Aseprite's user extensions folder'). An agent can tell exactly what this does. No sibling is close enough to require explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied — install the extension when you need the bridge. There are no explicit when-to-use/when-not-to-use cues and no named alternatives (e.g., relaunching vs installing), leaving the agent to infer the trigger.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_asepriteA

Starts the Aseprite GUI with the bridge extension and waits for it to connect, enabling live mode. The first time, Aseprite asks to allow the script's network and file access; tick 'Give full trust' / 'Don't show again' in that dialog.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoOptional sprite file to open
waitSecondsNoHow long to wait for the bridge (default 30)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only give readOnlyHint=false, so the description carries the rest and does so well: it discloses that an external GUI process is spawned, that it blocks waiting for a connection, and that a trust dialog requires human interaction the first time. That interactive-friction detail is exactly the kind of context an agent needs and cannot get from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, front-loaded with the primary action and effect before the first-run caveat. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description covers what the tool does, the blocking wait, and the first-run trust prompt. It stops short of saying what happens on connection timeout or what state the bridge is left in on failure, which would matter for a long-running launch step.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (file, waitSeconds with min/max and default) are already documented in the schema. The description adds nothing about either, which is acceptable given the coverage but earns only the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Starts the Aseprite GUI with the bridge extension') plus the outcome ('waits for it to connect, enabling live mode'). No sibling tool does this, and the description makes the launcher/setup role unmistakable versus tools like use_tool, cli, or status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: this must be done to enter live mode, and the 'The first time...' clause signals a one-off setup step. However, it never says when to prefer this over adjacent tools such as install_extension or cli, nor what to do if launch/connect fails.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commandsA
Read-only

Lists Aseprite commands usable with run_command, with their parameters (extracted from the Aseprite source).

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoCase-insensitive filter on name/description

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes this as a safe read, so the description need not restate safety. It does add one useful behavioral fact — the command data is extracted from Aseprite source, implying a static snapshot rather than live introspection — but says nothing about result size, pagination, or whether the list is version-specific.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the resource, the tool it pairs with, and the provenance of the data. No filler or redundant restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only listing with a fully documented schema and no output schema, the description is nearly sufficient: it tells the agent results include command parameters and where that data comes from. Minor gaps remain around result volume and whether the snapshot can go stale, but nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single optional query parameter (case-insensitive filter on name/description) is already fully documented. The description's mention of 'with their parameters' refers to returned data, not the input parameter, so it adds no meaning beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Lists Aseprite commands') and ties them to the consuming tool, run_command, which distinguishes it from nearby tools like run_lua or api_docs. The parenthetical about provenance adds a little scope detail, though it does not explicitly contrast with its closest siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: the description references run_command, so an agent can infer this is a discovery step before invoking a command. However, there is no explicit when-to-use statement, no mention of when api_docs or run_lua would be preferable, and no guidance on whether the listing is exhaustive or how to narrow results.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_preferencesA
Read-only

Lists Aseprite preference sections and options (from pref.xml) for use with the preferences tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoOnly this section, e.g. 'grid' or 'tool_box'

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already tells the agent this is a safe read. The description adds that data comes from pref.xml, a useful provenance detail, but does not cover return format or the discovery-then-set workflow. With annotations covering the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with no filler, front-loading the verb and resource. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list with no output schema, the description is sufficient: it says what is listed and where it comes from, and annotations carry the safety profile. Only the lack of any note on result structure or the follow-up workflow keeps it from a 5.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single 'section' filter is fully documented in the schema. The description adds no additional parameter meaning, making the baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: lists Aseprite preference sections and options, and names the source (pref.xml). It points to the companion 'preferences' tool, which differentiates it somewhat from that sibling, though it doesn't contrast against other list_* tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'for use with the preferences tool' implies this is a discovery step preceding the mutation tool, which is useful context. But it never states when to call it versus alternatives or when it is not needed, leaving usage largely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_spritesB
Read-only

Lists sprites open in Aseprite.

ParametersJSON Schema
NameRequiredDescriptionDefault
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds only the 'open' scoping constraint; it says nothing about return format, ordering, or how the backend parameter changes behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler. It is appropriately sized for the scope, though it is arguably too bare rather than too verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with no output schema, the description never indicates what is returned (names, ids, count, active sprite). Combined with no usage guidance, the agent is left guessing about the result shape and when to reach for this versus get_sprite_info.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the 'backend' enum (auto/live/batch) is already documented in the schema, including the auto default. The description adds no extra meaning, which is the correct baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'Lists sprites open in Aseprite' tells an agent exactly what it returns at a high level. The scope word 'open' usefully narrows it from sprites-on-disk tools, but it does not distinguish itself from near-siblings like get_sprite_info or list_commands.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no mention of alternatives such as get_sprite_info or app_state. The agent must infer from the name alone that this is a discovery step rather than a detail-fetch.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

merge_layersA
Destructive

Merges a layer into the one below (mode='down'), flattens all layers ('flatten'), or flattens only visible layers ('visible').

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
saveNoBatch mode: write changes back to the sprite file (default true)
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuine context by specifying what destruction occurs — a layer is collapsed into the one below, or all/visible layers are flattened — which tells the agent the layer structure is lost. It stops short of mentioning undo-ability or irreversible 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with three parallel clauses, no filler, and the core verb stated first. Every clause earns its place by defining a mode.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description need not explain return values for a mutation. Combined with 80% schema coverage and destructive annotations, the definition gives enough to invoke correctly; only undo/reversibility context is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so most parameters are documented structurally, but the 'mode' enum is listed bare in the schema with no value descriptions. The description supplies the missing semantics for all three enum values, adding real meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (merges/flattens) and resource (layers), and enumerates the three mode behaviors, so an agent knows exactly what each invocation does. It does not explicitly differentiate itself from layer-manipulation siblings such as convert_layer or delete_layer, which keeps it short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The three modes are described, which implies the conditions for each, but there is no explicit when-to-use/when-not guidance and no named alternative (e.g. when to flatten vs. use convert_layer). Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

move_frameC

Moves a frame (with its cels) to another position.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
fromYes
saveNoBatch mode: write changes back to the sprite file (default true)
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare non-read-only and non-destructive, so safety is partly covered, and the description usefully discloses that cels move with the frame. It says nothing about undo behavior, whether the source position is closed up or left empty, or how the live/batch backends affect the operation, all of which matter for a reordering mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, front-loading the verb and resource. It is efficient, though arguably terse to the point of underspecification for a 5-parameter mutation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with five parameters, no output schema, and only safety-hint annotations, the description is far too thin. It omits sequencing effects, undo/rollback behavior, the significance of the save/backend parameters, and return/error expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 60%, and neither required parameter (from, to) has a schema description beyond minimum: 1. The description's phrase 'another position' hints these are positional indices but does not clarify whether they are frame numbers, ordering indices, or 1-based, so it fails to compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (moves) and resource (a frame with its cels) and adds the meaningful detail that contained cels travel with the frame. It does not, however, distinguish itself from sibling frame tools such as add_frames, delete_frames, or set_frame_duration, leaving the agent to infer the distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites, and no comparison to alternative frame operations like delete_frames + add_frames or copy_cel. The agent must guess at the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

new_spriteB

Creates a new sprite. In batch mode 'file' is required (the sprite is saved there).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoSave to this path (.aseprite keeps layers/frames)
widthYes
framesNo
heightYes
backendNoauto (default): live Aseprite if connected, else headless batch
paletteNoColors, or {preset:'DB32'} / {file:'pal.gpl'}
colorModeNo
layerNameNo
backgroundNoFill the first layer with this color
backgroundLayerNoTurn the first layer into a Background layer
frameDurationMsNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation/safety profile is covered. The description adds a genuinely useful batch-mode constraint (file required, sprite saved there), but says nothing about the live-vs-batch execution difference, failure modes, or state 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the primary purpose is front-loaded before the conditional constraint. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter creation tool with 45% schema coverage and no output schema, the description is thin. It addresses only 'file' and leaves the agent to infer defaults, backend behavior, and the meaning of most creation options.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 45%, so the description should compensate. It clarifies the batch-mode requirement for the 'file' parameter beyond the schema's 'Save to this path' note, but 9 other parameters (frames, colorMode, layerName, frameDurationMs, etc.) get no description-level help. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Creates a new sprite'), which is clearly distinct from sibling tools like open_sprite and duplicate_sprite. It does not explicitly name those alternatives, so it falls short of the top mark.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only contextual guidance is the batch-mode 'file' requirement. There is no indication of when to use this versus open_sprite (existing file) or duplicate_sprite, nor any prerequisites for the live backend.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_spriteA
Read-only

Opens a sprite file (any format Aseprite reads: .aseprite, .png, .gif, .jpg, .webp, .bmp, .tga, .pcx, .ico, .flc, .qoi, .psd...) and returns its structure. In live mode it opens a tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
backendNoauto (default): live Aseprite if connected, else headless batch
oneFrameNoLoad only the first frame

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds two useful facts: it returns the sprite's structure, and in live mode it opens a tab (a visible side effect). It says nothing about failure modes, unsupported-format errors, or persistence, so it adds only modest value over 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, front-loaded with the core action and supported formats, then the live-mode caveat. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet 'returns its structure' leaves the return shape vague for a tool whose main purpose is inspection. Combined with partial parameter coverage, an agent knows how to call it but not fully what to expect back.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 67% schema description coverage, the schema already explains backend (auto/live/batch) and oneFrame, and the required 'file' is self-evident. The description adds no syntax, path, or format constraints beyond what the schema provides, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Opens a sprite file') and enumerates accepted formats, which is genuinely informative. It implicitly distinguishes itself from new_sprite (create) and list_sprites (enumerate), but never names or contrasts those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'live mode opens a tab' clause hints at when the live path applies, and the backend parameter's enum/description in the schema carries the auto/live/batch logic. There is no explicit guidance on when to choose this over new_sprite, list_sprites, or get_sprite_info, so usage remains implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

palette_editA

Edits the palette structure: add or insert colors, remove entries, move entries, sort (by hue, saturation, value, lightness, luminance, red, green, blue, alpha), reverse a range, generate a ramp between two colors, or dedupe. In indexed sprites pixels are remapped so they keep their colors (set remapPixels=false to skip); pixels using removed colors move to the nearest remaining one.

ParametersJSON Schema
NameRequiredDescriptionDefault
atNoinsert/ramp: target index (default end)
byNo
toNoRange end, or the destination index for move
fromNoRange start for remove/move/sort/reverse
saveNoBatch mode: write changes back to the sprite file (default true)
spaceNoramp interpolation (default rgb)
stepsNo
actionYes
colorsNoadd/insert
insertNoramp: insert instead of overwriting entries
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
indicesNoremove/move: entries to act on
toColorNoramp end
fromColorNoramp start
descendingNo
remapPixelsNo

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false; the description adds genuinely useful behavior context beyond that — indexed-sprite pixels are remapped to preserve their colors, and pixels whose colors are removed fall back to the nearest remaining entry. It still omits whether the palette is persisted by default or how failures surface, but the remap semantics are substantial added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core verb and the full action inventory, then the side-effect caveat. The long parenthetical sort-key list is bulky but each operation enumerated is load-bearing for action selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 17-parameter mutation tool with no output schema, so the description carries more burden than it does. It covers the action space and the key side effect well, but says nothing about return shape, save/persistence defaults, or error behavior, which leaves gaps an agent must guess at.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 71% and the schema already documents most parameters including per-action applicability. The description contributes the sort key list (matching the 'by' enum), the remapPixels side effect, and the action vocabulary, but leaves many of the 17 parameters (save, backend, steps, insert, sprite, descending) solely to schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Edits) and resource (palette structure) and enumerates the eight discrete operations, so an agent immediately knows the action space. It does not, however, distinguish itself from adjacent palette siblings like set_palette, get_palette, or save_palette, leaving that routing inference to the reader.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the action list and one parameter-level hint ('set remapPixels=false to skip'). There is no explicit when-to-use guidance, no statement of when to prefer set_palette/replace_color instead, and no stated prerequisites for choosing between live and batch backends beyond what the schema says.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preferencesA

Gets or sets an Aseprite preference (app.preferences..), a tool preference (tool=) or a per-sprite document preference (document=true). Use list_preferences to discover names.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNoRead tool preferences for this tool id
valueNo
actionYes
optionYesOption name; nested options use dots, e.g. 'brush.size' with section from the tool prefs
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
sectionYes
documentNoRead the sprite's document preferences

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows the tool can mutate but is not flagged destructive; the description is consistent with this. The description adds useful context by disclosing the three modes of operation and the dotted addressing scheme, but says nothing about persistence, what a 'set' overwrites, or default behavior beyond what the schema's backend description already covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb, then a compact parenthetical enumeration of the three modes, followed by a single routing sentence. Both sentences earn their place, though the dense parentheticals make it slightly terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no output schema, and moderate schema coverage, the description covers the addressing modes but does not describe what a 'get' returns or how values are interpreted on 'set'. It routes to list_preferences for names but leaves the return/behavior contract underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 63%, a moderate baseline. The description clarifies how section and option combine (dotted nesting) and maps tool=<id> and document=true to their respective parameters, adding some meaning. However, the schema already documents tool, option, sprite, backend, and document, so the description largely restates the addressing modes rather than filling the uncovered params (section, value).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (gets or sets) and resource (Aseprite preference), and explicitly enumerates three addressing modes: app preference via app.preferences.<section>.<option>, tool preference via tool=<id>, and per-sprite document preference via document=true. It names the sibling list_preferences as the discovery counterpart, aiding differentiation, though it doesn't contrast against other siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear routing instruction: 'Use list_preferences to discover names,' which points the agent to the alternative for enumeration. Usage is implied by the get/set duality, but no explicit when-not or prerequisites are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propertiesA

Gets, sets, deletes or replaces custom properties on a sprite, layer, cel, tag, slice, tileset or tile. With pluginKey ('publisher/extension') it reads/writes that extension's properties instead of the user properties.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
keysNodelete: property names
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
indexNoTile index for target=tile
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
sliceNo
actionNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
targetNo
valuesNo
backendNoauto (default): live Aseprite if connected, else headless batch
tilesetNo
pluginKeyNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation profile is partly covered. The description adds real context beyond that: the resource scope and the pluginKey scoping semantics. It is silent on what actually happens in batch vs live mode, whether deletes are reversible, and the effect of the save flag, leaving meaningful behavior undisclosed for a delete-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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler, and the core CRUD purpose plus the pluginKey caveat are both front-loaded. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, zero-required CRUD tool with no output schema, the description covers the shape of the operation but not the matrix that matters: how action maps to keys/values/target, or how batch mode and save behave. It is adequate to recognize the tool but thin for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% across 14 parameters, so the schema documents roughly half. The description only adds meaning for pluginKey (the 'publisher/extension' string format), which the bare schema lacks. Nothing explains how action interacts with keys/values/target, which is the core parameter logic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs (gets/sets/deletes/replaces) and a specific resource (custom properties), and enumerates the exact target set (sprite, layer, cel, tag, slice, tileset, tile). It is clear what the tool does, but it never distinguishes itself from the sibling set_sprite_properties, which overlaps on sprite-level property writes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete usage branch for pluginKey ('publisher/extension' reads/writes an extension's properties instead of user properties), which is genuinely helpful. However it offers no when-to-use/when-not guidance relative to siblings like set_sprite_properties, and no prerequisite or mode-selection advice for the action/target combination.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recent_eventsA
Read-only

Live mode: returns what happened in Aseprite since a sequence number: sprite changes (including undo/redo), switching sprite/layer/frame, commands run, and color changes. Events caused by MCP calls are hidden unless includeMcp is true. Pass the returned lastSeq as 'since' next time.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sinceNo
typesNo
backendNoauto (default): live Aseprite if connected, else headless batch
includeMcpNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds behavior the annotations cannot: MCP-caused events are suppressed unless includeMcp is set, and the tool is a sequence-number-based polling stream that echoes back a lastSeq cursor. That is meaningful operational context beyond structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core purpose before the filtering caveat and the cursor instruction. No filler and nothing repeated from the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, but the description proactively discloses the return cursor (lastSeq) and the polling loop, which is the key thing an agent needs to consume this tool correctly. Remaining gaps – limit/pagination behavior and ordering guarantees – are minor for a read-only event feed backed by annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only 'backend' is documented in the schema), so the description must compensate and largely does: it explains the includeMcp toggle and the since cursor semantics, and its event list maps onto the types enum values (sprite_change, command, fg_color, bg_color). It leaves limit and the precise meaning of site_change unexplained, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource – it returns the event stream of what happened in Aseprite since a sequence number, and enumerates the event categories (sprite changes, undo/redo, layer/frame switches, commands, colors). That is far more than a restatement of the name. It does not, however, explicitly contrast itself with plausibly overlapping siblings like status, app_state, or get_sprite_info, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: 'Live mode' and the polling instruction ('Pass the returned lastSeq as since next time') tell the agent how to drive the tool iteratively, which is genuinely useful. But there is no explicit when-to-use versus when-not, and no sibling alternatives are named (e.g. app_state for a snapshot vs this for an incremental stream).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

render_previewA
Read-only

Renders frames as an image you can look at (nearest-neighbor upscaled, transparency shown as a checkerboard). Multiple frames are laid out in a grid in frame order. Use this after edits to check the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast frame of a range
tagNoUse the frames of this tag
cropNoOnly this area of the rendered strip
fromNoFirst frame of a range
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoRender only this layer (default: all visible layers)
framesNo'all' or a list of frame numbers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
columnsNo
maxSizeNoLongest side of the preview (default 512)
pixelGridNoFaint lines between pixels at high zoom (default true)
checkerboardNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true already covering the safety profile, the description adds genuinely useful behavior the annotation cannot: nearest-neighbor upscaling, checkerboard transparency, and grid layout in frame order. It still says nothing about size limits, backend fallback behavior, or cost of rendering many frames.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no waste; the rendering behavior is front-loaded and the call-to-action follows. Every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter tool with no output schema, describing the returned image is valuable and mostly compensates for the missing output schema. However, the description never disambiguates the overlapping selection modes (frame vs frames vs from/to vs tag), which is the main usability gap given the parameter complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 85%, so the schema already documents nearly every parameter including the backend enum and crop object. The description only loosely connects to parameters via 'laid out in a grid in frame order' (columns/frames). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('renders frames as an image you can look at') and clarifies the render style, distinguishing it from file-producing siblings like export or export_sprite_sheet. It stops short of explicitly naming an alternative tool, so it lands at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this after edits to check the result' supplies clear situational context for when to reach for this tool. There are no exclusions or named alternatives (e.g., vs. export), so it clears the 'clear context, no exclusions' bar but not the top tier.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

replace_colorB

Replaces one color with another on a layer (or all layers) across frames, with optional per-channel tolerance (RGB).

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
tagNoUse the frames of this tag
fromYes'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
framesNo'all' or a list of frame numbers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
toleranceNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only but not destructive. The description adds scope details (layer/all layers, across frames) and optional tolerance, but it does not disclose important behavioral context such as save-side effects, undo behavior, or batch/live mode differences. No annotation contradiction is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that conveys the core operation without redundant or filler text. Every phrase contributes to understanding what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters and no output schema, the description provides only a minimal operational summary. It is adequate because the schema covers most parameters, but it omits usage guidance and behavioral implications that would help an agent invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so most parameter meaning is already provided structurally. The description adds minimal parameter context by mentioning per-channel RGB tolerance and layer/frame scope, but it does not substantially extend the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (replaces), resource (color), and scope (on a layer or all layers across frames). It is clear what the tool does, but it does not explicitly distinguish itself from sibling tools such as palette_edit or draw_pixels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit guidance on when to use this tool instead of alternatives. It only describes the operation itself, leaving the agent to infer whether replace_color is preferable to palette_edit, draw_pixels, or other color-related siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resize_spriteB

Scales the whole sprite (all layers and frames). Give width and/or height, or scale.

ParametersJSON Schema
NameRequiredDescriptionDefault
saveNoBatch mode: write changes back to the sprite file (default true)
scaleNo
widthNo
heightNo
methodNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is partially covered. The description usefully adds that the operation hits every layer and frame, but it omits that pixel data is permanently resampled (nearest/bilinear/rotsprite), the live-vs-batch write behavior, and whether the original dimensions can be recovered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, zero filler, with the scope statement front-loaded before the parameter hint. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation tool with no output schema, the description covers the core intent but leaves method selection, save/backend interaction, and return behavior to inference. It is minimally adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 43%, so the description must compensate; it does partially by clarifying that width/height and scale are alternative ways to specify the same resize ("Give width and/or height, or scale"). However it leaves the precedence when both are supplied, and the meaning of the method enum values (especially rotsprite), unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Scales the whole sprite (all layers and frames)" gives a specific verb plus the resource and its scope, which clearly separates it from related siblings like canvas_size or crop_sprite. It stops short of naming an alternative explicitly, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is "Give width and/or height, or scale," which is parameter usage rather than when-to-use. Nothing tells the agent when to choose resize_sprite over canvas_size or crop_sprite, nor when to prefer one method or backend over another.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_commandA

Executes any Aseprite menu command (app.command.) with parameters, e.g. Flip, Rotate, Outline, BrightnessContrast, ColorQuantization, LinkCels, ReverseFrames, AutocropSprite. See list_commands for names and parameters. Strings like '#ff0000' become Colors; {x,y,width,height} becomes a Rectangle. ui=false is added unless allowUi is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCommand name, e.g. 'Outline'
saveNoBatch mode: write changes back to the sprite file (default true)
frameNoFrame to make active before running
layerNoLayer to make active before running
paramsNoCommand parameters
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
allowUiNoLet the command open its dialog (live mode only)
backendNoauto (default): live Aseprite if connected, else headless batch
mutatesNoBatch mode: false skips saving (default true)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only carry readOnlyHint=false and destructiveHint=false. The description adds real behavioral detail beyond that: UI dialogs are suppressed via ui=false unless allowUi is true, and parameter coercion rules are disclosed. It still doesn't warn about mutating side effects or live-vs-batch persistence nuances.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the core action and followed by the lookup pointer and coercion rules. Every sentence contributes; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a generic command runner with no output schema and full schema coverage, the description covers action, naming, coercion, and UI behavior adequately. Return format and error behavior are unaddressed but less critical here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all nine parameters and the baseline would be 3. The description goes beyond it by explaining value coercion ('#ff0000' becomes a Color, {x,y,width,height} becomes a Rectangle) and the implicit ui=false injection, adding genuine semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: executes Aseprite menu commands via app.command.<name>, with concrete examples (Flip, Rotate, Outline). It points to list_commands for names, which helps distinguish it, but does not explicitly separate itself from the similar escape-hatch siblings run_lua and use_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'See list_commands for names and parameters' implies the lookup workflow, and the examples suggest common use. However, it gives no explicit when-to-use/when-not guidance versus run_lua or use_tool, which are the obvious alternatives for arbitrary execution.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_luaA

Runs Lua code inside Aseprite with the full scripting API (app, Sprite, Image, Layer, Color, ...). Globals: args (your args object), sprite (resolved sprite or app.sprite), MCP (helper runtime: MCP.color(), MCP.layer(spr, ref), MCP.sprite_info(spr) ...). print output is captured. The return value is sent back as JSON. Use api_docs for the API reference.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoValues available to the code as `args`
codeYesLua source. Use `return` to send a value back.
saveNoBatch mode: write changes back to the sprite file (default true)
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
mutatesNoBatch mode: false skips saving the sprite afterwards (default true)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are thin (readOnlyHint=false, destructiveHint=false), and the description adds real behavioral context beyond them: globals injected into the sandbox (`args`, `sprite`, `MCP`), that `print` is captured, and that the `return` value is serialized back as JSON. It does not warn about the safety profile of executing arbitrary code that can persist changes to sprite files, which is the one gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: the core action leads, followed by a compact enumeration of injected globals and output behavior. Every sentence earns its place, though the parenthetical '(...) ' style elision slightly reduces precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly compensates by explaining that `print` output is captured and the `return` value is sent back as JSON. Given the tool's complexity and the schema's own coverage of backends and save semantics, this is close to complete, missing only guidance on live vs batch pitfalls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains code, args, save, sprite, backend, and mutates in detail; the description adds only the mapping between the `args` parameter and the `args` global. That is a marginal addition over structured data, which is the baseline for a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Runs Lua code inside Aseprite') and immediately scopes it by naming the scripting surface (app, Sprite, Image, Layer, Color) so an agent can distinguish it from dedicated siblings like draw_pixels or add_layer. It also names the companion tool api_docs, making its place in the toolset unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent to api_docs for the API reference, which is a useful pointer, but it never says when to reach for run_lua versus run_command, use_tool, or cli, nor does it say to prefer dedicated tools where they exist. Usage is implied by the 'full scripting API' framing rather than stated as guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_paletteB

Saves the sprite palette to a file (.gpl, .pal, .act, .png, .ase, .hex...).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, which the description does not contradict. Beyond that it only adds the format list; it says nothing about whether an existing file is overwritten, what the return value is, or backend-mode caveats (again only in the schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and the destination are the first things read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description never says what is returned or that writing may overwrite a file. The schema carries the sprite/backend semantics, but overwrite behavior and return shape are missing for a file-writing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the schema already explains 'sprite' (path/tab/id, default active) and 'backend' (auto/live/batch). The description contributes only the format enumeration, which implicitly constrains the required 'file' extension but adds no syntax or default detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Saves the sprite palette to a file') and enumerates supported formats, so the operation is unambiguous. It is distinguishable from siblings like get_palette/set_palette by the explicit 'to a file' phrasing, though it never names those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to use this versus get_palette, set_palette, palette_edit, or export/export_sprite_sheet. The only guidance (batch mode needs a file path) lives in the schema, not the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_spriteA

Saves a sprite (Save / Save As), or with copy=true saves a copy without changing the sprite's file name. The extension picks the format. Single-image formats get one file per frame (name1.png, name2.png...); the result lists the files written.

ParametersJSON Schema
NameRequiredDescriptionDefault
copyNo
fileNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare it is a non-read-only, non-destructive write; the description adds real behavior beyond that — copy preserves the file name, the extension determines format, single-image formats emit one file per frame, and the result enumerates written files. It does not say what happens on overwrite, which is the one notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, all front-loaded with the primary action first and the copy exception immediately after. No filler, though the frame-naming example is slightly more detail than most callers need.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by stating that the result lists the files written, and it covers the copy/format branching. It is nearly complete for a mutation tool, missing only overwrite/permission semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, and the description usefully defines the undocumented copy parameter's semantics. However, file and backend behavior is left to the schema (backend has its own description) and the description adds no format/syntax detail for the file path beyond what is already structured.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Saves a sprite') and distinguishes the three modes (Save, Save As, copy=true). It does not differentiate itself from nearby siblings like export or export_sprite_sheet, so an agent still has to infer which write-path applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explains the copy=true condition, which is genuinely useful routing, but gives no guidance on when to save vs. use export/export_sprite_sheet, and no prerequisites such as whether a file must already exist for Save.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

selectA

Creates or changes the selection: rect, ellipse, polygon, magic_wand (point), by_color, all, none, invert, reselect, content (layer pixels), modify (expand/contract/border), move (dx/dy), get, save or load (to/from a .msk or image file). The selection lives only in live mode or inside one run_lua call.

ParametersJSON Schema
NameRequiredDescriptionDefault
dxNo
dyNo
fileNosave/load: .msk (Aseprite selection file) or an image (opaque pixels = selected)
modeNo
rectNo
brushNo
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
pointNo
actionYes
pointsNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
modifierNo
quantityNo
toleranceNo
contiguousNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, and the description does not contradict this. It adds real behavioral context beyond the annotations: the key constraint that 'the selection lives only in live mode or inside one run_lua call' is a non-obvious, operation-critical trait that structured fields 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core verb and action enumeration; the mode constraint is placed last as a caveat. The action list is long but every entry corresponds to a real enum value rather than generic filler, so it earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so return values need not be explained, but a 18-parameter tool at 33% coverage leaves several behaviorally significant params (mode, tolerance, contiguous, quantity, brush, frame, layer, sprite, backend) undefined in both schema and description. It is adequate given how well the action list is documented, but gaps remain for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 18 params and only 33% schema coverage, the description compensates by tying parameters to actions and clarifying semantics the schema cannot express: 'point' belongs to magic_wand, 'dx/dy' to move, 'file' accepts .msk or an image, and 'modifier' means expand/contract/border. Many params (mode, tolerance, contiguous, quantity, brush, frame, layer, sprite) remain undocumented, so it is not a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Creates or changes the selection') and then enumerates all 15 supported actions, so an agent knows exactly what the tool covers. It does not differentiate from the sibling 'selection_edit', which appears to overlap in scope, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the action list and the inline mapping of actions to parameters (e.g., 'magic_wand (point)', 'move (dx/dy)'), and the mode caveat scopes where it can run. But there is no explicit when-to-use vs. the similarly named 'selection_edit' sibling, leaving the agent to infer the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

selection_editB

Acts on the selection: copy, copy_merged, cut, paste (optional x,y), delete, fill, stroke (with color), move_content / move_bounds (dx,dy, wrap), new_sprite, new_layer_via_copy, new_layer_via_cut, crop.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
dxNo
dyNo
wrapNo
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
actionYes
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false, which is minimal for a tool whose enum includes delete, cut, and crop. The description adds useful per-action context (which parameters belong to which action). However, it says nothing about undoability, whether a selection is required, or how the clipboard is affected — important for this action set. Note a mild tension: 'delete'/'cut'/'crop' read as destructive while destructiveHint=false, though this is defensible if deletes are undoable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that begins with the core purpose ('Acts on the selection') before the action list. It is dense and slightly cramped as a run-on enumeration, but every clause adds a distinct action or parameter mapping rather than repeating structured data.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-action, 11-parameter mutating tool with no output schema and thin annotations, the description covers the action surface and inline parameter hints but omits prerequisites (selection state), return/status behavior, and undo semantics. Reasonable but noticeably short of fully equipping an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 45%, so the description has to carry weight — and it partially does by mapping parameters to actions (paste takes optional x/y, stroke takes color, move_* takes dx/dy/wrap). It does not explain frame, layer, sprite, or backend, though those do carry their own schema descriptions. Adequate compensation without being thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource ('the selection') and enumerates every action the tool performs (copy, copy_merged, cut, paste, delete, fill, stroke, move_content/move_bounds, new_sprite, new_layer_via_copy/cut, crop). This makes the tool's scope clear and distinguishable from siblings like select, draw_shapes, or clipboard. It stops short of naming an alternative tool, so it is not a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g. that a selection must exist first, or how it relates to select/clipboard), and no exclusions. The overlapping siblings (clipboard, copy_cel, crop_sprite, new_sprite, select) are never referenced, leaving the agent to infer routing entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_activeB

Changes what is active in the UI: sprite/layer/frame, foreground/background color, tool, brush, editor zoom, and the timeline range (selected frames/layers/colors). Mostly useful in live mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolNoTool id, e.g. pencil, eraser, paint_bucket, rectangular_marquee
zoomNoEditor zoom factor (1 = 100%)
brushNoBrush: built-in shape and size, or a custom image brush
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
rangeNoTimeline/palette selection (live only)
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
bgColorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
fgColorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations state readOnlyHint=false and destructiveHint=false, so the agent knows this mutates state but non-destructively. The description adds that the change is UI-state-oriented and mostly relevant in live mode, but says nothing about reversibility, what happens when no live session exists, or how batch mode behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and scope, then the live-mode caveat. No filler, though the long enumeration makes the first sentence slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a ten-parameter catch-all mutator with full schema coverage and no output schema, the description is adequate but shallow: it does not clarify how simultaneously supplied fields interact, nor the live-vs-batch behavioral difference hinted at by the backend parameter. It covers the surface but omits the operational detail an agent would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all ten parameters including brush, range, colors, and backend defaults. The description only re-lists the categories of changeable state without adding format or interaction details beyond the schema, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Changes') and resource ('what is active in the UI') and enumerates the concrete targets: sprite/layer/frame, fg/bg color, tool, brush, zoom, and timeline range. This is far clearer than a tautology, though it does not explicitly distinguish itself from potential siblings like select or view_settings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Mostly useful in live mode' gives a contextual hint about when the tool applies, and the schema notes 'range' is live-only. However, there is no explicit guidance on when to prefer this over alternatives such as select or view_settings, leaving usage largely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_frame_durationA

Sets frame durations in milliseconds for one frame, a range, a list, a tag, or 'all'.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoLast frame of a range
tagNoUse the frames of this tag
fromNoFirst frame of a range
saveNoBatch mode: write changes back to the sprite file (default true)
frameNo1-based frame number. Defaults to the active frame (or 1).
framesNo'all' or a list of frame numbers
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
durationMsYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the agent knows this is a non-destructive mutation. The description adds no behavioral context beyond that: it does not mention the live vs batch backend split, the save-back-to-file semantics, or whether durations on unselected frames are preserved. It adds the selector scope, which is modest value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that states the verb, the unit (milliseconds), and the full set of target selectors with zero filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with no output schema, the description covers the 'what' and the target scope but omits the batch/live mode distinction and save behavior that materially affect invocation. Since the schema carries that detail at 89% coverage, the definition is minimally viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so nearly every parameter is already documented in the schema (frame, from/to, frames, tag, save, sprite, backend). The description's selector list duplicates that information rather than adding units, constraints, or interaction rules, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (sets) and resource (frame durations), and enumerates the five target selectors (one frame, range, list, tag, 'all'), which maps directly onto the schema's frame/from-to/frames/tag parameters. It does not distinguish itself from adjacent frame tools like add_frames, delete_frames, or move_frame, so sibling differentiation is absent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The list of selectable targets implies the tool's reach, but there is no explicit guidance on when to use it versus alternatives such as update_tag or set_sprite_properties, and no prerequisites or exclusions are stated. Usage is inferable only from the parameter enumeration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_paletteB

Changes the palette: set colors starting at 'start', replace it entirely, resize, load from a file (.gpl, .pal, .act, .ase, .png...) or a built-in preset (e.g. DB16, DB32, PICO-8...), or generate it from the sprite's colors (fromSprite).

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNo
saveNoBatch mode: write changes back to the sprite file (default true)
sizeNo
startNo
colorsNo
presetNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
replaceNoPalette becomes exactly 'colors'
algorithmNo
maxColorsNo
withAlphaNo
fromSpriteNoBuild a palette from the sprite (ColorQuantization)

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the write-but-not-destructive profile is already covered. The description adds useful behavioral context — notably that 'replace' makes the palette exactly the given colors and that fromSprite derives from the sprite's own colors. It does not clarify persistence (whether changes touch the sprite file), live-vs-batch side effects, or reversibility, so it adds moderate value on top of 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single sentence with the verb and resource front-loaded and the modes packed in via parenthetical examples (.gpl/.pal/.act, DB16/DB32/PICO-8) that convey format hints economically. The density is high but almost every clause earns its place; minor strain comes from cramming so many modes into one sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation tool with low schema coverage and no output schema, the description covers the headline modes but omits persistence behavior, backend/live-vs-batch interaction, and several parameter meanings. It is adequate to pick the tool and choose a mode, but not complete for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 38% across 13 params, so the description must carry weight and it partially does: it explains start, replace, file, preset, and fromSprite in narrative form. However, it leaves size, save, colors format, sprite, backend, algorithm, maxColors, and withAlpha entirely unaddressed, so a notable share of parameters remain undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete verb and resource ('Changes the palette') and enumerates the distinct operating modes: set from a start index, replace entirely, resize, load from file, load a preset, or quantize from the sprite. This is far more specific than the bare name. It stops short of a full 5 because it never distinguishes itself from close siblings like palette_edit, save_palette, or get_palette.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Enumerating the modes (replace, load file, preset, fromSprite) implicitly signals when each behavior applies, which is decent implied guidance. But there is no explicit when-to-use / when-not-to-use framing, no prerequisites, and no routing to the sibling tools (palette_edit, save_palette) that an agent could otherwise confuse this with.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_sprite_propertiesB

Changes sprite metadata: filename, user data, tab color, transparent color index, pixel ratio, grid bounds, user properties, color space.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
filenameNo
colorSpaceNo
gridBoundsNo
pixelRatioNo
propertiesNoUser-defined properties to set (object.properties)
useLayerUuidsNo
transparentColorNo
convertColorSpaceNoConvert pixels instead of only assigning the color space

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, non-destructive write, and the description confirms mutation of metadata with a list of targets. However, it does not disclose persistence/save semantics, undo behavior, or batch vs live implications; those details appear only in some schema properties.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the verb, followed by a compact list. There is no filler or restatement of annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation tool with nested object parameters and no output schema, the description covers the metadata targets but leaves operational context thin: it does not explain save defaults, backend selection, or how to target a sprite. The schema fills some gaps, but several parameters (useLayerUuids, data, colorSpace) lack explanatory text in either place.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 46%, so the description should compensate. It maps several parameters to human-readable concepts (filename, tab color, transparent color index, pixel ratio, grid bounds, user properties, color space), but omits save, sprite, backend, useLayerUuids, and convertColorSpace, and gives no format details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'Changes' and resource 'sprite metadata', then enumerates eight metadata fields (filename, user data, tab color, transparent color index, pixel ratio, grid bounds, user properties, color space). This distinguishes it from layer/frame/cel tools, but it does not name a sibling alternative or clarify overlap with the generic 'properties' tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative guidance is provided. It does not explain when to choose this over update_layer, properties, or change_color_mode, nor does it mention prerequisites like an open sprite or backend choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusA
Read-only

Shows the Aseprite executable in use, its version, and whether a live Aseprite is connected to the bridge.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true already establishes this is a safe read, so the annotation carries the safety profile. With no output schema, the description usefully adds what the tool probes and reports back (executable, version, live connection state via the bridge), including the notion of a disconnected case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, front-loading the verb and the three reported facts. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument, read-only tool with no output schema, the description adequately explains the returned content. A minor gap is that it does not say what the agent should expect when no Aseprite instance is running beyond implying a negative connection status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; there is no parameter surface for the description to clarify or compensate for. Nothing misleading is stated about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a concrete verb ("Shows") plus three specific resources: the Aseprite executable path, its version, and live bridge connectivity. This is clearly distinguishable from action siblings like launch_aseprite or run_command. It does not, however, explicitly differentiate itself from the overlapping-sounding app_state sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus app_state, list_preferences, or the other diagnostic/state tools in the sibling list. The purpose implicitly suggests a diagnostic check, but nothing tells the agent which of several state-inspection tools to pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tilemapA

Reads (action 'get') or writes (action 'set') the tile indices of a tilemap layer's cel. Set with 'cells' [{col,row,tile}] or 'rows' (2D array of tile indices, -1/null to skip) starting at col/row.

ParametersJSON Schema
NameRequiredDescriptionDefault
colNo
rowNo
rowsNo
saveNoBatch mode: write changes back to the sprite file (default true)
cellsNo
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
actionNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, which the description is consistent with (it performs reads and writes). The description adds useful write semantics (-1/null to skip, starting at col/row) but omits persistence behavior (the save flag writing back to file) and what a 'get' returns, so it adds only moderate value over 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the get/set distinction and the write formats. No padding or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no output schema, the description covers get/set intent and the two write formats, but says nothing about the return value of a 'get' or how the frame/layer defaults interact. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the description compensates well for the undocumented 'cells' and 'rows' parameters by giving their exact shapes and the -1/null skip convention. The remaining parameters (layer, sprite, frame, save, backend) are already described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs (reads/writes) and resource (tile indices of a tilemap layer's cel), and distinguishes the 'get' vs 'set' modes. It does not differentiate from similarly-named siblings like tileset, get_cels, or update_cel, so it stays at 4 rather than 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the action enum ('get'/'set'), and the description tells the agent how to supply writes via 'cells' or 'rows'. However, it never says when to prefer this over get_cels/update_cel/tileset, nor any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tilesetB

Tileset operations: list, add (tileSize, count), update (name, baseIndex, data), delete, add_tile, delete_tile, get_tile (pixels as rows+legend), set_tile (rows+legend or an image file). Tile index 0 is the empty tile.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
fileNo
nameNo
rowsNo
saveNoBatch mode: write changes back to the sprite file (default true)
countNo
indexNoTile index
actionYes
legendNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
tilesetNoTileset index (1-based), name, or a tilemap layer
tileSizeNo
baseIndexNo
propertiesNoUser-defined properties to set (object.properties)

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly carried elsewhere. The description adds a genuinely useful domain fact ('Tile index 0 is the empty tile') and hints at return shape for get_tile, but never says what delete/delete_tile destroy, whether indices shift after deletion, or how batch mode differs — and with the schema covering 'save' and 'backend', a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the action list, with no filler. It is compressed almost to telegraphic style, which costs some readability for a 15-parameter dispatcher but wastes no words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-action, 15-parameter tool with no output schema, the description covers action/parameter associations and get_tile's return shape, which is the minimum viable. It omits what 'list' returns, the effect of delete on tile indices, and per-action return values for the remaining actions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 40% schema description coverage across 15 params, the description does real work by binding parameters to actions — 'add (tileSize, count)', 'update (name, baseIndex, data)', 'set_tile (rows+legend or an image file)'. Undocumented params (index, properties, sprite, tileset, file) are never explained, but the action-to-parameter mapping is the critical missing piece and it is supplied.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (tileset) and enumerates all eight actions it dispatches, so an agent knows this is the tileset CRUD tile-manipulation surface. It is clear, but it never distinguishes itself from the sibling 'tilemap' tool, which plausibly overlaps in scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance: no statement of when to pick this over the sibling 'tilemap' tool, no note that 'action' selects the operation, and no exclusions. The action list is a menu, not usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

undo_redoB

Undoes or redoes steps on a sprite (live mode; batch processes have no history between calls).

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsNo
actionYes
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, and the description does not contradict that. It adds genuinely useful context (batch mode has no inter-call history), but omits reversibility semantics, what happens when there is no history left to undo, and any permission/auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the core action first and the mode caveat in parentheses. No filler, though the parenthetical is slightly compressed at the cost of clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter mutation tool with no output schema and no annotations covering behavior, the description covers the core purpose and the live/batch distinction. It still leaves the 'steps' parameter behavior and no-history edge cases unaddressed, so it is adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: 'sprite' and 'backend' are documented in the schema while 'steps' and 'action' are not. The description alludes to steps being undoable/redoable but adds no detail on the steps count, defaults, or the undo/redo enum meaning, so it only partially compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb pair (undoes/redoes) and a specific resource (steps on a sprite), which is unambiguous and matches the tool name. No sibling tool competes for this function, so differentiation is implicit 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one useful usage constraint – that batch processes have no history between calls, so undo/redo is effectively live-only. However, it doesn't state prerequisites, ordering considerations, or what to do in batch mode instead, leaving the guidance partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_celB

Changes a cel: position (absolute x/y or relative dx/dy), opacity, z-index, color, data, properties, or moves it to another frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNo
yNo
dxNo
dyNo
dataNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
zIndexNo
backendNoauto (default): live Aseprite if connected, else headless batch
opacityNo
toFrameNo
propertiesNoUser-defined properties to set (object.properties)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile (a non-destructive mutation) is established structurally. The description adds no behavioral context beyond that: nothing about batch-vs-live backend semantics, the save flag, permission requirements, or reversibility, despite 'save' and 'backend' being significant controls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence led by the verb, with the field list acting as an efficient index of capabilities. No filler or redundancy, though the run-on list format prioritizes brevity over scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation tool with no output schema and under-half schema coverage, the description covers the primary content fields but leaves the operational controls (save, backend, sprite, layer) unexplained. Adequate as a capability summary, incomplete as invocation guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at only 47% and 15 parameters, the description compensates well by clarifying the meaning of bare parameters the schema leaves undocumented — that x/y are absolute and dx/dy relative, and that it can set color, data, and properties. It omits save/backend/layer/sprite meaning, but it materially strengthens several otherwise opaque fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('changes') plus the resource ('cel') and enumerates the mutable surface: position, opacity, z-index, color, data, properties, and frame relocation. An agent can tell this is the cel-mutation tool, though it never explicitly distinguishes itself from siblings like copy_cel, delete_cel, or link_cels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternatives guidance is provided. The field enumeration implies context, but the agent gets no help deciding between update_cel, copy_cel, draw_pixels, or link_cels for a given mutation task.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_layerC

Changes layer properties: name, visibility, lock, opacity, blend mode, color, data, parent group, stack position.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNoUser data text
nameNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNoTimeline color
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
parentNoGroup layer to move into; '' moves to the top level
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
opacityNo
tilesetNoTilemap layers: tileset to use
visibleNo
editableNofalse locks the layer
blendModeNonormal, multiply, screen, overlay, darken, lighten, color_dodge, color_burn, hard_light, soft_light, difference, exclusion, hue, saturation, color, luminosity, addition, subtract, divide
collapsedNoGroup layers only
continuousNo
propertiesNoUser-defined properties to set (object.properties)
stackIndexNoPosition among siblings (1 = bottom)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered. However, the description adds no behavioral context beyond a field list — nothing about whether changes persist, the save/batch-mode implication, or reversibility of a move/parent change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with a colon-delimited field list — dense and efficient, no filler. The only minor issue is that it is a fragment with no leading purpose statement, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 17-parameter mutation tool with no output schema, the description covers the mutable-property surface but omits targeting (layer/sprite/backend), batch vs live semantics, and the save behavior. The schema picks up most of that, so it is adequate but leaves real gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 76%, so the schema largely documents the parameters itself. The description's field list ('name, visibility, lock, opacity, blend mode, color, data, parent group, stack position') maps roughly to parameters like parent and stackIndex, adding only marginal meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Changes') and resource ('layer properties') and enumerates exactly which fields are mutable, which separates it cleanly from siblings like add_layer, delete_layer, and convert_layer. It does not explicitly name an alternative tool, but the resource scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, when-not-to-use, or alternative mention. An agent gets no guidance on choosing this over convert_layer, set_sprite_properties, or the batch/live backend parameters that the schema exposes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_sliceD

Changes a slice.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
pivotNoPivot relative to the slice; false removes it
sliceYes
boundsNo
centerNo9-slice center, relative to the slice; false removes it
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
propertiesNoUser-defined properties to set (object.properties)

TDQS

D1.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so safety is partially covered. However, the description adds nothing about what gets modified, whether changes persist, or the live-vs-batch distinction. For a mutation tool with zero added context, this leaves important behavior undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three words is technically concise, but this is under-specification rather than economy. Nothing is front-loaded because there is essentially no content to structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An 11-parameter mutation tool with nested objects, no output schema, and 64% schema coverage demands far more description than one sentence. The agent lacks the context needed to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 64%, below the 80% threshold where a baseline of 3 would apply. The description mentions no parameters at all, so it fails to compensate for the undocumented parameters (slice, data, name, bounds are bare).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Changes a slice" is essentially a restatement of the tool name update_slice. It names the resource but gives no indication of what aspects are changed or how it differs from add_slice/delete_slice beyond the obvious. This is tautology territory per the rubric.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no mention of alternatives such as add_slice or delete_slice. The agent must infer the tool's role purely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_tagC

Changes a tag's name, range, direction, repeats, color or data.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
tagYes
dataNo
fromNo
nameNo
saveNoBatch mode: write changes back to the sprite file (default true)
colorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
aniDirNo
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
repeatsNo0 = infinite
propertiesNoUser-defined properties to set (object.properties)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The write nature of the tool is conveyed and does not contradict the readOnlyHint=false / destructiveHint=false annotations, but the description adds nothing on top of them: no indication that unspecified fields are preserved, nothing about live vs batch execution, and nothing about whether changes are saved back to the sprite.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence naming verb then resource then mutable fields. Zero waste, though the extreme terseness is part of why behavior and parameters go under-explained.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with nested objects and no output schema, the description covers only a subset of the surface. Batch/live behavior, the save flag, sprite targeting, and the required tag argument are all left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, but the description compensates by mapping natural-language concepts to parameters ('range' to from/to, 'direction' to aniDir, plus repeats, color, data, name). It still omits sprite, backend, save, properties, and the required tag identifier, so the gap is only partially closed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Changes a tag's name, range, direction, repeats, color or data') and the field list distinguishes it from add_tag/delete_tag. It stops short of naming those siblings explicitly, so the differentiation is inferred 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites (the tag must already exist), and no reference to the sibling alternatives add_tag or delete_tag for the create/remove cases. Usage is only implied by the verb 'changes'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

use_toolA

Draws with an Aseprite tool as if the user dragged through 'points' (app.useTool). Tools: pencil, brush-like strokes with eraser/spray/blur/jumble, line, curve (4 points), rectangle, filled_rectangle, ellipse, filled_ellipse, paint_bucket (1 point), gradient, contour, polygon, and selection tools (rectangular_marquee, elliptical_marquee, lasso, polygonal_lasso, magic_wand).

ParametersJSON Schema
NameRequiredDescriptionDefault
inkNo
saveNoBatch mode: write changes back to the sprite file (default true)
toolYes
brushNoBrush: built-in shape and size, or a custom image brush
colorNoDefault: foreground color
frameNo1-based frame number. Defaults to the active frame (or 1).
layerNoLayer name, 'Group/Child' path, or 1-based index from get_sprite_info. Defaults to the active layer.
buttonNoright uses the background color
pointsYes
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
bgColorNo'#rrggbb', '#rrggbbaa', a name, a palette index, or {r,g,b,a} / {h,s,v,a} / {h,s,l,a} / {gray,a}
opacityNo
brushSizeNo
toleranceNo
contiguousNo
tilemapModeNo
tilesetModeNo
pixelPerfectNo
selectionModeNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false and destructiveHint=false; the description adds real behavioral context beyond that – it discloses drag-like point semantics and per-tool point cardinality (curve = 4 points, paint_bucket = 1 point), which prevents malformed calls. It still omits mutation/save side effects, though the save parameter schema partly covers that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence, front-loaded with the core semantics (how drawing is performed) followed by the tool enumeration. No filler, though the tool list is long and packed into one clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 20-parameter tool with nested objects and no output schema, the description covers the drawing model and valid tool names but says nothing about coordinate space, color/brush interplay, layer/frame targeting, or live-vs-batch behavior. Adequate for the required call shape, thin for full correct usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 45% across 20 parameters, so the description must compensate, and it does so for the two required ones – crucially 'tool', which is an untyped string in the schema and only gains valid values from the description. The other 18 parameters (brush, ink, tolerance, tilemapMode, selectionMode, etc.) get no description-level semantics, so it is only partially compensating.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: drawing with an Aseprite tool by simulating a drag through 'points', and even names the underlying API (app.useTool). It also enumerates the full accepted tool-name space, which lets an agent distinguish this from siblings like draw_shapes, draw_pixels and draw_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated: the list of supported tools (including selection tools, gradients, contours) signals broad coverage, but there is no explicit when-to-use vs draw_shapes/draw_pixels/draw_text, and no when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

view_settingsA

Reads or changes per-sprite view settings: grid (show, snap, bounds, color, opacity), pixel grid, symmetry mode and axes, tiled mode, onion skin, overlays (layer edges, selection edges, slices, auto guides, tile numbers, brush preview), checkerboard colors; and in live mode zoom, scroll, fit to screen, playback, timeline and preview window. Call with no options to read them.

ParametersJSON Schema
NameRequiredDescriptionDefault
gridNo
showNo
zoomNoLive: editor zoom (1 = 100%)
scrollNoLive: sprite pixel to center the editor on
spriteNoFile path, open tab title, or sprite id. Defaults to the active sprite (live). Batch mode needs a file path.
backendNoauto (default): live Aseprite if connected, else headless batch
playbackNoLive: start/stop animation playback (toggles)
symmetryNo
timelineNoLive: open (true) or close (false) the timeline
fitScreenNoLive: zoom to fit
onionSkinNo
pixelGridNo
tiledModeNo
backgroundNoCheckerboard behind transparent pixels
togglePreviewNoLive: show/hide the preview window

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare that this is a non-destructive, non-read-only tool. The description adds real behavioral context the annotations lack: which options are live-mode only (zoom, scroll, playback, timeline, preview), that batch mode requires a file path for `sprite`, and that backend defaults to live if connected. It does not describe what a read call returns, but it goes well beyond 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One long sentence, but it is front-loaded with the core verb/resource before the parenthetical enumeration, and the read-usage sentence is placed last where it reads naturally. Dense but nearly all of it earns its place given 15 parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-required-param, nested, no-output-schema tool, the description covers the setting surface well and explains the live/batch distinction. Remaining gaps (return shape on read, individual nested field meaning) are modest given the schema carries those definitions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 15 params and only 60% schema description coverage, the description does meaningful work: it groups the nested objects (grid, pixel grid, symmetry, tiled mode, onion skin, overlays, checkerboard) and flags which parameters apply only in live mode. It stops short of explaining individual nested toggles like `grid.snap` or `background.size`, which the schema also leaves undescribed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair and resource ('Reads or changes per-sprite view settings') and then enumerates the exact setting groups covered. 'Per-sprite' implicitly separates it from the global `preferences` sibling, though no sibling is named outright.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The line 'Call with no options to read them' clearly distinguishes the read path from the write path, which is genuinely useful. However, there is no guidance on when to use this versus `preferences` (global settings) or other view-affecting tools, so usage is only partially implied.

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.

  1. 73 tool updatesv0.1.1
    • First observedadd_frames
    • First observedadd_layer
    • First observedadd_slice
    • First observedadd_tag
    • First observedapi_docs
    • First observedapp_state
    • First observedapply_filter
    • First observedask_user
    • First observedcanvas_size
    • First observedchange_color_mode
    • First observedclear
    • First observedcli
    • First observedclipboard
    • First observedclose_sprite
    • First observedconvert_layer
    • First observedcopy_cel
    • First observedcrop_sprite
    • First observeddelete_cel
    • First observeddelete_frames
    • First observeddelete_layer
    • First observeddelete_slice
    • First observeddelete_tag
    • First observeddraw_image
    • First observeddraw_pixels
    • First observeddraw_shapes
    • First observeddraw_text
    • First observedduplicate_layer
    • First observedduplicate_sprite
    • First observedexport
    • First observedexport_sprite_sheet
    • First observedflip_rotate
    • First observedget_cels
    • First observedget_palette
    • First observedget_pixels
    • First observedget_sprite_info
    • First observedimport_sprite_sheet
    • First observedinstall_extension
    • First observedlaunch_aseprite
    • First observedlink_cels
    • First observedlist_commands
    • First observedlist_preferences
    • First observedlist_sprites
    • First observedmerge_layers
    • First observedmove_frame
    • First observednew_sprite
    • First observedopen_sprite
    • First observedpalette_edit
    • First observedpreferences
    • First observedproperties
    • First observedrecent_events
    • First observedrender_preview
    • First observedreplace_color
    • First observedresize_sprite
    • First observedrun_command
    • First observedrun_lua
    • First observedsave_palette
    • First observedsave_sprite
    • First observedselect
    • First observedselection_edit
    • First observedset_active
    • First observedset_frame_duration
    • First observedset_palette
    • First observedset_sprite_properties
    • First observedstatus
    • First observedtilemap
    • First observedtileset
    • First observedundo_redo
    • First observedupdate_cel
    • First observedupdate_layer
    • First observedupdate_slice
    • First observedupdate_tag
    • First observeduse_tool
    • First observedview_settings

TDQS

C2.9/5.0

Scored across 73 tools

Disambiguation3/5

Many tools target distinct resources and actions, but there is meaningful overlap among drawing tools (use_tool, draw_shapes, draw_pixels, draw_image, draw_text) and execution tools (run_command, run_lua, cli). Generic names like preferences, properties, status, and app_state also require careful reading to avoid misselection. Descriptions help, but boundaries are not always obvious.

Naming Consistency3/5

All names use snake_case, which keeps them readable, but the conventions are mixed: verb_noun (list_sprites, add_layer), noun-only (tileset, clipboard, preferences), and noun_verb (selection_edit, palette_edit). There is no single predictable pattern across the set.

Tool Count1/5

With 73 tools, this is far beyond the well-scoped 3-15 range and qualifies as an extreme mismatch by the rubric's 50+ threshold. Even for a broad application like Aseprite, the volume is likely to overwhelm an agent selecting the right tool.

Completeness5/5

The surface covers sprites, layers, frames, cels, tags, slices, tilesets, tilemaps, palettes, selections, drawing, filters, import/export, preferences, clipboard, events, and dialogs. It provides full CRUD and lifecycle operations across the Aseprite domain with no obvious gaps.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to drive Aseprite for pixel-art creation, including sprite setup, grid-based drawing, layer/frame/tag management, reference image import, and export, with rendered previews after every mutation.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to create, inspect, edit, and export pixel art, sprites, animations, and spritesheets using headless Aseprite, and to convert arbitrary images into indexed pixel art.
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    Enables AI assistants to create and edit pixel art and animated sprites in Aseprite through 104 tools covering drawing, layers, animation, palettes, tilemaps, exports, visual analysis, and raw Lua scripting.
    116
    MIT