Skip to main content
Glama

Stonecut Blockbench MCP

Website: https://stonecut.studio/resources

Stonecut Blockbench MCP is an MCP server and Blockbench plugin that lets AI agents like Claude Code build Minecraft models in the Blockbench desktop app. It makes GeckoLib mobs with bones, textures and animations, and Java item and block models with display transforms, while you watch every change and the agent checks its own work through screenshots. Free and open source under the MIT license.

It has two parts:

  • Stonecut Bridge, a Blockbench plugin (one readable file, stonecut_bridge.js).

  • stonecut-blockbench-mcp, an MCP server that your AI client starts.

The problem it solves

An AI agent cannot use Blockbench on its own, and writing model files by hand goes wrong in ways it cannot see: pivots in the wrong place, overlapping UVs, an item held at a strange angle. This tool gives the agent real Blockbench actions (add bones, add cubes, paint, animate, set display transforms, export) and shows it the result as images, so it can look, fix and try again like a person would. You keep control: it only touches the folders you allow, every edit can be undone in Blockbench, and a settings file decides what it may do.

Related MCP server: Blockbench MCP

Setup

  1. Copy the prompt in docs/setup-with-ai.md and paste it into your AI agent (Claude Code, or another agent that supports MCP servers). It checks that you have Node.js and Blockbench, shows its plan, and asks before it installs anything.

  2. When it tells you to, load the plugin in Blockbench: File > Plugins, click "Load Plugin from URL" and paste https://github.com/hitzerozero/stonecut-blockbench-mcp/releases/download/v1.0.0/stonecut_bridge.js, or download that file and use "Load Plugin from File" (see "Checking the plugin file" below). Click Allow on each permission question. You see "Stonecut Bridge listening on 127.0.0.1:38790".

  3. Ask it to build something, for example "Make a small cube creature with an idle animation in Blockbench and show me screenshots." A new tab opens in Blockbench and screenshots appear in the chat.

To set up without an agent, see "Manual setup" below. If something does not work, run npx -y stonecut-blockbench-mcp@1.0.0 doctor (see Troubleshooting).

Blockbench's official plugin list does not accept plugins that let an AI drive Blockbench, so Stonecut Bridge is shared from this GitHub repository instead of File > Plugins > Available.

Example requests

Copy one into Claude Code and change the details. Expect a few rounds of screenshots and notes.

  • Make a small slime mob with a 64 x 64 texture, an idle bounce and a hop animation. Show me screenshots from the front, side and iso.

  • Make a boss golem about three players tall, held to the quality bar in the Blockbench skill: layered stone plates, a glowing core, 128 x 128 texture, and idle, walk, two attacks, hurt and death animations. Show me the block-out before you paint.

  • Make a Java item model of a curved sword with a 32 x 32 texture. Set display transforms so it looks right in first person, third person and the inventory, and show me each of those.

  • Retexture the model that is open in Blockbench as a frozen version: ice blue tones, frost on the top faces, darker cracks. Keep the UV layout.

  • Add a heavy overhead slam attack to the open mob: a slow wind-up, a fast hit, a short shake, then recovery. Show me frames at the wind-up, the hit and the recovery.

  • Open output:wolf.geo.json with its animation file and tell me what bones and animations it has.

  • Export the open mob as geo, animation and texture into assets:geo, assets:animations and assets:textures/entity.

  • Make a crown as a Java item model for the head slot and tune the head display transform.

What it does

  • Opens new GeckoLib or Java item projects, or existing .geo.json and Java model .json files.

  • Adds bones with pivots and rotations, and cubes with box UV or per-face UV.

  • Creates and paints the texture: fill rectangles, set pixels, draw small pictures from a character grid, or import a PNG.

  • Adds animations and keyframes (rotation, position, scale).

  • Renders screenshots from named views or any angle, optionally mid-animation, and returns them to the agent as images.

  • Reads and sets Java display transforms (first person, third person, gui, ground and so on) and renders each display slot.

  • Exports .geo.json, .animation.json, Java model .json and texture .png into the folders you allow.

How it works

AI client (Claude Code) <--stdio--> stonecut-blockbench-mcp <--HTTP on 127.0.0.1--> Stonecut Bridge in Blockbench
  1. Your AI client starts the MCP server and calls its tools.

  2. The MCP server checks every call against a strict schema and against your settings file. Anything wrong is refused before it reaches Blockbench.

  3. It first makes the plugin prove that it holds the secret token (an answer to a random challenge), so another program on the port never sees the token. Then it sends the call with the token.

  4. The plugin listens on 127.0.0.1 only. It checks the token, refuses requests from web pages, checks the call again, keeps every path inside your output and assets folders, applies your settings, and asks you in Blockbench before replacing a file or closing a tab.

  5. The plugin makes the change in Blockbench as an undoable edit (Ctrl+Z works) and replies.

  6. The MCP server checks the shape of every reply before passing it to the agent. Screenshots come back as images.

Requests run one at a time. The plugin makes no outgoing connections.

Tools

Tool

What it does

Read-only or changes things

ping

Checks that Blockbench is open, the bridge is listening and the token is right.

read-only

status

GeckoLib plugin present, allowed folders, settings, open project, every open tab.

read-only

new_project

Opens a new tab with an empty GeckoLib entity model.

changes, adds only

open_model

Opens a .geo.json with its animation and texture, or switches to it if already open.

changes, adds only

close_tab

Closes duplicate tabs that have no edits.

changes, can replace

add_bones

Adds bones with pivots and rotations, parents first. All or nothing.

changes, adds only

add_cubes

Adds cubes with box UV offsets or per-face UVs. All or nothing.

changes, adds only

texture_create

Creates or resizes the texture, optionally filled with a colour.

changes, can replace

texture_fill_rect

Fills a rectangle of the texture with one colour.

changes, can replace

texture_set_pixels

Sets single pixels.

changes, can replace

texture_draw

Draws a small picture from rows of characters and a palette.

changes, can replace

texture_import

Loads a PNG from the allowed folders as the texture.

changes, can replace

add_animation

Adds an animation (loop, once or hold).

changes, adds only

add_keyframes

Adds rotation, position and scale keyframes to bones.

changes, adds only

screenshot

Renders views of the model and returns the images; writes PNGs to the output folder.

changes, can replace

export

Writes .geo.json, .animation.json, Java model .json and texture .png.

changes, can replace

open_java_model

Opens a Java block or item model .json, or switches to it if already open.

changes, adds only

new_java_item

Opens a new tab with an empty Java item model, optionally with display transforms.

changes, adds only

display_get

Reads the display transforms of the open Java model.

read-only

display_set

Sets display transforms within Minecraft's limits.

changes, can replace

display_screenshot

Renders display slots as Blockbench's display editor shows them and returns the images.

changes, can replace

"Changes, adds only" tools add to the project and never remove anything. "Changes, can replace" tools can overwrite pixels, transforms or, when asked with "overwrite": true, an existing file. Screenshot tools write a new PNG on every call and replace a file only when given a path and "overwrite": true. Each tool also reports these as MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint; the last is false for every tool).

