Skip to main content
Glama

Texel

Texel is a format and a toolchain for making Minecraft textures as code. A texture is a JSON spec: a palette and an ordered list of drawing operations addressed to named parts and faces of the model (head.front, rightArm.sides@overlay). A compiler turns the spec into the PNG the game reads, the same bytes every time, and a review returns what is wrong with it as JSON paths, fix hints, an art score and pixel-art advice. The tools are built for AI agents: an MCP server, a command-line tool and an Agent Skill, also packaged as a Claude Code plugin.

It covers player skins (classic and slim) and, through layouts, 25 other textures: mobs such as zombies, skeletons, creepers, pigs, wolves and iron golems, armor layers, capes with elytra, and 16 × 16 items and blocks, all in the Java Edition 1.21 texture layouts.

Texel is open source (MIT) and in development, at version 0.8.0. The format is versioned (version: 1) but may still change between minor releases. Treat everything as a beta. The site texel.dev.br is built on this toolchain.

Review sheet of the wizard example: front, back and both sides, then the texture

The image above is the review sheet the tools return for this spec. It is the wizard example without its $schema, description, author and tags fields and the layers' note comments, which do not change the pixels (both compile to the same PNG):

{
  "version": 1,
  "name": "Star Wizard",
  "model": "classic",
  "palette": {
    "skin": "#e0ac7e", "robe": "#2f4fb0", "gold": "#e8c34a", "beard": "#dcdcdc",
    "eyes": "#3a6fd9", "boots": "#4a3324", "star": "#fff1a8"
  },
  "layers": [
    { "op": "material", "target": "all", "color": "skin", "kind": "skin" },
    { "op": "material", "target": "body+arms", "color": "robe", "kind": "fabric" },
    { "op": "material", "target": "legs", "color": "robe~-1", "kind": "fabric" },
    { "op": "material", "target": "arms", "region": "hands", "color": "skin", "kind": "skin" },
    { "op": "rect", "target": "arms.sides", "region": "cuffs", "color": "gold" },
    { "op": "material", "target": "legs", "region": "boots", "color": "boots", "kind": "leather" },
    { "op": "face", "id": "face", "skin": "skin", "eyes": "eyes", "brows": "beard", "beard": "full", "beardColor": "beard", "mouth": "smile" },
    { "op": "hair", "id": "hair", "color": "beard", "style": "long", "fringe": "parted" },
    { "op": "lighting" },
    { "op": "rect", "target": "body.sides", "region": "belt", "color": "gold" },
    { "op": "points", "target": "body.front", "points": [[3, 8], [4, 8]], "color": "gold~-2" },
    { "op": "points", "target": "body.front+back", "points": [[1, 2], [6, 4], [2, 6], [5, 10]], "color": "star" },
    { "op": "points", "target": "legs.front", "points": [[1, 1], [2, 4]], "color": "star" },
    { "op": "material", "id": "hood", "target": "body.back@overlay", "y": 0, "h": 3, "color": "robe~-1", "kind": "fabric" },
    { "op": "rect", "target": "body.front@overlay", "region": "collar", "color": "gold~-1" },
    { "op": "rect", "target": "arms.sides@overlay", "region": "cuffs", "color": "gold~1" }
  ]
}

The 64 × 64 texture it compiles to is docs/images/wizard.png.

Installing

The MCP server and the CLI need Node 20 or later.

Claude Code plugin. This repository is a plugin marketplace. The plugin starts the MCP server from a single bundled file (no npm install) and adds the minecraft-skin-design skill. Files are written to the project directory.

/plugin marketplace add Brunovncs/texel-mcp
/plugin install texel@texel

Or use this prompt. Paste it into the agent you want to use Texel with (Claude Code, Codex, Cursor, Claude Desktop or any other client with MCP support) and it installs the MCP server for you:

