threejs-devtools-mcp
An MCP server that lets an AI inspect, live-preview and debug a running Three.js scene in the browser, then turn the changes into real code.
Inspect the scene —
scene_tree,object_details,find_objects,geometry_details,morph_targets,skeleton_details,layer_details,raycast,click_inspect,overlay_selectedMaterials & shaders — list/get details,
set_material_property,shader_list,shader_source,set_uniformTextures —
texture_list,texture_details,texture_preview(PNG),set_textureRenderer, camera, lights, fog, shadows, environment —
renderer_info/renderer_settings,camera_details,set_camera,set_light,fog_details/set_fog,shadow_details/set_shadow,scene_background,env_map_detailsAnimation & instancing —
animation_details,set_animation,instanced_mesh_details,set_instanced_meshPerformance & memory —
performance_snapshot,perf_monitor(FPS/jank),memory_stats,dispose_check,postprocessing_listVisual debugging —
highlight_object,toggle_wireframe,bounding_boxes,add_helper/remove_helper,toggle_overlay,console_capture,scene_diffLive preview edits — change materials, transforms, lights, camera, fog, shadows, layers; all runtime-only (lost on reload) and recorded so
pending_changesreturns before → after code for vanilla Three.js and R3F,revert_changesundoes themCapture & export —
take_screenshot,annotated_screenshot,scene_export(GLB),gltf_to_r3fEscape hatch & connection —
run_js(arbitrary JS with access toscene,renderer,camera),bridge_status,set_dev_port,set_dev_url(remote apps, inspection only)Beyond the schema — website audits, 60fps video frame capture, Playwright/Puppeteer helpers and ready-made skills
Integrates with Windsurf (by Codeium) for debugging and modifying Three.js scenes in real time.
Supports React Three Fiber projects, allowing AI to inspect and manipulate Three.js components.
Provides 59 tools for real-time inspection and modification of Three.js scenes, including objects, materials, shaders, textures, animations, performance monitoring, and memory diagnostics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@threejs-devtools-mcpshow me the scene tree"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
threejs-devtools-mcp
MCP server for inspecting Three.js scenes in real time, trying changes live in the browser, and turning them into code. 69 tools cover objects, materials, shaders, textures, animation, performance and memory, plus website audits, video frame capture and Playwright helpers.
Zero changes to your project. Works with vanilla Three.js and React Three Fiber, on WebGLRenderer and WebGPURenderer.

Setup
1. Add the MCP server
claude mcp add threejs-devtools-mcp -- npx threejs-devtools-mcpAdd to claude_desktop_config.json:
{
"mcpServers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}Or use the HTTP transport — see Cursor setup guide.
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}Add to .vscode/mcp.json:
{
"servers": {
"threejs-devtools-mcp": {
"command": "npx",
"args": ["-y", "threejs-devtools-mcp"]
}
}
}Add to opencode.json in your project:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"threejs-devtools-mcp": {
"type": "local",
"command": ["npx", "-y", "threejs-devtools-mcp"],
"enabled": true
}
}
}2. Start your dev server and open the browser
Start your Three.js dev server as usual (npm run dev). The MCP server auto-detects the port from package.json and opens a browser at localhost:9222 with the devtools bridge injected.
Keep the browser tab open. The MCP server talks to your scene through a WebSocket bridge. Close the tab = tools stop working.
3. Ask the AI about your scene
"show me the scene tree"
"why is my model invisible?"
"try the car in red" ← live preview, nothing saved
"keep it" ← written into your code
"audit this site for mobile"
"record a 5-second clip at 60 fps"Related MCP server: threejs-devtools-mcp
Look now vs. change the code
Every tool is labelled, so you and the AI always know what touches your files:
Tools | Your code | |
Inspect |
| untouched |
Live preview |
| untouched; lost on page reload |
Debug visual | wireframe, bounding boxes, helpers, overlay | untouched; never needed in code |
For code |
| the AI writes this into your source |
Every live-preview change is recorded. pending_changes returns each one as before → after with ready-to-paste code (vanilla Three.js and React Three Fiber) and where to find it in your project. revert_changes undoes them in the browser.
For websites and videos
web_audit: checks for a blurry canvas (pixel ratio, missing resize), battery drain (rendering while idle or off-screen), heavy textures (oversized, not KTX2), expensive shadows, wrong color space and too many draw calls. Each finding comes with the fix.capture_frames: records a frame sequence for promo clips and reels. Time is virtualised, so the output is perfectly smooth at 30/60 fps even if your scene renders slowly. You get theffmpegcommand for MP4/WebM.
Skills
Ready-made workflows show up as slash commands in Claude Code, Cursor and other clients: inspect-scene, try-look, apply-to-code, web-perf-audit, prepare-video, debug-invisible, playwright-setup.
Playwright & Puppeteer
Three ways to connect, same tools in all of them: your own browser (default), a Chrome launched by the server (HEADLESS / CDP_PORT, shareable with Playwright MCP), or your own tests:
import { attachDevtools, waitForScene, threeCall } from 'threejs-devtools-mcp/playwright';
await attachDevtools(context, { connect: false });
await page.goto('http://localhost:5173');
await waitForScene(page);
expect((await threeCall(page, 'object_details', { name: 'Car' })).visible).toBe(true);See Browsers, Puppeteer & Playwright.
In-browser overlay
A built-in devtools panel with live performance stats, interactive scene graph, material editor, and 3D object preview. Activated automatically or via the toggle_overlay tool.

