Skip to main content
Glama
midarikawa

Aseprite MCP Tools

by midarikawa

draw_text

Draws text onto an Aseprite sprite by rasterizing glyphs externally and compositing them, since the Lua API lacks native text drawing.

Instructions

Draw text onto a sprite.

Glyphs are rasterised outside Aseprite and composited in, because the Lua API has no text drawing of its own.

Args: filename: Aseprite file to modify text: String to draw x: X coordinate of the anchor point y: Y coordinate of the anchor point font: Font name from list_text_fonts, or a path to a .ttf/.otf or a bitmap font directory size: Pixel size for TrueType fonts; integer scale factor for bitmap fonts (default 1) color: Text colour, #RRGGBB or #RRGGBBAA (default white) layer_name: Layer to draw on; the active/first layer if omitted frame_index: Frame index starting at 1 (default 1) anchor: Which point of the text (x, y) refers to - one of topleft, top, topright, left, center, right, bottomleft, bottom, bottomright, baselineleft, baseline, baselineright (default topleft) letter_spacing: Extra pixels between glyphs (default 0) bold: Faux-bold passes; each grows strokes by 1px (default 0) outline_color: If set, draw a 1px outline in this colour outline_width: Outline thickness in pixels (default 1) outline_diagonal: Include diagonal neighbours in the outline, giving a rounded corner; False gives a boxier 4-way outline (default True) shadow_color: If set, draw a drop shadow in this colour shadow_dx: Shadow X offset (default 1) shadow_dy: Shadow Y offset (default 1) antialias: Keep greyscale edges instead of hard pixels (default False) create_if_missing: Create the layer/cel if absent (default True)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
xYes
yYes
boldNo
fontYes
sizeNo
textYes
colorNo#FFFFFF
anchorNotopleft
filenameYes
antialiasNo
shadow_dxNo
shadow_dyNo
layer_nameNo
frame_indexNo
shadow_colorNo
outline_colorNo
outline_widthNo
letter_spacingNo
outline_diagonalNo
create_if_missingNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that glyphs are rasterised externally and composited in, that create_if_missing=True will create the layer/cel if absent, and how outline, shadow, and antialias alter output pixels. It stops short of describing return values, failure modes (e.g. font not found), or whether the sprite must already be open/saved.

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 one-line purpose and the Lua-API rationale are front-loaded, then a clean per-parameter list follows. Nothing is padded, though the explanatory second sentence is somewhat optional and the arg block is long by necessity rather than by choice.

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 20-parameter mutation tool with no output schema and no annotations, the description covers coordinate/anchor semantics, layer and frame targeting, creation behavior, and all styling options. Remaining gaps are error behavior and confirmation of the mutation/permission model, which are modest given the otherwise thorough coverage.

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

Parameters5/5

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

Schema coverage is 0% across 20 parameters, so the description must compensate entirely — and it does: every parameter is documented with meaning, accepted value formats (#RRGGBB, .ttf/.otf, bitmap directory), enumeration of anchor points, and defaults. This is exactly the value-add the schema lacks.

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 ('Draw text onto a sprite') and adds a rationale for why glyph rasterisation happens outside Aseprite. This clearly separates it from sibling drawing tools like draw_pixels or draw_line, though it never names those alternatives 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?

Usage is implied rather than stated: the font parameter points the agent at list_text_fonts for valid font names, which is a useful cross-tool hook. However, there is no explicit when-to-use/when-not guidance, no mention of pairing with measure_text for layout, and no prerequisites for an operation that mutates a file.

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

Deploy Server

Other Tools