Install the Texel MCP server for me (https://github.com/Brunovncs/texel-mcp).

1. Check that Node.js 20 or later is installed (`node --version`). If it is not, stop and tell me.
2. Create the folder ~/.texel (%USERPROFILE%\.texel on Windows) and download the single-file
   server into it:
   https://raw.githubusercontent.com/Brunovncs/texel-mcp/main/plugin/server/texel-mcp.mjs
3. Check that it runs: `node <path to texel-mcp.mjs> --version` must print a version number.
4. Ask me which folder the skins should be saved in. If I don't care, skip the --workspace part
   below; files then go to the directory the client starts the server in.
5. Register it as an MCP server named "texel" in the client you are running in, using absolute
   paths:
   - Claude Code: claude mcp add --scope user texel -- node <path to texel-mcp.mjs> --workspace <folder>
   - Any other client: add this to its MCP configuration, keeping the servers already there:
     {"mcpServers": {"texel": {"command": "node",
       "args": ["<path to texel-mcp.mjs>", "--workspace", "<folder>"]}}}
6. Tell me what you changed and whether I need to restart the client. Once the tools are
   available, call texel_get_example and then texel_render on that example to confirm they work.

Any MCP client. The package is texel-mcp on npm. This configuration works in Claude Desktop, Cursor, VS Code and other clients that read the usual mcpServers format:

{
  "mcpServers": {
    "texel": {
      "command": "npx",
      "args": ["-y", "texel-mcp", "--workspace", "/absolute/path/skins"]
    }
  }
}

In Claude Code the same is claude mcp add texel -- npx -y texel-mcp. To run a local build instead (see Building and testing), point the client at the file: "command": "node", "args": ["/absolute/path/texel-mcp/dist/texel-mcp.mjs", "--workspace", "/absolute/path/skins"]. plugin/server/texel-mcp.mjs is the same server with its dependencies bundled, and runs from anywhere with plain node.

CLI. npx -y -p texel-mcp texel-cli build skin.json -o skin.png --sheet sheet.png, or node dist/texel.mjs ... from a build. It has no dependencies. --help lists the commands: build, review, patch, sheet, palette, family, import, diff, share, pull, live, format, layouts and init.

All writes go to one workspace directory: --workspace, $TEXEL_WORKSPACE, or the directory the server was started in. Paths that resolve outside it are refused. docs/install.md has the details, including installing the skill by hand.

Related MCP server: mnehmos.aseprite.mcp

The spec

A spec has a palette (names for colors, with derived tones such as robe~-1, a step darker and cooler), an optional legend (one character per color, for pixel rows) and layers, which run in order. Each layer is one of 17 operations. Twelve are plain drawing (fill, rect, clear, pixels, points, line, gradient, pattern, noise, shade, copy, mirror), one fixes symmetry (symmetrize) and four are higher level: material (fabric, leather, metal, fur, knit and other surfaces), face, hair and lighting.

A layer's target is a selector: parts, faces and a layer, as in head.front, legs.sides, body.front+back@overlay or arms.top@both. Coordinates are local to each face: (0, 0) is the top-left pixel of the face as seen from outside the model, and drawing is clipped to the face. A selector that matches several faces runs the operation once per face, so { "op": "rect", "target": "legs.sides", "y": -2, "color": "boots" } paints the bottom two rows all the way around both legs. Named regions (belt, cuffs, boots, hands, collar) stand in for row numbers.

Changes are made with patches by layer id ({ "patch": [{ "do": "update", "id": "hair", "set": { "style": "ponytail" } }] }), so a fix round touches only the layers it names. A family document expands one base spec into variants or a matrix of axes (teams, ranks, factions) by swapping palettes, turning layers on and off and appending layers. An existing PNG can be imported into an editable spec, one layer per painted face.

The full reference is docs/spec.md, with a JSON Schema in schema/skinspec.v1.json. docs/protocol.md describes the loop an agent is expected to follow (brief, draft, render, review, patch, ship), and docs/art-guide.md what makes a skin read well at 64 × 64. The same pages are available to the agent through texel_read_docs and the texel://docs/{page} resources, and the 13 examples in examples/ through texel_get_example.

What the review returns

Every render comes with a review. With a typo in a palette name and in a face name, the relevant part of the answer is:

{
  "ok": false,
  "score": 38,
  "issues": [
    { "level": "error", "code": "bad-color", "path": "$.layers[1].color",
      "message": "unknown color or palette key \"clth\"", "hint": "did you mean \"cloth\"?" },
    { "level": "error", "code": "bad-selector", "path": "$.layers[2].target",
      "message": "unknown face \"frnt\"", "hint": "did you mean \"front\"?" },
    { "level": "warning", "code": "blank-face", "path": "head.front",
      "message": "the face (head.front) uses fewer than 3 colors and will read as blank",
      "hint": "draw eyes, brows and a mouth with a \"pixels\" op on head.front" }
  ]
}

Errors and warnings point at the JSON path or the face that caused them, and most carry a hint that names the fix. The score (0 to 100) only measures technical hygiene: errors, holes in the base layer, blank faces, flat surfaces, too few colors. The art part of the review has its own score from seven measured checks: R2 to R7 (face readability, lightness contrast between parts, light from above, surface texture, a designed back, use of the overlay for depth) and a color count, each with a note on what was measured and a hint. art.advice names classic pixel-art mistakes found in the texture (pillow shading, shadows that only get darker, static-like noise, a band that stops at a cube corner) with the faces where they show; it never changes a score. A next list orders what to fix first.

Whether the texture matches the brief (R1) is never measured. The MCP tools return a review sheet image (front, back, both sides and the texture, as above) so an agent with vision can judge that itself, and a text render for models without vision. In clients that support MCP Apps, texel_render also opens an interactive 3D preview.

Tools

The MCP server has 14 tools, resources for the docs, examples and schemas, the ui://texel/viewer MCP App and 4 prompts (design_skin, continue_skin, design_family, critique_skin).

Tool

What it does

texel_render

Compile and review a spec (inline, or a workspace file); returns the review, the sheet image, optionally a close-up of some parts and the texture.

texel_patch

Apply a patch by layer id and render the result. Given a workspace file, it edits the file in place and returns only the review, so the spec isn't resent on every iteration.

texel_validate

Errors and warnings only, no images.

texel_save

Write the PNG, the .skin.json source and optionally the sheet to the workspace.

texel_live

Start a live session: a page served on 127.0.0.1 that shows every render as it happens (the texel.dev.br studio can follow it too, for editing).

texel_share

Store the spec on texel.dev.br and return a short link; falls back to a long self-contained link offline.

texel_pull

Load the spec behind a share link, to keep working on it.

texel_render_family

Expand a family and return a lineup image and a score per member.

texel_save_family

Write every member of a family plus lineup.png.

texel_import_png

Turn an existing texture PNG into an editable spec.

texel_palette

The main colors of a reference image as a palette and legend, with a role per color.

texel_diff

Which faces and pixels differ between two specs, with a mask image.

texel_get_example

One of the bundled example specs, or the example family.

texel_read_docs

A documentation page as markdown.

How it works

The hard part of drawing a Minecraft texture is not the drawing but the map. A skin's right arm is six rectangles scattered over a 64 × 64 atlas, some mirrored, the overlay layer is a second set of rectangles elsewhere, a pig's body lies on its side so its "top" is the animal's back, and every mob has its own atlas. An agent writing pixels into the atlas directly has to carry that map in its head and gets it wrong in ways it cannot see.

In Texel the compiler owns the map. Each layout is data: its parts as boxes with sizes and UV origins, which parts are mirrored, which lie turned, and which are cut out by transparency. The agent addresses rightArm.front in the face's own coordinates, and the compiler maps every pixel to its place in the atlas. The review, the sheet views, the 3D preview, import and diff read the atlas back through the same map. That turns a spatial task the agent is bad at into a symbolic one it is good at: naming parts, choosing colors, ordering layers, and acting on errors that point at a line of JSON.

Compilation is deterministic. The only randomness is in noise and material, and both use a seeded generator (the seed defaults to the layer's position), so the same spec gives the same PNG, byte for byte. That makes a spec something that can be reviewed in a diff, kept in version control and regenerated in a build.

The code is in src/core (compiler, layouts, review, views, PNG encoding and decoding; no dependencies and no DOM), src/mcp (the server and the MCP App viewer), src/cli, and src/live (live sessions and the update check). The MCP server depends on @modelcontextprotocol/server and zod; the CLI has no dependencies.

Measurements

Measured on an AMD Ryzen 5 7600 (12 threads), Windows 11, Node 22.13.1, with npm run measure (scripts/measure.ts): each of the 13 bundled examples was compiled 210 times in one process, the first 10 runs as warm-up, and the table shows the median of the other 200. "Compile + PNG" is the spec text to an encoded PNG. "Full render" is what texel_render computes: compile, the full review with art checks and advice, the review sheet and both PNGs. Spec size is the example file minified with JSON.stringify; PNGs are encoded at zlib level 9, as the tools do.

Example

Layout

Texture

Spec (bytes)

PNG (bytes)

Compile + PNG

Full render

explorer

player

64 × 64

2 958

1 246

1.36 ms

19.55 ms

knight

player

64 × 64

3 006

1 090

1.43 ms

15.61 ms

robot

player

64 × 64

2 537

1 473

2.12 ms

15.68 ms

astronaut

player (slim)

64 × 64

3 134

865

1.39 ms

17.87 ms

wizard

player

64 × 64

1 908

2 968

3.05 ms

21.18 ms

cozy

player (slim)

64 × 64

1 639

2 949

2.91 ms

20.48 ms

winged-pig

player

64 × 64

3 272

2 467

3.31 ms

22.94 ms

miner-zombie

zombie

64 × 64

1 518

2 198

1.92 ms

17.31 ms

creeper

creeper

64 × 32

1 156

1 058

1.37 ms

11.58 ms

mud-pig

pig

64 × 64

1 970

1 477

1.98 ms

16.49 ms

bronze-armor

humanoid (armor)

64 × 32

1 605

1 719

1.54 ms

13.37 ms

banner-cape

cape

64 × 32

1 236

1 300

1.23 ms

13.97 ms

ember-blade

item

16 × 16

1 058

160

0.06 ms

4.01 ms

Across the examples the median is 1.54 ms to compile and encode and 16.5 ms for a full render. Startup of the MCP server and the transfer of the sheet image to the client are not included.

A spec is not smaller than the image it produces: the median minified spec is 1.33 times the size of its PNG, between 1 058 and 3 272 bytes. At a rough 4 bytes per token that is about 265 to 820 tokens per spec; this was not checked with a tokenizer, and JSON usually takes more tokens per byte than prose. The point of the format is not size. A PNG is compressed binary an agent cannot write or edit by hand, while each line of a spec is a decision that can be read, patched and reviewed.

Determinism was checked three ways. Within one process, all 210 runs of each example produced byte-identical PNGs (one distinct SHA-256 per example). A second process gave the same 13 hashes. The CLI, built and installed from the packed npm tarball, produced the same hashes for the four examples that were compared (explorer, knight, creeper, ember-blade). All of this ran on one Windows machine; the CI workflow runs the same test suite on Linux, but identical bytes across operating systems have not been compared directly.

Other counts at version 0.7.0 (0.8.0 adds no layouts or operations): 13 example specs and 1 example family (6 members), 26 layouts plus 25 aliases (husk, stray, elytra, zombified_piglin, mooshroom and others), 17 operations, and 113 tests in 10 files.

Limitations

  • Java Edition only. Bedrock skins and Bedrock geometry are not supported.

  • Only the vanilla box models. There are no custom 3D models or geometry, no HD skins (textures are the vanilla sizes) and no emissive maps.

  • Layouts follow the Java Edition 1.21 model code: the UV maps were taken from 1.21.4 and 1.21.11 and checked by running vanilla textures through the views. Other versions are not checked. Mobs without a layout (horses, llamas, fish and many others) cannot be painted yet.

  • The views and the 3D preview only model 90° turns. Tilted parts, such as the hoglin's head or the witch's hat, are drawn untilted.

  • A family can recolor, switch layers on and off and append layers, but it cannot change or remove a layer of the base, so its members share one design: closer to a set of uniforms than a cast of different characters.

  • The art score and the craft advice are heuristics. They have not been validated against human judgment, and they say nothing about whether the texture matches the brief. How good a texture looks depends mostly on the agent writing the spec.

  • texel_share, texel_pull and the short links need texel.dev.br: share links are stored there. Long #z= links work without the site's storage. Live sessions don't: the local server serves its own page, and the site's studio is only needed to edit a session. TEXEL_SITE points all of this at another origin.

  • Once a day the CLI and the server ask texel.dev.br for version.json to tell the agent about a newer release. The request waits at most 1.5 s, carries no data about the user or the specs, and is skipped when TEXEL_NO_UPDATE_CHECK=1 or CI is set.

Building and testing

You need Node 20 or later.

npm install
npm run typecheck        # tsc --noEmit
npm test                 # vitest: 113 tests, including spawned CLI and MCP server bundles
npm run build            # dist/texel-mcp.mjs and dist/texel.mjs (the npm package)
npm run build:plugin     # plugin/server/texel-mcp.mjs and its THIRD_PARTY_NOTICES.md
npm run measure          # the numbers in Measurements

The npm build keeps the MCP SDK and zod as dependencies. The plugin build bundles them into one file, because a Claude Code plugin has no install step; it is committed, and CI fails if it no longer matches the source. Docs, examples, schemas and the viewer are embedded in both builds. SITE_URL at build time changes the site origin baked into the builds and the docs.

Bump the version in package.json, plugin/.claude-plugin/plugin.json and the skill's metadata.version together, and add a CHANGELOG.md section for it; a test checks both.

License

MIT, see LICENSE. The plugin's single-file server bundles the MCP TypeScript SDK (Apache-2.0, with parts under MIT) and zod (MIT); their licenses are in plugin/server/THIRD_PARTY_NOTICES.md.

Not an official Minecraft product. Not approved by or associated with Mojang or Microsoft.

Available Tools

14 tools
texel_diffDiff two skinsA
Read-onlyIdempotent

Compare two specs pixel by pixel and report which faces changed. Use it to confirm a patch touched only what you intended. Returns the changed-pixel mask over the texture map (magenta = changed).

ParametersJSON Schema
NameRequiredDescriptionDefault
afterYesA Texel skin spec (version 1) as a JSON object or JSON text. Format: texel://docs/spec, schema: texel://schema/skinspec.v1
beforeYesA Texel skin spec (version 1) as a JSON object or JSON text. Format: texel://docs/spec, schema: texel://schema/skinspec.v1

Output Schema

ParametersJSON Schema
NameRequiredDescription
facesYes
changedPixelsYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and closed-world scope, so safety is covered. The description adds genuine value beyond that by describing the return artifact (changed-pixel mask over the texture map) and the magenta encoding for changed regions.

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, front-loaded with the core action and ending with the return convention. Nothing is wasted, though the return-value sentence partially overlaps with the existing output schema.

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 a full output schema, rich annotations, and fully documented parameters, the description only needs to frame intent and it does so. A brief note on what inputs are accepted (JSON object vs. text) would close the small remaining 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 100% and both before/after parameters are fully documented in the schema, including the skinspec.v1 format reference. The description adds no additional parameter-level guidance, so the baseline 3 applies.

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 (compare/diff) and resource (two skin specs) plus the output granularity (per-face, pixel by pixel). This clearly distinguishes it from write-oriented siblings like texel_patch or rendering siblings like texel_render.

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 it to confirm a patch touched only what you intended" gives a concrete scenario, implicitly positioning it after texel_patch. It does not, however, name an alternative tool or state any when-not-to-use condition.

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

texel_get_exampleGet example specA
Read-onlyIdempotent

Return a complete, working example spec to learn from or fork. Skins: explorer, knight, robot, astronaut, wizard, cozy, winged-pig, miner-zombie, creeper, mud-pig, bronze-armor, banner-cape, ember-blade. Family: guild.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and closed-world behavior, so the safety profile is covered. The description adds only 'complete, working example' (i.e., the output is usable as-is), and says nothing about size, whether the spec is renderable, or its relationship to the live state. Modest value-add 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?

Purpose is front-loaded in the first sentence, followed by the required enumerations. The long id list is justified given 0% schema coverage, though grouping labels ('Skins', 'Family') are slightly cryptic without explanation.

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?

One required parameter fully enumerated, no output schema needed since the description says it returns a spec, and annotations cover the read-only/idempotent nature. Remaining uncertainty (spec format, size, downstream use) is minor for a simple read tool.

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 0%, so the description carries the burden and does so by enumerating all 14 accepted ids and grouping them ('Skins:' vs 'Family:'), which matches the single enum parameter exactly. It does not explain id semantics beyond the naming, but the enumeration compensates well for the empty 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 and resource ('Return a complete, working example spec') and clarifies its intent with 'to learn from or fork'. It does not name any sibling, but the resource is distinctive enough that an agent can separate it from texel_read_docs or texel_pull.

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?

'to learn from or fork' implies the use case (reference material, starting point for authoring), which is useful context. However, it never states when to prefer this over siblings like texel_pull or texel_read_docs, nor what to do with the result (e.g., feed it to texel_save or texel_patch).

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

texel_import_pngImport skin PNGA
Read-onlyIdempotent

Convert an existing PNG in the workspace into an editable spec, one layer per painted face, palette keys c01…cNN. A player skin (64×64 or legacy 64×32) by default; pass layout for a mob, armor, cape, item or block texture. Rename palette keys to material names before editing.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to a .png file, relative to the workspace.
layoutNoTexture layout of the PNG, e.g. "zombie", "humanoid" (armor), "item". Default: player skin.

Output Schema

ParametersJSON Schema
NameRequiredDescription
specYes
lossyYes
modelYes
layoutYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations establish read-only, idempotent, non-open-world behavior. The description adds useful behavioral detail beyond that: conversion produces one layer per painted face and palette keys c01…cNN, with player-skin defaults and layout-specific outputs. It stops short of covering error or permission behavior, but the annotations carry the safety profile.

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 front-loaded with the core conversion action, then covers default behavior, layout overrides, and a brief post-import note. Every sentence contributes to correct invocation or expected output understanding.

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

Completeness5/5

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

With annotations covering safety and an output schema covering return values, the description needs only to explain the operation, default layout, and output structure. It does all three, including the editable-spec format and palette-key convention, leaving no critical gaps for correct invocation.

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 path and layout. The description still adds value by clarifying the default player-skin dimensions (64×64 or legacy 64×32) and expanding the layout options beyond the schema's examples to mob, armor, cape, item, and block textures.

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 states a specific verb and resource: "Convert an existing PNG in the workspace into an editable spec." It also clarifies the default player-skin scope and the layout override, so an agent can tell this apart from siblings like texel_render or texel_save.

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 implies when to use the tool via "Convert an existing PNG ... into an editable spec" and explains the layout parameter's role. However, it does not explicitly compare the tool with alternatives such as texel_patch or texel_render, so usage guidance remains inferred rather than direct.

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

texel_liveStart live previewA
Idempotent

Start (or reuse) a live session and return a studio URL for the user. While it runs, every texel_render result appears in their open browser tab immediately, so they can watch the skin evolve and give feedback mid-way. Call it before the first render and share the URL with the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
openNoAlso open the URL in the default browser of the machine running this server.
portNoPreferred local port (default 4747; the next free one is used if busy).

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
portYes
viewersYes
studioUrlYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the safety profile (non-readonly, idempotent, non-destructive), so the description's value is in the mechanics it adds: the session can be reused, and every texel_render output streams into the open browser tab. That live-relationship context is not derivable from structured fields. It doesn't cover session lifetime/teardown, hence not a 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?

Front-loaded with the verb and the returned artifact, then rationale, then the call instruction. Three sentences carry their weight, though 'so they can watch the skin evolve and give feedback mid-way' is mildly verbose.

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 two-optional-param tool with an output schema and annotations, the description covers purpose, when to call, and the key live-render behavior. Return-value details are rightly left to the output schema, leaving little 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 open and port parameters are fully documented in the schema. The description adds no parameter detail, so the baseline of 3 applies.

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 ('Start (or reuse) a live session and return a studio URL'), and the live-preview purpose is distinct from the batch siblings like texel_render. An agent can tell what this tool does 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?

Gives clear timing guidance ('Call it before the first render and share the URL with the user'), which is the key usage decision. It does not state when not to use it or name a competing sibling explicitly, so it stops short of a full 5.

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

texel_palettePalette from a reference imageA
Read-onlyIdempotent

Read a reference PNG in the workspace (concept art, a photo of a figure, another skin) and return its main colors, most common first, each with a role (shadow, midtone, highlight, neutral, accent), as a ready spec "palette" and "legend". Use it to match a reference instead of guessing hex values; derive the other tones with "~" steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesPath to a .png file, relative to the workspace.
colorsNoHow many colors to keep.

Output Schema

ParametersJSON Schema
NameRequiredDescription
legendYes
entriesYes
paletteYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, closed-world), and the description adds real context beyond them: colors are returned most-common-first, each tagged with a role, and delivered as "palette" and "legend" keys. It doesn't discuss failure modes for non-PNG or missing paths, but for a read-only tool this is 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.

Conciseness4/5

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

Two dense sentences that front-load the core action and then the usage hint; every clause earns its place. The nested quotes around "palette"/"legend"/"~" add a little visual clutter but no real padding.

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?

An output schema exists, so return values needn't be spelled out, yet the description still conveys the ordering and role semantics that matter for downstream use. Combined with annotations covering safety, an agent has what it needs to call and interpret the tool 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 description coverage is 100% and both parameters (path, colors) are fully documented in the schema, so baseline 3 applies. The description never mentions the colors-count parameter or its bounds, adding no 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 precise verb+resource ("Read a reference PNG ... and return its main colors") plus the exact output shape (a spec "palette" and "legend"). It implicitly separates itself from texel_import_png by clarifying the return is a palette with role-annotated colors, though it never names a 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 Guidelines4/5

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

It states a clear use case ("Use it to match a reference instead of guessing hex values") and a follow-up workflow ("derive the other tones with '~' steps"). It does not name the alternative tools an agent might pick instead, so it stops short of full when/when-not routing.

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

texel_patchPatch skinA

Apply a patch to a spec (update, replace, add or remove layers by id; change palette, legend or meta) and render the result like texel_render. Layers without an id first get "-" and keep it, so the next patch can use the same ids. Entries that cannot apply are skipped and reported. With "spec", returns the patched spec, the review and the sheet. With "file", writes the patched spec back to that file and returns only the review and the sheet.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoInstead of "spec": a .json spec file in the workspace, e.g. "skins/knight.json". Saves resending the whole spec on every call; texel_patch then edits the file in place.
specNoA Texel skin spec (version 1) as a JSON object or JSON text. Format: texel://docs/spec, schema: texel://schema/skinspec.v1
patchYesA patch ({ patch: [{ do: "update", id, set }, …] }) as a JSON object or JSON text. Format: texel://docs/spec, section "Patches".
includeNoExtra outputs. "sheet" is the review image; "ascii" adds a text render for models without vision.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
artYes
fileNo
nameYes
nextYes
specNo
modelYes
scoreYes
statsYes
issuesYes
layoutYesTexture layout: player, zombie, humanoid (armor), skeleton, item…
appliedYes
skippedYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, idempotentHint=false and destructiveHint=false; the description adds real behavior beyond them: auto-assigned persistent ids ('<op>-<index>'), graceful skipping with reporting of non-applicable entries, and an in-place file write in 'file' mode. The non-idempotent hint is effectively explained by the retained id assignment. It stops short of covering permissions or error/failure rollback semantics.

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 lead sentence front-loads the core action and its scope, and the remaining sentences each carry distinct information (id persistence, skip-and-report, mode-specific returns). It is dense with parenthetical detail but every clause earns its place, 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 mutating tool with full annotation coverage and an output schema, the description supplies the operation set, the id-lifecycle rule, failure handling, and mode-dependent output differences. The main omission is guidance on invalid patches beyond 'skipped and reported' and any permission or workspace prerequisites.

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 baseline is 3, but the description adds meaning beyond the schema by contrasting 'spec' versus 'file' outcomes (patched spec + review + sheet vs. write-back + review + sheet) and by explaining that ids assigned to anonymous layers persist for reuse. This is genuine semantic value layered over an already-complete 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 and resource ('Apply a patch to a spec'), enumerates the operations it supports (update, replace, add or remove layers; change palette, legend or meta), and explicitly relates itself to a sibling ('render the result like texel_render'). An agent can distinguish this from texel_render and the other siblings without opening schemas.

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?

Describes the two operating modes ('spec' vs 'file') and their distinct return behaviors, and implies the patch-then-render workflow relative to texel_render. It does not, however, state explicit when-not conditions or route the agent to alternatives such as texel_validate or texel_diff for non-mutating checks.

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

texel_pullLoad skin from linkA
Read-onlyIdempotent

Load the spec behind a Texel share link (https://www.texel.dev.br/s/, a bare id, or a long studio link with #z= / #spec=) so you can keep developing an existing skin. Returns the spec JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
linkYesA share link or short id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
specYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish safety (readOnlyHint, idempotentHint, openWorldHint), so the bar is lower. The description adds real context beyond that: the accepted link forms (full URL, bare id, studio link with #z= / #spec=) and the fact that the call is non-mutating loading of an existing spec.

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 action and followed by accepted-input detail and the return type. No filler or restated title text.

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

Completeness5/5

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

An output schema exists, so return-value detail is unnecessary, and annotations cover the safety profile. For a single-parameter read tool, everything needed to call it correctly is 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 coverage is 100% and the single parameter is documented as 'A share link or short id', establishing a baseline of 3. The description goes beyond that by enumerating the studio-link fragment forms (#z= / #spec=), which the schema does not mention.

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 (Load) and resource (the spec behind a Texel share link) plus the motivation (keep developing an existing skin) and the return (spec JSON). It does not name any sibling, so an agent must infer that texel_get_example or texel_import_png are not the right choices, 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 clause 'so you can keep developing an existing skin' implies the use context but never states when to prefer this over texel_get_example, texel_share, or texel_import_png, and gives no exclusions or prerequisites. Usage is inferable rather than explicit.

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

texel_read_docsRead Texel docsA
Read-onlyIdempotent

Read a documentation page as markdown. Pages: protocol (Skin Agent Protocol), spec (Skin spec reference), art-guide (Skin art guide), families (Skin families), api (Agent interfaces), install (Install as a tool). Read "spec" before writing your first spec.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered by structured data. The description adds the return-format disclosure ('as markdown'), which is real behavioral context the annotations don't provide, though nothing is said about pagination or response size.

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-loaded verb and format, then a compact enumeration of valid pages, then the one actionable tip. Every clause earns its place with no filler.

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

Completeness5/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 tool with no output schema, the description supplies everything needed: what it returns (markdown), the full valid page set, and guidance on which page to read first. Nothing required for correct invocation is missing.

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 0% and the single parameter is an enum, so the description must carry the meaning — and it does, glossing all six values (protocol, spec, art-guide, families, api, install). Some glosses are near-tautological ('spec (Skin spec reference)'), keeping it short of a 5.

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 ('Read') and resource ('a documentation page') plus the return format ('as markdown'), which no sibling like texel_validate or texel_render shares. An agent can distinguish this from the other texel_* tools 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?

Gives concrete usage context by enumerating which topic each page covers and adds a sequencing directive ('Read "spec" before writing your first spec'). It does not name when NOT to use it or an alternative tool, but for a docs reader the context is clear enough.

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

texel_renderRender skinA
Read-onlyIdempotent

Compile a skin spec and review it. Returns a review sheet image (front | back | right | left views + raw texture), the review (score, issues with JSON paths and fix hints, art checks, craft advice, suggested next steps) and, on request, the texture (64×64 for a player skin), a text render and a close-up of some parts. Deterministic; never modifies files.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoInstead of "spec": a .json spec file in the workspace, e.g. "skins/knight.json". Saves resending the whole spec on every call; texel_patch then edits the file in place.
specNoA Texel skin spec (version 1) as a JSON object or JSON text. Format: texel://docs/spec, schema: texel://schema/skinspec.v1
focusNoAlso return a close-up of these parts or groups alone (e.g. ["head"], ["arms"]) from all six sides, large, on gray: for judging a face, a hood or one garment.
includeNoExtra outputs. "sheet" is the review image; "ascii" adds a text render for models without vision.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
artYes
nameYes
nextYes
modelYes
scoreYes
statsYes
issuesYes
layoutYesTexture layout: player, zombie, humanoid (armor), skeleton, item…

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint=false, so the bar is lower; the description nonetheless adds that the operation is deterministic and never modifies files, which is a stronger guarantee than the hints alone. The output enumeration adds context even though the output schema carries the detail.

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 core purpose is front-loaded in the first clause, and the remaining sentences carry real content. The parenthetical enumerations are dense and slightly run-on, but no sentence is pure 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 annotations covering the safety profile and an output schema covering return values, the description supplies the missing glue: what is compiled, what the review contains, and what optional outputs exist. It stops short of stating prerequisites or relationships to the sibling validation/patch tools.

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%, so file/spec/focus/include are already documented in the schema; the description's "on request" phrasing loosely tracks the include flag but adds no format or syntax detail beyond what the schema provides. Baseline 3 applies 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.

Purpose5/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 ("Compile a skin spec and review it") and enumerates exactly what the tool produces, which cleanly separates it from siblings like texel_validate, texel_patch, or texel_save. An agent can tell what this tool does 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 Guidelines3/5

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

Usage is implied (render/review a skin spec) and the optional-output switch is signalled with "on request," but no when-to-use versus when-not guidance is given, and no alternative such as texel_validate or texel_render_family is named. Nothing misleading, just no explicit routing.

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

texel_render_familyRender skin familyA
Read-onlyIdempotent

Expand a family (base spec + variants and/or a matrix of axes) and review every member. Returns a lineup image (front and back of each member, in order) and a per-member score table.

ParametersJSON Schema
NameRequiredDescriptionDefault
familyYesA skin family ({ kind: "family", base, variants?, matrix? }) as a JSON object or JSON text. Format: texel://docs/families

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
nameYes
issuesYes
membersYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world, so safety is covered. The description adds genuine behavioral context: it discloses that all members are expanded and reviewed and that the output is a lineup image with front and back of each member in order plus a score table. It does not mention cost, size limits, or failure modes for invalid families.

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, no filler, front-loaded with the action and followed by the concrete output. 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?

With an output schema present, return values need not be explained, yet the description still sketches them. The main gap is sibling routing and any prerequisite about valid family specs, but overall the definition is complete enough for correct invocation.

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% and the schema documents the single family parameter with a doc reference. The description still adds meaning by unpacking the family shape ('base spec + variants and/or a matrix of axes'), clarifying what kinds of input the object may contain beyond the schema's terse format pointer.

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 (expand/review) and resource (a skin family of base spec + variants/matrix), and describes the deliverable (lineup image plus per-member score table). It is clearly distinct from texel_render (single render) and texel_save_family (persistence), though it never names 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?

Usage is implied by 'expand a family ... and review every member', which tells the agent this is for batch/family review rather than a single render. However, there is no explicit when-to-use/when-not or routing to texel_render, texel_save_family, or texel_validate.

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

texel_saveSave skinA
Idempotent

Compile a spec and write .png (the skin), .skin.json (the source) and optionally .sheet.png into the workspace (/app). Refuses specs with errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesOutput path without extension, relative to the workspace, e.g. "skins/frost-mage".
specYesA Texel skin spec (version 1) as a JSON object or JSON text. Format: texel://docs/spec, schema: texel://schema/skinspec.v1
sheetNoAlso write the review sheet.

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
scoreYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, openWorldHint=false. The description adds significant behavioral detail: it writes multiple concrete files into the workspace at specific relative paths, and it refuses specs that contain errors. This goes beyond what the annotations convey.

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 dense sentence front-loads the core action (compile and write) and enumerates artifacts compactly. Every clause carries information; nothing is repeated or wasted.

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?

Covers the three output files, the optional review sheet, and the error-refusal condition, and an output schema exists so return values need not be explained. It lacks guidance on when to call texel_validate first or how this relates to texel_save_family, leaving a small 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 100%, so the schema already documents each parameter fully. The description reiterates the meaning of 'sheet' ('optionally <path>.sheet.png') and extends the <path> parameter into the actual filenames written, which is some value, but does not add format or syntax details beyond the schema. Baseline 3 is appropriate.

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 specific verb (Compile and write) and enumerates exactly which artifacts are produced: <path>.png, <path>.skin.json, and optionally <path>.sheet.png. The 'Refuses specs with errors' clause further sharpens the purpose against siblings like texel_validate.

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 the spec must be valid ('Refuses specs with errors') and that sheet controls the optional output. However, it does not name alternatives like texel_validate (to check a spec before saving) or texel_render, nor state when to prefer this over texel_save_family. Usage is inferred rather than explicit.

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

texel_save_familySave skin familyA
Idempotent

Expand a family and write /.png and .skin.json for every member, plus /lineup.png, into the workspace (/app). Refuses families with errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
familyYesA skin family ({ kind: "family", base, variants?, matrix? }) as a JSON object or JSON text. Format: texel://docs/families
directoryYesOutput directory relative to the workspace, e.g. "skins/guild".

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
membersYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare non-readOnly, idempotent, non-destructive, closed-world behavior. The description adds genuinely new context: the exact files written, that output lands in the /app workspace, and that malformed families are rejected. It does not contradict any annotation. It stops short of stating permissions or overwrite semantics, keeping it from a 5.

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 tightly packed sentences with zero filler, front-loaded with the core action and file outputs before the failure-behavior note. 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?

An output schema exists, so return-value documentation is unnecessary, and the description covers the created files and workspace location adequately. What remains missing is guidance for choosing this tool over texel_save/texel_render_family, but the operational picture is otherwise 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%, so the schema already documents both parameters (family format reference, directory example). The description reuses the <directory> placeholder but adds no syntax or format detail beyond the schema. Baseline 3 applies when the schema carries the parameter 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?

The description gives a concrete verb ("Expand a family and write") and enumerates the exact artifacts produced (<member-id>.png, .skin.json, lineup.png). This clearly distinguishes it from the single-file sibling texel_save. However, it never disambiguates against the potentially overlapping texel_render_family sibling, which an agent could easily confuse with this save 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 note "Refuses families with errors" hints that input should be validated first (texel_validate), but no explicit when-to-use or when-not-to-use guidance is offered. With 13 siblings including texel_render_family and texel_save, the absence of routing guidance is a real gap.

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

texel_shareShare skinA
Read-onlyIdempotent

Store the spec on https://www.texel.dev.br and return a short link (https://www.texel.dev.br/s/) that opens the exact skin in the studio. Falls back to a long self-contained link when offline.

ParametersJSON Schema
NameRequiredDescriptionDefault
specYesA Texel skin spec (version 1) as a JSON object or JSON text. Format: texel://docs/spec, schema: texel://schema/skinspec.v1

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYes
shortYes

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, openWorldHint=true and idempotentHint=true, so the safety profile is partly covered, yet the description still adds real value: it discloses a remote store, the exact short-link format returned, and a degradation path (long self-contained link) when offline. One tension remains — 'Store the spec on <host>' describes a remote write while readOnlyHint=true suggests no side effect — but since the write is external and openWorldHint=true explicitly signals outside interaction, the description does not actively deceive the agent.

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, and the primary behavior (store + return short link) is front-loaded ahead of the fallback clause. Every phrase carries information an agent needs.

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 an output schema present, return details need not be spelled out, and the description still notes the link format and offline fallback. Annotations cover safety. The remaining minor gap is that it says nothing about what happens on a non-offline failure (invalid spec, server error) or whether produced links are permanent.

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?

There is a single required parameter with 100% schema description coverage, and the schema already points at texel://docs/spec and texel://schema/skinspec.v1 for the format. The description only restates the parameter ('the spec') and adds no format, size, or validity constraints beyond what the schema supplies, 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?

The description gives a specific verb plus outcome: it stores the spec remotely and returns a short link that opens the exact skin in the studio, including the URL shape (/s/<id>). That is much more concrete than 'share a skin'. It does not, however, explicitly contrast itself with likely-confusable siblings such as texel_save or texel_live, so an agent must 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 Guidelines3/5

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

Usage is only implied by the word 'share' in the title and by the link-producing behavior; there is no explicit 'use this when' statement, no exclusion ('do not use to persist locally — use texel_save'), and no prerequisites such as network/auth needs. The offline fallback is a runtime condition, not selection guidance.

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

texel_validateValidate skin specA
Read-onlyIdempotent

Check a spec for errors and warnings without rendering images. Cheap; use it after every edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoInstead of "spec": a .json spec file in the workspace, e.g. "skins/knight.json". Saves resending the whole spec on every call; texel_patch then edits the file in place.
specNoA Texel skin spec (version 1) as a JSON object or JSON text. Format: texel://docs/spec, schema: texel://schema/skinspec.v1

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
scoreYes
issuesYes

TDQS

A4.1/5.0
Behavior4/5

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

The annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered; the description adds two things they don't: no image rendering (no output artifacts) and low cost, which matters for an agent deciding to call this after every edit. It says nothing about error/warning severity or exit behavior, but the output schema covers the return shape.

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 clauses, zero waste; the purpose lands first and the cost/usage hint second. Nothing here is a restatement of the name or title.

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

Completeness5/5

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

An output schema exists, so return values need no explanation, and the schema fully documents both optional inputs. With annotations carrying the safety profile and the description carrying purpose plus call frequency, an agent has everything needed to invoke this 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?

Both parameters are optional with 100% schema description coverage, and the schema itself explains the file-vs-spec tradeoff and the texel_patch handoff far better than the description could. The description contributes nothing parameter-specific, 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?

Specific verb and resource: "Check a spec for errors and warnings," with a scoping qualifier ("without rendering images") that implicitly separates it from texel_render. It stops short of naming a sibling, so an agent still has to infer that texel_render is the rendering alternative.

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 it after every edit" gives an explicit trigger for calling the tool, which is real usage guidance rather than silence. It offers no when-not-to-use condition and never names texel_diff or texel_render as the alternatives at the other end of the workflow.

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. 14 tool updatesv0.8.1
    • First observedtexel_diff
    • First observedtexel_get_example
    • First observedtexel_import_png
    • First observedtexel_live
    • First observedtexel_palette
    • First observedtexel_patch
    • First observedtexel_pull
    • First observedtexel_read_docs
    • First observedtexel_render
    • First observedtexel_render_family
    • First observedtexel_save
    • First observedtexel_save_family
    • First observedtexel_share
    • First observedtexel_validate

TDQS

A4.1/5.0

Scored across 14 tools

Disambiguation5/5

Each tool has a clearly distinct role: patch, validate, render, save, family rendering/saving, live session, share, pull, import, palette, diff, examples, and docs. The closest overlaps (render vs validate, live vs share) are explicitly differentiated by descriptions and do not create misselection risk.

Naming Consistency4/5

All names use lowercase snake_case with a consistent texel_ prefix, which makes them predictable. The only minor deviation is that some names are verb-only or noun-only (texel_live, texel_palette, texel_diff) rather than following a strict verb_noun pattern throughout.

Tool Count5/5

The 14 tools are well-scoped for a skin-spec design, validation, rendering, family, and sharing workflow. Each tool appears to earn its place, with no obvious filler or missing core action.

Completeness5/5

The surface covers the full lifecycle: learn from examples/docs, create/import specs, edit via patch, validate, render, diff, save, expand families, share, pull, and use a live session. No critical CRUD or workflow gap is apparent for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to search, read, and publish Minecraft mods on Modrinth, including creating projects and uploading jar files as new versions.
    7
    48 npm
    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
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents to create, draw, and refine Aseprite documents through deterministic canvas, layer, frame, tag, and palette tools, with pixel analyzers, style validation, and preview/diff visual feedback. It also supports spritesheet and animated GIF export, producing multi-layer game-ready assets.
    1
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI agents to generate and edit pixel art by driving LibreSprite headlessly through MCP tool calls, supporting operations like creating sprites, resizing canvases, and exporting PNGs.
    7
    BSD Zero Clause