Skip to main content
Glama
with-pebbly

aseprite-ai-artist

by with-pebbly

Layers

layer
Destructive

Manage sprite layers with operations like create, rename, delete, reorder, group, merge, duplicate, and set properties. Supports batch operations for efficient rig building.

Instructions

Manage layers. Ops: 'list', 'create', 'rename', 'delete', 'reorder', 'set' (visibility/opacity/blend/lock), 'group', 'ungroup', 'merge', 'duplicate', 'activate'. Pass batch to run several in one undoable action — building a rig in one call is the normal use. A character that will be animated wants its parts on separate layers (head, torso, arm-far, arm-near, leg-far, leg-near) before any frames exist; splitting baked pixels apart later is far more work.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
opNoSingle operation. Use `batch` instead for several.
nameNo
batchNoOperations applied in order, in one undoable action. Same shape as the single-op arguments.
indexNoTarget stack position for 'reorder'; 0 is bottom.
namesNoFor 'merge' and bulk 'group'.
parentNoGroup layer to nest under.
spriteNoWhich sprite: its id as '#7' (what every result reports back, and the only unambiguous form — two unsaved documents are both called 'Sprite'), its filename, or its display name. Omit to use the sprite Aseprite has focused.
newNameNo
opacityNo
visibleNo
editableNo
blendModeNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
layersNo
spriteYes
appliedNo
activeLayerNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changedv0.1.6
    • changedInput schema / properties / batch / description
      Previous value: -"Array of operation objects, each shaped like the single-op arguments. Applied in order."New value: +"Operations applied in order, in one undoable action. Same shape as the single-op arguments."
    • changedInput schema / properties / batch / items / additionalProperties
      Previous value: -{}New value: +false
    • addedInput schema / properties / batch / items / properties
      Added value: +{
      +  "blendMode": {
      +    "$ref": "#/properties/blendMode"
      +  },
      +  "editable": {
      +    "type": "boolean"
      +  },
      +  "index": {
      +    "description": "Target stack position; 0 is bottom.",
      +    "type": "integer"
      +  },
      +  "name": {
      +    "type": "string"
      +  },
      +  "names": {
      +    "description": "For 'merge' and bulk 'group'.",
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "newName": {
      +    "type": "string"
      +  },
      +  "op": {
      +    "$ref": "#/properties/op"
      +  },
      +  "opacity": {
      +    "maximum": 255,
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "parent": {
      +    "description": "Group layer to nest under.",
      +    "type": "string"
      +  },
      +  "visible": {
      +    "type": "boolean"
      +  }
      +}
    • addedInput schema / properties / batch / items / required
      Added value: +[
      +  "op"
      +]
    • addedInput schema / properties / batch / maxItems
      Added value: +128
    • changedInput schema / properties / sprite / description
      Previous value: -"Sprite filename or id. Omit to use the sprite Aseprite has focused."New value: +"Which sprite: its id as '#7' (what every result reports back, and the only unambiguous form — two unsaved documents are both called 'Sprite'), its filename, or its display name. Omit to use the sprite Aseprite has focused."
    • addedOutput schema / properties / layers / items / properties / cels
      Added value: +{
      +  "description": "1-based frames that have a cel on this layer.",
      +  "items": {
      +    "type": "integer"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / layers / items / properties / editable
      Added value: +{
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / layers / items / properties / isTilemap
      Added value: +{
      +  "type": "boolean"
      +}
    • changedOutput schema / properties / layers / items / required
      Previous value: -[
      -  "name",
      -  "index",
      -  "visible",
      -  "opacity",
      -  "blendMode",
      -  "isGroup"
      -]New value: +[
      +  "name",
      +  "index",
      +  "visible",
      +  "editable",
      +  "opacity",
      +  "blendMode",
      +  "isGroup",
      +  "isTilemap",
      +  "cels"
      +]
  2. First observedv0.1.0

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint: true, so the description doesn't need to repeat that. It adds context about undoable batch operations and the value of structuring layers early, but does not detail specific destructive effects (e.g., what happens on delete or merge). This is adequate given annotation coverage, but adds limited new behavioral insight.

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?

The description is concise, with the core purpose and ops listed upfront. The rigging example adds practical context but is a bit lengthy. Still, every sentence earns its place, and it avoids redundancy.

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?

Given the tool's complexity (12 params, 11 ops) and the presence of an output schema, the description provides a sufficient high-level overview. It explains the batch usage and gives a concrete use case. It doesn't detail every op's parameters, but the schema covers those, and the output schema handles return values. It feels complete for an agent to decide when to call it.

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 50%, so the description should compensate for the remaining parameters, but it doesn't. It only mentions 'batch' and lists ops without explaining individual parameters like 'index', 'names', or 'blendMode'. The description adds minimal semantic value beyond what the schema already provides.

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?

The description clearly states the tool's purpose: 'Manage layers' with a comprehensive list of operations. It distinguishes from sibling tools by focusing on layer-specific actions, and the rigging example ties it to animation workflows, making it unambiguous.

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 provides clear context for when to use the tool, specifically for building animation rigs with separate layers before frames exist. It also mentions the batch feature for multiple operations in one undoable action. However, it does not explicitly state when not to use it or contrast with alternative tools like sprite_manage.

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