Paths are output:<relative path>, assets:<relative path>, or an absolute path inside one of those folders, for example output:shots/front.png. Colours are "#rrggbb", "#rrggbbaa" or "clear".

Security settings

The settings file is .stonecut_blockbench_config.json in your home folder. You own it; the plugin and the MCP server only read it. Create it with the defaults:

npx -y stonecut-blockbench-mcp@1.0.0 --init-config

Show where it is and the settings in use:

npx -y stonecut-blockbench-mcp@1.0.0 --config

The defaults, also in config.example.json:

{
  "output_folder": "",
  "assets_folder": "",
  "allow_export": true,
  "max_texture_size": 4096,
  "max_file_mb": 16,
  "max_cubes": 4096,
  "confirm": "overwrite_and_close"
}

Setting

Default

What it does

output_folder

"", meaning the Blockbench setting, or else stonecut-blockbench in your home folder

Folder for screenshots and exports. Readable and writable. Path prefix output:. A full path, or a path starting with ~ for your home folder.

assets_folder

"", meaning the Blockbench setting, or else off

Optional second folder, for example a resource pack or a mod's assets/<modid>. Readable and writable. Path prefix assets:.

allow_export

true

false refuses the export tool. Screenshots still go to the output folder, because that is how the agent sees its work, but only to new files with automatic names: no chosen path, nothing replaced.

max_texture_size

4096

Largest texture width or height in pixels, from 16 to 4096. Applies to new projects, texture_create and every PNG that is read.

max_file_mb

16

Largest model or texture file, in MB, that may be read or written, from 1 to 256.

max_cubes

4096

Most cubes one project may have, from 1 to 65536. Applies to add_cubes and to opening a model.

confirm

"overwrite_and_close"

When Blockbench asks you first. "overwrite_and_close": before replacing an existing file or closing a tab. "every_change": also before every tool that changes the project or writes a file, except screenshots that only add new PNGs. "never": no questions. If nobody answers within two minutes, the answer is no.

These are the only readable and writable places: the output folder and, if set, the assets folder. A non-empty folder in the settings file wins over the folder settings in Blockbench.

Fixed, and not changeable:

  • The bridge listens on 127.0.0.1 only and cannot be reached from other machines. The settings file refuses any host, bind, address, listen or interface key.

  • Every request must carry the secret token from .stonecut_blockbench_token in your home folder (32 random bytes, new every time the bridge starts). Before the server sends it, the bridge must prove it holds the token with an HMAC answer to a random challenge.

  • Requests from web pages (with an Origin header) or for another host name are refused.

  • Only .json and .png files, resolved so .. cannot leave the folders. Symbolic links and junctions inside the folders are not followed. Existing files are kept unless a call says "overwrite": true.

  • Texture references inside a Java model must be resource locations such as minecraft:item/iron_sword. A model whose textures name a file path or a data URL is refused, and a texture that is not found as a PNG inside the allowed folders shows blank.

  • One call can only ask for so much work: coordinates within -4096..4096, rotations within -360..360 degrees, inflate within -16..16, 4096 keyframes, 262144 characters in texture_draw (and 16777216 painted pixels), and 4096 bones in an opened model.

  • The plugin and the server are pinned: Claude Code runs stonecut-blockbench-mcp@1.0.0, and the plugin URL points at the file attached to the v1.0.0 release, so neither changes unless you update it.

  • No tool can read or write the settings file or the token file, and no tool runs code.

  • A settings file that is not valid makes the plugin and the server refuse every request until it is fixed. --config shows what is wrong.

Who can use it: any program running as your user account can read the token file, so the bridge trusts local programs as much as your account does. To report a security problem, see SECURITY.md.

Limits

  • Needs the Blockbench desktop app, open, with the plugin loaded. The web version cannot run it.

  • Screenshots use the live preview, so keep the Blockbench window open, not minimised.

  • Without the GeckoLib Blockbench plugin, new mobs are plain Bedrock entity models.

  • Tools add and change; they do not delete bones or cubes. Undo in Blockbench (Ctrl+Z) or delete by hand.

  • Java models: parent models are not followed, and textures outside the allowed folders show blank.

  • Files are .json and .png only. Save the .bbmodel yourself in Blockbench if you want one.

  • Confirm questions wait for you in Blockbench. While one is open, other requests wait.

  • Requests run one at a time; a call waits up to 3 minutes for Blockbench by default.

  • Not affiliated with Blockbench, GeckoLib or Mojang.

Troubleshooting

Run the doctor. It only reads and changes nothing:

npx -y stonecut-blockbench-mcp@1.0.0 doctor

From a source checkout: node dist/index.js doctor. Each line says PASS or FAIL, and every FAIL line says how to fix it. It checks:

  • the Node.js version (20 or newer);

  • the settings file: valid, missing (defaults in use) or broken, and which values are in use;

  • the token file;

  • whether the bridge answers on 127.0.0.1;

  • whether the plugin version matches the server version;

  • whether the GeckoLib plugin is installed in Blockbench;

  • whether the output folder exists and is writable.

Common messages:

  • "Bridge not reachable": Blockbench is closed, the plugin is not loaded, the bridge is stopped, or the port differs between the plugin setting and STONECUT_BB_PORT.

  • "No token at ...": the plugin has not started yet, or STONECUT_BB_TOKEN_FILE points elsewhere.

  • "Settings file ... has a bad value": fix the file; --config shows what is wrong.

  • "The person did not allow this": you clicked Deny, or nobody answered the confirm question in Blockbench within two minutes. See confirm under Security settings.

Remove it completely

  1. Run npx -y stonecut-blockbench-mcp@1.0.0 uninstall. It lists what it will remove and asks y/n: the server in Claude Code, the skill, the token file and the security settings file.

  2. In Blockbench: File > Plugins > Installed > Stonecut Bridge > Uninstall.

Your output folder (stonecut-blockbench in your home folder, or the one you chose) and your assets folder are kept on purpose, because they hold your models. Delete them by hand if you want.

Manual install details

Manual setup