Tip: name your objects
Unnamed objects show as (unnamed) in the scene tree. Named objects are easier to find and modify:
// Three.js
mesh.name = "player";// React Three Fiber
<mesh name="player" geometry={geometry} material={material} />Documentation
Tools reference — all 69 tools by mode, skills, parameters
Browsers, Puppeteer & Playwright — connection modes, e2e tests, CI tips
Advanced setup — animations, scene export, configuration, transports
Cursor setup — step-by-step guide for Cursor
Token-efficient workflow — best practices for saving context
License
MIT
Available Tools
69 toolsadd_helperA
[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code. Add a debug helper to an object: box, axes, skeleton, arrow, grid, camera frustum, light helpers, plane.
| Name | Required | Description | Default |
|---|---|---|---|
| size | No | Axes/Grid/light helper size (default: 1) | |
| type | No | Default: box | |
| color | No | Hex number (default: 0x00ff00) | |
| length | No | ArrowHelper length (default: 1) | |
| origin | No | [x, y, z] origin for ArrowHelper | |
| target | No | Target object name | |
| direction | No | [x, y, z] for ArrowHelper/PlaneHelper | |
| divisions | No | GridHelper divisions (default: 10) | |
| targetUuid | No | Target object UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the agent knows this mutates state without being destructive. The description adds the useful framing that these helpers are temporary visual aids and not part of production code, which reinforces the non-destructive nature. It does not disclose how helpers persist, when they are cleared, or that calling again stacks new helpers (relevant given idempotentHint=false).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the debug-visual tag and the core action, then the helper catalogue. It is efficient with no filler, though the type list partially duplicates the schema enum and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 9 well-documented optional parameters, full schema coverage, safety annotations, and no output schema expected, the description supplies what is needed to call it correctly. The main missing piece is how created helpers are managed or removed (the remove_helper sibling), but overall the definition is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all nine parameters including defaults and the type enum. The description enumerates the helper types (box, axes, skeleton, arrow, grid, camera frustum, light helpers, plane) but this largely restates the enum rather than adding new syntax or format meaning. Baseline 3 is appropriate when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb plus resource ("Add a debug helper") and it enumerates the helper kinds, so an agent immediately knows what it creates. The "[DEBUG VISUAL]" prefix and "Nothing to put in code" note cleanly scope it as a dev-only visual tool. It does not name its natural counterpart remove_helper, so sibling differentiation is present but not explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code." gives implied context that this is for debug inspection only, which is useful guidance. However there is no explicit when-to-use, when-not-to-use, or pointer to remove_helper for cleanup, leaving the practical usage workflow to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
animation_detailsARead-onlyIdempotent
[INSPECT] Read-only. AnimationMixers with their actions, clips, weights and playback state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is fully covered structurally. The description's 'Read-only' is redundant with that, but it adds useful content scope by naming what it surfaces (actions, clips, weights, playback state). No auth, rate, or pagination context is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with the category tag and safety flag front-loaded, followed by the resource scope. No filler sentences; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only inspection tool with annotations covering the safety profile, the description gives enough: what is read and what fields come back. There is no output schema, but the enumerated fields largely substitute for one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the schema carries no semantics and the baseline is 4. There is nothing for the description to disambiguate or misstate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource and enumerates its content: AnimationMixers with actions, clips, weights, and playback state. The [INSPECT] tag and 'Read-only' imply the verb. It does not name the mutation sibling (set_animation), so sibling differentiation is only indirect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The [INSPECT] prefix and 'Read-only' imply this is the read path for animation state, but there is no explicit when-to-use, when-not, or named alternative. The agent must infer it is the inspection counterpart to set_animation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
annotated_screenshotARead-onlyIdempotent
[INSPECT] Read-only. Screenshot with object names drawn at their screen positions ([M]esh, [L]ight, [G]roup, [C]amera). Best for understanding layout.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Width in pixels (default: canvas width) | |
| height | No | Height in pixels (default: canvas height) |
TDQS
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 covered. The description still earns credit for disclosing what the returned artifact actually contains (an image with [M]/[L]/[G]/[C] markers overlaid at object screen positions), which is real output-content information not present in any structured field. It stops short of stating the return format (image vs. path/URL) or any size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, front-loaded with the [INSPECT] Read-only tag followed immediately by the tool's distinguishing behavior. Every clause earns its place; the only redundancy is restating read-only, already covered by annotations, which is negligible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read-only screenshot tool with full schema coverage and rich annotations, the description supplies the missing piece — what the image contains. Without an output schema it could go one step further and state the return format (inline image vs. file path), which is the only remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both width and height documented as pixel dimensions defaulting to canvas size, so the schema carries the full burden. The description adds nothing about the two parameters, which is the correct baseline when the schema is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (screenshot with object names drawn at screen positions) and goes further by decoding the annotation glyphs ([M]esh, [L]ight, [G]roup, [C]amera), which no sibling schema reveals. That labeling scheme plus the [INSPECT] tag lets an agent distinguish it from take_screenshot and capture_frames without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Best for understanding layout' implies a use case and a contrast with plain screenshots, but no alternative tool is named and no when-not condition is given. The routing signal is inferable rather than explicit, so this is minimum-viable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batched_mesh_detailsARead-onlyIdempotent
[INSPECT] Read-only. BatchedMesh: geometry counts, draw ranges, instance visibility. Lists all if no name/uuid.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | BatchedMesh name | |
| uuid | No | BatchedMesh UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only' largely restates structured data. The one genuine addition is the batching behavior ('lists all if no name/uuid'), which discloses a useful side effect of omitting parameters. No return-format or pagination detail, so with annotations covering safety this lands at the midpoint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the [INSPECT] category tag and the read-only marker. No filler or redundancy; every clause contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by naming the returned fields (geometry counts, draw ranges, instance visibility). Combined with the optional-filter behavior, an agent has enough to invoke and interpret the tool, though it doesn't explain the return shape's structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (name, uuid) are self-documented, so the schema already carries the load. The description adds that these act as optional filters whose absence returns everything, marginally deepening the semantics, but nothing about identifier format or precedence between name and uuid.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb/resource pair (inspect BatchedMesh) and enumerates what the read returns: geometry counts, draw ranges, instance visibility. This clearly distinguishes it from the adjacent instanced_mesh_details and geometry_details siblings. An agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage only: 'Lists all if no name/uuid' tells the agent how to broaden the query, but there is no explicit when-to-use guidance and no routing against alternatives such as instanced_mesh_details or geometry_details. Adequate but leaves sibling selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bounding_boxesA
[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code. Show/hide bounding boxes — debug frustum culling and object bounds.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Target object (omit for all meshes) name | |
| uuid | No | Target object (omit for all meshes) UUID | |
| clear | No | Remove all boxes | |
| color | No | Hex number (default: 0x00ff00) | |
| limit | No | Max boxes (default: 50) | |
| enabled | No | true=show (default), false=remove all | |
| recursive | No | Include children of target | |
| onlyVisible | No | Only visible objects (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the mutation/non-destructive profile is already covered. The description adds real value with "Temporary visual aid" and "Nothing to put in code," telling the agent the boxes are ephemeral and not source artifacts, but it does not say how they are cleared or how long they persist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the bracketed [DEBUG VISUAL] tag and immediately followed by the caveat and the action. Efficient and easy to scan, though the tag-plus-caveat occupies half the text for framing rather than capability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter, all-optional debug overlay with full schema coverage and no output schema, the description conveys enough to call it correctly: it is temporary, not code, and toggles bounding-box visuals. The only minor gap is not clarifying the clear/enabled interaction, which the schema already handles.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all eight parameters (name, uuid, clear, color, limit, enabled, recursive, onlyVisible) are already documented in the schema, including defaults. The description contributes no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ("Show/hide bounding boxes") and adds a concrete purpose ("debug frustum culling and object bounds"), which separates it from siblings like toggle_wireframe or highlight_object. However, it never names those siblings explicitly, so differentiation relies on the reader inferring scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an implied usage context ("debug frustum culling and object bounds") and frames itself as a debug aid, which hints when to reach for it. There is no explicit when-not, no prerequisites, and no alternative tool named among the many overlay/highlight siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bridge_statusCIdempotent
[CONNECTION] Configures the devtools server. Bridge connection, proxy target, and how to attach Playwright to the same browser.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and idempotentHint=true, consistent with a configuration tool, but the description adds nothing beyond the verb: it does not say what gets changed, whether a connection must already exist, or what the call returns. With zero parameters and no output schema, the behavioral picture stays murky.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short, but it reads as two disconnected fragments: a bracketed tag plus a sentence, then a noun phrase with no verb. The purpose statement is not front-loaded coherently, so brevity here reflects under-specification rather than economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a configuration tool with no parameters and no output schema, the description is the only channel for telling the agent what the tool does, what state it affects, and what comes back. It supplies none of that, so an agent cannot confidently invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0 parameters, so per the rubric the baseline is 4. The description does not need to document parameters, and it does not pretend to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name bridge_status implies a read of connection state, but the description says "Configures the devtools server," which is the opposite verb. The trailing fragment names topics (bridge connection, proxy target, Playwright attach) rather than stating what the tool actually does or returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, prerequisites, or alternatives are given, despite siblings such as set_dev_port and set_dev_url that plausibly overlap with 'configures the devtools server.' The agent is left to guess how this differs from those tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
camera_detailsARead-onlyIdempotent
[INSPECT] Read-only. Active camera: type, position, FOV, near/far, aspect.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 covered structurally. The description adds real value by naming the returned fields, which matters because no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with the mode tag first and the resource and its fields second; nothing is padded or repeated. Every token earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with no output schema, disclosing the returned fields is the key completeness move and it is done. It stops short of noting edge cases such as no active camera or multi-camera scenes, but it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 listed field names describe the payload rather than any input, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear inspect verb on a specific resource (the active camera) and enumerates the fields surfaced (type, position, FOV, near/far, aspect). The '[INSPECT] Read-only' framing implicitly separates it from the write-side sibling set_camera, but it never names that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies a passive inspection use case, which is the minimum viable guidance. It never says when to reach for this versus raycast, click_inspect, or set_camera, nor whether it requires an active camera to exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_framesARead-only
[INSPECT] Read-only. Record a frame sequence for a video. Time is virtualised, so frames are exactly 1/fps apart and smooth even if rendering is slow. Saves numbered images to screenshots/sequence-/ and returns an ffmpeg command.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frames per second (default: 30) | |
| width | No | Width in pixels (default: canvas width) | |
| format | No | png = lossless (default), jpeg = smaller/faster | |
| height | No | Height in pixels (default: canvas height) | |
| duration | No | Seconds to record (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, destructiveHint=false), so the bar is lower; the description adds real value beyond them by disclosing output location (screenshots/sequence-<time>/), the return value (an ffmpeg command), and the virtualised-time guarantee. It does not address disk-write side effects, which slightly tempers the score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the [INSPECT] Read-only tag, then delivers purpose, behavioral guarantee, output location, and return value in three tight sentences with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by naming the saved images and the ffmpeg command. Combined with destination and timing behavior, an agent has enough to invoke it correctly, though file naming/counting specifics are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so fps, width, height, format, and duration are all documented in the schema, including the png/jpeg distinction. The description adds no parameter-level meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Record a frame sequence for a video") and tags the tool as [INSPECT] Read-only, making its inspection role clear. It distinguishes itself from single-frame siblings like take_screenshot by emphasizing a frame sequence, but never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the agent can infer this is for capturing video frames rather than a still, and the note about virtualised time hints at when smooth, deterministic output matters. There is no explicit when-to-use/when-not or named alternative such as take_screenshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_inspectARead-onlyIdempotent
[INSPECT] Read-only. Click-to-inspect: the cursor becomes a crosshair — tell the user to click an object in the 3D view. Returns that object.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | Max wait in seconds (default: 15, max: 60) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, but the description adds non-trivial context the annotations cannot: this tool blocks on real user interaction, changes the cursor to a crosshair, and therefore requires the agent to prompt the user. That is material behavioral knowledge for an agent orchestrating 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the [INSPECT] Read-only tag and the core behavior. Zero filler; every clause carries an instruction or a constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does state the return ('Returns that object'), the interaction model, and the safety tag, and the timeout semantics live in the schema. It stops short of saying what happens if no click arrives before the timeout, which is the one remaining gap for an interactive, blocking tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Single optional 'timeout' parameter with 100% schema description coverage (default 15s, max 60s), so the schema fully carries parameter meaning. The description adds nothing about the timeout or what a timeout yields, which is the correct baseline when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Click-to-inspect ... Returns that object') and makes the interactive mechanism explicit via the cursor-to-crosshair detail, which sets it apart from programmatic pickers like raycast. It does not name that sibling directly, so the differentiation is implied rather than spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Tell the user to click an object in the 3D view' gives an operational procedure but no when-to-use framing against alternatives such as raycast or object_details, and no conditions under which this is the wrong tool. Usage is implied by the click flow rather than stated as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clipping_detailsARead-onlyIdempotent
[INSPECT] Read-only. Clipping planes: renderer global, per-material, ClippingGroup objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description's 'Read-only' merely restates that, though the scope line (renderer global, per-material, ClippingGroup objects) adds modest context about what categories of clipping data are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse lines with the inspection tag front-loaded and no filler. It is appropriately sized, though extremely minimal rather than richly informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only inspection tool whose annotations already carry the behavioral profile, the description says enough to call it correctly and hints at the returned scope. No output schema exists, so return-shape detail is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so per the rubric the baseline is 4. The schema is empty and there is nothing for the description to disambiguate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The '[INSPECT] Read-only' tag plus 'Clipping planes' names a resource and an implied read action, distinguishing it from the sibling set_clipping. It falls short of a clean verb+resource phrasing, but an agent can tell what it retrieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The [INSPECT]/Read-only framing implies this is for inspecting rather than modifying, which contrasts implicitly with set_clipping. However, no explicit when-to-use, prerequisite, or named alternative is given, so usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_captureBRead-onlyIdempotent
[INSPECT] Read-only. Recent browser console output (log/warn/error).
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Clear the buffer | |
| level | No | ||
| limit | No | Max messages (default: 50) |
TDQS
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 covered. The description adds that output is recent and level-scoped, but says nothing about buffer bounds, ordering, or the fact that the schema exposes a 'clear' flag that mutates the buffer despite the read-only framing — a notable omission for a tool with a state-changing parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two fragments, zero filler, with the category tag and read-only marker front-loaded. It is tight, though the extreme brevity comes at the cost of omitting useful behavioral detail rather than being a model of efficient completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so minimally (recent console messages at log/warn/error). It leaves the buffer-clearing behavior, default limit, and ordering unspecified, which is thin for a tool whose schema contains a mutating flag.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: 'clear' and 'limit' are documented in the schema, while 'level' is an enum whose values are self-explanatory. The description adds no format, default, or filtering semantics beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (recent browser console output) and constrains it to log/warn/error levels, so the agent knows exactly what is returned. The '[INSPECT]' tag groups it with sibling inspection tools, though it does not explicitly contrast with web_audit or run_js, which are the nearest functional neighbors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus alternatives such as web_audit, performance_snapshot, or run_js. The read-only tag implies a safe inspection context, but that is inferred, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dispose_checkARead-onlyIdempotent
[INSPECT] Read-only. Leak detection: geometries/textures tracked by the renderer but no longer in the scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnly, idempotent, non-destructive), and the description's 'Read-only' line merely repeats that. It does add genuine value by defining what is inspected — resources tracked but absent from the scene — but says nothing about the shape of the result or comparison basis, which is left uncovered since 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, tagged [INSPECT] and front-loaded with the read-only nature before the substantive purpose. No filler; every phrase carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only inspection tool with no output schema, the description covers what the tool does and its scope adequately. The remaining gap — what the returned leak list looks like — is minor given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. Nothing in the description is needed to disambiguate inputs, and nothing is misleading.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific function: detecting geometries/textures that are tracked by the renderer but no longer in the scene — a concretely defined leak-detection check, not a tautology of the name. It does not, however, name or distinguish itself from near-neighbor diagnostics like memory_stats or renderer_info, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to reach for it (to find orphaned renderer resources / memory leaks) but gives no explicit when-to-use, when-not-to, or sibling alternative guidance. Against a large diagnostics sibling set, the usage boundary is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draw_call_breakdownARead-onlyIdempotent
[INSPECT] Read-only. Per-object draw call and triangle cost, sorted by cost. Flags multi-material objects and hidden geometry.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds useful output behavior: results are sorted by cost, multi-material objects are flagged, and hidden geometry is surfaced. It does not describe granularity or thresholds, so this is solid but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences plus a category tag, front-loaded with the read-only marker and the core metric. Every clause carries information; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no output schema, the description sufficiently covers what is measured, how results are ordered, and what anomalies are surfaced. Minor gaps remain around scope (whole scene vs selection) and result granularity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is no parameter semantics burden; baseline 4 applies. The description correctly implies a whole-scene, unfiltered sweep.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and measurement: per-object draw call and triangle cost, with a clear analytical verb implied by 'breakdown'. It does not name a sibling to differentiate from, so an agent must infer its place against performance_snapshot or geometry_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies diagnostic/observation usage and the cost-sorting hints at performance triage, but there is no explicit when-to-use or when-to-prefer-an-alternative guidance versus performance_snapshot or perf_monitor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
env_map_detailsBRead-onlyIdempotent
[INSPECT] Read-only. Environment maps: scene.environment, scene.background, per-material envMap.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered; repeating 'Read-only' adds little. The valuable addition is scoping what data is exposed (scene.environment, scene.background, per-material envMap), though no return shape, cost, or auth context is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely short and front-loaded: a bracketed tag, a read-only marker, and a compact list of what is inspected. No filler, though the telegraphic phrasing reads more like a label than a sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and zero parameters, the description carries the burden of saying what comes back, and it does name the three inspection targets. A little more on scope (whole scene vs. selected material) would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document beyond the schema; baseline 4 applies. The description correctly implies a no-argument global inspection rather than suggesting missing filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear inspect action on a specific resource: environment maps, naming scene.environment, scene.background and per-material envMap. It does not, however, differentiate itself from overlapping siblings like scene_background or material_details, so an agent cannot fully disambiguate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies a read/inspection context, but there is no explicit when-to-use guidance and no mention of how it relates to siblings such as scene_background or material_details. An agent is left to infer the appropriate scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_objectsBRead-onlyIdempotent
[INSPECT] Read-only. Search objects by type, material, visibility, name pattern, or custom property.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Object type: Mesh, Group, InstancedMesh, Light, etc. | |
| limit | No | Max results (default: 50, max: 200) | |
| value | No | Expected value of the custom property | |
| visible | No | Filter by visibility | |
| material | No | Material name or type | |
| property | No | Custom property name to check | |
| hasGeometry | No | Objects with/without geometry | |
| minChildren | No | Minimum number of children | |
| namePattern | No | Regex to match object names |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description's 'Read-only' line is largely redundant. It adds no new behavioral context such as result shaping, pagination/limit behavior, or how filters combine. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact lines with the category and safety tag front-loaded before the functional sentence. Slight redundancy between the '[INSPECT]' tag and 'Read-only', but no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, all-optional filter tool with no output schema, the description is adequate on capabilities but silent on how multiple filters compose (AND/OR), result ordering, and what a match looks like. An agent can call it, but edge behavior is left to guesswork.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with all 9 parameters documented, so the schema carries the burden and baseline is 3. The description names a subset of the filter dimensions but adds no syntax, defaults, or combination semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (objects) plus the filter facets it supports (type, material, visibility, name pattern, custom property). This distinguishes it from singular inspection siblings like object_details, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies a discovery/read context, and the filter list implies when the tool is useful, but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g., scene_tree, object_details). Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fog_detailsARead-onlyIdempotent
[INSPECT] Read-only. Scene fog: type (Fog/FogExp2), color, near/far or density.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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. The description's 'Read-only' merely restates the annotation; its added value is limited to naming the fog fields returned, which is modest behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the INSPECT tag and read-only status before the payload description. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 return-value burden and does so by enumerating the fog fields. With zero parameters and annotations covering safety, this is nearly complete; only a routing hint to set_fog is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description instead characterizes the returned fog model (Fog vs FogExp2, and near/far for linear vs density for exponential), which is useful but not strictly parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('Scene fog') and enumerates the returned fields (type, color, near/far or density), so an agent knows exactly what it gets. It doesn't explicitly name set_fog as the write counterpart, but the INSPECT/read-only framing plus the naming convention makes the read/write split clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies this is a query tool to use when inspecting current fog state, but there is no explicit when-to-use statement or pointer to set_fog as the mutation alternative. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geometry_detailsBRead-onlyIdempotent
[INSPECT] Read-only. Geometry of a mesh: vertices, attributes, index, bounding box, morph attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Mesh name | |
| uuid | No | Mesh UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the description's 'Read-only' line is pure repetition that earns no credit. The description adds no behavioral detail beyond annotations — e.g. whether morph attributes are only returned when present, or how the payload scales with mesh complexity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no padding; the '[INSPECT]' tag immediately signals the tool category. The 'Read-only' clause is redundant against the annotations and is the only wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned geometry fields, which is exactly the burden it should carry. It stops short of explaining mesh resolution when both optional identifiers are omitted, but for a simple read-only inspector the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (name, uuid) are already documented, so the baseline is 3. The description implies the tool targets a specific mesh but adds nothing about how name vs uuid selection works or what happens when neither optional parameter is supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear read operation on a specific resource ('Geometry of a mesh') and enumerates the payload it covers (vertices, attributes, index, bounding box, morph attributes). This content listing helps distinguish it from generic siblings like object_details, though it never explicitly names the alternatives it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT]' prefix and 'Read-only' hint at a diagnostic context but give no explicit when-to-use guidance. Nothing tells the agent when to pick geometry_details over object_details, bounding_boxes, morph_targets, or instanced_mesh_details, nor are prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gltf_to_r3fARead-onlyIdempotent
[FOR CODE] Output is meant to be written into the project source files. Convert a GLB/glTF file into a React Three Fiber component (like gltfjsx).
| Name | Required | Description | Default |
|---|---|---|---|
| preload | No | Add useGLTF.preload() (default: true) | |
| filePath | Yes | Absolute or relative path to the .glb/.gltf file | |
| typescript | No | Generate TypeScript (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read profile (readOnlyHint, idempotentHint, non-destructive), so the bar is lower. The description adds genuinely useful context beyond them: the output is generated source code destined for project files, not runtime scene state, which tells the agent the result is consumed differently from sibling inspect tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the crucial output-destination constraint front-loaded before the core purpose. No padding, and the gltfjsx reference compresses an entire behavior into two words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a code-generation tool with no output schema, the description covers what is produced and where it goes, which is what an agent needs to route the result correctly. It could say slightly more about the shape of the emitted component (props, exports), but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with descriptions and defaults for filePath, preload, and typescript already in the schema. The description adds no parameter detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Convert') and resource ('GLB/glTF file into a React Three Fiber component'), and reinforces it with the recognizable analogue '(like gltfjsx)'. This clearly distinguishes it from every sibling, which are all scene inspection/mutation tools rather than code generators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[FOR CODE]' tag and the note that output is meant to be written into project source files imply the context in which this tool belongs. However, it never states when to reach for it versus an alternative (e.g. scene_export) or any prerequisite; 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.
highlight_objectA
[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code. Highlight an object with wireframe, or toggle its visibility, to point it out.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Default: wireframe | |
| name | No | Object name | |
| uuid | No | Object UUID | |
| enabled | No | Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare this is a non-destructive, non-idempotent write; the description adds meaningful context beyond them by stating the effect is a 'temporary visual aid' that leaves 'nothing to put in code'. Toggling visibility is consistent with idempotentHint=false, so nothing is contradicted. It stops short of saying whether the highlight persists across frames or must be cleared.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with a bracketed category tag first and the core action second. No filler and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-optional-parameter, no-output-schema tool, the description plus annotations and a fully documented schema give an agent enough to invoke it correctly. Only minor gaps remain, such as how name and uuid interact and what, if anything, is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so mode, name, uuid and enabled are already documented in the schema. The description's mention of the wireframe/visibility modes restates the mode enum but adds no format, precedence, or name-vs-uuid guidance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (highlight/toggle) and resource (object) plus the two visual modes it supports, so an agent knows it is a browser-visual pointing tool. It doesn't explicitly name the overlapping siblings (toggle_wireframe, overlay_selected, bounding_boxes), so differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[DEBUG VISUAL]' tag and 'Nothing to put in code' imply this is for temporary, non-persistent pointing rather than scene mutation, which is useful context. However, it never says when to prefer this over toggle_wireframe or overlay_selected, nor any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
instanced_mesh_detailsARead-onlyIdempotent
[INSPECT] Read-only. InstancedMesh: count, capacity, sample transforms, instance colors and custom attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | InstancedMesh name | |
| uuid | No | InstancedMesh UUID | |
| startIndex | No | First sampled index (default: 0) | |
| sampleCount | No | Instances to sample (default: 5, max: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered; the description adds value by disclosing the returned payload, which matters because there is no output schema. It does not restate annotation content beyond the redundant 'Read-only' label, but it also omits that transforms are sampled rather than exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse lines: the category/safety tag is front-loaded and the resource plus returned fields follow with zero filler. Every token earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter, zero-required inspection tool with no output schema, the description adequately conveys what is returned and that it is non-mutating. The main gap is not clarifying name-vs-uuid resolution or that the transform list is a bounded sample (default 5, max 20).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, uuid, startIndex and sampleCount (with default 5, max 20) are fully documented in the schema. The description adds no parameter-level semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (InstancedMesh) and enumerates exactly what is read back (count, capacity, sample transforms, instance colors, custom attributes), with the [INSPECT] Read-only tag marking it as a read operation. It does not, however, differentiate itself from closely related siblings like object_details or batched_mesh_details, which also inspect mesh-like resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the [INSPECT] Read-only category tag; there is no explicit when-to-use statement, no conditions or prerequisites, and no named alternative (e.g. set_instanced_mesh for mutation, batched_mesh_details for batched meshes). The agent must infer routing from the tag alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
layer_detailsBRead-onlyIdempotent
[INSPECT] Read-only. Camera layer mask and objects with non-default layers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'Read-only' in the description is largely redundant. What it does add is the shape of the result (camera layer mask plus non-default-layer objects), which is genuine value given there is no output schema, but it says nothing about scope, scene coverage, or limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the safety tag front-loaded and no filler. It is appropriately sized for a zero-argument inspection tool, though the fragment-style second sentence is terse enough to feel like a note rather than a specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the full burden of explaining what comes back, and it only sketches that. It does not clarify whether the camera mask is reported per-layer, whether objects are grouped or listed flat, or what 'non-default' is measured against, which an agent would want before relying on the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The baseline for a no-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete verb+resource pairing: it reads the camera's layer mask and any objects assigned to non-default layers. That is specific enough to distinguish it from pure scene listings, though it never names the adjacent tools (camera_details, set_layers) that an agent might 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to reach for this tool versus camera_details, scene_tree, or set_layers, and no mention of prerequisites. The '[INSPECT]' tag implies a read-only diagnostic context, but the choice between this and its siblings is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material_detailsBRead-onlyIdempotent
[INSPECT] Read-only. Full material properties: colors, PBR/physical params, maps, uniforms, defines, NodeMaterial (TSL) slots.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Material name | |
| uuid | No | Material UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only' is largely redundant. The description does add useful scope by listing exactly which material facets are returned, but omits any lookup-failure behavior (e.g., what happens if neither name nor uuid matches) or return-shape context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the category tag and safety note followed by the property inventory. Slightly redundant restating read-only alongside the annotation, but no wasted prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only inspection tool with full annotation coverage and full schema coverage, the description supplies the one thing structured fields lack: the breadth of returned material data. Only the no-match/error path is unaddressed, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters, so the schema already documents name and uuid. The description adds no lookup syntax, precedence, or mutual-exclusivity guidance between the two selectors, leaving the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb tag ([INSPECT]) and resource (material properties), and enumerates the concrete payload (colors, PBR params, maps, uniforms, defines, NodeMaterial slots). This clearly separates it from material_list and set_material_property, though it doesn't name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies a read context but there is no explicit when-to-use, no condition for choosing this over material_list or texture_details, and no prerequisites. The agent must infer routing from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material_listARead-onlyIdempotent
[INSPECT] Read-only. All materials in the scene with type, color, transparency.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the description's '[INSPECT] Read-only' largely restates structured data. It does add return-field information (type, color, transparency), which is useful since no output schema exists, but provides no behavioral detail like pagination, scene-size limits, or instance scoping.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with zero waste and the scope statement front-loaded. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and safety fully covered by annotations, the description supplies the essential returned fields so an agent knows what it gets back. It stops short of describing list ordering or whether instanced/derived materials are included, but is otherwise complete for a simple enumeration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline this is a 4. Nothing in the schema needs semantic elaboration, and the description appropriately does not invent parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('All materials in the scene') and clarifies scope with the returned attributes. It implicitly separates itself from material_details (single-material lookup), but never names that sibling or draw the contrast explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies a safe inspection context, but there is no explicit guidance on when to call this versus material_details, shader_list, or texture_list. Usage is left to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statsBRead-onlyIdempotent
[INSPECT] Read-only. GPU memory: geometry buffers, texture VRAM, instance data, top textures by size.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 covered and the description's 'Read-only' adds nothing new. What it does add is the content scope: which memory categories are reported. It stops short of saying whether figures are live or sampled, or what the top-texture ranking is based on, so it is adequate rather than rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments, heavily front-loaded with the classification tag and scope of output. The enumeration is terse and functional. Minor waste in the '[INSPECT] Read-only' prefix, which restates what the annotations already declare.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter inspection tool with no output schema, the description does the necessary work by telling the agent exactly which memory categories come back. The only missing element is how these stats relate to the other perf/geometry tools, which the description does not address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to convey and the baseline of 4 applies. The schema is an empty object with full coverage, and nothing in the description misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete resource — GPU memory — and enumerates its breakdown (geometry buffers, texture VRAM, instance data, top textures by size). That separates it from siblings like geometry_details or texture_details, which drill into a single asset. It is clear, though the sentence is a noun-phrase enumeration rather than an explicit verb+object statement, so it falls just short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to reach for memory_stats versus performance_snapshot, draw_call_breakdown, or perf_monitor, all of which live in the same performance-adjacent cluster. The '[INSPECT]' tag implies a read-only inspection class but nothing states the condition that selects this tool over its neighbours.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
morph_targetsARead-onlyIdempotent
[INSPECT] Read-only. Meshes with morph targets: target names and current influences.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered by structured data. The description adds useful context about the payload (target names and current influences) but nothing about pagination, empty-result behavior, or scenes with no morph targets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, front-loaded with the inspection tag and the read-only constraint, followed by the resource and payload. Every fragment carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must convey the return value, and it does so at a high level ('target names and current influences'). For a zero-parameter, read-only inspection tool this is nearly sufficient, though it doesn't describe how the list is scoped or ordered across multiple meshes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters (empty schema), so there is nothing for the description to disambiguate. Baseline 4 applies; it correctly does not invent parameter detail where none exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read/list) and resource (meshes with morph targets) plus the returned data (target names and current influences). This cleanly distinguishes it from the write-oriented sibling set_morph_target, which is not named explicitly but is clearly implied by the read-only framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag signals the general usage context and implicitly contrasts with the mutation sibling set_morph_target, but it never states when to use this over alternatives or any prerequisite. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
object_detailsBRead-onlyIdempotent
[INSPECT] Read-only. Detailed info about one object by name, uuid, or dot path.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Object name | |
| path | No | Dot path: "Scene.MyGroup.MyMesh" | |
| uuid | No | Object UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description merely restates 'Read-only' rather than adding context. It says nothing about what happens if multiple identifiers are supplied, whether a missing object errors or returns empty, or any auth/rate constraints — no value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight lines with the category tag first and the purpose second — front-loaded and free of padding. The '[INSPECT]' bracket is slightly cryptic on its own but functions as an efficient grouping cue.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param detail tool with full schema coverage and safety annotations, the essentials are present, but with no output schema the description gives no hint of what detail is returned, and the multi-identifier ambiguity is left unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of name, path, and uuid is already documented, and the description's 'by name, uuid, or dot path' simply restates them. Baseline 3 applies; the description does not clarify precedence or mutual exclusivity among the three identifiers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (one object) and the three ways it can be addressed (name, uuid, dot path), which is enough to distinguish it from the bulk lookup sibling find_objects. It never names an alternative, so the differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag signals the category of use and 'one object' implies single-target lookup, but there is no statement of when to prefer this over find_objects, scene_tree, or geometry_details, and no preconditions are given. Usage must be inferred from the tag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
overlay_selectedARead-onlyIdempotent
[INSPECT] Read-only. Everything about the object the user selected in the overlay: materials, geometry, transforms, textures, uniforms, shadows.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'Read-only.' repeats structured data rather than adding to it. The description does add scope value by listing the categories of data returned, but it says nothing about behavior when no object is selected or what happens with multi-selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the [INSPECT]/read-only marker and immediately followed by the scope of returned data. The leading 'Read-only.' is mildly redundant with annotations, but everything else earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and rich annotations, the main remaining uncertainty is what is returned and how a missing selection is handled; the description covers the former well and the latter not at all. An output schema is absent, so the inline field enumeration does real work.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; baseline 4 applies. The field list does helpfully signal what the empty-argument call will return.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the resource precisely: the object currently selected in the overlay, and enumerates the data returned (materials, geometry, transforms, textures, uniforms, shadows). The verb is implicit rather than explicit, and it never distinguishes itself from siblings like object_details, click_inspect, or raycast, which read similar object data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase 'the object the user selected in the overlay' and the [INSPECT] tag; there is no explicit when-to-use, when-not-to-use, or pointer to object_details for the non-overlay case. An agent must infer that this is the selection-scoped variant of object inspection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pending_changesARead-onlyIdempotent
[FOR CODE] Output is meant to be written into the project source files. Everything changed with live-preview tools since the last clear: before → after per property, plus ready-to-paste code (vanilla Three.js and/or React Three Fiber) and where to find each target. Use it to persist a preview into source; call again with clear=true once the code is updated.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | Forget the listed changes (after writing them to code) | |
| style | No | Code flavour (default: both) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, so the bar is lower. The description still adds real context: the scope of what is tracked ('everything changed with live-preview tools since the last clear') and the fact that clear=true forgets the listed changes, which is a state effect the annotations do not surface.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the '[FOR CODE]' tag and the output contract before the usage instruction. Every clause (output contents, both code flavours, target locations, clear semantics) carries information; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 that burden and does it well, enumerating the return payload (per-property diffs, paste-ready code, target pointers). Combined with a two-parameter schema and full annotation coverage, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description reinforces 'clear=true' as a follow-up action after writing code and mentions both code flavours, but adds no format or default detail beyond what the schema enumerates. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (the accumulated live-preview changes) and precisely what the output contains: before→after per property, ready-to-paste code in vanilla Three.js and/or R3F, and target locations. The bracketed '[FOR CODE]' tag signals intent well. It does not, however, differentiate itself against the sibling scene_diff, which an agent could reasonably confuse with this.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear when-to-use ('Use it to persist a preview into source') and a lifecycle instruction ('call again with clear=true once the code is updated'). It stops short of naming alternatives, but the persist-then-clear workflow is stated explicitly rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
perf_monitorBRead-onlyIdempotent
[INSPECT] Read-only. Record FPS and frame times for N seconds: avg/min/max, percentiles, spikes, jank.
| Name | Required | Description | Default |
|---|---|---|---|
| duration | No | Seconds (default: 3, max: 30) | |
| includeFrameTimes | No | Include raw frame times (default: false) |
TDQS
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, covering the safety and idempotency profile. The description repeats 'Read-only' (redundant) and adds what data is captured, but it does not disclose behavioral traits such as potential performance impact of recording or whether it blocks execution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with a tag and read-only note, then the core action and output metrics. Every phrase earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with two optional parameters and no output schema, the description sufficiently explains what is recorded and what summary metrics are returned. It lacks usage context relative to siblings, but the core information an agent needs to invoke it correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (duration, includeFrameTimes) are fully documented in the schema with defaults and max. The description mentions 'for N seconds' and 'frame times' but adds no syntax or format details beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Record') and resource ('FPS and frame times') and lists the metrics captured (avg/min/max, percentiles, spikes, jank). It does not, however, distinguish this tool from siblings like performance_snapshot or draw_call_breakdown, leaving the agent to infer the difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance or alternatives. The '[INSPECT] Read-only' tag implies it is a read operation, but there is no direction on when to choose this over performance_snapshot or other monitoring tools, nor any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_snapshotBRead-onlyIdempotent
[INSPECT] Read-only. Draw calls, triangles, instanced meshes, object counts by type.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the "Read-only" label largely restates structured data. The added value is modest: it names the captured metrics, but says nothing about sampling behavior, cost, or whether the snapshot is instantaneous vs averaged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, correctly front-loaded with the read-only marker before the payload description. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param inspect tool the description covers what data comes back, which is important since there is no output schema. However, in a dense sibling cluster it omits the differentiation and the granularity/cost of the snapshot, leaving a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters and schema coverage is 100%, so no parameter explanation is needed. Baseline 4 applies for a correctly no-arg tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (performance snapshot) and enumerates exactly what it reports: draw calls, triangles, instanced meshes, object counts by type. An agent understands the output, but the description never distinguishes it from close siblings like perf_monitor, draw_call_breakdown, or memory_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no reference to alternatives. With siblings perf_monitor, draw_call_breakdown, and memory_stats occupying adjacent territory, the agent is left to guess which performance tool to call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
postprocessing_listARead-onlyIdempotent
[INSPECT] Read-only. EffectComposer passes: render passes, shader passes, effects (bloom, SSAO, …).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the 'Read-only' text is largely redundant. The description does add the scope of what is returned (passes, shader passes, effects), which is genuinely beyond the annotations, but says nothing about ordering, return shape, or depth of detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely tight at two short lines, with the [INSPECT] tag front-loaded so the agent can classify the tool immediately. The 'Read-only' phrase slightly duplicates the annotation, but it costs almost nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param, read-only list tool with no output schema, the description gives enough — what the list contains and that it is safe to call. It does not describe the return structure, but with no output schema and a trivial interface this is a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; baseline 4 applies. No param-level explanation is needed or missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names the resource (EffectComposer) and enumerates what it contains — render passes, shader passes, effects such as bloom and SSAO — so the agent knows exactly what is being listed. The [INSPECT] tag and 'Read-only' prefix distinguish it from set_postprocessing, though the sibling is not named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' marker implies this is for inspection of the post-processing stack, which is useful routing context. However, it does not state when to prefer this over sibling inspectors (e.g. shader_list, material_list) or mention set_postprocessing as the mutation counterpart.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
raycastBRead-onlyIdempotent
[INSPECT] Read-only. Cast a ray from the camera through screen coordinates and return hit objects.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | Normalized device X (-1 to 1, 0 = center) | |
| y | Yes | Normalized device Y (-1 to 1, 0 = center) | |
| maxHits | No | Max hits (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the '[INSPECT] Read-only' prefix largely restates structured data. The description does add that the ray originates from the camera and that hit objects are returned, but says nothing about hit ordering, depth of returned data, or how maxHits truncates results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact lines with the category tag and the core action front-loaded; no filler sentences to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of explaining the return value. 'Return hit objects' is directionally useful but leaves out what a hit contains (object reference, distance, intersection point, normal), which is central to using a raycast result. Adequate but with a real gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so x, y, and maxHits are fully documented in the schema itself. The description's 'screen coordinates' phrasing actually diverges slightly from the schema's 'normalized device X/Y (-1 to 1)', adding no clarifying detail. Baseline 3 is appropriate when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and mechanism: 'Cast a ray from the camera through screen coordinates and return hit objects.' An agent can tell this is a spatial picking/inspection operation. It does not, however, distinguish itself from siblings like click_inspect, find_objects, or bounding_boxes, which could plausibly be confused with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives such as click_inspect (which presumably also resolves what is under a point) or object_details. The '[INSPECT]' tag hints at a category but gives no selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_helperA
[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code. Remove a helper added with add_helper.
| Name | Required | Description | Default |
|---|---|---|---|
| helperId | Yes | ID returned by add_helper |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false. The description adds genuinely useful context: this targets a temporary browser-only debug visual that never touches code, which explains why removal is non-destructive. It does not, however, address the non-idempotent behavior (what happens if the helper is already gone) or any error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with the operation stated directly and no filler. The bracketed tag and first sentence are slightly redundant framing, but they are brief and front-loaded rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter removal tool with full schema coverage, no output schema, and annotations carrying the safety profile, the description supplies enough to call it correctly and explains the ephemeral nature of the target. The only missing nuance is behavior on repeat invocation, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema itself documents helperId as "ID returned by add_helper". The description reinforces the add_helper provenance but adds no format or syntax detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The second sentence gives a specific verb+resource ("Remove a helper") and ties it to the sibling that creates it (add_helper), so an agent can distinguish it from add_helper. The leading "[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code." describes the artifact class rather than the operation, which slightly muddies an otherwise clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The pairing with add_helper implies the tool is used to undo a previously added debug helper, and "Nothing to put in code" hints these are ephemeral. However, no explicit when/when-not guidance is given and no alternative (e.g. revert_changes) is mentioned, 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.
renderer_infoARead-onlyIdempotent
[INSPECT] Read-only. Renderer stats and backend (WebGL / WebGPU): draw calls, triangles, memory, capabilities.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only' is largely a restatement of structured data. The description does add value by naming the returned contents (draw calls, triangles, memory, capabilities) and the backend distinction, but says nothing about cost, rate limits, or snapshot timing beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact lines with the key content front-loaded and zero filler sentences. Minor redundancy in restating 'Read-only' where annotations already cover it, which keeps it just short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so adequately by enumerating the data categories and the backend variants. The safety profile is fully covered by annotations, so nothing an agent needs to select or call this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so per the rubric this is the baseline. There is nothing for the description to disambiguate, and it correctly avoids inventing parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('Renderer stats and backend') and enumerates what it returns (draw calls, triangles, memory, capabilities), plus the WebGL/WebGPU backend dimension. It is distinguishable from write-oriented siblings like set_renderer, but it does not explicitly differentiate itself from overlapping read tools such as draw_call_breakdown, memory_stats, or performance_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies inspection use but gives no explicit when-to-use guidance, no conditions, and no pointer to the many overlapping sibling tools (draw_call_breakdown, memory_stats, performance_snapshot). The agent must infer the selection criteria itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
renderer_settingsARead-onlyIdempotent
[INSPECT] Read-only. Renderer configuration: toneMapping, exposure, colorSpace, shadowMap, pixelRatio.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world behavior, so '[INSPECT] Read-only' is essentially a restatement. What the description does add is the enumeration of the configuration fields exposed, but it says nothing about return shape or freshness beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact fragments, with the mode tag front-loaded and the covered fields immediately after. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and annotations covering the safety profile, the description's field enumeration carries most of the needed information. The only real gap is that an agent cannot tell from the description alone why it would call this instead of renderer_info.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document; the baseline of 4 applies. The field list in the description compensates by describing what the (empty) call yields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (renderer configuration) and enumerates the concrete properties covered (toneMapping, exposure, colorSpace, shadowMap, pixelRatio), so an agent knows exactly what it returns. However, it does not differentiate itself from the sibling renderer_info, which appears to cover overlapping ground, leaving ambiguity about which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies this is for inspection rather than mutation, which implicitly separates it from set_renderer, but the description never states when to use this over renderer_info or names any alternative. Usage is only weakly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revert_changesAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Undo live-preview changes in the browser (all, or selected ids from pending_changes), newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| ids | No | Change ids to revert (default: all) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-destructive, idempotent, non-readOnly behavior, and the description adds real context: changes are browser-only, not written to source, lost on reload, and tracked in pending_changes. It could go further on what happens to the pending_changes entries after a revert.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The [LIVE PREVIEW] tag is well front-loaded, but the two sentences overlap: undoability via revert_changes is announced in sentence one and restated as the tool's action in sentence two. Tightening would remove the redundancy without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and annotations covering the safety profile, the description supplies the key behavioral facts an agent needs: scope of the undo, id source, default, and ordering. Error behavior for stale or invalid ids is the only notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and documents the ids array with a default, so the schema already carries the load. The description still adds value by naming where the ids originate (pending_changes) and confirming the all-or-selected semantics plus newest-first ordering.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: 'Undo live-preview changes in the browser,' which is distinguishable from siblings like pending_changes (lists changes) and scene_export. The lead sentence about live-preview semantics is slightly circuitous, but the operative purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies the usage context by tying ids to 'pending_changes' and specifying all-vs-selected, and 'newest first' hints at iteration order. However it never states when NOT to use it or an explicit alternative path (e.g., when to promote changes to code instead of reverting).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_jsADestructive
[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code.
Run JavaScript in the page with scene, renderer, camera, gl in scope; return a value to get it back. Changes made here are NOT recorded in pending_changes — prefer the set_* tools for anything the user may want to keep.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript body. Vars: scene, renderer, camera, gl |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is partly covered. The description adds two things annotations cannot: the injected scope (scene, renderer, camera, gl) and the crucial fact that changes are NOT recorded in pending_changes, meaning revert_changes won't undo them. It stops short of stating permission/sandbox limits or that arbitrary scene mutation is possible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The two substantive sentences are dense and front-loaded with the alternative-tool guidance. However, the leading '[DEBUG VISUAL] ... Nothing to put in code.' fragment is unexplained, contradicts the required `code` parameter, and does not earn its place in a short description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains how results come back (via `return`), names the injected globals, and flags the non-persistent, un-revertable nature of edits — all the essentials for calling it safely. What's missing is any note on execution constraints or failure behavior for arbitrary code.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter's description already lists the injected variables, so the baseline would be 3. The description earns above baseline by documenting the return contract ('return' a value to get it back), which is behavioral meaning the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The core sentence states a specific verb+resource: run JavaScript in the page, with the four injected variables, returning a value. It distinguishes itself from the set_* family by scope, but the stray leading fragment '[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code.' directly conflicts with a tool whose only required parameter is `code` and muddies an otherwise clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one explicit routing rule: prefer the set_* tools for anything the user may want to keep, because run_js edits are not captured in pending_changes. That is a concrete when-to-use/when-not-to-use signal, though it doesn't contrast with read-only siblings like scene_tree or renderer_info that an agent might reach for instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_backgroundARead-onlyIdempotent
[INSPECT] Read-only. Scene background, environment map (IBL), backgroundBlurriness/Intensity, color management.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 structurally. The description adds scope by listing the background, environment map, blurriness/intensity, and color-management aspects, but it does not describe return format or other behavioral details beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short lines with no wasted text. The read-only constraint is front-loaded via the '[INSPECT] Read-only' tag, followed immediately by the covered inspection domains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless, read-only inspection tool, the description lists the relevant scene background and color-management areas an agent would need. With no output schema, it could say more about the return shape, but it is sufficient for an inspector of this scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics for the description to explain. The baseline for a parameterless tool is 4, and nothing in the description misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the inspected resource and its covered aspects: scene background, environment map (IBL), backgroundBlurriness/Intensity, and color management. It is clearly a read-only inspector, but it does not explicitly distinguish itself from nearby siblings such as env_map_details or renderer_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag implies this is a read operation, but the description gives no explicit guidance on when to use this tool versus env_map_details, renderer_info, or other inspection tools. It also states no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_diffARead-onlyIdempotent
[INSPECT] Read-only. Compare scene state over time: first call saves a snapshot, next call lists added/removed/modified objects.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | snapshot=save, diff=compare with saved, auto=snapshot if none else diff (default) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, openWorldHint=false, so the safety profile is covered; the description usefully adds the stateful two-call workflow and what the diff reports. It omits snapshot lifecycle details (persistence, reset/overwrite, what happens if diff is called with no prior snapshot), and the order-dependent behavior sits in mild tension with idempotentHint=true, though the saved snapshot does not mutate the scene itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight lines: the read-only classification is front-loaded and the mechanism follows immediately. Every clause earns its place, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-enum inspection tool with no output schema and full annotation coverage, the description supplies the essential mechanism and output content. Only edge cases (no prior snapshot, snapshot lifetime, detection granularity) are unstated, which is 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a fully documented action enum, so the baseline is 3. The description adds meaning the schema lacks: the cross-call ordering contract (first call snapshots, subsequent call diffs) and the content of the diff output (added/removed/modified objects), which is genuinely additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (compare/diff) and resource (scene state over time) and explains the snapshot-then-diff mechanism, which is unmistakable among the siblings. It does not explicitly distinguish itself from look-alikes such as scene_tree or pending_changes, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"first call saves a snapshot, next call lists added/removed/modified objects" gives clear context for how the tool is driven across calls, but it never states when to prefer this over alternatives (scene_tree, pending_changes, object_details) or when it is inappropriate. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_exportARead-only
[INSPECT] Read-only. Export the scene or one object as GLB/glTF into screenshots/. Needs GLTFExporter in the app (the error explains setup).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Object (omit for entire scene) name | |
| uuid | No | Object (omit for entire scene) UUID | |
| binary | No | GLB (default) or glTF JSON |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered. The description adds real behavioral context beyond them: the output location (screenshots/), the dependency (GLTFExporter must exist in the app), and the fact that failure surfaces an explanatory error. This is meaningful operational context for a tool whose side effect is a written file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the classification and read-only marker, followed by the destination and the setup caveat. Nothing is padded and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an export tool with annotations covering safety and a fully documented 3-parameter schema, the description covers purpose, destination, and the key prerequisite. It omits what a successful call returns (file path/handle), which matters slightly since there is no output schema, but otherwise it is complete enough to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name/uuid/binary are already documented. The description reinforces 'scene or one object' (name/uuid) and 'GLB/glTF' (binary) but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Export the scene or one object as GLB/glTF') plus the destination folder (screenshots/), which is enough to distinguish it from siblings like take_screenshot or gltf_to_r3f. It doesn't explicitly name an alternative, so it stops short of the top score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the format and destination, and the note about needing GLTFExporter acts as a prerequisite. However, there is no explicit when-to-use vs when-not guidance or routing to a sibling tool, so it remains only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_treeARead-onlyIdempotent
[INSPECT] Read-only. Scene hierarchy. Compact text tree by default (~2KB); compact=false for full JSON with positions/geometry.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Max tree depth (default: 3) | |
| types | No | Filter by type: Mesh, Light, Group, etc. | |
| compact | No | Compact text tree (default: true) | |
| maxChildren | No | Max children per node (default: 15 compact, 100 JSON) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior, and the description's 'Read-only' restates that with no added value. It does add genuine behavioral context beyond annotations: approximate payload size (~2KB) for the default output and what compact=false returns. It omits truncation behavior for large scenes, which maxChildren hints at.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the category tag and output mode. The 'Read-only' phrase duplicates the annotations and is the one line that doesn't earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly describes the return shape (text tree vs JSON with geometry). It stops short of covering large-scene truncation or routing to sibling inspection tools, which would make it fully self-sufficient for a 4-parameter listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: compact=false yields full JSON with positions and geometry, not just 'full JSON'. It does not clarify depth or types semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('Scene hierarchy') and its output form, so an agent knows it lists the scene graph rather than a single object. It does not distinguish itself from close siblings like object_details, find_objects, or scene_diff, so an agent must infer which inspection tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the ~2KB compact default and the compact=false escape hatch give a cost/detail tradeoff an agent can act on. There is no explicit when-to-use guidance and no mention of when to prefer find_objects or object_details instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_animationAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Control playback: mixer timeScale/time, action play/stop/pause/weight by clip name.
| Name | Required | Description | Default |
|---|---|---|---|
| play | No | ||
| stop | No | ||
| time | No | Seek mixer time (not recorded as a change) | |
| clipName | No | Target action by clip name | |
| timeScale | No | Mixer time scale | |
| mixerIndex | No | From animation_details (default: 0) | |
| actionPaused | No | ||
| actionWeight | No | 0-1 | |
| actionTimeScale | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly=false, destructive=false, idempotent=true), and the description adds the critical lifecycle facts annotations cannot convey: changes are live-only, lost on reload, tracked in pending_changes, and undoable via revert_changes. That is exactly the extra behavioral context a mutation tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the most consequential fact (live preview, not saved) is front-loaded before the parameter summary. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema, it covers the ephemeral-preview model, the persistence path, and the undo path, which is the essential missing context. Minor gaps remain: no guidance on whether play/stop/pause combine, and mixerIndex/actionTimeScale semantics are left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 56%, so the description compensates by splitting the parameters into two semantic groups — mixer-level (timeScale/time) and action-level (play/stop/pause/weight by clip name) — which clarifies intent beyond the raw schema. It still leaves mixerIndex and actionTimeScale unexplained, keeping it below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: it controls animation playback via the mixer and actions, with the '[LIVE PREVIEW]' tag scoping it to the running scene. It never names sibling animation_details as the read-only counterpart, so the boundary is implied rather than explicit, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong context for when the effect applies: browser-only, not persisted to source, recorded in pending_changes and reversible with revert_changes. It stops short of explicitly stating when to reach for this versus animation_details or pending_changes, so it's clear context without named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cameraAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change the active camera: position, rotation, FOV, near/far, zoom, ortho bounds.
| Name | Required | Description | Default |
|---|---|---|---|
| far | No | ||
| fov | No | PerspectiveCamera | |
| top | No | OrthographicCamera | |
| left | No | OrthographicCamera | |
| near | No | ||
| zoom | No | ||
| right | No | OrthographicCamera | |
| aspect | No | PerspectiveCamera | |
| bottom | No | OrthographicCamera | |
| position | No | [x, y, z] | |
| rotation | No | [x, y, z] in radians |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only supply the generic safety profile (not read-only, not destructive, idempotent). The description adds material behavioral context the annotations lack: changes are browser-only, not persisted to source, lost on reload, tracked in pending_changes for later code edits, and reversible via revert_changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, and the highest-stakes fact — [LIVE PREVIEW]/lost on reload — is front-loaded before the field enumeration. Every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter, no-required, no-output-schema mutation tool, the description covers the critical operational semantics (ephemeral preview, pending_changes linkage, undo). It is nearly complete, though it could note defaults or the effect of omitting parameters since none are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 73%, so most parameters are already documented in the schema (which even tags fov/aspect as PerspectiveCamera and left/right/top/bottom as OrthographicCamera). The description adds only a vague 'ortho bounds' grouping and no syntax or unit details beyond the schema, so it lands at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Change) and resource (the active camera) and enumerates the affected properties: position, rotation, FOV, near/far, zoom, ortho bounds. This cleanly separates it from read-oriented siblings like camera_details and from the generic set_object_transform.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contextualizes usage by flagging that changes are live-preview only, uncommitted to source, and undoable via revert_changes / visible in pending_changes. However it does not explicitly state when to choose this over alternatives, nor any preconditions, so guidance is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_clippingAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change clipping planes on the renderer (global) or a material.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Material (target=material) name | |
| uuid | No | Material (target=material) UUID | |
| planes | No | ||
| target | No | Default: renderer | |
| enabled | No | false removes the material's planes | |
| clipShadows | No | Material | |
| clipIntersection | No | Material: intersection instead of union | |
| localClippingEnabled | No | Renderer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly, non-destructive, idempotent, but the description adds the crucial behavioral traits they cannot express: changes are preview-only, not persisted to source, lost on reload, tracked in pending_changes, and reversible via revert_changes. This is exactly the kind of non-structured context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the critical persistence warning front-loaded via the [LIVE PREVIEW] tag. No filler; each clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param mutation with no output schema and 88% schema coverage, the description covers the essential behavioral context (ephemeral preview, undo path). Return-value explanation is unnecessary without an output schema, so the only minor gap is that it doesn't hint at what pending_changes records.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88%, so the schema already documents the 8 parameters thoroughly. The description only maps 'renderer (global) or a material' to the target enum, adding marginal meaning beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The second sentence states a specific verb+resource — 'Change clipping planes on the renderer (global) or a material' — and identifies both target modes. It is clear what the tool does, though it does not explicitly differentiate itself from the read-only sibling clipping_details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The [LIVE PREVIEW] framing and the note that changes are browser-only, lost on reload, recorded in pending_changes, and undoable with revert_changes give clear workflow context for when this tool is appropriate. It stops short of explicitly naming clipping_details as the read counterpart, so it's strong context rather than 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.
set_dev_portBIdempotent
[CONNECTION] Configures the devtools server. Point the proxy at another local dev server port.
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | Dev server port, e.g. 3000, 5173, 8080 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is known. The description adds the context that this reconfigures the proxy, but says nothing about whether the connection drops, whether HMR resets, or what the proxy switch does to running sessions - useful but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with a clear [CONNECTION] category tag. Every word earns its place, though the second sentence largely restates the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter connection tool whose annotations cover safety and idempotency and with no output schema, the description is close to sufficient. It falls short of fully explaining the behavioral effect on the existing connection or how it interacts with set_dev_url.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'port' parameter is already documented with examples (3000, 5173, 8080). The description adds only 'another local dev server port', which restates the schema rather than adding syntax or constraint detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Configures the devtools server' and 'Point the proxy at another local dev server port.' This tells an agent it manipulates the dev-server connection target. It distinguishes reasonably from sibling set_dev_url (port vs. URL) by implication, but never confirms the distinction explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'Point the proxy at another local dev server port' - the agent can infer it is for redirecting the proxy when the dev server port changes. However, no explicit when-to-use, prerequisites, or alternative (e.g., set_dev_url) is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_dev_urlBIdempotent
[CONNECTION] Configures the devtools server. Inspect a remote Three.js app by URL. Source code changes are not possible in remote mode.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full URL, e.g. https://my-app.vercel.app |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, idempotentHint=true and readOnlyHint=false, so the agent knows this reconfigures an external connection safely and repeatably. The description adds one genuinely useful behavioral fact not in the annotations: that remote mode forbids source code changes. It still omits what happens to the previous target and whether the connection re-establishes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, tag first, purpose second, constraint third, with no filler. Slightly more efficient framing (tagging plus restating 'devtools server') would be tighter, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter configuration tool with clear annotations and no output schema, the description covers enough to invoke it correctly. It is thin on the connection lifecycle, though, and never cross-references set_dev_port, the sibling an agent would most plausibly confuse it with.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single url parameter is documented in the schema with an example, so the description need not restate it. "By URL" adds nothing beyond the schema's "Full URL, e.g. https://my-app.vercel.app", which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description pairs a clear action with a resource: it configures the devtools server connection so a remote Three.js app can be inspected by URL. An agent can tell it is the targeting/setup tool rather than an inspection tool. It does not, however, distinguish itself from the very close sibling set_dev_port, which the agent must infer is a different configuration axis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Inspect a remote Three.js app by URL" implies the use case (switching the bridge to a remote target), and the remote-mode caveat hints at a limit. But there is no explicit when-to-use versus set_dev_port or bridge_status, and no statement of prerequisites such as the bridge needing to be running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_fogAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change scene fog (color, near/far or density) and the background color.
| Name | Required | Description | Default |
|---|---|---|---|
| far | No | Fog only | |
| near | No | Fog only | |
| color | No | #RRGGBB | |
| density | No | FogExp2 only | |
| background | No | Scene background color, #RRGGBB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare safety semantics (readOnlyHint=false, idempotent, non-destructive); the description adds the crucial behavioral facts: the change is browser-only, never persisted to source, lost on reload, tracked in pending_changes, and reversible via revert_changes. That is well beyond what the annotations disclose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler, and the highest-risk constraint ([LIVE PREVIEW], not saved) is front-loaded before the functional description. Every clause carries non-redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-destructive preview mutation with full annotation coverage and a complete parameter schema, the description supplies everything the agent needs: persistence semantics, undo mechanism, and which scene properties are affected. No output schema exists, so no return-value description is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description groups the parameters ('color, near/far or density' and background color), reinforcing the schema but adding no new syntax, constraints, or defaults beyond what is already documented per-property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Change) plus resource and scope: scene fog (color, near/far or density) and the background color. This distinguishes it from read-only siblings such as fog_details and scene_background, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames when this applies — live preview only, not written to source, lost on reload — and names the follow-up path (pending_changes → code edits) plus the undo path (revert_changes). It gives clear operating context but no explicit 'use X instead when you want persistence' alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_instanced_meshAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change InstancedMesh count, visibility, frustumCulled.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | InstancedMesh name | |
| uuid | No | InstancedMesh UUID | |
| count | No | Visible instances | |
| visible | No | ||
| frustumCulled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only covering idempotent/readOnly/destructive hints, the description carries the important behavioral context and does so well: changes are LIVE PREVIEW only, NOT saved to source code, lost on reload, recorded in pending_changes (which routes to code edits), and undoable via revert_changes. That persistence and recovery profile is exactly what an agent needs and is nowhere in the annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences and a bracketed tag, with the highest-stakes fact ([LIVE PREVIEW] — not saved, lost on reload) front-loaded ahead of the mechanical field list. No filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and annotations already cover the safety/idempotency profile, so the description does the heavy lifting on preview persistence and undo, which it covers fully. The remaining gap is identification semantics (name vs uuid, both optional) and return behavior on success/failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 60%, so the schema already documents name, uuid, and count. The description restates three of the five fields (count, visibility, frustumCulled) but adds no syntax, units, or constraint detail, and does not clarify the name-vs-uuid identification ambiguity (0 required params). Baseline 3 for adequate-but-not-additive parameter coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The second sentence gives a specific verb (Change) and resource (InstancedMesh) plus the exact mutable fields: count, visibility, frustumCulled. This clearly distinguishes it from sibling setters like set_object_transform and from the read-only instanced_mesh_details. It stops short of explicitly naming a sibling it is not, so 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the operating context (live/browser-only preview, not persisted) and points to reconcile paths: pending_changes and revert_changes. However, it never says when to prefer this over alternatives such as set_object_transform, nor does it state preconditions (e.g. when a live-preview edit is appropriate vs a source edit). Usage is implied rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_layersAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Set layers on an object or the camera.
| Name | Required | Description | Default |
|---|---|---|---|
| mask | No | Set the bitmask directly | |
| name | No | Object name | |
| uuid | No | Object UUID | |
| layer | No | Layer 0-31 to enable/disable | |
| target | No | "camera" to target the camera | |
| enabled | No | Enable or disable that layer |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that changes are browser-only, not saved to source, lost on reload, recorded in pending_changes (which becomes code edits), and reversible via revert_changes. That is exactly the persistence, side-effect and undo context an agent needs for a mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, with the critical live-preview caveat front-loaded in a bracketed tag before the actual operation is stated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param optional-only mutation with no output schema, the description covers the essential behavioral context (persistence, undo, scope). It does not clarify how mask relates to layer+enabled, but the schema descriptions carry that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (mask, name, uuid, layer, target, enabled) is already documented. The description only echoes the 'object or camera' target scope and adds no syntax or interaction detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set layers on an object or the camera'), which is clearly distinct from the read-only sibling layer_details. It does not explicitly name or route to a sibling, so it stops just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the [LIVE PREVIEW] framing and the pointer to pending_changes/revert_changes, which tells the agent this is a transient in-browser mutation. However, no explicit when-to-use/when-not guidance or alternative is offered (e.g., when to prefer editing source vs. this preview tool).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_lightAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change a light: color, intensity, position, castShadow, groundColor (HemisphereLight).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Light name | |
| uuid | No | Light UUID | |
| color | No | #RRGGBB | |
| position | No | [x, y, z] | |
| intensity | No | ||
| castShadow | No | ||
| groundColor | No | HemisphereLight ground color, #RRGGBB |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare that this is a non-read-only, idempotent, non-destructive mutation. The description adds crucial context beyond them: changes are browser-only, are not persisted to source code, are lost on reload, appear in pending_changes, and can be undone with revert_changes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads the critical live-preview and persistence warning, and the second sentence compactly enumerates the adjustable properties. Every sentence earns its place with no redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description covers the essential behavioral traits an agent needs: browser-only scope, persistence loss, pending-change recording, and undoability. The remaining parameter identification is adequately handled by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, leaving intensity and castShadow without schema descriptions. The description compensates by naming those fields, and it adds useful semantics for groundColor by noting it applies to HemisphereLight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: it changes a light and lists the specific light properties that can be modified. This distinguishes it from siblings such as set_object_transform, set_material_property, or set_shadow, which target different scene entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames the tool as a live-preview-only operation whose effects are not saved and are lost on reload, which implies when to use it. However, it does not explicitly compare this tool with alternatives or state 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.
set_material_propertyAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Set a material property. Accepts the material name or the name of a mesh that uses it.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Material name, or name of a mesh using it | |
| uuid | No | Material UUID | |
| value | Yes | Hex string for colors ("#ff0000"), number for scalars, boolean for flags | |
| property | Yes | color, emissive, emissiveIntensity, roughness, metalness, opacity, transparent, wireframe, visible, side, depthWrite, depthTest, alphaTest, flatShading, fog, envMapIntensity; physical: clearcoat, clearcoatRoughness, transmission, thickness, ior, sheen, sheenColor, sheenRoughness, iridescence, anisotropy, dispersion, specularIntensity, specularColor, attenuationColor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, idempotent=true, destructive=false. The description goes well beyond them by disclosing that the change lives in the browser only, is lost on reload, feeds pending_changes for eventual code edits, and is reversible via revert_changes. That is exactly the behavioral context an agent needs for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences. The most consequential information (preview-only, lost on reload, recorded and undoable) is front-loaded before the plain purpose statement, and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with full schema coverage, annotations and no output schema, the description supplies the missing persistence/undo semantics and the name-resolution note. An agent has everything needed to call it correctly and predict its side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the value/property semantics (hex strings for colors, booleans for flags, full property enumeration) are already in the schema. The description only restates that name can be a material name or a mesh using it, which the schema also says, so it adds no new parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Set a material property') and adds scope ('scene in the browser only, not saved to source code'). This distinguishes it well from lookups like material_details and from related writers like set_texture or set_uniform, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The LIVE PREVIEW framing tells the agent exactly what class of change this is: preview-only, recorded in pending_changes, undoable with revert_changes — effectively routing the agent to those siblings. It does not, however, say when to prefer this over material_details or set_texture/set_uniform directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_morph_targetAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Set a morph target influence.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Mesh name | |
| uuid | No | Mesh UUID | |
| index | No | Morph target index | |
| influence | Yes | 0-1 | |
| targetName | No | Morph target name (from morphTargetDictionary) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation/idempotency profile; the description adds the critical behavioral facts that the change is ephemeral, is not persisted to source, is logged in pending_changes, and has a defined undo path via revert_changes. That is precisely the context an agent needs before calling a live-preview mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the constraint banner is compact. The only structural weakness is that the actual purpose statement trails the banner, so the first thing the agent reads is a caveat rather than what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with fully described schema and no output schema, the description covers the important non-obvious behavior (ephemerality, undo, pending_changes). It leaves minor gaps such as behavior when the named mesh or morph target cannot be resolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (name, uuid, index, influence, targetName) is already documented in the schema. The description adds nothing about parameter interaction (e.g., how the mesh is identified or influence range beyond the schema's "0-1"), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Set a morph target influence" is a specific verb+resource that separates it from the read-only sibling morph_targets. However, the purpose sentence is placed after the preview banner, and the description never explicitly names morph_targets as the read counterpart, so sibling differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operating context: browser-only change, not written to source, lost on reload, recorded in pending_changes, and undoable via revert_changes. It stops short of an explicit when-not rule or a named alternative for permanent edits, but the workflow it belongs to is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_object_transformAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Set position, rotation, scale, or visibility of an object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Object name | |
| uuid | No | Object UUID | |
| scale | No | [x, y, z] | |
| visible | No | Show/hide | |
| position | No | [x, y, z] | |
| rotation | No | [x, y, z] in radians |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true, and the description adds substantial context beyond them: changes are browser-only, not persisted to source, lost on reload, recorded in pending_changes, and reversible via revert_changes. That is exactly the kind of lifecycle/undo information an agent needs for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the critical '[LIVE PREVIEW]' warning front-loaded. Each sentence earns its place and the whole definition scans in one pass.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-param mutation tool with no output schema, the description covers persistence, undo, and pending-change tracking, so the agent can call it correctly. The minor omission is that it never states the object is identified by name or uuid, though that detail lives in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 name, uuid, position, rotation (in radians), scale, and visible. The description restates the affected fields but adds no units, format, or identification rules beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The second sentence names a specific verb (Set) and the exact transform properties affected (position, rotation, scale, visibility) on an object, which clearly separates it from sibling setters like set_material_property or set_light. It stops short of naming the sibling tools or their boundary conditions, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The [LIVE PREVIEW] framing plus 'NOT saved to source code, lost on reload' and the pointer to pending_changes (→ code edits) and revert_changes gives the agent clear context on when and how this applies. It does not explicitly contrast itself with an alternative tool, but the workflow and persistence conditions are spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_postprocessingAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Enable/disable passes, set pass uniforms or effect parameters. Without a pass, lists passes.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | ||
| passName | No | Pass name or class, e.g. "UnrealBloomPass" | |
| uniforms | No | { "threshold": 0.5, "strength": 1.0 } | |
| passIndex | No | From postprocessing_list | |
| effectIndex | No | Effect inside an EffectPass (postprocessing library) | |
| effectParams | No | { "intensity": 2.0 } |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Excellent disclosure beyond annotations: browser-only mutation, NOT persisted to source, lost on reload, recorded in pending_changes as pending code edits, and reversible via revert_changes. This tells the agent exactly what side effects and reversibility to expect, complementing the idempotent/non-destructive hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical caveat ('changes the browser only — NOT saved, lost on reload') is front-loaded before the functional sentence, which is good information hierarchy. It is tight overall, losing only a small amount of clarity to the ambiguous 'without a pass, lists passes' clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter nested-object mutation with annotations and no output schema, the description covers behavior, persistence and undo well. It hints that a passless call lists passes, partially covering return behavior, but does not fully describe the response of a listing call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents passName, passIndex, effectIndex, uniforms and effectParams with examples. The description only restates these categories ('disable passes, set pass uniforms or effect parameters') without adding format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: enable/disable passes and set pass uniforms or effect parameters. The scope is clear and distinguishable from generic setters. However it doesn't name the postprocessing_list sibling, and the phrase 'without a pass, lists passes' blurs the line with that sibling's listing role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the live-preview framing and the note that changes are undoable via revert_changes, which gives the agent workflow context. But there is no explicit when-to-use/when-not or named alternative (e.g., postprocessing_list for listing, set_uniform for other uniforms).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_rendererAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change renderer settings: tone mapping, exposure, color space, pixel ratio, shadows.
| Name | Required | Description | Default |
|---|---|---|---|
| pixelRatio | No | ||
| sortObjects | No | ||
| toneMapping | No | 0=None 1=Linear 2=Reinhard 3=Cineon 4=ACESFilmic 6=AgX 7=Neutral | |
| shadowMapType | No | 0=Basic 1=PCF 2=PCFSoft 3=VSM | |
| outputColorSpace | No | srgb, srgb-linear | |
| shadowMapEnabled | No | ||
| toneMappingExposure | No | ||
| localClippingEnabled | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it is a non-read-only, idempotent, non-destructive mutation, and the description adds genuinely new behavior: changes live only in the browser, are lost on reload, do not edit source, are recorded in pending_changes (which feeds code edits), and can be reverted. This is rich disclosure beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, tightly front-loaded: the critical persistence caveat and recovery path come first, followed by a compact list of adjustable settings. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool whose safety profile is covered by annotations and which has no output schema, the description supplies the key non-obvious facts (non-persistence, pending_changes, revertability). The remaining gap is documentation of the less obvious parameters like sortObjects and localClippingEnabled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 38% (only toneMapping, shadowMapType, outputColorSpace are documented). The description names the setting categories (tone mapping, exposure, color space, pixel ratio, shadows), which recovers some of the five undocumented parameters, but adds no value mappings or formats beyond the schema's own descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Change') and resource ('renderer settings') and enumerates the covered sub-fields (tone mapping, exposure, color space, pixel ratio, shadows). It is distinguishable from the read-only sibling renderer_info, though it does not explicitly contrast with renderer_settings or set_shadow, which also touch these domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: this is a live-preview-only change, not persisted, recorded in pending_changes and undoable with revert_changes. It does not state explicit when-not conditions versus alternatives like set_shadow or renderer_settings, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_shadowAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change shadow casting/receiving on any object, and bias/mapSize/shadow camera on lights.
| Name | Required | Description | Default |
|---|---|---|---|
| bias | No | Light only, e.g. -0.0001 | |
| name | No | Object or light name | |
| uuid | No | Object or light UUID | |
| radius | No | Blur radius (light only) | |
| mapSize | No | [width, height] shadow map resolution | |
| cameraFar | No | ||
| cameraTop | No | DirectionalLight | |
| cameraLeft | No | DirectionalLight | |
| cameraNear | No | ||
| castShadow | No | ||
| normalBias | No | Light only | |
| blurSamples | No | VSM blur samples (light only) | |
| cameraRight | No | DirectionalLight | |
| cameraBottom | No | DirectionalLight | |
| receiveShadow | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) by disclosing that edits are browser-only, never written to source, lost on reload, tracked in pending_changes, and undoable via revert_changes. That non-persistence/undo contract is exactly the context the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, with the critical '[LIVE PREVIEW]' caveat front-loaded before the capability statement. No filler, though the pending_changes/revert_changes parenthetical makes the first sentence slightly packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers ephemerality, undo path, and which parameter families target objects vs lights for a 15-parameter mutation tool with no output schema. It leaves a gap on target identification (0 required params, name/uuid precedence) but is otherwise complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 73%, and the description adds meaningful grouping the schema lacks: castShadow/receiveShadow apply to 'any object', while bias/mapSize/shadow camera apply to lights. This clarifies several parameters (e.g., cameraNear/cameraFar have no schema descriptions) but omits how name vs uuid selection works.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: change shadow casting/receiving on objects and bias/mapSize/shadow-camera on lights. An agent can tell it apart from most siblings, though it never explicitly contrasts itself with set_light, which overlaps on light properties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong context about the live-preview workflow and names pending_changes and revert_changes, but these are companions rather than alternatives — it never says when to reach for set_shadow versus set_light or set_object_transform. Usage is implied, not prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_textureAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Change texture sampling and transform: wrap, filter, anisotropy, repeat, offset, rotation, colorSpace.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Texture name | |
| uuid | No | Texture UUID | |
| flipY | No | ||
| wrapS | No | 1000=Repeat, 1001=ClampToEdge, 1002=MirroredRepeat | |
| wrapT | No | Same values as wrapS | |
| offset | No | [x, y] offset | |
| repeat | No | [x, y] repeat | |
| rotation | No | Radians | |
| magFilter | No | 1003=Nearest, 1006=Linear | |
| minFilter | No | 1003=Nearest, 1006=Linear, 1008=LinearMipmapLinear | |
| anisotropy | No | 1-16 | |
| colorSpace | No | srgb, srgb-linear |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnly=false, idempotent=true, destructive=false, but the description adds substantial non-obvious behavior: changes are browser-only, NOT saved to source, lost on reload, recorded in pending_changes (→ code edits), and undoable via revert_changes. That is exactly the kind of ephemerality and side-effect context an agent needs and cannot get from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the critical LIVE PREVIEW constraint front-loaded before the editable-property list. Every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-param mutation tool with no output schema, the description covers the key behavioral risks (ephemerality, recording, undo) and points to related tools by name. It stops short of explaining return/pending-change shape or partial-update semantics, which would complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (92%), so the schema already documents wrap/filter offsets and enum-like numeric codes. The description lists property names but adds no syntax or value meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change texture sampling and transform') and enumerates the exact property groups affected (wrap, filter, anisotropy, repeat, offset, rotation, colorSpace). This clearly distinguishes it from sibling mutation tools like set_material_property and set_uniform, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the LIVE PREVIEW nature and the persistence/undo path, which implies it's for ephemeral experimentation, but it never explicitly states when to use this tool over a sibling like set_material_property or a persistent workflow. Usage is inferable rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_uniformAIdempotent
[LIVE PREVIEW] Changes the scene in the browser only — NOT saved to source code, lost on reload. Recorded in pending_changes (→ code edits) and undoable with revert_changes. Set a ShaderMaterial uniform.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Material name | |
| uuid | No | Material UUID | |
| value | Yes | Hex string for Color, {x,y,z} for vectors, number/boolean for scalars | |
| uniform | Yes | Uniform name, e.g. uTime, uColor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only the safety profile (not read-only, not destructive, idempotent, closed-world). The description adds materially more: changes are browser-only, not written to source code, discarded on reload, tracked in pending_changes, and reversible via revert_changes. This is exactly the ephemerality/undo context 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact at three short segments with zero filler, and the [LIVE PREVIEW] tag front-loads the most important caveat. The core purpose statement is buried at the end rather than leading, which is the only structural weakness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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, the description covers the critical operational risk (lost on reload) and the recovery path. It omits how the target material is resolved (name vs uuid) and what happens if the uniform does not exist on the material, minor gaps given the complete schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including value formatting (hex for Color, {x,y,z} for vectors). The description adds no parameter detail, so the baseline 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Set a ShaderMaterial uniform"), which cleanly separates it from the generic set_material_property sibling. It does not explicitly name that sibling as the alternative for non-shader properties, so it stops short of a 5, but the scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong context on the nature of the change (browser-only live preview, lost on reload) and routes to pending_changes/revert_changes for persistence and undo. However, it never states when NOT to use it or which sibling to pick when you want a source-persisted edit, leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shader_listBRead-onlyIdempotent
[INSPECT] Read-only. Compiled shader programs with their materials (WebGL).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent and non-destructive, so '[INSPECT] Read-only.' is largely redundant. The one piece of added value is stating what is returned ('compiled shader programs with their materials'), which matters because no output schema exists; beyond that there is no pagination, size, or auth context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with the category tag front-loaded and no filler prose. The '[INSPECT] Read-only.' line duplicates annotation data rather than adding information, a minor waste, but the overall size is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only list tool with annotations covering the safety profile, the description is mostly sufficient. It is thin on routing (why this vs shader_source or material_list) and gives no sense of the returned list's shape, though no output schema is provided to carry that burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which per the rubric sets the baseline at 4. There is nothing for the description to document beyond this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Compiled shader programs with their materials (WebGL)' states the resource and scope clearly, and the name/verb 'list' is implied. It does not explicitly distinguish itself from the close sibling shader_source, which presumably returns source code rather than the compiled program list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 guidance and no mention of the adjacent siblings (shader_source, material_list, material_details). The agent is left to infer selection criteria from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shader_sourceARead-onlyIdempotent
[INSPECT] Read-only. Vertex/fragment GLSL source and uniforms of a material. NodeMaterial (TSL) has no GLSL — use material_details.
| Name | Required | Description | Default |
|---|---|---|---|
| materialName | No | Material name | |
| materialUuid | No | Material UUID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the '[INSPECT] Read-only' prefix is largely redundant. The one genuine addition is the behavioral caveat that NodeMaterial/TSL materials return no GLSL, which is useful context beyond the structured fields but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse fragments, front-loaded with the operation type and the key exclusion. No sentence is wasted; the caveat is placed immediately after the core statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter read tool with no output schema, the description states what is returned (GLSL source and uniforms) and flags the NodeMaterial case. It leaves the materialName-vs-materialUuid selection and any pagination/returned-format detail unstated, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are already documented in the schema, so the description need not repeat them. It implies a single material is targeted but adds no syntax, precedence, or format detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a clear verb+resource: reading vertex/fragment GLSL source and uniforms of a material. It explicitly names the sibling it is not (material_details) and the condition (NodeMaterial/TSL), so an agent can distinguish it from shader_list/material_details 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit exclusion and alternative: NodeMaterial (TSL) has no GLSL, so use material_details instead. Clear usage context, though it doesn't distinguish itself from the closely-named sibling shader_list, leaving a small routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shadow_detailsARead-onlyIdempotent
[INSPECT] Read-only. Shadow maps: global settings, per-light bias/mapSize/camera frustum, casters and receivers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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 'Read-only' in the description is largely redundant. What it does add is the inventory of what the read returns (global vs per-light settings, casters/receivers), though it omits any caveats such as needing shadows enabled or how it handles lights without shadow maps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines: a bracketed mode tag, then a colon-delimited list of covered aspects. The inspection/read-only constraint is front-loaded and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description carries the burden of signaling what comes back, and it does so by naming the four shadow-map aspects. It stops short of describing the return structure or units, but is adequate for an agent deciding whether to call it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 clarify about arguments; the baseline of 4 applies. The description instead spends its words on the shape of the result, which is reasonable for a no-arg inspector.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Shadow maps' inspection) and enumerates the returned scope: global settings, per-light bias/mapSize/camera frustum, casters and receivers. The '[INSPECT] Read-only' tag plus the 'details' naming cleanly separates it from the sibling set_shadow mutation tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT]' prefix implies this is a diagnostic read tool, but there is no explicit when-to-use statement or reference to set_shadow as the mutation counterpart. An agent can infer usage from the tag but must supply the routing logic itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
skeleton_detailsBRead-onlyIdempotent
[INSPECT] Read-only. Skeletons and bones of SkinnedMesh objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered structurally. The description adds the inspection scope, but repeats read-only and does not explain return content, scope selection, or limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines with no waste; the inspection mode and target are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, no-output-schema inspection tool, it identifies what is read but not how the target is selected or what the response contains. The scope ambiguity is a meaningful remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and an empty schema, so there are no parameter semantics for the description to clarify. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear inspection target: skeletons and bones of SkinnedMesh objects, and marks it read-only. It is distinguishable from siblings like geometry_details or morph_targets, though it does not explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use when inspecting skeletons of SkinnedMesh objects, but gives no explicit when-to-use guidance, prerequisites, or alternatives among the many sibling inspection tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotARead-onlyIdempotent
[INSPECT] Read-only. Screenshot of the current scene (also saved as PNG in screenshots/).
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | Width in pixels (default: canvas width) | |
| height | No | Height in pixels (default: canvas height) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint, so the safety profile is covered. The description adds a genuinely useful behavioral detail beyond annotations: the screenshot is also persisted as a PNG under screenshots/, revealing a file-system side effect the annotations do not mention.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact lines with the classification and read-only tag front-loaded, followed immediately by what is captured and where it is stored. Every element earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-optional-parameter, no-output-schema inspection tool, the description covers what is produced (a screenshot image plus a saved PNG) and the parameters are fully documented by the schema. The only gap is the absence of routing guidance versus sibling capture tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both width and height are documented with defaults), so the schema carries the parameter semantics. The description adds nothing about sizing, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Screenshot of the current scene') with a clear classification tag ([INSPECT] Read-only). However, it does not distinguish itself from close siblings like annotated_screenshot or capture_frames, which an agent would need to choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given. The description never mentions the nearby alternatives (annotated_screenshot, capture_frames, texture_preview), leaving the agent to infer which capture tool to pick from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
texture_detailsCRead-onlyIdempotent
[INSPECT] Read-only. Detailed info about one texture.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Texture name | |
| uuid | No | Texture UUID |
TDQS
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 fully covered by structured data. The description's 'Read-only' merely restates the annotation and adds no new behavioral context (no mention of what is returned or how name/uuid resolve).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Very short and front-loaded with the [INSPECT] tag and read-only marker. It earns its few words, though the bracketed tag is redundant with the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with full schema coverage, full annotations, and no output schema, the description is minimally sufficient. It leaves open how to choose between the two optional identifiers, which an agent would need when only one is known.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% ('Texture name' / 'Texture UUID'), so the schema already documents both parameters; baseline 3 applies. The description adds nothing about how the two optional identifiers interact or which takes precedence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: retrieve detailed info about a single texture. This distinguishes it from texture_list (enumerate) and texture_preview (visual preview) implicitly, though it never names a sibling explicitly to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no exclusions. It never tells the agent when to reach for this over texture_list or texture_preview, nor whether it requires an already-known texture name/uuid. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
texture_listARead-onlyIdempotent
[INSPECT] Read-only. All textures: size, format, wrap, filter settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description's 'Read-only' merely restates that, though the field list ('size, format, wrap, filter settings') adds some behavioral value about content scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two terse lines, category and read-only flag front-loaded, followed by the returned attributes. Every fragment earns its place with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read tool with annotations covering safety and a description enumerating the returned fields, an agent has enough to call it. No output schema exists, so the field list adequately stands in.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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; baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource (list all textures) plus the attributes returned (size, format, wrap, filter). It is more specific than a bare 'textures' restatement, but it never distinguishes itself from texture_details or texture_preview, which a reader must infer from 'All textures'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT]' tag implies an inspection intent, but there is no explicit when-to-use, no prerequisite, and no mention of the sibling alternatives (texture_details, texture_preview) that an agent would need to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
texture_previewARead-onlyIdempotent
[INSPECT] Read-only. Show a texture as a PNG image. Use texture_list to find names/UUIDs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Texture name | |
| uuid | No | Texture UUID | |
| maxSize | No | Max dimension in px (default: 512) |
TDQS
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 covered. The description adds genuinely new information beyond them: the return is a PNG image rather than structured data, and there is no output schema to convey that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded segments with the action stated first and the helper routing last. The '[INSPECT] Read-only' prefix partially duplicates the annotations, which is minor waste but not damaging.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple read tool with full schema coverage needs little prose, and the image-output disclosure covers the main gap. However, with zero required parameters and two alternative identifiers (name/uuid), the description never clarifies that at least one identifier must be supplied, leaving a real invocation ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, uuid, and maxSize are already documented in the schema. The description adds no extra meaning about parameter interaction (e.g., whether name or uuid is required, or how maxSize affects output). Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show a texture as a PNG image'), which clearly distinguishes it from texture_details and texture_list. It stops short of an explicit contrast with texture_details, but the 'as a PNG image' framing makes the image-preview nature unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names a concrete prerequisite/alternative: 'Use texture_list to find names/UUIDs.' That routes the agent correctly before invocation. It does not say when to prefer this over texture_details, so it falls just short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_overlayA
[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code. In-browser inspector panel: live FPS, draw calls, scene tree, materials, lights. Clicking a tree item highlights it.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No | true=show, false=hide, omit=toggle |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (non-readOnly, non-idempotent, non-destructive), and the description adds real context beyond them: what the panel renders, that it is temporary/debug-only, and that clicking a tree item highlights the object. It does not say whether the panel state persists across sessions or what toggling it on changes about the scene, but the added behavioral detail is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, with the [DEBUG VISUAL] classification and 'Nothing to put in code' caveat front-loaded before the panel contents. No filler, though the tree-item click detail is slightly tangential to a toggle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-param debug toggle with full schema coverage, annotations and no output schema, the description covers what it is, what it shows, and one interaction. Only the toggle-state semantics and its relation to kinetic siblings are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single 'enabled' param is fully documented in-schema ('true=show, false=hide, omit=toggle'). The description adds nothing about the parameter, which is the expected baseline when the schema already carries the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete artifact — an in-browser inspector panel showing FPS, draw calls, scene tree, materials and lights — which is clearly distinct from data siblings like scene_tree or perf_monitor. The [DEBUG VISUAL] tag and 'Temporary visual aid in the browser' make the intent readable, though the verb 'toggle' is never stated outright; the agent infers show/hide from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Temporary visual aid' and 'Nothing to put in code' imply this is a dev-only inspection tool rather than something applied to the app, which is useful usage framing. However, it never says when to reach for this versus overlay_selected, highlight_object, perf_monitor or scene_tree, so routing among the many visual siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_wireframeA
[DEBUG VISUAL] Temporary visual aid in the browser. Nothing to put in code. Wireframe on all materials or one object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Object (omit for whole scene) name | |
| uuid | No | Object (omit for whole scene) UUID | |
| enabled | No | true=on, false=restore, omit=toggle |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false. The description adds useful context beyond that — the change is a temporary in-browser visual aid and is not meant to be reflected in code — but it doesn't clarify reversibility mechanics or interaction with other debug visuals.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the [DEBUG VISUAL] qualifier and the 'nothing to put in code' caveat immediately after. No filler and no repetition of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-param debug toggle with annotations and full schema coverage, the description is adequate. It does not, however, explain what happens to an already-active wireframe when toggled off versus restored, which the 'false=restore' parameter implies but the prose never makes explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents name, uuid and enabled (including 'omit for whole scene' and the toggle semantics). The description's 'all materials or one object' lightly reinforces the scoping choice but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the concrete effect ('Wireframe on all materials or one object') and tags it as a debug visual, so an agent can tell what the tool does without opening the schema. It doesn't explicitly differentiate from visual siblings like toggle_overlay or highlight_object, keeping it at a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Temporary visual aid in the browser. Nothing to put in code.' communicates that this is a debugging-only, non-persistent action, which implies the context of use. However, it never names an alternative or states when to prefer it over toggle_overlay / highlight_object, 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.
web_auditBRead-onlyIdempotent
[INSPECT] Read-only. Website health check: pixel ratio, canvas resize, idle/off-screen rendering, antialias cost, oversized or uncompressed textures, shadow cost, color space, draw calls. Each finding has a concrete fix.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the '[INSPECT] Read-only' label largely restates structured data. The description does add one genuinely useful behavioral fact beyond the annotations: 'Each finding has a concrete fix.' It says nothing about result format, aggregation, or cost of running the audit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the '[INSPECT] Read-only' classification leads, followed by a scoped list of inspected dimensions and a closing note on fixes. The long comma-separated enumeration is dense but each item is a distinct check, so little is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 with no output schema, the description covers both what is inspected and what findings contain ('Each finding has a concrete fix'), which is close to sufficient. It stops short of describing the return structure or how findings are grouped, but the scope is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters (empty schema, no required fields), so there are no parameter semantics to explain. Baseline 4 applies; the description has no parameters to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: a read-only 'website health check' that inspects pixel ratio, canvas resize, rendering costs, textures, shadows, color space, and draw calls. The scope is concrete and enumerable, though it overlaps several siblings (performance_snapshot, draw_call_breakdown, memory_stats, texture_list) without explicitly distinguishing itself from them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The '[INSPECT] Read-only' tag and 'health check' framing imply a diagnostic context, but there is no explicit when-to-use versus alternatives like performance_snapshot or draw_call_breakdown, nor any exclusions or prerequisites. Guidance is left entirely to inference.
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.
69 tool updates
v0.5.0- Changed
add_helper7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / color / descriptionPrevious value: -"Color as hex number (default: 0x00ff00)"New value: +"Hex number (default: 0x00ff00)" - changed
Input schema / properties / direction / descriptionPrevious value: -"[x, y, z] direction for ArrowHelper/PlaneHelper"New value: +"[x, y, z] for ArrowHelper/PlaneHelper" - changed
Input schema / properties / divisions / descriptionPrevious value: -"Grid divisions (GridHelper, default: 10)"New value: +"GridHelper divisions (default: 10)" - changed
Input schema / properties / length / descriptionPrevious value: -"Arrow length (ArrowHelper, default: 1)"New value: +"ArrowHelper length (default: 1)" - changed
Input schema / properties / size / descriptionPrevious value: -"Size for AxesHelper/GridHelper/LightHelpers (default: 1)"New value: +"Axes/Grid/light helper size (default: 1)" - changed
Input schema / properties / type / descriptionPrevious value: -"Helper type (default: box)"New value: +"Default: box"
- Changed
animation_details1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
annotated_screenshot3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / height / descriptionPrevious value: -"Height in pixels"New value: +"Height in pixels (default: canvas height)" - changed
Input schema / properties / width / descriptionPrevious value: -"Width in pixels"New value: +"Width in pixels (default: canvas width)"
- Added
batched_mesh_details - Changed
bounding_boxes6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / clear / descriptionPrevious value: -"Remove all bounding boxes"New value: +"Remove all boxes" - changed
Input schema / properties / color / descriptionPrevious value: -"Box color as hex (default: 0x00ff00)"New value: +"Hex number (default: 0x00ff00)" - changed
Input schema / properties / limit / descriptionPrevious value: -"Max boxes to add (default: 50)"New value: +"Max boxes (default: 50)" - changed
Input schema / properties / name / descriptionPrevious value: -"Target object name (omit for all meshes)"New value: +"Target object (omit for all meshes) name" - changed
Input schema / properties / uuid / descriptionPrevious value: -"Target object UUID"New value: +"Target object (omit for all meshes) UUID"
- Changed
bridge_status1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
camera_details1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Added
capture_frames - Changed
click_inspect1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
clipping_details - Changed
console_capture4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / clear / descriptionPrevious value: -"Clear the capture buffer"New value: +"Clear the buffer" - removed
Input schema / properties / level / descriptionRemoved value: -"Filter by level" - changed
Input schema / properties / limit / descriptionPrevious value: -"Max messages to return (default: 50)"New value: +"Max messages (default: 50)"
- Changed
dispose_check1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Added
draw_call_breakdown - Changed
env_map_details1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
find_objects7 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / hasGeometry / descriptionPrevious value: -"Filter objects with/without geometry"New value: +"Objects with/without geometry" - changed
Input schema / properties / material / descriptionPrevious value: -"Material name or type to filter by"New value: +"Material name or type" - changed
Input schema / properties / namePattern / descriptionPrevious value: -"Regex pattern to match object names"New value: +"Regex to match object names" - changed
Input schema / properties / property / descriptionPrevious value: -"Custom property name to check on the object"New value: +"Custom property name to check" - changed
Input schema / properties / value / descriptionPrevious value: -"Expected value for the custom property"New value: +"Expected value of the custom property" - added
Input schema / properties / value / typeAdded value: +[ + "string", + "number", + "boolean" +]
- Changed
fog_details1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
geometry_details3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / name / descriptionPrevious value: -"Object name (owning mesh)"New value: +"Mesh name" - changed
Input schema / properties / uuid / descriptionPrevious value: -"Object UUID (owning mesh)"New value: +"Mesh UUID"
- Changed
gltf_to_r3f3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / filePath / descriptionPrevious value: -"Absolute or relative path to the .glb or .gltf file"New value: +"Absolute or relative path to the .glb/.gltf file" - changed
Input schema / properties / preload / descriptionPrevious value: -"Add useGLTF.preload() call (default: true)"New value: +"Add useGLTF.preload() (default: true)"
- Changed
highlight_object3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / enabled / descriptionPrevious value: -"Enable/disable highlight (default: true)"New value: +"Default: true" - changed
Input schema / properties / mode / descriptionPrevious value: -"Highlight mode (default: wireframe)"New value: +"Default: wireframe"
- Changed
instanced_mesh_details3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / sampleCount / descriptionPrevious value: -"Number of instances to sample (default: 5, max: 20)"New value: +"Instances to sample (default: 5, max: 20)" - changed
Input schema / properties / startIndex / descriptionPrevious value: -"First instance index to sample (default: 0)"New value: +"First sampled index (default: 0)"
- Changed
layer_details1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
material_details1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
material_list1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
memory_stats1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
morph_targets1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
object_details2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / name / descriptionPrevious value: -"Object name (first match)"New value: +"Object name"
- Changed
overlay_selected1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Added
pending_changes - Changed
perf_monitor3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / duration / descriptionPrevious value: -"Recording duration in seconds (default: 3, max: 30)"New value: +"Seconds (default: 3, max: 30)" - changed
Input schema / properties / includeFrameTimes / descriptionPrevious value: -"Include raw frame times array (default: false, saves tokens)"New value: +"Include raw frame times (default: false)"
- Changed
performance_snapshot1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
postprocessing_list1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
raycast4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / maxHits / descriptionPrevious value: -"Maximum hits to return (default: 10)"New value: +"Max hits (default: 10)" - changed
Input schema / properties / x / descriptionPrevious value: -"Normalized device X coordinate (-1 to 1, 0 = center)"New value: +"Normalized device X (-1 to 1, 0 = center)" - changed
Input schema / properties / y / descriptionPrevious value: -"Normalized device Y coordinate (-1 to 1, 0 = center)"New value: +"Normalized device Y (-1 to 1, 0 = center)"
- Changed
remove_helper2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / helperId / descriptionPrevious value: -"Helper ID returned by add_helper"New value: +"ID returned by add_helper"
- Changed
renderer_info1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
renderer_settings1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Added
revert_changes - Changed
run_js2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / code / descriptionPrevious value: -"JavaScript code. Available vars: scene, renderer, camera, gl. Use return for results."New value: +"JavaScript body. Vars: scene, renderer, camera, gl"
- Changed
scene_background1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
scene_diff2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / action / descriptionPrevious value: -"snapshot=save state, diff=compare with saved, auto=snapshot if none saved, diff if exists (default: auto)"New value: +"snapshot=save, diff=compare with saved, auto=snapshot if none else diff (default)"
- Changed
scene_export4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / binary / descriptionPrevious value: -"GLB binary (default: true) or glTF JSON"New value: +"GLB (default) or glTF JSON" - changed
Input schema / properties / name / descriptionPrevious value: -"Object name (omit for entire scene)"New value: +"Object (omit for entire scene) name" - changed
Input schema / properties / uuid / descriptionPrevious value: -"Object UUID"New value: +"Object (omit for entire scene) UUID"
- Changed
scene_tree2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / compact / descriptionPrevious value: -"Compact text tree (default: true). Set false for full JSON with positions/geometry."New value: +"Compact text tree (default: true)"
- Changed
set_animation9 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / actionPaused / descriptionRemoved value: -"Pause/unpause action" - removed
Input schema / properties / actionTimeScale / descriptionRemoved value: -"Action time scale" - changed
Input schema / properties / actionWeight / descriptionPrevious value: -"Action weight (0-1)"New value: +"0-1" - changed
Input schema / properties / mixerIndex / descriptionPrevious value: -"Mixer index (default: 0)"New value: +"From animation_details (default: 0)" - removed
Input schema / properties / play / descriptionRemoved value: -"Play the action" - removed
Input schema / properties / stop / descriptionRemoved value: -"Stop the action" - changed
Input schema / properties / time / descriptionPrevious value: -"Mixer current time"New value: +"Seek mixer time (not recorded as a change)" - changed
Input schema / properties / timeScale / descriptionPrevious value: -"Mixer global time scale"New value: +"Mixer time scale"
- Changed
set_camera10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / aspect / descriptionPrevious value: -"Aspect ratio (PerspectiveCamera)"New value: +"PerspectiveCamera" - changed
Input schema / properties / bottom / descriptionPrevious value: -"Bottom plane (OrthographicCamera)"New value: +"OrthographicCamera" - removed
Input schema / properties / far / descriptionRemoved value: -"Far clipping plane" - changed
Input schema / properties / fov / descriptionPrevious value: -"Field of view (PerspectiveCamera)"New value: +"PerspectiveCamera" - changed
Input schema / properties / left / descriptionPrevious value: -"Left plane (OrthographicCamera)"New value: +"OrthographicCamera" - removed
Input schema / properties / near / descriptionRemoved value: -"Near clipping plane" - changed
Input schema / properties / right / descriptionPrevious value: -"Right plane (OrthographicCamera)"New value: +"OrthographicCamera" - changed
Input schema / properties / top / descriptionPrevious value: -"Top plane (OrthographicCamera)"New value: +"OrthographicCamera" - removed
Input schema / properties / zoom / descriptionRemoved value: -"Zoom factor"
- Added
set_clipping - Changed
set_dev_port2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / port / descriptionPrevious value: -"The dev server port (e.g. 3000, 5173, 8080)"New value: +"Dev server port, e.g. 3000, 5173, 8080"
- Changed
set_dev_url2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / url / descriptionPrevious value: -"Full URL of the remote Three.js app (e.g. https://my-app.vercel.app, http://staging.example.com:3000)"New value: +"Full URL, e.g. https://my-app.vercel.app"
- Changed
set_fog6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / background / descriptionPrevious value: -"Scene background color (#RRGGBB)"New value: +"Scene background color, #RRGGBB" - changed
Input schema / properties / color / descriptionPrevious value: -"Fog color (#RRGGBB)"New value: +"#RRGGBB" - changed
Input schema / properties / density / descriptionPrevious value: -"Fog density (FogExp2 type)"New value: +"FogExp2 only" - changed
Input schema / properties / far / descriptionPrevious value: -"Fog far distance (Fog type)"New value: +"Fog only" - changed
Input schema / properties / near / descriptionPrevious value: -"Fog near distance (Fog type)"New value: +"Fog only"
- Changed
set_instanced_mesh4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / count / descriptionPrevious value: -"Number of visible instances"New value: +"Visible instances" - removed
Input schema / properties / frustumCulled / descriptionRemoved value: -"Enable/disable frustum culling" - removed
Input schema / properties / visible / descriptionRemoved value: -"Show/hide entire mesh"
- Changed
set_layers5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / enabled / descriptionPrevious value: -"Enable or disable the layer"New value: +"Enable or disable that layer" - changed
Input schema / properties / layer / descriptionPrevious value: -"Layer number (0-31) to enable/disable"New value: +"Layer 0-31 to enable/disable" - changed
Input schema / properties / mask / descriptionPrevious value: -"Set layer mask directly (bitmask)"New value: +"Set the bitmask directly" - added
Input schema / properties / target / constAdded value: +"camera"
- Changed
set_light5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / castShadow / descriptionRemoved value: -"Enable/disable shadows" - changed
Input schema / properties / color / descriptionPrevious value: -"Light color (#RRGGBB)"New value: +"#RRGGBB" - changed
Input schema / properties / groundColor / descriptionPrevious value: -"Ground color for HemisphereLight (#RRGGBB)"New value: +"HemisphereLight ground color, #RRGGBB" - removed
Input schema / properties / intensity / descriptionRemoved value: -"Light intensity"
- Changed
set_material_property6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / name / descriptionPrevious value: -"Material name or object/mesh name that owns the material"New value: +"Material name, or name of a mesh using it" - changed
Input schema / properties / property / descriptionPrevious value: -"Property name: color, emissive, roughness, metalness, opacity, transparent, wireframe, visible, side, depthWrite, depthTest, alphaTest, flatShading, fog"New value: +"color, emissive, emissiveIntensity, roughness, metalness, opacity, transparent, wireframe, visible, side, depthWrite, depthTest, alphaTest, flatShading, fog, envMapIntensity; physical: clearcoat, clearcoatRoughness, transmission, thickness, ior, sheen, sheenColor, sheenRoughness, iridescence, anisotropy, dispersion, specularIntensity, specularColor, attenuationColor" - changed
Input schema / properties / value / descriptionPrevious value: -"New value (hex string for colors, number for scalars, boolean for flags)"New value: +"Hex string for colors (\"#ff0000\"), number for scalars, boolean for flags" - added
Input schema / properties / value / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / requiredPrevious value: -[ - "property" -]New value: +[ + "property", + "value" +]
- Changed
set_morph_target3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / influence / descriptionPrevious value: -"Influence value (0-1)"New value: +"0-1" - changed
Input schema / properties / targetName / descriptionPrevious value: -"Morph target name (from dictionary)"New value: +"Morph target name (from morphTargetDictionary)"
- Changed
set_object_transform2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / visible / descriptionPrevious value: -"Show/hide object"New value: +"Show/hide"
- Added
set_postprocessing - Changed
set_renderer9 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / localClippingEnabled / descriptionRemoved value: -"Enable local clipping planes" - changed
Input schema / properties / outputColorSpace / descriptionPrevious value: -"Output color space (srgb, srgb-linear)"New value: +"srgb, srgb-linear" - removed
Input schema / properties / pixelRatio / descriptionRemoved value: -"Device pixel ratio" - removed
Input schema / properties / shadowMapEnabled / descriptionRemoved value: -"Enable shadow mapping" - changed
Input schema / properties / shadowMapType / descriptionPrevious value: -"Shadow map type (0=Basic, 1=PCF, 2=PCFSoft, 3=VSM)"New value: +"0=Basic 1=PCF 2=PCFSoft 3=VSM" - removed
Input schema / properties / sortObjects / descriptionRemoved value: -"Sort objects before rendering" - changed
Input schema / properties / toneMapping / descriptionPrevious value: -"Tone mapping algorithm (0-7)"New value: +"0=None 1=Linear 2=Reinhard 3=Cineon 4=ACESFilmic 6=AgX 7=Neutral" - removed
Input schema / properties / toneMappingExposure / descriptionRemoved value: -"Exposure level"
- Changed
set_shadow15 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / bias / descriptionPrevious value: -"Shadow bias (light only, e.g. -0.0001)"New value: +"Light only, e.g. -0.0001" - changed
Input schema / properties / blurSamples / descriptionPrevious value: -"Shadow blur samples (light only)"New value: +"VSM blur samples (light only)" - changed
Input schema / properties / cameraBottom / descriptionPrevious value: -"Shadow camera bottom (DirectionalLight)"New value: +"DirectionalLight" - removed
Input schema / properties / cameraFar / descriptionRemoved value: -"Shadow camera far plane" - changed
Input schema / properties / cameraLeft / descriptionPrevious value: -"Shadow camera left (DirectionalLight)"New value: +"DirectionalLight" - removed
Input schema / properties / cameraNear / descriptionRemoved value: -"Shadow camera near plane" - changed
Input schema / properties / cameraRight / descriptionPrevious value: -"Shadow camera right (DirectionalLight)"New value: +"DirectionalLight" - changed
Input schema / properties / cameraTop / descriptionPrevious value: -"Shadow camera top (DirectionalLight)"New value: +"DirectionalLight" - removed
Input schema / properties / castShadow / descriptionRemoved value: -"Enable/disable shadow casting" - changed
Input schema / properties / name / descriptionPrevious value: -"Object/light name"New value: +"Object or light name" - changed
Input schema / properties / normalBias / descriptionPrevious value: -"Shadow normal bias (light only)"New value: +"Light only" - changed
Input schema / properties / radius / descriptionPrevious value: -"Shadow blur radius (light only)"New value: +"Blur radius (light only)" - removed
Input schema / properties / receiveShadow / descriptionRemoved value: -"Enable/disable shadow receiving" - changed
Input schema / properties / uuid / descriptionPrevious value: -"Object/light UUID"New value: +"Object or light UUID"
- Changed
set_texture9 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / anisotropy / descriptionPrevious value: -"Anisotropic filtering level (1-16)"New value: +"1-16" - changed
Input schema / properties / colorSpace / descriptionPrevious value: -"Color space (srgb, srgb-linear)"New value: +"srgb, srgb-linear" - removed
Input schema / properties / flipY / descriptionRemoved value: -"Flip texture vertically" - changed
Input schema / properties / magFilter / descriptionPrevious value: -"Mag filter (1003=Nearest, 1006=Linear)"New value: +"1003=Nearest, 1006=Linear" - changed
Input schema / properties / minFilter / descriptionPrevious value: -"Min filter (1003=Nearest, 1006=Linear, 1008=LinearMipmapLinear)"New value: +"1003=Nearest, 1006=Linear, 1008=LinearMipmapLinear" - changed
Input schema / properties / rotation / descriptionPrevious value: -"Rotation in radians"New value: +"Radians" - changed
Input schema / properties / wrapS / descriptionPrevious value: -"Wrap S mode (1000=Repeat, 1001=ClampToEdge, 1002=Mirrored)"New value: +"1000=Repeat, 1001=ClampToEdge, 1002=MirroredRepeat" - changed
Input schema / properties / wrapT / descriptionPrevious value: -"Wrap T mode"New value: +"Same values as wrapS"
- Changed
set_uniform5 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / uniform / descriptionPrevious value: -"Uniform name (e.g. uHorizonColor, uOpacity)"New value: +"Uniform name, e.g. uTime, uColor" - added
Input schema / properties / value / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "properties": { + "w": { + "type": "number" + }, + "x": { + "type": "number" + }, + "y": { + "type": "number" + }, + "z": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + } +] - changed
Input schema / properties / value / descriptionPrevious value: -"New value: hex string for Color, {x,y,z} for Vector3, number for float"New value: +"Hex string for Color, {x,y,z} for vectors, number/boolean for scalars" - changed
Input schema / requiredPrevious value: -[ - "uniform" -]New value: +[ + "uniform", + "value" +]
- Changed
shader_list1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
shader_source1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
shadow_details1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
skeleton_details1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
take_screenshot3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / height / descriptionPrevious value: -"Height in pixels"New value: +"Height in pixels (default: canvas height)" - changed
Input schema / properties / width / descriptionPrevious value: -"Width in pixels"New value: +"Width in pixels (default: canvas width)"
- Changed
texture_details1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
texture_list1 field changed- added
Input schema / $schemaAdded value: +"http://json-schema.org/draft-07/schema#"
- Changed
texture_preview1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
toggle_overlay1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
toggle_wireframe4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / enabled / descriptionPrevious value: -"true=wireframe on, false=restore original, omit=toggle"New value: +"true=on, false=restore, omit=toggle" - changed
Input schema / properties / name / descriptionPrevious value: -"Object name (omit for whole scene)"New value: +"Object (omit for whole scene) name" - changed
Input schema / properties / uuid / descriptionPrevious value: -"Object UUID"New value: +"Object (omit for whole scene) UUID"
- Added
web_audit
60 tool updates
v0.4.1- First observed
add_helper - First observed
animation_details - First observed
annotated_screenshot - First observed
bounding_boxes - First observed
bridge_status - First observed
camera_details - First observed
click_inspect - First observed
console_capture - First observed
dispose_check - First observed
env_map_details - First observed
find_objects - First observed
fog_details - First observed
geometry_details - First observed
gltf_to_r3f - First observed
highlight_object - First observed
instanced_mesh_details - First observed
layer_details - First observed
material_details - First observed
material_list - First observed
memory_stats - First observed
morph_targets - First observed
object_details - First observed
overlay_selected - First observed
perf_monitor - First observed
performance_snapshot - First observed
postprocessing_list - First observed
raycast - First observed
remove_helper - First observed
renderer_info - First observed
renderer_settings - First observed
run_js - First observed
scene_background - First observed
scene_diff - First observed
scene_export - First observed
scene_tree - First observed
set_animation - First observed
set_camera - First observed
set_dev_port - First observed
set_dev_url - First observed
set_fog - First observed
set_instanced_mesh - First observed
set_layers - First observed
set_light - First observed
set_material_property - First observed
set_morph_target - First observed
set_object_transform - First observed
set_renderer - First observed
set_shadow - First observed
set_texture - First observed
set_uniform - First observed
shader_list - First observed
shader_source - First observed
shadow_details - First observed
skeleton_details - First observed
take_screenshot - First observed
texture_details - First observed
texture_list - First observed
texture_preview - First observed
toggle_overlay - First observed
toggle_wireframe
TDQS
Scored across 69 tools
The server has clear category tags and distinct targets for most tools, but overlapping clusters exist in performance/memory inspection (renderer_info, performance_snapshot, web_audit, draw_call_breakdown, memory_stats, dispose_check) and debug visuals (highlight_object, toggle_wireframe, bounding_boxes, add_helper), where an agent could misselect despite descriptions.
All tool names are lower_snake_case and follow predictable patterns (noun_details/list for inspection, set_* for live preview, toggle_*/add_*/remove_* for debug), but not a strict verb_noun convention and includes abbreviations (perf, env, gltf) and verb-only names like raycast.
69 tools is an extreme mismatch for a single MCP server, far beyond the 3-15 well-scoped range; many tools are highly specialized and could be consolidated.
The surface covers inspection, live preview, code persistence, and connection setup across nearly all Three.js subsystems, with only minor gaps like direct scene background/environment setters and object creation/deletion (workable via run_js).
Maintenance
Related MCP Connectors
Create, inspect, validate, and save editable 3D building scenes with Pascal's MCP server.
Generate, edit, and deploy immersive 3D/WebGL web projects from any MCP assistant.
Official MCP server for Softhills 3D/2D Visualization SDKs, API documentation, and code examples.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for inspecting and manipulating Three.js/Threlte scenes in real-time.10 npm8MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to inspect and modify live Three.js scenes in real time through 59 tools covering objects, materials, shaders, textures, animations, performance monitoring, memory diagnostics, and code generation. Works with vanilla Three.js, React Three Fiber, and any framework without changing your project, using an injected browser bridge and in-page devtools overlay.4,560 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to inspect a running Three.js scene in the browser and try out live edits to objects, materials, shaders, lights, camera and animation without touching project files. Every change is recorded and can be exported as ready-to-paste vanilla Three.js or React Three Fiber code, alongside performance audits and frame capture.4,560 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to inspect Three.js and React Three Fiber scenes in a live browser and experiment with changes to objects, materials, shaders, textures, lighting, animation and performance without touching project code. Previewed adjustments can be converted into ready-to-paste vanilla Three.js or R3F source code, and the server also offers website performance audits, frame capture for video, and Playwright/Puppeteer helpers.4,560 npmMIT