The same setup without an agent:

  1. Install Node.js 20 or newer from https://nodejs.org (the LTS version). Check: node --version in a terminal prints v20 or higher.

  2. Install Blockbench from https://www.blockbench.net and open it. You see the Blockbench start screen.

  3. For mobs, in Blockbench: File > Plugins > Available, install "GeckoLib Models & Animations". It now shows under Installed.

  4. In Blockbench: File > Plugins, click "Load Plugin from URL" and paste https://github.com/hitzerozero/stonecut-blockbench-mcp/releases/download/v1.0.0/stonecut_bridge.js. Or download that file and use "Load Plugin from File".

  5. Blockbench asks to allow network access and access to a few files. Click Allow each time. You see "Stonecut Bridge listening on 127.0.0.1:38790".

  6. Install Claude Code if you do not have it (https://claude.com/claude-code), then run npx -y stonecut-blockbench-mcp@1.0.0 install in a terminal. It lists what it will do (add the server to Claude Code, copy the skill), asks y/n, and after y prints "Done." --dry-run only shows the plan.

  7. Run npx -y stonecut-blockbench-mcp@1.0.0 doctor with Blockbench open. Every line should say PASS.

  8. Start Claude Code and ask it to build something. A new tab opens in Blockbench and screenshots appear in the chat.

Adding it to Claude Code by hand

install runs these for you. To do it yourself:

  1. Add the server. macOS and Linux: claude mcp add --scope user stonecut-blockbench -- npx -y stonecut-blockbench-mcp@1.0.0. Windows: claude mcp add --scope user stonecut-blockbench -- cmd /c npx -y stonecut-blockbench-mcp@1.0.0. Claude Code answers that it added the server.

  2. Copy the skill (see "The skill" below).

  3. Start Claude Code and type /mcp. It lists stonecut-blockbench as connected.

npx -y stonecut-blockbench-mcp@1.0.0 uninstall removes the server, the skill, the token file and the settings file again. Both commands show what they will do and ask y/n first; add --yes to skip the question or --dry-run to only see the plan. Running install twice gives the same result.

Checking the plugin file

Each release lists the SHA-256 of stonecut_bridge.js; the repository has it in plugin/stonecut_bridge.js.sha256. Before "Load Plugin from File", compare it with the file you downloaded:

  • Windows (PowerShell): Get-FileHash stonecut_bridge.js -Algorithm SHA256

  • macOS: shasum -a 256 stonecut_bridge.js

  • Linux: sha256sum stonecut_bridge.js

Where the plugin file is

From npm, npx -y stonecut-blockbench-mcp@1.0.0 --plugin-path prints where the package keeps stonecut_bridge.js. Blockbench loads a file plugin from the same path at every start, so copy it somewhere it will stay before using "Load Plugin from File":

  • Windows (PowerShell): Copy-Item (npx -y stonecut-blockbench-mcp@1.0.0 --plugin-path) $HOME

  • macOS and Linux: cp "$(npx -y stonecut-blockbench-mcp@1.0.0 --plugin-path)" ~/

From source

git clone https://github.com/hitzerozero/stonecut-blockbench-mcp.git
cd stonecut-blockbench-mcp
npm install
node dist/index.js install

npm install also builds dist/index.js and dist/stonecut_bridge.js. From a source checkout, install points Claude Code at node <full path to the folder>/dist/index.js instead of npx. node dist/index.js uninstall and node dist/index.js doctor work the same way.

Other MCP clients

Run npx -y stonecut-blockbench-mcp@1.0.0 (on Windows cmd /c npx -y stonecut-blockbench-mcp@1.0.0) as a stdio server.

Plugin settings in Blockbench

File > Preferences > Settings > General, all starting with "Stonecut Bridge":

Setting

Default

What it does

port

38790

Port on 127.0.0.1. Stop and start the bridge after changing it.

output folder

stonecut-blockbench in your home folder

Used when the settings file does not set output_folder.

assets folder

empty (off)

Used when the settings file does not set assets_folder.

start automatically

on

Listen as soon as Blockbench opens. Tools > Stonecut Bridge: start / stop toggles it.

If you change the port, give the server the same one: claude mcp add --scope user stonecut-blockbench -e STONECUT_BB_PORT=38800 -- npx -y stonecut-blockbench-mcp@1.0.0.

Environment variables for the server: STONECUT_BB_PORT (default 38790), STONECUT_BB_TOKEN_FILE (default .stonecut_blockbench_token in your home folder), STONECUT_BB_TIMEOUT_MS (default 180000). --help lists them.

Blockbench asks for these permissions, and nothing else: network access to listen on 127.0.0.1, the token file, the settings file, and on first use your output folder and your assets folder if you set one.

The skill

skills/blockbench/SKILL.md tells an agent how to build mobs and items well and which rules to keep. For Claude Code, copy the skills/blockbench folder to ~/.claude/skills/ (all projects) or to .claude/skills/ in one project.

Check that it works

With Blockbench open and the plugin loaded, from the source folder:

npm run selftest

It opens new tabs (your open work is left alone), builds a cube mob and a plain sword, takes screenshots, exports into a new folder under <output folder>/selftest, reopens the exports and checks that bad requests are refused.

Development

npm install        # also builds dist/ and plugin/stonecut_bridge.js
npm test           # unit tests, no Blockbench needed
npm run typecheck
npm run build
npm run scan       # fails on personal paths, emails or ports in tracked files

Names you never want in the repository (your username, private project names) go one per line in .scan-names.local (git ignores it) or in STONECUT_SCAN_NAMES; the scan then refuses them too. The list itself is never stored in the repository.

The plugin source is split into small parts in plugin/src/. The build joins them, unminified, into dist/stonecut_bridge.js and plugin/stonecut_bridge.js; a test fails if the second is out of date. docs/plan.md describes the bridge protocol.

License

MIT, copyright Stonecut Studio. See LICENSE. Blockbench and GeckoLib belong to their authors.

Available Tools

21 tools
add_animationAdd an animationB

Adds an animation, for example idle, walk or attack. Looping animations should end on the pose they start with.

NameRequiredDescriptionDefault
loopNotrue = "loop" (default), false = "once", or "hold".
nameYes
lengthNoSeconds. Default 1. Grows to fit later keyframes.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-idempotent, non-destructive mutation, so the safety profile is covered. The description adds one genuine domain behavior ('looping animations should end on the pose they start with'), but says nothing about duplicate names, whether the new animation is returned or how it is addressed later, or what happens when length conflicts with later keyframes.

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 sentences, front-loaded with the purpose and followed by the one non-obvious rule. Nothing is redundant, though the second sentence is somewhat cryptic without context about pose matching.

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 three-parameter mutation with no output schema and no nested structures, the core is present: what it creates, examples, and a looping constraint. Missing pieces are modest but real — how the created animation is referenced afterward and how it relates to add_keyframes.

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 67%: 'loop' and 'length' are documented in the schema, while 'name' is only constrained by a regex pattern. The description adds a small amount of meaning around looping behavior but never explains the name pattern, the loop/once/hold modes, or the length default, so it does not 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?

The description uses a specific verb and resource ('Adds an animation') and gives concrete examples ('idle, walk or attack') that make the domain obvious. It does not explicitly distinguish itself from nearby siblings such as add_keyframes or add_bones, 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 statement about when to call this versus add_keyframes or when not to call it, and no prerequisites (e.g. whether an animation must be created before keyframes can be added). The looping-pose sentence is an authoring constraint, not usage routing.

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

add_bonesAdd bonesA

Adds bones (groups). Only bones animate, so every GeckoLib cube goes in a bone. Start with one root bone, then body, head, legs... with pivots where the joints are. Names must be unique. Nothing is created if any entry is bad.

NameRequiredDescriptionDefault
bonesYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only mark this as a non-idempotent, non-destructive mutation; the description goes further by disclosing atomicity ("Nothing is created if any entry is bad") and a uniqueness constraint not present in the schema. It does not cover error reporting, partial-failure output, or the 512-bone ceiling, so it stops short of full behavioral 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?

Four short sentences, front-loaded with the purpose before the domain rationale and constraints. Every clause carries information; the only mild redundancy is restating the group concept in parentheses.

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 nested object parameters and no output schema, the description covers structure, ordering, naming, and failure semantics well. It omits hierarchy rules (can a parent appear later? can cycles form?), the 512-entry limit, and what identifiers come back, which an agent building a rig would benefit from.

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?

Top-level schema description coverage is 0% for the single `bones` array, so the description must compensate, and it does: it explains that names must be unique and that pivots belong at joints. Nested schema descriptions already cover pivot, parent, and rotation meaning, so the added value is the uniqueness rule plus the joint-placement semantics.

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 bones (groups)") and immediately grounds it in the domain: bones are the animate-able containers that GeckoLib cubes belong to. That implicitly separates it from add_cubes and add_animation, though it never names those siblings directly.

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 sequencing guidance for the workflow: start with one root bone, then body, head, legs, placing pivots at joints. It does not explicitly say when to choose this over add_cubes or add_animation, but the ordering and containment rules effectively define the correct usage context.

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

add_cubesAdd cubesA

Adds cubes. Give "from"+"to" or "origin"+"size". GeckoLib models use box UV: give each cube its own uv_offset so UV islands do not overlap. Java models may use "faces" for per-face UVs and need no bone. Nothing is created if any entry is bad.

NameRequiredDescriptionDefault
cubesYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already state it mutates (readOnlyHint=false), is non-idempotent and non-destructive, so the safety profile is covered. The description adds a genuinely useful behavioural fact beyond that: creation is atomic — "Nothing is created if any entry is bad" — which tells the agent a single bad cube aborts the whole batch. It does not say what is returned or whether bones must pre-exist.

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?

Four short sentences, each carrying a distinct rule, with the mandatory geometry-choice guidance front-loaded ahead of the model-specific UV advice. There is no filler; the only weakness is that the terse phrasing assumes familiarity with GeckoLib/Java model formats.

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 no output schema and a 12-field nested cube object, the description covers the geometry and UV rules and the failure mode, but leaves gaps an agent would want: what the call returns, whether the cube lands in the current tab/project, and whether the referenced bone must already exist. Adequate but not 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?

Top-level schema description coverage is effectively 0% (the single "cubes" property is undocumented), so the description must carry the load and largely does: it explains the mutually exclusive corner/size pairs, the per-model requirement for bone and faces, and the box-UV sizing constraint for uv_offset. It stops short of explaining names, pivot, rotation, mirror or inflate, which only the nested schema covers.

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 and resource ("Adds cubes") and immediately distinguishes two geometry conventions — blockbench from/to or origin/size — as well as GeckoLib box-UV versus Java per-face-UV models. It is clearly separable from the sibling add_bones, though it never names that sibling or any other 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?

It gives concrete selection rules: use from+to or origin+size, give each cube its own uv_offset for GeckoLib so UV islands do not overlap, and use faces only for Java models, which also need no bone. What is missing is when NOT to call it, or whether a target model/tab must already be open — no exclusions 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.

add_keyframesAdd keyframesB

Adds keyframe tracks to an animation: per bone and channel (rotation in degrees, position in units, scale as factors).

NameRequiredDescriptionDefault
tracksYes
animationYes
interpolationNoDefault for every keyframe. Default linear.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare a non-read-only, non-idempotent, non-destructive mutation, so the safety profile is covered. The description adds channel-level unit semantics but says nothing about the operation's key behavioral risk: whether adding tracks merges with or overwrites existing bone/channel tracks, and whether duplicate keyframe times are rejected or overwritten. With annotations doing the safety work, a 3 is appropriate, though the merge/replace ambiguity is a real gap for a non-idempotent tool.

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 high information density and no filler; the parenthetical unit notes earn their place by disambiguating channel values. It is arguably too terse for a mutation tool, but there is no wasted wording to cut.

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 three-parameter nested mutation with no output schema, the description covers purpose and value units adequately. What is missing is pipeline context (the target animation must exist, likely created via add_animation) and the append-versus-overwrite behavior, both of which an agent needs before invoking a non-idempotent write.

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 33%, so the description must carry weight — and it does give genuinely useful semantics that the schema omits: rotation in degrees, position in units, scale as factors. However, it leaves the `tracks` array structure, the `animation` reference parameter, and the three-level interpolation precedence (keyframe vs track vs top-level default) entirely to the schema, which only partially documents them.

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 keyframe tracks to an animation") and immediately scopes the payload to per-bone and per-channel data. The per-channel unit notes (degrees, units, factors) further pin down what is being added. It stops short of differentiating itself from siblings like add_animation or add_bones, leaving the agent to infer the pipeline order.

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 phrase "to an animation" implies the animation must already exist, but there is no explicit prerequisite statement, no pointer to add_animation for creating the target, and no guidance on when to use this versus other mutation tools. There are also no exclusions — e.g., whether tracks are appended or replace existing tracks for the same bone/channel.

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

close_tabClose duplicate tabsA
DestructiveIdempotent

Closes extra copies of a tab, keeping the first. A copy is closed only when it matches the kept tab (name, format, element and texture count) and has no edits, so no work is lost.

NameRequiredDescriptionDefault
nameNoTab name whose duplicates to close.
duplicatesNotrue: close duplicates of every tab.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the description adds real value by identifying precisely what is destroyed (only duplicate copies, never the first) and the safety predicate that prevents data loss (unmodified, matching copies). It does not say whether anything is returned (list of closed tabs) or what happens when nothing matches, which keeps it below 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 sentences, front-loaded with the action and outcome, then the safeguard. Nothing is redundant and no sentence could be removed without losing 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?

For a two-parameter tool with full schema coverage and no output schema, the description covers action, retention rule, and safety condition adequately. The remaining gaps are the return value and the parameter-interaction rule, which are minor given the tool's simplicity.

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 both parameters are documented in the schema, so the baseline is 3. The description's 'keeping the first' hints at selection order, but it adds no meaning about how `name` and `duplicates` combine or what an omitted `name` does.

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 ('Closes extra copies of a tab') plus the exact retention rule ('keeping the first'). No sibling tool deals with tabs, but the description still makes the operation and its outcome unambiguous 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?

The description defines the guard condition under which a copy is closed (matching name, format, element and texture count, and no edits), which implicitly scopes usage. However, it never states when an agent should reach for this tool, when it should not, or how the two parameters interact (e.g., name plus duplicates=true).

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

display_getRead display transformsB
Read-onlyIdempotent

The display transforms of the open Java model: every set slot, or one slot.

NameRequiredDescriptionDefault
slotNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is fully covered and the description is not required to restate it. The description does add two useful behavioral facts: it reads from the currently open Java model (a state dependency) and that a bulk read returns only slots that are actually set. It says nothing about the shape of the returned transform data, which matters given there is no output 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 resource front-loaded and the all-or-one behavior stated last; no filler or redundant restatement of the title. It is arguably too terse for the amount of implicit context, but nothing written 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 read-only getter this is a moderate fit: the operation and its scope are covered, but with no output schema the description is the only place an agent could learn the structure of the returned display transforms, and it does not provide that. The requirement that a Java model be open is also only hinted at ('the open Java model').

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 0%, so the description must explain the single 'slot' parameter, and it does so only at the level of 'every set slot, or one slot'. The enum itself already lists the eight valid slot names, but nothing explains what a display slot or a transform is, nor that omitting the parameter returns all set slots (this last point is the description's main contribution).

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 resource (display transforms) and constrains it to 'the open Java model', which pairs naturally with the title 'Read display transforms'. It is clear what is being read, though it never names the sibling display_set as the counterpart, so differentiation is inferred from the get/set naming 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?

'every set slot, or one slot' is the only usage guidance: it tells the agent that omitting the parameter widens the read to all slots. There is no explicit statement of when to prefer this over display_set or display_screenshot, and no prerequisite such as needing a model already open, 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.

display_screenshotScreenshot display slotsA
Destructive

Renders display slots as the Blockbench display editor shows them and returns the images (PNG files also go to the output folder). First person is uncropped by default so you see how much of the view the item takes; gui is the inventory square.

NameRequiredDescriptionDefault
cropNo
pathNoFile for a single slot.
slotNoDefault firstperson_righthand.
slotsNo
widthNoDefault 768.
heightNoDefault 432.
overwriteNoReplace files that already exist. Default false.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations flag this as non-read-only and destructive, and the description justifies that by disclosing the file side effect: PNGs are written to the output folder in addition to being returned. It stops short of tying that to the 'overwrite' behavior (default false) or saying what existing files are replaced.

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 the render/return behavior front-loaded and the two most surprising defaults (uncropped first person, gui square) immediately after. The parenthetical about the output folder 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 7-parameter, all-optional tool with no output schema, the description covers the return type (images) and file side effect, which is the minimum an agent needs. It leaves gaps on path-vs-slots interaction and overwrite semantics that the sparse schema descriptions do not fill.

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 undocumented 'crop' param is explained by 'First person is uncropped by default', which conveys the default cropping behavior. The slot enum's meaning is partly clarified ('gui is the inventory square'), though the relationship between 'path' and 'slots' stays 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+resource: renders display slots as the Blockbench display editor shows them and returns PNG images. It is distinguishable from the plain 'screenshot' sibling only by implication (the display-slot framing), not by an explicit contrast.

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 usage for inspecting item display slots and explains two defaults (first person uncropped, gui is the inventory square), but never says when to prefer this over 'screenshot', 'display_get', or 'export', and gives no prerequisites or exclusions.

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

display_setSet display transformsA
DestructiveIdempotent

Sets display transforms (undoable). Give "display" for several slots, or "slot" with rotation/translation/scale, or a "preset" file. Fields you leave out keep their value unless replace is true.

NameRequiredDescriptionDefault
slotNo
scaleNo[x, y, z], each within -4..4. Negative mirrors.
presetNoA .json file with a "display" block (for example another item model) in the output or assets folder.
displayNo
replaceNoReset each given slot before applying. Default false.
rotationNoDegrees [x, y, z].
translationNo[x, y, z], each within -80..80.

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the annotations it discloses two traits the agent cannot see otherwise: the mutation is undoable, and partial updates merge so unmentioned fields survive unless replace is true. This meaningfully softens and explains the destructiveHint=true/idempotentHint=true profile, though it does not say what is destroyed on replace or whether a preset load clobbers existing slots.

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 action and its undoability are front-loaded, then the three input modes, then the merge rule. Every clause carries information the agent needs before calling.

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 7-parameter, zero-required, nested-object tool with no output schema, the description covers the actionable points: which parameters go together and how omission behaves. Missing is the conflict rule when multiple modes are combined and any mention of display_get for verification, which matters for a destructive mutation.

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 already documents scale/translation/rotation ranges, so the baseline is high; the description goes further by explaining the interaction between omitted fields and the replace flag, which the schema does not state. It omits any guidance on whether slot and display are mutually exclusive or what preset resolves against beyond the schema's folder note.

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 and resource ("Sets display transforms") and then enumerates the three mutually exclusive targeting modes: a "display" map for several slots, "slot" plus rotation/translation/scale, or a "preset" file. An agent can tell it is a write/set operation on item model display, though it never names the sibling display_get as the read counterpart.

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?

Clear guidance on how to invoke it: choose one of three input shapes, and omitted fields merge rather than overwrite. It does not say when to prefer this over display_get or display_screenshot, nor what happens if arguments from two modes are supplied together, so it stops short of full when/when-not guidance.

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

exportExport filesA
DestructiveIdempotent

Writes the open project: geo (.geo.json, GeckoLib/Bedrock), animation (.animation.json with all animations), model (Java block/item .json with its display block, Java projects only) and texture (.png). Existing files are kept unless overwrite is true.

NameRequiredDescriptionDefault
geoNoAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .geo.json.
modelNoAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .json.
textureNoAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .png.
animationNoAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .animation.json.
overwriteNoReplace files that already exist. Default false.

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 idempotentHint=true, so the description's key contribution is the nuance that existing files are kept unless overwrite is true — that materially clarifies how destructive it actually is in practice. It also discloses the per-format scope (animation file contains all animations, model only for Java). It does not cover partial-failure behavior or whether parent directories are created, which is why it isn't 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 sentences, zero filler, and the artifact list is front-loaded before the overwrite caveat. Every clause carries distinct information about what gets written or what happens on collision.

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 five-optional-parameter write tool with no output schema, the description covers what is produced and the overwrite policy, which is most of what an agent needs. The notable gap is return behavior — whether it reports the written paths or a partial-success status — which matters given multiple optional artifacts can each fail independently.

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 earns more by binding parameters to meaning the schema lacks: the model parameter is implicitly Java-only, and each path parameter is tied to a specific output artifact and extension. The overwrite flag's consequence (keep vs replace) is also restated behaviorally rather than just as a default 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?

Opens with a concrete verb ('Writes') and names the resource precisely: the open project's geo, animation, model and texture files. It even annotates the format of each artifact (.geo.json, .animation.json, .png), so an agent knows exactly what will be produced. It stops short of explicitly contrasting with sibling tools, though the write-to-disk framing is distinct enough on its own.

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 must infer that a project should be open first, and there is no explicit 'use this instead of X' routing. The one real conditional it does give is valuable — the model export is 'Java projects only' — but the absence of any when-not or prerequisite statement keeps this at minimum-viable.

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

new_java_itemNew Java item modelA

Opens a new tab with an empty Java block/item model, for example a weapon. Cubes need no bones. Optional display transforms, given directly or copied from a preset file.

NameRequiredDescriptionDefault
nameYes
presetNoA .json file with a "display" block (for example another item model) in the output or assets folder.
displayNo
namespaceNoNamespace for texture links, as in "<namespace>:item/<name>". Default minecraft.
texture_widthNoDefault 16.
texture_heightNoDefault the width.

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 agent knows this creates state without destroying anything. The description corroborates this by saying it opens a new tab with an empty model, and adds that preset files are read from the output or assets folder — useful side-effect context. It does not say what happens if the name already exists, whether a duplicate tab is created, or whether the new tab becomes active.

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 short sentences, front-loaded with the core action, and no filler. The clause 'Cubes need no bones' is terse to the point of being cryptic in isolation, but it earns its place as a real modeling constraint.

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 6-parameter creation tool with a nested display object and no output schema, the description covers the conceptual model and the preset/display relationship but omits the required 'name' parameter's role, the namespace/texture-linkage behavior, and any error or collision behavior on creation. Adequate to call it, incomplete for predicting its effects.

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 67%, and the description adds genuine meaning for the most complex parameter: display transforms can be supplied directly or copied from a preset file, clarifying that 'preset' and 'display' are two routes to the same data, which the schema does not state. It says nothing about 'name' (required), 'namespace', or texture dimensions, leaving those to the schema's own descriptions.

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 and resource: it opens a new tab containing an empty Java block/item model, with a weapon as an example. It is clear this is a creation/scaffolding tool, but it never distinguishes itself from the sibling tool 'open_java_model', which an agent could reasonably confuse it with.

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: it is for starting a new item model from scratch rather than opening an existing one. 'Cubes need no bones' hints at a workflow constraint (item models skip the bone stage that other model types require), but there is no explicit when-to-use/when-not-to-use statement or a named alternative for loading existing models.

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

new_projectNew GeckoLib modelA

Opens a new tab with an empty GeckoLib animated entity model (a Bedrock entity model if the GeckoLib Blockbench plugin is missing; the reply then has a warning). 16 units = 1 block; the model stands on y=0 and faces north (-Z).

NameRequiredDescriptionDefault
nameYesModel name, also the geometry name.
modidNoMod id stored in the GeckoLib project settings.
texture_widthNoTexture UV width. Default 64.
texture_heightNoTexture UV height. Default the width.

TDQS

A3.9/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, so the description's job is to add side-effect detail, which it does: a new tab is opened, the fallback to a Bedrock entity model occurs when the GeckoLib plugin is absent, and the reply carries a warning. It stops short of saying what happens on a duplicate name or whether an opened tab can be closed via close_tab.

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: the deliverable comes first, then fallback behavior, then coordinate conventions. Only the parenthetical clause slightly interrupts reading flow; nothing is redundant.

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 creation tool with no output schema, the description covers the produced artifact, the degenerate fallback path, and the geometry conventions an agent needs before adding bones or cubes. Remaining gaps are collision handling and the fact that the new tab must later be closed, both minor.

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 name, modid, texture_width, and texture_height are already documented including defaults. The description adds no parameter-level meaning (the unit/orientation notes are about the model, not the inputs), which is the expected baseline when the schema carries the load.

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?

Names a specific verb and resource: opening a new tab containing an empty GeckoLib animated entity model. The GeckoLib-vs-Bedrock distinction and the 'empty/new' framing separate it from open_model and open_java_model in the sibling list without the agent needing to open a 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?

It implies creation of a fresh model and notes the plugin-missing fallback, which tells the agent what will actually be produced. However, it never says explicitly when to choose this over open_model, open_java_model, or new_java_item, leaving the create-vs-open routing to inference.

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

open_java_modelOpen a Java block/item modelA

Opens a Java block/item model .json that has "elements" in a new tab. Its texture comes from "texture", a same-named PNG next to the model, or assets/textures/...; anything else shows blank. Parent models are not followed. If the file is already open it switches to that tab.

NameRequiredDescriptionDefault
nameNoTab name. Default the file name.
modelYesAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .json.
reloadNoIf the file is already open with no edits, close that tab and load the file again.
reopenNoOpen a new tab even if this file is already open.
textureNoAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .png.

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses non-obvious behavior: blank rendering when the texture cannot be resolved, no parent-model traversal, and tab reuse for already-open files. It does not say what happens on malformed or element-less input, which is the main remaining 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?

Four short sentences, front-loaded with what is opened and how textures resolve. The nested quoting around "elements" and "texture" is slightly awkward to parse, but no sentence is 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?

For a five-parameter tab-opening tool with no output schema and adequate annotations, the description covers texture resolution, parent-model limits, and tab behavior. Missing only error handling for files without "elements", which the description itself flags as a requirement but does not explain the failure mode for.

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?

The description gives real added meaning for the texture parameter by spelling out the resolution order (explicit "texture", same-named PNG, then assets/textures/...), and the tab-switching sentence implies the intent behind reopen/reload. But reload and reopen are never described, and with 100% schema description coverage the schema already carries most parameter semantics.

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: opening a Java block/item model .json (one containing "elements") into a new tab. The 'Java block/item' qualifier implicitly separates it from the sibling open_model, but it never names that sibling or states the distinction explicitly, so differentiation is left partly to inference.

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?

There is an implicit precondition (the file must contain "elements") and a stated limit (parent models are not followed), plus a note that an already-open file switches to its existing tab. However, there is no explicit 'use this instead of open_model when...' guidance and no statement of 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.

open_modelOpen a .geo.json modelA

Opens an existing Bedrock/GeckoLib .geo.json in a new tab (converted to GeckoLib format when that plugin is installed), optionally with its .animation.json and texture PNG. If the file is already open it switches to that tab instead.

NameRequiredDescriptionDefault
geoYesAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .json.
reloadNoIf the file is already open with no edits, close that tab and load the file again.
reopenNoOpen a new tab even if this file is already open.
textureNoAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .png.
animationNoAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .json.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare non-read-only, non-destructive, non-idempotent, closed-world; the description adds real behavior: a new tab is created, format conversion happens when the GeckoLib plugin is installed, and an already-open file switches to its tab instead of duplicating. It does not cover failure modes for missing/invalid files, which is the main remaining gap.

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 verb and resource, then the optional sidecars, then the dedup behavior. No redundant restatement of the title or 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?

For a simple open-file tool with full schema coverage and no output schema, the description covers format handling, sidecar attachments, conversion, and tab reuse. Only edge-case behavior (missing file, invalid JSON) is unstated, a minor gap at this 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 description coverage is 100%, so all five parameters (paths, reload, reopen) are already documented in structured form. The description adds only loose correspondence ('optionally with its .animation.json and texture PNG') and no new semantics for reload/reopen or path prefixes, so 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 ('Opens') and a precise resource (an existing Bedrock/GeckoLib .geo.json), plus the result (a new tab). The qualifier 'Bedrock/GeckoLib .geo.json' implicitly separates it from the sibling open_java_model, so an agent can pick correctly 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?

Clear context for use: open an existing model file, optionally attaching its .animation.json and texture PNG, with tab-dedup behavior described. It stops short of explicitly excluding alternatives (e.g., open_java_model for Java-format models, new_project for fresh projects), leaving that routing to inference from the file format.

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

pingPing the bridgeA
Read-onlyIdempotent

Checks that Blockbench is open, the Stonecut Bridge plugin is listening and the token is right. Returns the plugin version.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the three failure conditions it validates and the return payload (plugin version), which annotations cannot express.

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, front-loaded with the purpose and immediately followed by the concrete checks and return value. No filler or redundancy.

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 zero-parameter, read-only diagnostic tool with annotations covering safety, the description supplies everything an agent needs: what is verified, the failure modes implied, and what comes back. No output schema exists, and the return value is described in prose instead.

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?

There are zero parameters, so the baseline is 4; the description correctly implies a no-argument call. It adds no parameter meaning because none is needed.

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 names a specific verb+resource (checks the bridge) and enumerates the exact three preconditions it validates: Blockbench is open, the Stonecut Bridge plugin is listening, and the token is correct. It also states the return value (plugin version), which distinguishes it clearly from siblings like status or screenshot.

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 name and the checklist of preconditions, but the description never says explicitly when to call this versus the sibling 'status' tool, which is the obvious alternative for checking connection state. No when-not guidance is given.

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

screenshotScreenshot the modelA
Destructive

Renders the 3D preview from named views (or yaw/pitch in degrees) and returns the images; PNG files are also written to the output folder. The camera frames the model and is put back afterwards. "right" is the model's right side when it faces north. Give animation + time to see a pose. Screenshot often and check every side.

NameRequiredDescriptionDefault
yawNoCustom camera yaw in degrees, used when no view is given. 0 looks at the front.
pathNoFile for a single view. Default an automatic name in the output folder.
timeNoSeconds into the animation.
viewNoOne view. Default iso.
pitchNoCustom camera pitch in degrees. Default 15.
viewsNoSeveral views at once.
widthNoDefault 512.
heightNoDefault 512.
distanceNoCamera distance. Default fits the model.
animationNo
overwriteNoReplace files that already exist. Default false.

TDQS

A3.7/5.0
Behavior4/5

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

Adds real behavior beyond the annotations: images are returned as well as written to disk, the camera frames the model and is restored afterwards, and animation + time yields a posed frame. The destructiveHint=true implication of overwriting existing files is only covered by the schema's overwrite parameter, not called out in prose.

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-loads what is rendered and returned, then tacks on the camera-restoration and orientation facts in short sentences. 'Screenshot often and check every side' is slightly advisory filler but does earn a place as workflow guidance.

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 tool with no output schema, the description covers the core loop: render from views or angles, get images back plus files on disk, optionally pose via animation/time. Minor gaps remain, such as how path behaves with multiple views and the file-overwrite risk, but nothing essential to calling it correctly 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 coverage is 91%, so the schema already documents nearly every parameter, giving a baseline of 3. The description does add orientation semantics ('right' is the model's right side when facing north) and the yaw/pitch fallback relationship, but leaves width/height/distance/overwrite entirely to the schema, so the added value is modest.

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: renders the 3D preview from named views or yaw/pitch and returns images, writing PNGs to the output folder. That is clearly distinct from model-editing siblings, though it never explicitly contrasts itself with display_screenshot, which an agent could easily confuse it with.

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?

Offers implied usage guidance ('Screenshot often and check every side') and a conditional hint (give animation + time to see a pose). It never says when not to use it, which view to prefer, or how it relates to display_screenshot, so the routing guidance is only implicit.

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

statusBridge and project statusA
Read-onlyIdempotent

Whether the GeckoLib plugin is installed, the allowed folders (output, assets), the open project (format, bones, cubes, textures, animations, and for Java models the display transforms) and every open tab with its edit count. Call this first.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is fully covered by structured data. The description's contribution beyond that is the inventory of returned state, which tells the agent this is a pure inspection call with no side effects implied. It adds no further behavioral context such as freshness of the reported state or cost of the call.

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 dense enumeration sentence plus a three-word directive, with no filler. The main structural weakness is that the most important instruction, 'Call this first', is buried at the end rather than front-loaded where it would drive tool selection immediately.

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 return values, and it does so item by item across plugin state, folders, project contents and open tabs. For a zero-param inspection tool this is close to complete, missing only detail about how the tab edit counts or folder lists are formatted.

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 there is nothing for the description to disambiguate and the baseline of 4 applies. The schema is an empty object with full coverage, consistent with the description's no-argument framing.

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 enumerates exactly what the tool surfaces: GeckoLib plugin presence, allowed output/asset folders, the open project's format, bones, cubes, textures and animations (plus display transforms for Java models), and every open tab with its edit count. That is specific enough to distinguish it from siblings like ping or open_model. It lacks an explicit verb up front ('reports'/'returns'), so the purpose is inferred from the content list 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 Guidelines4/5

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

'Call this first' gives a clear, actionable ordering directive that an agent can follow without inference. It does not name alternatives or say when not to call it, but for a zero-parameter state-inspection tool there is little ambiguity about alternatives.

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

texture_createCreate or resize the textureA
DestructiveIdempotent

Creates the project texture, or resizes it (the canvas grows or shrinks and old pixels stay at the top-left). Also sets the project UV size unless set_uv_size is false.

NameRequiredDescriptionDefault
fillNo"#rrggbb", "#rrggbbaa", or "clear" / null for transparent
nameNoTexture name for a new texture, for example "sword.png".
widthNoDefault the project UV width.
heightNoDefault the width.
keep_pixelsNoKeep the old pixels when resizing. Default true.
set_uv_sizeNoAlso set the project UV size. Default true.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description adds real behavioral context beyond them: resizing anchors old pixels at the top-left, and UV size is a side effect unless set_uv_size is false. It stops short of explaining overwrite semantics for an existing texture name, which is what makes the destructive hint material.

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 front-loaded sentences with no filler; the create/resize duality comes first and the UV side effect second, with the pixel-anchoring detail earning its 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 six-optional-parameter mutation tool with no output schema, the description covers the main modes and side effects but leaves open whether an existing texture with the same name is replaced, what a caller gets back, and which parameters are required to create versus resize.

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 fill, name, width/height, keep_pixels and set_uv_size. The description only restates the set_uv_size toggle and the top-left anchoring, adding little parameter-level 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?

States a specific verb and resource ('Creates the project texture, or resizes it') and includes the secondary effect on project UV size. This clearly separates it from texture_import (bring in external image) and texture_set_pixels/fill_rect (modify existing pixels), 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?

The two modes (create vs resize) are described, implying when each applies, but there is no explicit guidance on when to prefer this over texture_import or over setting pixels directly, and no mention of prerequisites such as whether the texture must already exist for the resize path.

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

texture_drawDraw a character gridB
DestructiveIdempotent

Draws a small picture from rows of characters, for example rows ["..ab..", ".abba."] with palette {"a": "#ff0000", "b": "#000000"}. Characters not in the palette are skipped. Each character covers scale x scale pixels.

NameRequiredDescriptionDefault
xNo
yNo
rowsYes
scaleNo
paletteYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description usefully adds the unmapped-character skip rule and the scale semantics, but it never says what the destructive write overwrites (existing pixels? a target texture?) or where the drawing is anchored.

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 short sentences, front-loaded with the core concept followed by a concrete example, then two dense rules. No filler; every clause carries information.

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 drawing tool with five parameters, nested palette object, and no output schema, the description omits the coordinate parameters, the drawing target, and any overwrite behavior. An agent still cannot reliably construct a call from this text plus the bare 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 description coverage is 0%, so the description must carry the parameter burden. It illustrates rows and palette by example and clarifies scale indirectly, but x and y are never mentioned at all — no origin, defaults, or coordinate meaning — leaving two of five parameters undocumented in both schema and prose.

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 (draws) and resource (a small picture from rows of characters) with a worked example, so the mechanism is unmistakable. It doesn't name or contrast with the obvious siblings (texture_set_pixels, texture_fill_rect), so an agent must infer which texture tool to pick from the name alone.

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: nothing says when to prefer this over texture_set_pixels or texture_fill_rect, and nothing says what must exist first (an open project/model or a selected texture target). The reader is left to guess the preconditions entirely.

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

texture_fill_rectFill a rectangleC
DestructiveIdempotent

Fills a rectangle of the texture with one colour (or clears it).

NameRequiredDescriptionDefault
hYes
wYes
xYes
yYes
colorYes"#rrggbb", "#rrggbbaa", or "clear" / null for transparent

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered without the description. The description adds little beyond that — it does not say that existing pixels in the region are overwritten, what happens at bounds, or how the 'clear' path differs from color=null, which the schema already documents.

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 operation front-loaded and no filler. The parenthetical clarification about clearing is useful and compact; the definition is terse rather than bloated, with its deficiency being under-specification scored elsewhere.

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?

This is a five-parameter destructive write with no output schema and no annotations beyond hints, and the description omits the facts an agent needs: that the fill overwrites existing pixel data, how out-of-range rectangles are handled, and whether the rectangle is clipped to the texture. For a mutating tool at this complexity, that is a substantial gap.

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 20% — only color carries a description — so the description must compensate for x, y, w and h. It says only that a "rectangle" is filled, leaving coordinate origin, units, whether w/h are inclusive or exclusive, and clipping behavior at the 0–4096 bounds entirely 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?

The description states a specific verb and resource ("fills a rectangle of the texture") and adds the variant behavior of clearing. It is clearly distinguishable from texture_set_pixels and texture_draw by its rectangular region scope, though it never names those siblings to make the distinction explicit.

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 choose this over texture_set_pixels or texture_draw, nor any prerequisites or exclusions. The agent must infer that this is the bulk-fill option from the phrase "rectangle" alone.

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

texture_importImport a PNG textureC
DestructiveIdempotent

Loads a PNG from the output or assets folder as the project texture.

NameRequiredDescriptionDefault
pathYesAbsolute path, or "output:<relative path>" / "assets:<relative path>". Must end with .png.
set_uv_sizeNoSet the project UV size to the image size. Default false.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=true, but the description never mentions that loading a texture replaces the project's existing texture or what happens on failure. The only added information, the source folders, is already covered by the path parameter's schema. For a flagged-destructive tool this leaves the key consequence undisclosed.

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 no filler, and the key resource is front-loaded. It is efficiently written, though its brevity is part of the transparency problem rather than a virtue in itself.

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 only two parameters and full schema coverage, the structural side is fine, but the description omits the destructive consequence flagged in the annotations, does not state whether the previous texture is discarded or restored, and gives no indication of what the call returns or how it errors on a missing or non-PNG file.

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%, with path format and set_uv_size semantics fully documented in the schema, so the baseline is 3. The description only loosely restates the folder aspect of path and says nothing about set_uv_size (e.g. whether direct-pixel tools then operate at the new UV size).

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: it loads a PNG and makes it the project texture, and it names the two permitted source folders (output or assets). That is clear enough to know what the tool does, but it does not distinguish it from siblings such as texture_create or texture_set_pixels, which also produce texture content.

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 statement of when to use this tool versus texture_create, texture_set_pixels, texture_draw or texture_fill_rect, nor any preconditions beyond the implicit source-folder constraint. The agent must infer the selection criteria purely from the sibling names.

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

texture_set_pixelsSet pixelsC
DestructiveIdempotent

Sets single pixels: a list of [x, y, colour].

NameRequiredDescriptionDefault
pixelsYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=false, so safety framing is covered structurally. The description adds nothing beyond them: it does not say whether writes replace or blend existing pixel values, what coordinate origin applies, or whether the operation is atomic across the batch.

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 short sentence, front-loaded with the verb and resource, with the parameter hint attached. Nothing is redundant, though the terseness leaves room that could have been spent on the coordinate and colour semantics.

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?

This is a destructive mutation with no output schema and no annotation-independent explanation of effects, yet the description says nothing about what is overwritten, what the coordinate space is, or whether invalid coordinates error or clip. For a pixel-write tool operating on a bounded texture, those omissions matter.

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 0%, so the description must carry weight — and labeling the tuple as [x, y, colour] genuinely helps, since the array items are unnamed and positional in the schema. However it omits the 0–4095 coordinate bounds, the 65536-pixel batch limit, and the partial transparency semantics implied by the colour field.

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 ("Sets single pixels") and describes the payload shape, which implicitly distinguishes it from rectangle/drawing siblings like texture_fill_rect or texture_draw. It stops short of naming an alternative explicitly, so an agent must infer the boundary from the word "single".

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 or when-not-to-use guidance. Faced with texture_draw, texture_fill_rect, and texture_create in the sibling list, an agent gets no signal about which to pick for a per-pixel write versus a bulk fill or a draw primitive.

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. 21 tool updatesv1.0.0
    • First observedadd_animation
    • First observedadd_bones
    • First observedadd_cubes
    • First observedadd_keyframes
    • First observedclose_tab
    • First observeddisplay_get
    • First observeddisplay_screenshot
    • First observeddisplay_set
    • First observedexport
    • First observednew_java_item
    • First observednew_project
    • First observedopen_java_model
    • First observedopen_model
    • First observedping
    • First observedscreenshot
    • First observedstatus
    • First observedtexture_create
    • First observedtexture_draw
    • First observedtexture_fill_rect
    • First observedtexture_import
    • First observedtexture_set_pixels

TDQS

B3.4/5.0

Scored across 21 tools

Disambiguation4/5

Most tools target a distinct resource+action: bones, cubes, animations, keyframes, textures, display transforms, screenshots, export. The only mild overlaps are the four project-creation openers (new_project, new_java_item, open_model, open_java_model) and the texture tools (create/import/set_pixels/draw/fill_rect), but the descriptions make the boundaries clear. screenshot vs display_screenshot is also well separated by purpose.

Naming Consistency4/5

Consistent snake_case throughout, mostly verb_noun or resource_verb (add_bones, texture_fill_rect, display_set, open_java_model). Minor deviations are the single-word verbs ping, status, screenshot and export, which are still unambiguous. The texture_* and display_* prefixes group related tools predictably.

Tool Count4/5

At 21 tools this is at the upper end, but the domain genuinely spans two model formats, texture painting, animation, display transforms and export, so nearly every tool earns its place. There is little redundancy; the count is heavy but not bloated.

Completeness3/5

The surface covers creation, opening, textures, animation, screenshots and export well, but it is add-only for geometry and animation: there is no way to move/resize/delete a cube or bone, remove a keyframe or animation, or read back texture pixels. An agent that makes a modeling mistake must restart the tab rather than fix it in place, which is a notable gap.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers