Sceneplane
Server Details
Cloud Blender for AI agents: build, inspect, render and animate 3D scenes over remote MCP. Keep editable .blend files and export GLB or STL. Make your first 3D asset free: 30 compute minutes/month, no credit card.
- Status
- Healthy
- Uptime
- 9.9% over 41 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 61 tools
The tools are separated into clear domain families, and descriptions explicitly route between similar choices such as render_create vs render_turntable vs scene_snapshot and material_from_image vs material_from_maps vs texture_maps_create. There is some residual overlap in material, asset, and scene-mutation workflows, but most boundaries are well drawn.
Names are consistently snake_case and mostly follow a noun_verb pattern (project_create, job_get, asset_import). Minor deviations include singular/plural variants like artifact_get vs artifacts_list and deployment_create vs deployments_list, plus a few noun_noun names such as material_nodes and platform_status.
61 tools is far above the well-scoped 3-15 range and creates a heavy selection and context burden for an agent. The platform domain is genuinely broad, so this is not a trivial mismatch, but the set is still too large for comfortable tool selection.
The surface covers core lifecycles for projects, deployments, jobs, revisions, renders, assets, materials, uploads, webhooks, integrations, and organizations. Minor gaps such as direct asset/material deletion or a standalone revision-list tool are workable through existing operations, so coverage is strong but not perfect.
Available Tools
61 toolsartifact_getGet artifactARead-onlyIdempotentInspect
Get artifact metadata plus an expiring authorized download URL. The URL is a plain HTTPS GET with the credential in the query string — no headers required — and the response carries the byte count and SHA-256 so a download is verifiable. NOTE on clients: this endpoint answers 401 for a bad or expired token and 404 for a missing artifact, and never 403. A 403 therefore did not come from ScenePlane; it comes from edge protection ahead of it, which rejects some default library User-Agents. Python's urllib sends Python-urllib/3.x and is the known case — a field archive lost an entire 31-artifact download pass to it while curl on the SAME url returned 200. Set an explicit User-Agent, or use curl/httpx.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | Artifact ID returned by a completed job or artifacts_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by explaining the URL mechanics (credential in query string, no headers), verifiable response fields (byte count, SHA-256), precise 401/404/403 semantics, and the edge-protection User-Agent pitfall. This is exactly the kind of behavioral context that 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?
The description is front-loaded with the core purpose, followed by valuable operational details and a clear error-code warning. The anecdote about the 31-artifact download pass is slightly verbose but reinforces the User-Agent warning; overall every sentence contributes meaningful 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, the description compensates by naming the key response elements (byte count, SHA-256) and detailing error behavior. It does not state the URL expiration time or the full set of metadata fields, but the essentials for calling and using the result are 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?
The input schema has 100% description coverage for the single parameter, artifactId, so the schema already defines the parameter. The description adds no additional parameter-level meaning, which matches the baseline of 3 for high schema 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 description states a clear verb and resource: 'Get artifact metadata plus an expiring authorized download URL.' This is much more specific than the title, and the mention of metadata plus a download URL distinguishes it from siblings like artifacts_list. An agent can tell exactly what this tool 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?
The intended use is implied by the purpose statement, and there is useful client guidance about User-Agent handling and error codes. However, it does not explicitly say when to choose this tool over sibling tools like artifacts_list, nor does it 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.
artifacts_listList artifactsARead-onlyIdempotentInspect
List a project's artifacts newest-first (renders, exports, previews, audio), optionally filtered by revision or kind. Every entry carries the revision that produced it, so a lost artifact id is recoverable without walking jobs_list. Download URLs come from artifact_get.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Filter by kind, e.g. "render_png", "export_glb", "glb_preview" | |
| limit | No | Maximum artifacts to return in this page. | |
| cursor | No | Page token from a previous call's nextCursor (a row offset) | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| revisionId | No | Only artifacts produced from this revision |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, idempotent, and non-destructive. The description adds observable behavior: newest-first ordering, every entry carrying the producing revision, and recovery of lost artifact ids without walking jobs_list.
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 sentences, each carrying distinct information: what the tool lists, why revision info matters, and where download URLs live. No filler or restatement of the title.
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 list tool with an output schema, the description supplies key selection criteria, ordering, filter options, and the sibling relationship. Pagination is left to the schema's cursor field, which is acceptable given the output schema exists.
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 projectId, kind, limit, cursor, and revisionId. The description adds only high-level filter and ordering context, which is useful but not needed to compensate for missing parameter docs.
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 action ('List a project's artifacts'), scopes it to a project, and specifies ordering ('newest-first') and supported artifact kinds. It also distinguishes itself from artifact_get by noting that download URLs live there.
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 artifact_get as the source for download URLs and jobs_list as a heavier alternative for recovering artifact ids, giving an agent clear routing cues. This is explicit enough to choose this tool over siblings without opening their schemas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_generate_3dGenerate a 3D model from text or an imageAInspect
Start a text/image → 3D generation of ONE freestanding object per task — build ground planes and assemblies from scene operations, and reuse a generated model by duplicating it with scene ops. provider=hyper3d (Rodin) takes prompt only; provider=hunyuan3d and provider=tripo3d take prompt OR imageUrl. Each provider needs its integrations_set token. Poll asset_generate_status, then import with asset_library_import source= slug=.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | No | Description of the object to generate; describe one freestanding asset. | |
| imageUrl | No | Optional reference image URL supported by the chosen provider. | |
| provider | No | Configured 3D-generation provider to use. | hyper3d |
Output Schema
| Name | Required | Description |
|---|---|---|
| provider | Yes | |
| taskUuid | Yes | |
| subscriptionKey | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readonly/destructive/idempotent safety. The description adds useful behavioral context beyond annotations: it is an asynchronous generation workflow requiring polling, provider-specific input constraints, and a required integrations_set token. It stops short of discussing limits, failures, or latency, but the additions are meaningful.
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 packs a high density of useful information into three focused sentences. The primary purpose is front-loaded, and provider constraints and follow-up steps are introduced in a logical order without filler or repetition.
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?
Given the rich schema coverage, output schema, and annotations, the description provides everything an agent needs to invoke the tool correctly: the object scope, the provider differences, the auth prerequisite, and the downstream polling/import steps. The explicit source and slug format for the follow-up import closes the loop.
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 all three parameters. The description goes beyond the schema by clarifying which providers accept imageUrl versus prompt-only, and by tying the provider choice to the required integrations_set token and the eventual import source.
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 action ('Start a text/image → 3D generation') with a clear scope ('ONE freestanding object per task'). It differentiates itself from scene operations and from the later status/import steps, so an agent can distinguish it from sibling tools like asset_generate_status and asset_library_import.
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 explicit workflow guidance: generate, then poll asset_generate_status, then import with asset_library_import using source and slug. It also tells the agent not to build ground planes or assemblies with this tool and instead use scene operations, and names the required integration token setup via integrations_set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_generate_statusCheck a 3D generationARead-onlyIdempotentInspect
Poll a generation started by asset_generate_3d (same provider and subscriptionKey). When status=done, import with asset_library_import source= slug=.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | No | Provider that owns the generation request. | hyper3d |
| subscriptionKey | Yes | Generation request key returned by asset_generate_3d. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and idempotent behavior, so the description's extra context about needing the same provider and subscriptionKey and the next import step adds useful behavioral boundary. It accurately reflects a non-destructive polling operation and has no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the polling purpose, the required identity context, and the success-path next step with zero filler. The content is front-loaded and 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 two-parameter, read-only polling tool with a full output schema, the description is complete: it explains what to pass, what to wait for, and what to do after. The agent has all the context needed to call the tool correctly and continue the workflow.
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 description does not need to re-document the parameters. It reinforces that provider and subscriptionKey should match the originating generation request, but this mostly restates the schema's existing 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?
The description opens with a specific action, 'Poll a generation', and ties it directly to the output of asset_generate_3d, so an agent knows exactly what this tool is for. It also distinguishes the tool from the generation and import siblings by framing it as the middle polling step of the workflow.
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 states the precondition (generation started by asset_generate_3d with the same provider and subscriptionKey) and gives a clear transition condition to asset_library_import when status=done. It does not explicitly list alternatives or when not to use the tool, but the workflow condition is specific enough to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_importImport assetAInspect
Import a validated uploaded asset into a project as a new revision. Returns a durable job handle.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | auto | |
| assetId | Yes | ||
| placement | No | origin | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| unitPolicy | No | meters | |
| baseRevisionId | No | "HEAD" (default) targets the project's current head. Mutations MUST build on the head: passing an older revision is rejected with REVISION_CONFLICT, since history is linear. To continue from an older scene, revision_restore it forward first. | HEAD |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| targetCollection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as non-read-only, non-idempotent, and open-world. The description adds meaningful behavioral context by disclosing that the call returns a durable job handle, implying asynchronous processing and poll-ability. It does not contradict any annotation.
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 no filler: the action and destination are front-loaded, and the durable job handle result is stated directly. Every sentence 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?
The description is too thin for an 8-parameter mutation tool with low schema coverage. It leaves the caller to infer the meaning and provenance of several key parameters, and while the output schema may document the return value, the description does not provide enough operational context 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 only 38%, leaving assetId, format, placement, unitPolicy, and targetCollection without explanatory context. The description does not compensate for this gap and adds no parameter-level meaning beyond what the schema already has.
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 action ('Import'), a specific resource ('a validated uploaded asset'), a destination ('into a project as a new revision'), and a result ('Returns a durable job handle'). The phrase 'validated uploaded asset' distinguishes this from the sibling asset_library_import without needing to open 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?
The description states a clear usage context: the asset must already be validated and uploaded, and the tool creates a new revision in a project. It does not explicitly mention exclusions or alternatives, such as 'use asset_library_import for library assets', so it stops short of an explicit when/not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_library_importImport a library assetAInspect
Import a library asset into a project as a new revision. Returns a job handle. source=polyhaven (CC0): HDRIs become the world environment, models join the scene, texture sets become a wired PBR material (applyToObjects assigns it). source=sketchfab: slug is the model uid (requires the org's Sketchfab token). source=hyper3d / hunyuan3d / tripo3d: slug is a finished generation taskUuid from asset_generate_3d. Scale generated/Sketchfab models on import with targetSize (largest dimension in meters — chair≈1.0, table≈0.75, car≈4.5, person≈1.7).
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | ||
| type | No | model | |
| source | No | polyhaven | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| resolution | No | 2k | |
| targetSize | No | ||
| materialName | No | ||
| applyToObjects | No | ||
| baseRevisionId | No | "HEAD" (default) targets the project's current head. Mutations MUST build on the head: passing an older revision is rejected with REVISION_CONFLICT, since history is linear. To continue from an older scene, revision_restore it forward first. | HEAD |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: it returns a job handle (async), explains source-specific transformations (HDRI becomes world environment, texture sets become wired PBR material), and mentions scaling. It also notes the token requirement for Sketchfab. These are valuable details not captured by annotations. It does not contradict the annotations (readOnlyHint false, openWorldHint true, etc.).
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 dense but well-structured, starting with the core purpose and then using clear 'source=' segments to organize source-specific details. Each clause carries necessary information, and the front-loaded main sentence gives immediate context. It is appropriately sized for the complexity.
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?
Given the tool's complexity (10 parameters, multiple sources, async job handle) and the presence of an output schema, the description covers the essential behaviors: revision creation, job handle, per-source semantics, token requirement, and scaling guidance. It also ties into asset_generate_3d for generation tasks. The description is thorough and leaves little ambiguous for an agent to call it 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?
With schema description coverage only at 30%, the description adds substantial meaning for parameters like slug (explaining what it means per source), source (enum meaning), targetSize (with real-world examples), and applyToObjects (assignment behavior). This significantly compensates for the low schema coverage and helps agents understand parameter usage without opening 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 clearly states the verb 'import', the resource 'library asset', and the outcome 'into a project as a new revision', plus it returns a job handle. It is specific enough to distinguish from the sibling 'asset_import' by focusing on library sources and revision semantics, even without naming the sibling 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 description provides clear context on how to use the tool across different sources (polyhaven, sketchfab, hyper3d/hunyuan3d/tripo3d), including source-specific requirements like the Sketchfab token and taskUuid from asset_generate_3d. It also explains scaling with targetSize. However, it does not explicitly state when not to use this tool versus the sibling 'asset_import', so it lacks a direct exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_previewPreview an asset visuallyARead-onlyIdempotentInspect
See an asset's thumbnail as an inline image before importing it. slug is a Poly Haven slug or Sketchfab uid from assets_search.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Asset slug returned by assets_search. | |
| source | No | Asset provider that returned the slug. | polyhaven |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that the tool is read-only, idempotent, and non-destructive, so the description does not need to repeat those facts. It adds useful context about slug provenance and provider types, though it does not describe error behavior or output details beyond the inline image.
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 deliver the core purpose immediately and then pin down the slug/source semantics. There is no filler or redundant restatement of the tool 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 simple read-only preview tool with rich annotations, the description covers what it does, its output form, and its input provenance. Nothing essential is missing for an agent to decide when and how 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 schema already provides full descriptions for both parameters, including source enum values and defaults. The description reinforces that slug comes from assets_search, but adds no major semantic value 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 states a specific verb ('see'), a concrete resource ('asset's thumbnail as an inline image'), and the associated workflow phase ('before importing it'). This clearly distinguishes asset_preview from import tools without requiring schema inspection.
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 explicitly frames the tool as a pre-import preview step, giving clear context for when it is appropriate. It does not explicitly list alternative tools, but the 'before importing' wording makes the intended usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_categoriesBrowse asset library categoriesARead-onlyIdempotentInspect
List Poly Haven categories for an asset type with per-category counts. Pass a category as the assets_search query to filter.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Asset type whose available categories should be listed. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior, lowering the burden on the description. The description adds useful behavioral context by mentioning per-category counts and that categories can be passed as search queries, going beyond what the annotation block alone provides.
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 no filler: the first states the core action and output characteristic, and the second provides usage guidance for the related sibling tool. Every sentence 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 one required enum parameter, full schema coverage, an output schema, and safety annotations, nothing needed to call the tool correctly is missing. The description also covers the likely next step by connecting categories to assets_search.
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 single 'type' parameter is fully documented in the schema with an enum and a clear description, so the description doesn't need to add much. The phrase 'for an asset type' maps to that parameter but adds no format or value 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 states a specific action ('List'), a concrete resource ('Poly Haven categories'), and a scope ('for an asset type'), plus a distinguishing detail ('per-category counts'). It also references assets_search, making clear this tool is for browsing the category taxonomy rather than searching assets.
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 a clear follow-up directive: 'Pass a category as the assets_search query to filter,' which tells the agent when to hand off to assets_search. It does not explicitly enumerate exclusion conditions like 'use only when you need categories,' so the guidance is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assets_searchSearch the asset libraryAInspect
Search free 3D asset sources by keyword; returns slugs for asset_library_import. source=polyhaven (default, CC0 — HDRIs, PBR texture sets, models) needs no setup. source=sketchfab searches downloadable models (type=model only; import requires integrations_set provider=sketchfab; honor each hit's license).
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Kind of library asset to search for. | |
| limit | No | Maximum results to return (1–30). | |
| query | No | Search terms or a Poly Haven category; empty lists popular assets. | |
| source | No | Asset catalog to search; Sketchfab requires a configured token. | polyhaven |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses the return contract (slugs for a downstream tool), default source, CC0 licensing for Poly Haven, and the Sketchfab integration prerequisite. It doesn't mention rate limits or side-effect behavior, and the readOnlyHint=false annotation makes the safety profile slightly ambiguous for a search tool, but there is no direct contradiction.
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 information-dense with the core purpose front-loaded in the first clause. Each sentence adds real value, though the long parentheticals make it slightly harder to parse; a bulleted source breakdown would improve scannability without adding length.
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?
Given the full parameter schema, output schema, and annotations, the description provides the missing operational context: what the returned slugs are for, which source needs setup, which source is restricted, and licensing requirements. Nothing essential is missing for an agent to decide to call this 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 schema already documents all four parameters with 100% coverage, so the baseline is 3. The description adds meaning beyond the schema by explaining source-specific behavior: default source, no setup, type=model restriction, integration requirement, and license obligation. It does not add new detail for limit/query, but the schema covers them.
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 uses a specific verb and resource: 'Search free 3D asset sources by keyword' and clearly states the output ('returns slugs for asset_library_import'). It also distinguishes the two supported catalogs (Poly Haven vs Sketchfab), so an agent can separate it from asset_import, asset_generate_3d, and assets_categories.
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 explicit selection guidance inside the tool: Poly Haven is the default and needs no setup, while Sketchfab requires integrations_set and is limited to type=model with license obligations. It doesn't explicitly name sibling alternatives or state when not to use the tool, but the setup and source-specific conditions are strong practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audio_generateGenerate 16-bit game audioAInspect
Synthesize deterministic 16-bit PCM WAV game audio as a job artifact: sfx presets (jump, coin, laser, explosion, powerup, hit, blip, pickup), win/lose jingles, or loopable BGM (exact-bar loops from bpm, bars, root, scaleMode, voice). Same payload + seed always returns identical bytes. The WAV arrives as an audio_wav artifact with a download URL in job_get.
| Name | Required | Description | Default |
|---|---|---|---|
| bpm | No | ||
| bars | No | bgm loop length, 4/4 bars | |
| root | No | C | |
| seed | No | ||
| pitch | No | sfx frequency multiplier | |
| voice | No | square | |
| preset | No | sfx: jump|coin|laser|explosion|powerup|hit|blip|pickup; jingle: win|lose | |
| audioKind | Yes | ||
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| scaleMode | No | major | |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key non-obvious behavior: output is deterministic given the same payload and seed, and the result is delivered as an audio_wav artifact with a download URL in job_get. Since no output schema exists, this is valuable; annotations only provide generic hints and nothing contradicts the description.
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 dense sentences front-load the purpose and parameter categories, with no filler. The lists are compact, and each sentence adds a distinct fact: what is generated, determinism, and how the artifact is delivered.
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-output-schema job tool, it covers the typical workflow: artifact and download URL in job_get, parameter scoping by audio kind, and deterministic guarantees. It could say more about the async job lifecycle, but the job_get reference is likely 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?
With only 45% schema description coverage, the description compensates by grouping the BGM parameters (bpm, bars, root, scaleMode, voice) and linking presets to sfx/jingles and seed to determinism. It doesn't exhaustively define every enum value, but it clarifies the main parameter relationships.
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 action (synthesize deterministic 16-bit PCM WAV), names the output artifact, and enumerates the three audio kinds: sfx presets, win/lose jingles, and loopable BGM. This clearly distinguishes it from asset_generate_3d and other resource-generating siblings.
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 concrete use cases and parameter groupings: sfx presets, jingles, or BGM loops, and notes exact-bar looping. It stops short of explicitly naming when-not-to-use alternatives, but the context is clear enough for an agent to select it for game-audio generation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audio_inspectInspect an audio artifactARead-onlyIdempotentInspect
Measure a checksum-verified owned PCM16 WAV without Blender compute: peak/RMS/DC, clipped samples, quiet frames, loop-boundary differences and bounded waveform. Optional previewSeconds returns up to three seconds as playable MCP audio. This measures samples; it does not listen, judge sound quality, measure LUFS or certify a seamless loop.
| Name | Required | Description | Default |
|---|---|---|---|
| artifactId | Yes | Artifact ID returned by a completed job or artifacts_list. | |
| previewSeconds | No | ||
| previewOffsetSeconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, and the description adds substantial context: ownership/checksum constraints, the exact measurement set, preview audio return behavior, and explicit limitations. 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 sentences with no filler: the first front-loads the core action, resource, and measurement list; the second compactly covers preview behavior and non-goals. Every sentence 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?
Covers purpose, measurements, preview behavior, and non-goals despite having no output schema. The main gaps are the undocumented previewOffsetSeconds parameter and lack of return-structure detail, but for a read-only inspection tool with strong annotations this is nearly 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?
Schema description coverage is only 33%, so the description must compensate. It clarifies previewSeconds ('returns up to three seconds as playable MCP audio') but leaves previewOffsetSeconds entirely unexplained in both the schema and the description, leaving a meaningful parameter without semantic 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 ('Measure') and resource ('checksum-verified owned PCM16 WAV'), then enumerates concrete metrics such as peak/RMS/DC, clipped samples, and loop-boundary differences. It also explicitly contrasts with non-goals ('does not listen, judge sound quality, measure LUFS or certify a seamless loop'), making it clearly distinguishable from siblings like audio_generate and artifact_get.
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 clear context: this tool is for measuring sample-level properties without Blender compute, and it explicitly lists exclusions such as not judging sound quality or measuring LUFS. However, it does not name a specific sibling tool to use instead, so the guidance is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_createCreate deploymentAInspect
Create a new isolated Blender deployment. Requires owner/admin in the target organization; defaults to your only organization when you have exactly one.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the new deployment. | |
| organizationId | No | Organization ID that will own the deployment. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| slug | Yes | |
| deploymentId | Yes | |
| endpointHint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the description doesn't need to restate those. It adds useful behavioral context: the permission requirement (owner/admin) and the organization defaulting behavior. It doesn't mention what the response contains, but an output schema exists, so that burden is reduced.
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?
One sentence, front-loaded with the action and resource, then the two most important usage constraints. 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?
For a create tool with an output schema and full parameter documentation, the description covers the key non-obvious context: permission requirements and organization defaulting. It doesn't explain what 'isolated' means or what happens on failure, but those are minor given the output schema and annotations.
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 both parameters. The description adds the organization defaulting behavior, which clarifies when organizationId can be omitted, but it doesn't add much beyond that. Baseline 3 is 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 states a specific verb ('Create') and resource ('new isolated Blender deployment'), and the title reinforces it. It distinguishes from siblings like deployment_update and deployment_delete by focusing on creation, and the 'isolated' qualifier adds specificity.
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 context: requires owner/admin in the target organization, and defaults to your only organization when you have exactly one. It doesn't explicitly name alternatives or when-not-to-use, but the permission and default behavior guidance is strong enough to guide correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_deleteDelete deploymentADestructiveInspect
Delete an EMPTY deployment (owner/admin only). Delete its projects first — a deployment with projects refuses.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | deployment slug |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive intent, but the description adds materially more: permission requirements, the empty-deployment precondition, and the refusal behavior when projects still exist. This tells the agent what to expect beyond the binary destructive flag.
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 no filler. The most important constraint (EMPTY) is front-loaded, and the precondition/refusal behavior is compressed into the second 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?
Given only one parameter, full schema coverage, an output schema, and annotations that cover destructive behavior, the description covers all necessary operational context: permission, precondition, and failure mode. Nothing essential is missing for an agent to invoke 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 coverage is 100%, with the single deployment parameter fully described as 'deployment slug' in the schema. The description adds no extra parameter details, but for a single self-explanatory parameter, the baseline of 3 is 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?
States a specific action ('Delete') on a specific resource ('deployment') with a critical qualifier ('EMPTY'), making its purpose unmistakable. It distinguishes itself from related deployment operations like deployment_create and deployment_update.
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 explicit preconditions: only owner/admin, only empty deployments, and that projects must be deleted first. It doesn't explicitly name an alternative tool, but the guidance clearly tells when not to invoke this tool directly and what to do instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_policy_updateUpdate deployment policyADestructiveInspect
Tune a deployment's execution policy over MCP: job timeouts, queue depth, render caps, batch size, and dangerousScriptingEnabled (unlocks scene_script — OWNER only; other fields need owner/admin). Values are validated against platform bounds; every change is versioned.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | deployment slug | |
| maxQueuedJobs | No | ||
| renderMaxWidth | No | ||
| renderMaxHeight | No | ||
| renderMaxSamples | No | ||
| jobTimeoutSeconds | No | ||
| maxConcurrentJobs | No | ||
| renderApprovalThreshold | No | width*height*samples above which renders need interactive approval; capped at the plan's renderMaxWidth*renderMaxHeight*renderMaxSamples | |
| maxOperationsPerMutation | No | ||
| dangerousScriptingEnabled | No | ||
| approvalRequiredForRestore | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| policyVersion | Yes | |
| scriptingEnabled | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description goes beyond them by adding concrete behavioral context: dangerousScriptingEnabled unlocks scene_script, permission levels are specified, values are validated against platform bounds, and every change is versioned. This meaningfully helps the agent anticipate side effects and reversibility.
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 front-load the tool's action and scope, then efficiently pack permissions, validation, and versioning behavior. There is no filler or redundant restatement of the schema.
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 destructive mutation tool, the description provides key permission and versioning context, but it omits explicit differentiation from deployment_update and leaves several parameter semantics ambiguous. It is adequate for basic invocation but not fully complete for correct agent decision-making.
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 only 18%, leaving most parameters undocumented. The description maps broad categories like job timeouts, queue depth, and render caps onto the schema, and explicitly explains dangerousScriptingEnabled, but it leaves parameters such as maxOperationsPerMutation, approvalRequiredForRestore, and maxConcurrentJobs unexplained. This does not sufficiently compensate for the low schema 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 description opens with a specific verb ('Tune') and clearly targets 'a deployment's execution policy', then enumerates the concrete policy dimensions. It differentiates itself from the generic deployment_update via this execution-policy scope, though it does not explicitly name or contrast the 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 description provides useful authorization context ('OWNER only', 'owner/admin') and implies the tool is for tuning execution policy, but it never explicitly states when to use this over deployment_update or when not to use it. Usage guidance is mostly implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployments_listList deploymentsARead-onlyIdempotentInspect
List every deployment this account can access. The session is bound to one deployment for project/scene/render tools; switch by adding ?deployment= to the endpoint URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| boundSlug | Yes |
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 useful behavioral context: the result is scoped to the account's accessible deployments, and the active deployment for other tool families can be switched via the ?deployment=<slug> query 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 sentences with zero waste: the core operation and scope appear first, followed by the session/query guidance. Every sentence earns its place without repeating schema or annotation details.
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 list operation with an output schema and full safety annotations, the description provides the essential extra context: account scope and the deployment-switching mechanism. Nothing needed to invoke the tool correctly 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 input schema has zero parameters, so the baseline is high. The description goes further by documenting an actionable URL-level switch, ?deployment=<slug>, which is not represented in the schema and is important for controlling which deployment subsequent tools act on.
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 opens with a concrete verb and object, 'List every deployment this account can access,' adding account-level scoping to the title. This makes it clearly distinct from deployment_create, deployment_update, and deployment_delete without needing to name 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?
It frames the tool as the way to enumerate all accessible deployments and connects this to the session-bound deployment concept, implying this list is used to discover the slug for other tools. It does not explicitly name alternatives, but the context is clear enough for an agent to select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deployment_updateUpdate deploymentADestructiveInspect
Rename or enable/disable a deployment (owner/admin only).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New human-readable deployment name, if changing it. | |
| disabled | No | Whether to disable this deployment for new work. | |
| deployment | Yes | deployment slug |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| slug | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutating nature is known. The description adds the permission requirement and the specific actions (rename, disable), which is useful context. However, it does not disclose side effects on existing work or how renaming affects references, though the annotation covers the core destructive trait.
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 a single, tightly written sentence that front-loads the primary actions and the permission gate. It contains no filler or redundant phrasing, earning top marks for conciseness and structure.
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 update tool with an output schema present, the description adequately covers the core operation and the critical permission restriction. It does not mention preconditions like the deployment existing, but that is implicitly required and not a significant gap for this tool's 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?
The input schema already documents all three parameters with descriptions (100% coverage), including the semantic meaning of 'name' and 'disabled'. The description does not add any additional parameter-level detail beyond what the schema provides, so it meets the baseline of 3.
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 specifies the exact operations (rename or enable/disable) on the deployment resource, and clearly states the owner/admin permission requirement. This distinguishes it from sibling tools like deployment_create and deployment_delete without needing to inspect 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 description provides a clear authorization constraint (owner/admin only) but does not explicitly mention when to use this tool versus alternatives like deployment_policy_update or deployment_create. The intended use is implied by the actions, but no explicit 'use this when' guidance or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_bpy_lookupLook up Blender Python API docsARead-onlyIdempotentInspect
Verify bpy signatures, properties, and enum values BEFORE writing scene_script code — authoritative reference from Blender's own documentation. Accepts dotted identifiers ("bpy.types.Object", "bpy.ops.mesh", "bpy.types.Object.location", "bmesh.types.BMEdge.is_manifold" or "BMFace.calc_area"), "X." to list a namespace's children, or "" for top-level modules. Unknown names return did-you-mean suggestions. Ask for a NODE TYPE ("ShaderNodeMix", "GeometryNodeTriangulate", "ShaderNodeValToRGB") and the reply also carries that node's real input/output socket names, the exact strings each menu socket accepts, and which sockets are hidden for the current mode — read off the pinned Blender build, because the API reference documents node properties and never lists sockets. That is the detail shader and geometry-node code cannot guess.
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Exact Blender Python API identifier to look up. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| content | No | |
| children | No | |
| sourceUrl | No | |
| identifier | Yes | |
| suggestions | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it mentions did-you-mean suggestions for unknown names, the extra node socket details, and the fact that it reads from a 'pinned Blender build' because the official API reference omits socket lists. This goes beyond the structured metadata without contradicting it.
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 dense but not bloated. Each sentence contributes: purpose, accepted input formats, unknown-name behavior, node-type special behavior, and the reasoning behind the node detail. The purpose is front-loaded in the first clause. Slightly long, but every part 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?
The tool has moderate complexity (special node-type handling) but the description fully covers input scenarios and the extra node info. An output schema exists, so return format is presumably documented there. The description doesn't mention authentication or rate limits, but those are not implied as needed. An agent knows exactly when to call and what to expect.
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% (the single 'identifier' param is described simply as 'Exact Blender Python API identifier'). The description massively expands on this by specifying accepted formats (dotted identifiers, wildcards like 'X.*', '*' for top-level, node type names) and what each returns. This is exactly the value the description should add 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 states a specific verb and resource: 'Verify bpy signatures, properties, and enum values' — clearly distinguishing it from sibling tools like docs_bpy_search (which likely searches) and docs_manual_get (which fetches manual pages). It also gives concrete input examples ('bpy.types.Object', 'bmesh.types.BMEdge.is_manifold'), making the purpose 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 explicitly says to use it 'BEFORE writing scene_script code', providing a clear workflow context. It also explains the special node-type query path that returns socket names and hidden sockets, which isn't obvious. However, it doesn't explicitly contrast with docs_bpy_search or state when to use that alternative, so it's clear but not fully explicit about 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.
docs_bpy_searchSearch Blender Python API docsARead-onlyIdempotentInspect
Keyword search over every documented bpy identifier ("subsurf modifier", "shader node emission", "keyframe insert"). Returns ranked identifiers for docs_bpy_lookup. Also matches nodes by their UI label, so "color ramp" finds ShaderNodeValToRGB.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matching API entries to return. | |
| query | Yes | Search terms for Blender Python API documentation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, so the description adds value beyond structured data by disclosing the UI-label alias behavior ('color ramp' finds ShaderNodeValToRGB) and ranking of results. It doesn't introduce any hidden side effects or contradictions.
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 efficient sentences with no filler. The core purpose and scope are front-loaded, examples are embedded compactly, and the special UI-label behavior is appended as a valuable clarification.
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 search tool with a fully documented 2-parameter schema and an output schema, the description covers purpose, query semantics, special matching behavior, and how results relate to a sibling tool. Nothing critical is missing for correct selection and 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 100%, so the baseline is 3, but the description enriches the query parameter's meaning by showing that matching is not only over identifiers but also over node UI labels. It also implies the query string expects human-readable terms like 'subsurf modifier' rather than raw 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?
The description states a specific verb and resource: 'Keyword search over every documented bpy identifier'. It distinguishes itself from the sibling docs_bpy_lookup by explicitly positioning itself as the search step that feeds lookup, and from docs_manual_search by limiting scope to bpy API identifiers.
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 indicates this tool should be used to find bpy identifiers, and that results are meant for docs_bpy_lookup. It provides concrete query examples and notes UI-label matching behavior, but it does not explicitly state when not to use it versus the manual search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_manual_getRead a Blender manual pageARead-onlyIdempotentInspect
Fetch one Blender manual page in full by its path (from docs_manual_search). Source: blender.org, CC-BY-SA 4.0.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Manual page path returned by docs_manual_search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| title | Yes | |
| content | Yes | |
| truncated | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this tool safe (readOnlyHint=true, idempotentHint=true, destructiveHint=false). The description adds useful behavioral context beyond annotations by stating it retrieves the page 'in full' and by identifying the source and license (blender.org, CC-BY-SA 4.0), which is relevant for reuse.
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?
A single concise sentence contains the verb, resource, scope, and path source, followed by licensing information. No filler or redundancy; every phrase 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 one-parameter, read-only tool with a rich output schema and complete annotations, the description fully covers what an agent needs: what it fetches, how to identify the resource, and the license terms. Nothing essential 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%, with the path parameter already documented as 'Manual page path returned by docs_manual_search.' The description reinforces this but adds no new semantic detail beyond what the schema provides. Baseline of 3 is 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 states a specific verb ('Fetch'), a precise resource ('one Blender manual page in full'), and the required mechanism ('by its path'). It also references docs_manual_search, which distinguishes it from sibling docs tools like docs_bpy_search and docs_operations.
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 clearly implies the intended workflow: first use docs_manual_search to obtain a path, then call this tool with that path. It provides clear context but does not explicitly name alternatives or state when not to use it. No exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_manual_searchSearch the Blender manualARead-onlyIdempotentInspect
Search the Blender user manual full-text for conceptual questions: how modifiers behave, shading/physics/animation workflows, feature constraints. Returns ranked pages with snippets; read one with docs_manual_get.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum matching manual pages to return. | |
| query | Yes | Search terms for the Blender manual. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds relevant behavioral context beyond that: full-text search, ranked results, snippets, and the recommended next step. There is 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?
The description is two sentences with the core action and scope front-loaded, followed by concrete output expectations and a routing instruction. Every sentence earns its place and there is no redundancy or padding.
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 low-complexity search tool, the description, full schema, and rich annotations cover the main invocation need: what to query, what to expect in return, and how to proceed. It is minimally incomplete only in not explicitly warning that Blender API/symbol lookups belong with docs_bpy_search.
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 fully documents both query and limit. The description adds no additional parameter-level meaning such as query syntax, ranking behavior, or limit tradeoffs; the baseline of 3 is 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 and resource ('Search the Blender user manual full-text') and narrows the purpose to conceptual questions about modifiers, shading, physics, animation, and constraints. This clearly distinguishes it from API-reference siblings like docs_bpy_search and from the read tool docs_manual_get.
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 clear context for when to use the tool: for conceptual manual questions, and it explicitly instructs the agent to follow up with docs_manual_get to read a result. It does not explicitly name docs_bpy_search as the alternative for API/symbol lookup, so it falls just 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.
docs_operationsBrowse the scene-operation DSLARead-onlyIdempotentInspect
Enumerate and inspect the validated operations scene_apply accepts — call this BEFORE reaching for scene_script. The DSL is large (mesh editing, booleans, lathe/loft/sweep, curves, UV unwrap, modifiers, materials, lights, cameras, render settings, geometry nodes, batch and query ops), so most modelling does NOT need raw bpy. No args: every namespace with counts. guide=true (or op="guide" for older connector catalogs): full operating guide. namespace="mesh": that namespace's operations. Repeated details are object.radial_array or object.array_along_curve (no "pattern" namespace). Use world.update for the environment; validation is the separate scene_validate tool. search="boolean": ranked matches. op="mesh.bevel": the full JSON Schema with types, ranges and defaults. Schemas are introspected from the validator itself, so they are always exactly what scene_apply will accept. Full schemas are returned once in structuredContent; format="text" returns them in text instead. This tool is READ ONLY and free — it queues no job, spends no compute and changes nothing — so it is always safe to retry, including after a transport-level error.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | Exact operation name for full parameter detail, e.g. "mesh.bevel"; "guide" reads the operating guide on older clients | |
| guide | No | Read the full onboarding and operating guide | |
| limit | No | Maximum operation matches to return (1–120). | |
| format | No | Return the full schema/guide once: structuredContent by default, or text for consumers without structured results | structured |
| search | No | Keyword search across operation names, parameters, and capabilities | |
| namespace | No | List one namespace, e.g. "mesh", "curve", "camera", "light" |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| guide | No | |
| schema | No | |
| namespaces | No | |
| operations | No | |
| totalOperations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, but the description goes further: it says the tool 'queues no job, spends no compute and changes nothing' and is 'always safe to retry, including after a transport-level error'. It also explains that schemas are introspected from the validator itself, so results exactly match what scene_apply accepts. This is rich behavioral context beyond the annotations and does not contradict them.
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 long but every sentence earns its place: the primary use is front-loaded, alternatives and exclusions are stated early, and each optional parameter's behavior is covered efficiently. The 'READ ONLY and free' safety note is a deliberate closing signal. No filler or redundant restatement of schema fields.
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?
The tool has six optional parameters, an output schema, and several sibling tools, but the description covers all necessary invocation patterns, special values, result formats, and the caveat about repeated-detail namespaces. It also explains the tool's cost/safety profile, which matters for an agent deciding whether to retry. An agent has everything needed to select and call this tool 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 coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: it explains op='guide' compatibility with older catalogs, what namespace='mesh' does, the caveat that repeated details live under object.radial_array rather than a 'pattern' namespace, and that search returns ranked matches. It also clarifies the format parameter's relationship to structuredContent, which adds real value for an agent choosing how to consume results.
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: 'Enumerate and inspect the validated operations scene_apply accepts'. It also distinguishes the tool from siblings by saying 'call this BEFORE reaching for scene_script' and noting most modeling does not need raw bpy, which separates it from the docs_bpy tools. No ambiguity about what the tool is for.
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 names when to use the tool (before scene_script), when not to use raw bpy, and which sibling handles adjacent concerns ('validation is the separate scene_validate tool'). It also gives concrete conditional usage: guide=true for the guide, namespace for a namespace, search for ranked matches, op for a schema. This leaves little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_createCreate exportAInspect
Export a revision to GLB, OBJ, STL, or .blend. enginePreset applies target-engine conventions and overrides yUp/scaleFactor: unity and godot (GLB, Y-up, meters), print (STL scaled ×1000 AND Z-up, because slicers read raw units as millimeters and orient Z-up — the preset is the whole print convention, not just the scale), unreal (GLB converted by UE on import; OBJ/STL scaled ×100 to centimeters). Selection is resolved against the exported revision before dispatch and the response lists exactly which objects were selected — broken down by type, so a stray curve or empty is visible — and a stale id or an empty match fails loudly instead of silently shipping an incomplete file. Curves with no bevel or extrude carry no surface and are skipped (named in the response) unless you pass them in objectIds. Returns a durable job handle; the file becomes an immutable artifact.
| Name | Required | Description | Default |
|---|---|---|---|
| yUp | No | ||
| format | Yes | ||
| bakeSize | No | ||
| objectIds | No | Platform ids, with selectionPolicy=objects. NOTE: ids are datablock-scoped — deleting and recreating an object mints a NEW id, so a list gathered before an edit can go stale. Prefer objectNamePattern, which is resolved fresh at dispatch. | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| revisionId | No | "HEAD" (default) uses the project's current head | HEAD |
| scaleFactor | No | ||
| bakeLighting | No | GLB only: bake the full rendered shading, lights included, into UNLIT emissive textures. The trade is view dependence, and it is not subtle: the bake stores one sample of the shading per surface point, so specular highlights stop moving with the camera, reflections and glass stop responding to their surroundings, and anisotropic or clearcoat sheen becomes a fixed painted shape. It looks correct from the baked viewpoint and drifts as the viewer orbits. Right for a dark or rig-driven scene a web viewer cannot relight, WRONG for a turntable of a metal or glass product — use bakeTextures for that, which bakes procedural material values and leaves lighting to the viewer. | |
| bakeOverflow | No | When eligible objects exceed bakeObjectLimit, error stops before any bake. partial explicitly permits an incomplete bake while retaining all selected geometry; exportVerification.bakeSummary reports completed and omitted counts. | error |
| bakeTextures | No | GLB only: bake procedural (node-driven) materials to textures before export so viewers keep the rendered look. Meshes without UV layers are unwrapped automatically first, which is slow on many-part assemblies (the response says so, and the job reports per-object bake progress). Only procedural, node-driven values are lost when this is off: materials with constant base colour, metallic and roughness export correctly unbaked, so false is the right choice for most hard-surface work. | |
| enginePreset | No | ||
| applyModifiers | No | ||
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| bakeObjectLimit | No | Maximum eligible GLB objects to bake. Default 24; raise up to 512 for assemblies. The per-job budget is 67,108,864 object texture pixels: 446 objects fit at bakeSize=256. | |
| selectionPolicy | No | all | |
| excludeObjectIds | No | Drop these specific platform ids. Applied after the other selectors. | |
| objectNamePattern | No | Select by Blender object name with * wildcards, e.g. "Watch_*" or "*_Link". Resolved against this revision at dispatch, so it cannot go stale like objectIds. Combined with selectionPolicy (visible + pattern selects visible matches). | |
| excludeNamePattern | No | Drop objects whose name matches, e.g. "Studio_*". Applied after the other selectors. Omitting one backdrop from a 60-part scene previously meant enumerating 60 explicit ids, which is both tedious and stale-prone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes | |
| yUp | Yes | |
| selection | Yes | Resolved runner selection policy; this field is a string, not a selection object. |
| revisionId | Yes | |
| scaleFactor | Yes | |
| selectedCount | Yes | Number of selected objects when the revision summary is available; null means unknown. |
| expectedCounts | Yes | |
| selectedObjectIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the four boolean annotations: it discloses that selection is resolved against the exported revision, the response lists selected objects by type, stale ids fail loudly, curves without surfaces are skipped, a durable job handle is returned, and the file becomes an immutable artifact. These are exactly the behavioral traits an agent needs to predict side effects.
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 dense but every clause earns its place: purpose is front-loaded, then engine conventions, selection failure behavior, curve handling, and the durable artifact output. For an 18-parameter tool, the length is justified and there is 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?
Given the tool's complexity, the existing output schema, and the presence of defaults in the input schema, the description covers the essential operational context: formats, engine presets, selection semantics, failure modes, and async job behavior. Nothing critical for invoking it correctly appears to be 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?
With only 61% schema description coverage, the description meaningfully compensates by explaining enginePreset behavior in detail (overrides yUp/scaleFactor; print's Z-up/mm convention; unreal scaling), bake trade-offs, and selection/curve edge cases. It does not directly address every remaining parameter, but the decision-critical parameters are substantially enriched.
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 opening sentence names a specific verb and resource: 'Export a revision to GLB, OBJ, STL, or .blend.' The export formats and verb clearly separate this tool from siblings like render_create and asset_generate_3d, so an agent can identify it 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?
The description gives clear context for when to use it — when a revision needs to be exported to specific file formats — and then gives concrete decision guidance for engine presets and bake modes. It does not explicitly contrast against sibling tools such as render_create, but the context is strong enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_prompt_assistPrepare an image-generation prompt for 3D workARead-onlyIdempotentInspect
Plan a source image for surfaces, decals, model references, trim sheets, atlases, environments or animation. Returns a prompt and upload/material steps; the harness calls its own available image tool. Does not generate an image or spend Blender compute.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | The actual desired image, appearance, and constraints. | |
| layout | No | Requested trim bands or atlas grid; verify the manifest against actual output pixels. | |
| target | Yes | ||
| palette | No | ||
| purpose | Yes | ||
| workflow | No | ||
| animation | No | ||
| resolution | No | Requested generator output, not a claim about returned pixels. | |
| aspectRatio | No | Requested width:height ratio; provider support remains a prerequisite. | |
| knownDefects | No | ||
| requiredText | No | ||
| transparency | No | ||
| materialClass | No | ||
| referenceView | No | ||
| spatialTiling | No | none | |
| requestedMapRoles | No | ||
| harnessCapabilities | No | Only capabilities already known to the caller. Omission stays unknown. | |
| physicalCoverageMeters | No | Width and height of the real surface represented by one image. | |
| subjectDimensionsMeters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior. The description adds meaningful behavioral context: it returns a prompt and upload/material steps, delegates image generation to the harness, and does not consume Blender compute. This goes beyond the annotations without contradicting them.
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 three tight sentences with no filler. It front-loads the core purpose in the first sentence, then efficiently adds the return behavior and the key non-behavior (no image generation, no Blender compute).
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?
The description covers high-level purpose and safety-relevant behavior, but it is thin for a tool with 19 parameters, nested objects, and no output schema. The return value is only vaguely described as 'a prompt and upload/material steps,' with no detail on output structure or how to translate inputs into those steps.
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?
With 19 parameters and only 32% schema description coverage, the description needed to compensate by explaining how to choose or fill key fields like purpose, workflow, layout, or requestedMapRoles. It does not mention any parameter semantics beyond listing use categories, so most of the parameter burden remains on an under-covered 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 uses a specific verb ('Plan') and resource ('source image'), enumerates concrete use cases, and explicitly differentiates itself from generation by stating the harness calls its own image tool. This clearly distinguishes it from sibling tools like asset_generate_3d or render_create.
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 a clear context and scope: planning source images for surfaces, decals, trim sheets, animation, etc. It also states what the tool does not do, implying when it isn't appropriate. However, it never explicitly names alternative tools or says 'use X instead,' so the routing guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_deleteRemove a source integrationADestructiveInspect
Delete a stored third-party source token. Requires owner/admin.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Configured integration to remove. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds valuable context by specifying that the operation deletes a stored token and requires owner/admin permissions, which goes beyond the annotations. No contradictions exist.
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 sentences with zero redundancy. The core action is front-loaded ('Delete a stored third-party source token'), and the permission note is placed immediately after. Every word 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 simple delete operation with one parameter and a destructive hint already set, the description covers the essential information: what is deleted and who can do it. The existence of an output schema reduces the need to describe return values, making this fairly complete. A minor omission is not explicitly stating that deletion is irreversible, but that is implied by destructiveHint.
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 is only one parameter (provider) and its description in the schema ('Configured integration to remove.') is clear and covers 100% of the schema. The tool description does not add any additional meaning about the parameter, so the baseline of 3 is appropriate since the schema handles it well.
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 clearly states a specific verb (delete) and resource (stored third-party source token), which distinguishes it from integrations_set and integrations_list. The title 'Remove a source integration' reinforces the action.
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 mentions the access prerequisite (owner/admin) but does not provide any guidance on when to use this tool versus alternatives like integrations_set or integrations_list. No explicit exclusions or comparisons to sibling tools are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_listList source integrationsARead-onlyIdempotentInspect
List configured third-party source integrations (masked hints only, never tokens).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds context beyond those annotations by disclosing that the tool returns masked hints only, never tokens, and that it lists only configured integrations. This is valuable behavioral information that prevents incorrect assumptions about the output.
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 a single sentence with zero filler. It front-loads the core action and resource, then immediately provides the security-relevant output constraint ('masked hints only, never tokens'). Every word 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?
Given the presence of an output schema, zero parameters, and annotations that fully cover the safety profile (read-only, idempotent, non-destructive), the description is complete. The masking note clarifies a crucial aspect of the return value, so nothing an agent needs to invoke this tool correctly 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 has zero parameters, and the input schema is an empty object with coverage effectively at 100%. The baseline for zero-parameter tools is 4, and there are no parameter details to explain. The description's mention of output masking covers what the tool returns, not parameters, which is 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 uses a specific verb ('List') and resource ('configured third-party source integrations'), making it immediately clear what this tool does. It also adds a crucial qualifier ('masked hints only, never tokens') that differentiates it from other integration operations and sets expectations about output. This fully distinguishes it from siblings like integrations_set and integrations_delete.
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 explicitly states the purpose, which signals when to use the tool: when an agent needs to view configured source integrations. It does not name alternatives, but no sibling tool provides the same listing function (integrations_set and integrations_delete are mutators, not alternatives). Clear context with no exclusions earns a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
integrations_setConfigure a source integrationADestructiveInspect
Store a third-party source API token for the organization (encrypted at rest). Requires owner/admin. provider=sketchfab: token from sketchfab.com/settings/password (enables model download/import). provider=hyper3d: Rodin key from hyper3d.ai (enables asset_generate_3d). provider=hunyuan3d: Tencent Cloud credentials as "SecretId:SecretKey" (enables Hunyuan text/image→3D). provider=tripo3d: key from platform.tripo3d.ai (enables Tripo text/image→3D).
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | Provider-issued API token used for this integration. | |
| provider | Yes | External asset-generation or model-provider integration to configure. |
Output Schema
| Name | Required | Description |
|---|---|---|
| provider | Yes | |
| tokenHint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description adds valuable context beyond annotations: tokens are encrypted at rest, owner/admin permission is required, and provider-specific integrations are enabled. It does not explicitly say that setting a token overwrites an existing one, but the destructive hint covers that risk.
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 front-loaded with the core action and security context, then organized by provider with consistent formatting. Every sentence adds useful information—there is no filler or redundant restatement of the tool name or schema.
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-parameter tool with full schema coverage and an output schema, the description is complete: it covers permission requirements, encryption, provider-specific token sources, and downstream effects. An agent has everything needed to call the tool correctly without additional documentation.
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?
While schema coverage is 100%, the description adds significant meaning by mapping each provider enum value to its token source and the feature it enables. This goes well beyond the schema's generic 'Provider-issued API token' and helps the agent construct correct values.
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 action ('Store a third-party source API token') with the resource scope ('for the organization') and encryption detail. It clearly differentiates from sibling tools like integrations_delete and integrations_list by focusing on configuration/setup rather than removal or listing.
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 context: it requires owner/admin and explains when each provider token should be used by linking providers to enabling specific features. It does not explicitly mention when not to use the tool or name alternatives, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_cancelCancel jobADestructiveInspect
Request cooperative cancellation of an open job; terminal jobs reject it.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Durable job ID returned when an asynchronous operation is queued. | |
| reason | No | Optional reason recorded when cancelling the job. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Durable job ID returned when an asynchronous operation is queued. |
| status | Yes | |
| cancelAccepted | Yes | |
| cancelRequested | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already flag destructive behavior, but the description adds value by explaining that cancellation is cooperative and that terminal jobs reject it. This tells an agent the operation is not forcibly terminating and may depend on job state.
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 a single sentence with no filler. The core action and the key caveat about terminal jobs are both front-loaded, making it easy for an agent to parse quickly.
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-parameter cancellation tool with destructive annotations and an output schema, the description captures the essential semantics: cooperative cancellation and the terminal-job rejection behavior. It could elaborate on what 'open' means or what happens after cancellation, 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% for both parameters, so the schema already documents jobId and reason. The description adds no parameter-specific detail, which is acceptable at the baseline given comprehensive schema 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?
The description uses a specific verb ('cancel') and resource ('job'), and adds meaningful nuance: it requests cooperative cancellation and open jobs are the target while terminal jobs reject it. It does not explicitly call out a sibling tool, so it stops short of full differentiation.
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 context: use it for open jobs, not terminal jobs, which reject cancellation. However, it does not explicitly describe alternatives such as job_wait, job_get, or job_report, or state when those would be preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_getGet jobARead-onlyIdempotentInspect
Get a job's status, progress, ordered events, and — when terminal — results (revision, artifacts with download URLs).
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Durable job ID returned when an asynchronous operation is queued. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral nuance beyond annotations: events are ordered, and results are only present when the job is terminal, including revision and artifact download URLs.
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?
A single sentence packs the core action, the exact queryable data, and the terminal-condition nuance without filler or redundancy. The most important information is front-loaded, and 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 single-parameter, read-only, idempotent tool with no output schema, the description is complete. It explains what the endpoint returns, including the terminal-only results qualification, so an agent can correctly invoke it and interpret the response without additional context.
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 jobId parameter is fully documented in the schema. The description adds no independent parameter-level information beyond referring to 'a job', which is acceptable given the schema already explains the durable ID 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 specific action ('Get') and resource ('a job'), then enumerates exactly what the tool returns: status, progress, ordered events, and terminal results. This clearly distinguishes it from sibling tools like jobs_list or job_report, which an agent can infer are broader or differently scoped.
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 provides clear context for when to use this tool: whenever a caller needs a job's status, progress, ordered events, or terminal results. It does not explicitly name alternatives or exclusion cases, but the precise return-value list makes intended usage apparent relative to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
job_reportRead complete job report pagesARead-onlyIdempotentInspect
Read bounded pages from a completed job's immutable report_json artifact. section=summary returns complete aggregate counts and actual coverage without loading all object details. Default is issues for validation and summary for scene_apply/export. Sections issues, objects (basic evaluated topology), printObjects, operationResults, operationEffects, operationWarnings, exportMaterials, and exportObjects return ordered records: offset counts records, limit caps each page (the byte budget may return fewer). section=report retrieves ALL original JSON as UTF-8 text chunks: offset then counts bytes; concatenate jsonText in order. Follow continuation verbatim, including artifactId, until complete=true for that section. An oversized record returns reportState=truncated with a section=report continuation; no record is silently shortened. Only ready + complete + total=0 means an empty section. Pending, failed, cancelled, missing, incomplete and truncated are distinct and never mean validation passed. The response pins project/revision/artifact identity. artifact_get remains available to download the complete file.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Durable job ID returned when an asynchronous operation is queued. | |
| limit | No | Maximum records in this report page. | |
| offset | No | Starting offset for the selected report section or byte stream. | |
| filters | No | Issues only. Match severity, any listed object, and any listed code; original issue order is retained. | |
| section | No | Report section to page; report streams the full JSON by byte offset. | |
| filterId | No | Continuation filter identity; follow the returned continuation verbatim. | |
| artifactId | No | Pin continuation to the preceding page's immutable artifactId. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Durable job ID returned when an asynchronous operation is queued. |
| total | No | |
| offset | Yes | |
| entries | No | |
| section | Yes | |
| complete | Yes | |
| jsonText | No | |
| jobStatus | Yes | |
| projectId | Yes | |
| artifactId | No | Artifact ID returned by a completed job or artifacts_list. |
| nextOffset | No | |
| revisionId | Yes | |
| reportState | Yes | |
| continuation | No | |
| artifactRevisionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context beyond annotations: pagination semantics (offset counts records vs bytes), continuation requirements (follow verbatim until complete=true), truncation behavior (oversized record returns reportState=truncated, no silent shortening), and the meaning of distinct states (pending/failed/etc. never mean validation passed). This is rich, non-obvious behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place. It front-loads the core purpose, then covers section semantics, pagination, continuation, truncation, empty states, and the sibling alternative. It is longer than ideal, but the tool is genuinely complex (10 sections, two pagination modes, continuation protocol), so the length is justified. Minor redundancy: 'no record is silently shortened' restates the truncation behavior already described.
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?
Given the tool's complexity (7 parameters, 10 enum sections, nested filters, output schema present), the description covers everything an agent needs to call it correctly: section selection, pagination units, continuation protocol, truncation handling, empty-section semantics, state interpretation, and the fallback alternative. The output schema exists, so return-value details are already structured. 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 description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining how offset/limit behave differently per section (records vs bytes), how filters apply to issues only, and how filterId/artifactId function as continuation pins. It doesn't enumerate every parameter, but the schema already does that; the description clarifies the semantics that the schema leaves implicit.
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 opens with a specific verb and resource: 'Read bounded pages from a completed job's immutable report_json artifact.' It then enumerates the distinct sections and their semantics, which clearly differentiates this tool from siblings like artifact_get and job_get. The title 'Read complete job report pages' is reinforced with concrete detail about what each section 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?
The description explicitly states when to use this tool versus alternatives: 'artifact_get remains available to download the complete file.' It also gives section-specific guidance ('Default is issues for validation and summary for scene_apply/export'), explains continuation semantics, and clarifies empty-section conditions. This is comprehensive routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
jobs_listList jobsARead-onlyIdempotentInspect
List the deployment's jobs, paginated; filter by project or status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per page, 1-50. Default 20; values above 50 are rejected. | |
| cursor | No | Opaque token — copy nextCursor VERBATIM from the previous response. NOT a row offset: "50" is rejected. (scene_inspect and artifacts_list do take integer offsets; this tool and projects_list are keyset-paginated and do not.) | |
| status | No | Optional job state to filter the results. | |
| projectId | No | Stable project ID returned by project_create or projects_list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| nextCursor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, non-destructive, and idempotent. The description adds pagination and filtering context, but those are also visible from the schema. It does not significantly disclose behavior beyond the structured annotation and schema already provided.
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 a single, compact sentence that front-loads the core action and includes the two key filtering capabilities. Every word earns its place with no redundancy.
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 list tool, the description covers scope, pagination, and filtering. With a full output schema, complete parameter descriptions, and safe read-only annotations, nothing essential is missing; only explicit alternative routing keeps it from being fully 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?
Schema description coverage is 100%, so the parameters are already well documented. The description confirms that projectId and status are filters, but it does not add meaning beyond the existing schema parameter 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?
The description names a specific verb and resource: 'List the deployment's jobs, paginated; filter by project or status.' This clearly distinguishes it from single-job tools like job_get, but it does not explicitly name sibling alternatives, 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?
The description implies its use for browsing jobs and mentions filtering, which gives clear context. However, it does not state when to prefer this over job_get, job_report, or other job-related tools, nor does it explain 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.
job_waitWait for a jobARead-onlyIdempotentInspect
Long-poll a job until it reaches a terminal state or the timeout elapses. Default 90s, which is what a cold-starting Blender container usually needs; up to 300s is accepted but read the parameter note first, because a long single call trades round trips for connection risk. Cheaper than a job_get loop; chain calls for longer jobs, or register a webhook (webhooks_set) and stop polling altogether. Validation results include a complete aggregate report summary plus exact job_report continuations; result retains the compatible inline sample. Inspect report.inlineComplete and coverageComplete; truncated details or skipped checks never establish full coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | Durable job ID returned when an asynchronous operation is queued. | |
| timeoutSeconds | No | Seconds to hold the connection open. 90 (default) is deliberately under the ~100s idle timeout common to HTTP proxies; values above that are allowed for direct connections but may return a transport error instead of a result. For jobs that genuinely take minutes, chain 90s calls or use webhooks_set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Durable job ID returned when an asynchronous operation is queued. |
| report | Yes | |
| result | Yes | |
| status | Yes | |
| terminal | Yes | |
| waitedMs | Yes | |
| artifacts | Yes | |
| errorCode | Yes | |
| progressPct | Yes | |
| errorMessage | Yes | |
| statusMessage | Yes | |
| resultRevisionId | Yes | |
| resultArtifactIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior; the description adds meaningful extra context about connection risk, timeout tradeoffs, and the validation-result caveat. 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?
Core behavior and defaults are front-loaded, and every sentence contributes operational value. It is slightly dense with specialized clauses, but not 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?
Covers behavior, default, limits, alternatives, risks, and key result conditions. With an output schema already present, nothing an agent needs to call it correctly 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%, and both parameters are already well documented there. The description adds the cold-start rationale for the 90s default but does not need to carry much 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?
States a specific verb and resource: long-poll a job until a terminal state or timeout. It also clearly differentiates itself from job_get loops and webhooks, so an agent can select it confidently.
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 says this is 'Cheaper than a job_get loop' and instructs chaining calls or using webhooks_set for longer jobs. This gives concrete when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material_from_imageGenerate PBR maps from an imageAInspect
Turn ONE uploaded image (e.g. a logo PNG) into a full PBR material — deterministic, no AI. A mask (alpha channel, or bright/dark regions) drives derived roughness (baseRoughness/maskRoughness), embossed normal + height maps, optional metallic, and a base color composited over baseColor. Commits a new revision with the material (applyToObjects assigns it); maps pack into the .blend. Generated maps cap at 2048px on the longest edge — for full-resolution label/print work (4K macro shots), embed the original texture in a GLB and import via asset_import. Flow: upload_create → PUT → upload_complete → material_from_image. Returns a durable job handle. Explicit profile=surface/decal/supplied opts into the version-2 downloadable map workflow with roles and options; legacy mask/emboss arguments apply only when profile is omitted. Decals preserve transparency without implicit relief or metallic.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | ||
| emboss | No | ||
| assetId | Yes | ||
| options | No | ||
| profile | No | ||
| baseColor | No | ||
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| maskSource | No | alpha | |
| baseMetallic | No | ||
| maskMetallic | No | ||
| materialName | No | Image Material | |
| baseRoughness | No | ||
| maskRoughness | No | ||
| applyToObjects | No | ||
| baseRevisionId | No | "HEAD" (default) targets the project's current head. Mutations MUST build on the head: passing an older revision is rejected with REVISION_CONFLICT, since history is linear. To continue from an older scene, revision_restore it forward first. | HEAD |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation/safety profile, yet the description adds substantial non-obvious behavior: deterministic processing, a committed new revision, a durable async job handle, a 2048px cap on generated maps, and profile-gated argument semantics. None of this is recoverable from the annotations or schema. No contradiction with idempotentHint=false — the idempotencyKey is a caller-supplied retry guard, not a tool-level idempotency claim.
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 core purpose before the pipeline and profile branching, and every clause carries information (flow, cap, alternatives, legacy-vs-v2 gating). It is dense and long, but not padded — a slightly tighter packaging of the options/profile paragraph would help.
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?
An output schema exists, so return values need no explanation, and the description covers the decision-critical elements: prerequisites, alternatives, resolution limits, and profile behavior. The remaining gap is per-option semantics for the nested options object, which neither schema nor description closes.
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?
With schema description coverage at 19% across 16 params and a 17-key nested options object, the description must carry the load. It explains meaningful semantics for maskSource, baseRoughness/maskRoughness, baseColor, emboss, profile, and roles, but leaves tiling, packing, seamMode, alphaMode/cutoff, normal conventions, displacementMode, and physicalCoverageMeters entirely to the bare schema. Partial compensation, not full.
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 ('turn ONE uploaded image into a full PBR material') and adds a distinguishing constraint ('deterministic, no AI'), which separates it cleanly from sibling material_from_maps and asset_import. An agent knows exactly what this produces 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?
Gives an explicit prerequisite pipeline (upload_create → PUT → upload_complete → material_from_image) and an explicit exclusion with a named alternative: for 4K label/print work use asset_import instead. It also states when legacy mask/emboss args apply (only when profile is omitted). This is textbook 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.
material_from_mapsApply a texture package as a materialBDestructiveInspect
Create a material from a completed textureJobId or validated role-labeled images. Uses explicit UVs, alpha and normal settings; applyToObjects assigns slot zero, assignments targets explicit slots. Commits one revision after validating all targets. Existing UVs are preserved. Returns a durable job plus complete map artifacts on completion.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | ||
| options | No | ||
| profile | No | surface | |
| uvLayer | No | ||
| uvScale | No | ||
| projectId | Yes | ||
| sourceMaps | No | ||
| assignments | No | ||
| materialName | No | Image Material | |
| textureJobId | No | ||
| sourceAssetId | No | ||
| applyToObjects | No | ||
| baseRevisionId | No | HEAD | |
| idempotencyKey | Yes | Caller-chosen key. Replaying it with IDENTICAL input returns the EXISTING job instead of queueing a second one — a restarted driver adopts its own in-flight work rather than duplicating or orphaning it. Vary the key to force a new job. Full semantics: the same key with DIFFERENT input is rejected with IDEMPOTENCY_CONFLICT (never silently replayed, so a stale result cannot be mistaken for a fresh one). A key is recorded only once a job is actually created, so a request rejected beforehand (validation, APPROVAL_REQUIRED, quota) leaves the key unused and free to reuse. A key bound to a job keeps resolving to that job even after it fails or is cancelled — use a NEW key to genuinely retry cancelled work. Keys live 48 hours and are scoped per principal+deployment+operation, which means they SPAN SESSIONS: a plain descriptive key like "hero-final-1024-v1" will collide with your own run from yesterday and be rejected. Include a project id or a timestamp. This scope used to be stated only in the conflict error, i.e. after the round trip it cost — a field build lost two that way, ~34 hours after unrelated work had taken the same names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: it commits a single revision only after validating all targets, preserves existing UVs, and explains slot semantics (applyToObjects writes slot zero while assignments target explicit slots). Given destructiveHint=true, it arguably under-discloses what material slots are overwritten, but the atomicity and UV-preservation notes are substantive 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?
Four dense sentences, front-loaded with the creation verb and source options before moving to placement and commit semantics. Little waste, though the final sentence about returning a durable job is partly redundant given an output schema exists.
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 14-parameter, nested, destructive mutation, the description is only partially complete: it explains sources, slots, and atomic commit, but leaves nearly the whole `options` surface undocumented and does not warn about the destruction implied by destructiveHint=true. Output behavior is covered by the output schema, so the return sentence need not carry weight.
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 only 7% across 14 parameters with a deeply nested `options` object (~20 sub-fields), and the description covers just a handful (textureJobId, role-labeled images, applyToObjects, assignments). The bulk of the configuration surface (tile, packing, seamMode, normalConvention, physicalCoverageMeters, etc.) is left entirely to bare schema names.
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 (create a material) and names the two accepted sources (a completed textureJobId or validated role-labeled images), which is more than a restatement of the title. It does not, however, explicitly distinguish itself from close siblings such as material_from_image or material_recipe, so the 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?
Usage is only implied through the source precondition ('completed textureJobId', 'validated role-labeled images'), which hints at when the tool is applicable. There is no explicit when-to-use/when-not guidance and no named alternative for the adjacent cases (material_from_image, material_recipe).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material_nodesDiscover supported material nodesARead-onlyIdempotentInspect
Search supported shader aliases/native names in pages of at most 24, or select one node for pinned Blender input/output indices and enum properties. Read-only; no project, job or compute. Use the alias and exact sockets when editing a material_recipe proposal or scene_apply graph.
| Name | Required | Description | Default |
|---|---|---|---|
| node | No | Select one supported alias or native node name for indexed pinned sockets and property enums. | |
| limit | No | ||
| query | No | Search supported DSL aliases, native node names and labels. | |
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description's 'Read-only' is redundant. However, it adds meaningful scope: 'no project, job or compute' and the paging behavior ('pages of at most 24'), which are not present in annotations. These additions give agents a clearer behavioral model.
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 sentences with no filler. The core function is front-loaded, followed by safety scope and then usage context. Every sentence adds value and the structure is easy to scan.
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 burden of explaining return relevance. It does mention that node selection returns 'pinned Blender input/output indices and enum properties' and that search returns pages, which is useful. It is reasonably complete for a read-only discovery tool, though offset behavior and response structure could be more 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?
The schema describes `node` and `query`, but `limit` and `offset` have no descriptions. The description adds some meaning: 'pages of at most 24' clarifies limit, and 'select one node' clarifies the node parameter. However, `offset` is never explained, and the description does not fully compensate for the 50% schema coverage gap.
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 opens with a specific action and resource: 'Search supported shader aliases/native names in pages of at most 24, or select one node for pinned Blender input/output indices and enum properties.' It clearly differentiates the two modes (search vs. select) and relates the tool to material_recipe and scene_apply, making its role distinct from siblings.
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 explicitly states when to use the tool: 'Use the alias and exact sockets when editing a material_recipe proposal or scene_apply graph.' It also gives exclusions with 'no project, job or compute,' clarifying what the tool is not for. This provides clear guidance without needing to name an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
material_recipePropose an editable procedural or hybrid materialARead-onlyIdempotentInspect
Return deterministic editable scene_apply operations for weathered wood, brushed/painted metal, stone, fabric or image weathering, plus enhanced material/image prompts and validation checks. Control scale, seed, finish and tint; hybrid graphs reuse existing image nodes and can blend an explicitly aligned color variant. Proposals only: no scene mutation, image-provider call, baking or Blender compute.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| seed | No | ||
| tint | No | Linear RGB surface tint; for image weathering this is the deposit/wear tint. | |
| brief | No | Appearance intent used in bounded prompt enhancement; never sent to an image provider by this tool. | |
| recipe | Yes | ||
| target | No | product | |
| uvLayer | No | Required for image_weathering: existing authored UV layer, verified from the source material. | |
| uvScale | No | ||
| fineBump | No | Procedural fine bump; defaults on for procedural recipes and off for image weathering to avoid adding relief accidentally. | |
| strength | No | Wear and relief amount; zero removes procedural weathering and relief. | |
| uvOffset | No | ||
| roughness | No | ||
| variation | No | Color and finish variation, independent of the deterministic seed. | |
| assignments | No | ||
| imageSource | No | ||
| variantMask | No | noise | |
| normalSource | No | Optional authored tangent-space OpenGL normal image; use a verified linear/non-color source. | |
| preserveAlpha | No | Reuse the approved source alpha. A variant changes color only, not the approved silhouette. | |
| variantFactor | No | Variant blend amount; with noise masking this is the maximum variant contribution. | |
| variantSource | No | Optional second base-color image registered to the approved source; never an independently generated companion PBR map. | |
| imageExtension | No | REPEAT | |
| roughnessSource | No | Optional dedicated scalar roughness image, not a packed ORM image. Its existing data color treatment is preserved; select packed channels with a custom graph. | |
| uvRotationRadians | No | ||
| featureScaleMeters | No | Nominal main feature size in meters, assuming applied object scale and one Blender unit per meter. Fine detail is smaller; verify against the object. | |
| variantAlignmentConfirmed | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, and the description is consistent with all of them. It adds genuinely new behavior: the output is a proposal of scene_apply operations rather than applied mutation, prompts are enhanced but never sent to an image provider, and validation checks are included. This is meaningful disclosure beyond the annotation set.
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, front-loaded with the return type and material families, followed by controls and then the read-only constraint. No filler, though the middle sentence packs a lot of capabilities into one clause chain.
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 25-parameter tool with nested source objects and no output schema, the description establishes the return shape (scene_apply operations), the proposal-only nature and the main control axes. Remaining gaps are minor given the schema carries the per-field detail and no output schema exists to explain.
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?
With 25 parameters at only 48% schema description coverage, the description must compensate, and it does so at a high level by naming the control axes (scale, seed, finish, tint) and the hybrid-graph sources (existing image nodes, explicitly aligned color variant). It maps well onto featureScaleMeters, seed, roughness, tint, the *_Source objects and variantAlignmentConfirmed, though it leaves many individual parameters to 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?
States a specific verb+resource: it returns deterministic editable scene_apply operations for named material families (weathered wood, brushed/painted metal, stone, fabric, image weathering). It also exposes the hybrid-graph capability, which helps distinguish it from the material_from_image/material_from_maps siblings, though it never names those alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Proposals only: no scene mutation, image-provider call, baking or Blender compute' sentence tells the agent the boundary of the tool, and hybrid graphs are framed as reusing existing image nodes. However, no sibling is named and no condition is given for choosing this over material_from_image, material_from_maps or material_nodes, so the when-to-use guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
organizations_listList organizationsARead-onlyIdempotentInspect
List the organizations this account belongs to, with your role in each.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
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 safety profile is covered. The description adds the account-membership scoping and the fact that each entry includes the caller's role, which is useful behavioral information beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence that front-loads the action and resource and then adds the key behavioral detail (role in each organization). Every word contributes value.
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 listing tool with an output schema and strong annotations, the description fully conveys what the agent needs to invoke it correctly. Nothing important 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 has zero parameters, so the schema leaves nothing to document. The description accurately implies that no arguments are needed to call it; there is no parameter information for the description to supplement.
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 exact resource ('organizations'), the action ('List'), and the account-scoped membership context, so an agent can distinguish it from the many other list tools in the sibling set. It also adds the 'role in each' detail, which goes beyond the title.
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 makes it clear that this is the tool for enumerating the organizations the current account belongs to. There is no sibling organization tool to contrast with, so the absence of an explicit 'use X instead' statement is acceptable; the resource scope alone routes selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
platform_statusPlatform capabilities & statusARead-onlyIdempotentInspect
Check what the account can do right now: whether Blender execution (renders, scene edits, imports) is available, compute budget usage, open job counts, and the bound deployment's policy limits. Also returns the versioned live snapshotPolicy when cached tool descriptions differ. Call before queueing work to fail fast.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| openJobs | Yes | |
| credential | Yes | |
| environment | Yes | |
| runningJobs | Yes | |
| toolSurface | Yes | |
| computeBudget | Yes | |
| audioAllowance | Yes | |
| blenderVersion | Yes | |
| snapshotPolicy | Yes | |
| boundDeployment | Yes | |
| blenderExecutionAvailable | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value beyond that by disclosing the live snapshotPolicy behavior ('returns the versioned live snapshotPolicy when cached tool descriptions differ') and the set of metrics it reports. It does not elaborate on error conditions or the exact format, but the annotations and output schema mitigate that gap.
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, with the primary purpose and scope front-loaded in the first sentence, and the key usage instruction in the second. There is no filler; every clause conveys necessary information about capabilities, the snapshotPolicy feature, and the recommended call timing.
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 status check with an output schema present, the description covers the essential context: what is being checked, why it is useful (fail-fast), and the special snapshotPolicy behavior. The output schema presumably documents the return structure, so the description does not need to duplicate that. Nothing an agent needs to decide to 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 has zero parameters, so schema coverage is trivially 100% and there is nothing for the description to explain. The description focuses on what the tool reports rather than inputs, which is appropriate. The baseline for a 0-parameter tool is 4, and no deduction is warranted since the description adds no parameter-related noise.
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 clear verb ('Check') and a specific resource ('what the account can do right now'), then enumerates the concrete things it reports: Blender execution availability, compute budget usage, open job counts, deployment policy limits, and the versioned snapshotPolicy. This makes it unambiguous and distinct from the many sibling tools that target specific resources (e.g., job_get, deployment_policy_update).
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 an explicit when-to-use instruction: 'Call before queueing work to fail fast.' This tells the agent the precise scenario for invoking the tool and implies it should be used as a preflight check. While it does not name alternatives, its role is unique among siblings, and the directive is actionable and clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preset_applyApply a presetADestructiveInspect
Apply a curated preset as a new revision (compiles to validated scene operations). Material presets create the material (tint via color, assign via applyToObjects); lighting presets add a complete light rig + world; camera presets frame and activate a camera; render presets set the render profile. LIGHTING AND CAMERA PRESETS ARE AUTHORED FOR A 2 m SUBJECT — lights 4-7 m out at 800-1500 W, cameras 4-6 m back. On a small product that is not merely suboptimal, it is a white frame: a 42 mm subject wants roughly 1/50 the distance and 1/2500 the wattage. Pass subjectSizeM and the whole rig is rescaled for you.
| Name | Required | Description | Default |
|---|---|---|---|
| color | No | ||
| preset | Yes | ||
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| materialName | No | ||
| subjectSizeM | No | Largest dimension of the subject in METRES (watch 0.042, mug 0.12, chair 1.0, car 4.5). Rescales lighting and camera presets from their 2 m reference: distances linearly, light energy by the square. Ignored by material and render presets. Omit it and the raw 2 m rig is applied unchanged. | |
| applyToObjects | No | ||
| baseRevisionId | No | "HEAD" (default) targets the project's current head. Mutations MUST build on the head: passing an older revision is rejected with REVISION_CONFLICT, since history is linear. To continue from an older scene, revision_restore it forward first. | HEAD |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| generatePreview | No | Render the revision thumbnail (maximum side 384px), using the active camera or scene-bounds fallback. Lit transmission uses low-sample Cycles; other lit scenes use EEVEE. Pass false when another preview is unnecessary; scene_snapshot then inherits the nearest ancestor thumbnail and says so. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes | |
| operationCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive=true/non-idempotent, and the description adds real behavioral context beyond them: presets compile to validated scene operations, write a new revision, and that lighting/camera rigs are authored against a 2 m reference at 800-1500 W and 4-6 m. It doesn't explain the destructive/linear-history implication of the write (that is left to the baseRevisionId schema text), so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then organized by preset family, with the highest-risk caveat (small-subject white frame) clearly stated. The vivid 'white frame' line and the 42 mm arithmetic are dense but genuinely load-bearing; the passage is slightly longer than strictly necessary but no sentence is disposable.
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 an output schema and partial annotation coverage, the description supplies the missing context an agent needs: what each preset family changes, the scaling contract for subjectSizeM, and the default state when it is omitted. Return-value behavior is delegated to the output schema, so nothing material 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 only 56%, and the description compensates by mapping otherwise-undocumented parameters to behavior: 'tint via color, assign via applyToObjects' explains two of the bare schema properties. subjectSizeM's rescaling rule is reinforced, but materialName and the interaction of preset type with per-parameter validity remain unaddressed.
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 first sentence gives a precise verb+resource ('Apply a curated preset as a new revision') plus a parenthetical on what that produces ('compiles to validated scene operations'). It then enumerates the four preset families and their distinct effects, which lets an agent separate this from scene_apply, material_recipe, or presets_list without opening a 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?
The description gives concrete when-to-use guidance for the key parameter ('Pass subjectSizeM and the whole rig is rescaled for you') and an explicit failure mode for omitting it on small subjects. It does not name sibling alternatives (presets_list for discovery, scene_apply for raw ops) or state preconditions, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
presets_listList presetsARead-onlyIdempotentInspect
List curated one-call presets for preset_apply: PBR materials (glass, metals, plastics, neon…), lighting rigs (studio three-point, product softbox, sunset…), camera framings (hero three-quarter, top-down, isometric…), and render profiles (draft, production, square).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Optional preset kind to filter the catalog. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the description does not need to restate the safety profile. It adds useful context about what kinds of presets exist, but it does not disclose additional behavioral details such as filtering semantics or output size.
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?
A single dense sentence with a colon-led enumeration. The main action and scope are front-loaded, and every clause adds useful information without 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?
With one optional parameter, a rich enum schema, and an output schema present, the description is mostly complete for selecting and invoking the tool. It could slightly improve by explicitly noting when this tool should be used in a preset_apply workflow, but little critical information 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?
Even though schema coverage is 100%, the description enriches the 'kind' parameter by mapping each enum value to concrete examples like PBR materials, studio three-point, hero three-quarter, and draft render profiles. This is meaningful value beyond the schema's fairly terse parameter description.
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 opens with a specific verb ('List') and concrete resource ('curated one-call presets for preset_apply'), then enumerates the four preset kinds. This is specific and clearly distinguishes presets_list from sibling preset_apply and other list-like tools.
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 phrase 'for preset_apply' clearly signals the intended workflow: list available presets before applying one. It provides clear context, though it does not explicitly state when not to use this tool or name alternative tools beyond preset_apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_createCreate projectAInspect
Create a project from a template. Returns a stable liveUrl for signed-in users to watch job progress and completed previews, plus a durable job handle. Share the returned liveUrl with the user immediately as a clickable Markdown link in a progress message, before waiting for initialization or building the scene. Use the exact returned URL and mention that sign-in is required. Do not wait until the final render; an empty project shows progress before its first preview exists. Poll job_get — the first immutable revision exists once the job completes. template=empty skips preview generation by default, because an empty scene's preview is a 132-byte GLB of nothing and a blank thumbnail; generatePreview overrides that in either direction.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Human-readable name for the new project. | |
| template | No | Initial scene template; empty starts without geometry. | empty |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| generatePreview | No | Render the preview GLB and 384px thumbnail for the first revision. Defaults to TRUE for templates that place geometry or lights and FALSE for template=empty, whose preview is a 132-byte GLB of nothing plus a blank thumbnail. Pass it explicitly to override either default. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes | |
| liveUrl | Yes | Stable project preview page. Share this URL with the user immediately as a clickable link; requires sign-in and organization membership. |
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses asynchronous behavior (returns a job handle), the need to share the URL before waiting, the polling requirement, and the default preview behavior for empty templates. Since annotations are all false (no readOnly, idempotent, etc.), this fills the gap with essential 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?
The description is longer than typical but each sentence contributes value, starting with the core action, then returns, usage instructions, and template specifics. It is logically structured and front-loaded with the primary purpose.
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 tool with async job creation, liveUrl, and preview generation, the description covers all necessary context: how to use the URL, polling, and template edge cases. The output schema likely handles return structure, and the description leaves no major gaps 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 100%, so the baseline is 3, but the description adds meaningful context beyond the schema: it explains that template=empty skips preview by default and that generatePreview overrides it, adding nuance not present in the schema's property 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?
The description opens with 'Create a project from a template', clearly stating the verb and resource. It then details the return values (liveUrl, job handle) and distinguishes from sibling tools like project_update or project_delete by focusing on creation from a template.
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 explicit post-call instructions: share the liveUrl immediately as a Markdown link, mention sign-in, poll job_get, and explains when to expect the first revision. It also clarifies the template=empty behavior and how generatePreview overrides it, giving an agent clear guidance on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_deleteDelete a projectADestructiveInspect
Soft-delete a project (hidden from listings; revisions retained). Open jobs block deletion — cancel them first with job_cancel.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | must be true — deletion cannot be undone from the API | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the description adds value by specifying the nuanced behavior: it is a soft-delete, revisions are retained, and open jobs block the operation. This goes beyond the simple destructive flag and informs the agent about consequences and prerequisites.
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 concise sentences front-load the action and its key effects, followed by the critical prerequisite. Every clause carries information without 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 2-parameter destructive tool with an output schema and annotations, the description covers the main behavioral constraints (soft-delete, blocking condition, cancellation path). It does not mention auth or rate limits, but those are typically outside description scope; the essential call-time knowledge 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 (projectId, confirm) are already documented in the schema. The description does not add additional parameter-level meaning, 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 action ('Soft-delete'), the resource ('a project'), and the behavioral effect ('hidden from listings; revisions retained'). This clearly distinguishes it from other delete tools like deployment_delete or integrations_delete, and clarifies it is not a permanent deletion.
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 an explicit precondition ('Open jobs block deletion') and directs the agent to a sibling tool for the required workaround ('cancel them first with job_cancel'). It implies when to use it (when no open jobs exist) and when not to, with a concrete alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_getGet projectARead-onlyIdempotentInspect
Get project metadata: head revision, recent revisions, active jobs, preview artifact, effective policy limits, and a stable liveUrl where signed-in organization members can watch job progress and completed previews without starting Blender work.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| liveUrl | Yes | Stable project preview page; requires sign-in and organization membership. |
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, idempotent, and non-destructive. The description adds meaningful behavioral context beyond the annotations by enumerating the returned metadata categories and clarifying that the liveUrl lets signed-in organization members watch progress without starting Blender work. This enriches the agent's understanding of what the operation actually returns.
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 a single, dense sentence that front-loads the core action ('Get project metadata') and then uses a colon-delimited list of concrete return items. Every element contributes information, with no filler or redundancy.
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?
Given the tool has a single required parameter, a full schema for that parameter, an output schema, and safety annotations, the description is nearly complete. It covers the main metadata categories and the special liveUrl behavior. It could be slightly more complete by noting when to prefer this over related read tools, but nothing essential 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?
There is only one parameter, projectId, and the schema describes it fully with 100% coverage. The description adds no additional parameter-level guidance, but since the schema already provides complete meaning, the baseline score of 3 is 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 uses a specific verb ('Get') and resource ('project metadata') and enumerates the concrete data returned: head revision, recent revisions, active jobs, preview artifact, policy limits, and a liveUrl. It is clear what the tool does, though it does not explicitly contrast itself with the sibling projects_list or project_update.
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 this is for retrieving detailed metadata for a single project as opposed to listing projects, but it never states when to use project_get versus projects_list, artifact_get, or job_get. No explicit alternatives or exclusions are provided, leaving the usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
projects_listList projectsARead-onlyIdempotentInspect
List the account's projects, newest first, with cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of projects to return in this page (1–50). | |
| cursor | No | Opaque token — copy nextCursor VERBATIM from the previous response. NOT a row offset: "50" is rejected. (scene_inspect and artifacts_list do take integer offsets; this tool and jobs_list are keyset-paginated and do not.) | |
| nameFilter | No | Optional project-name filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| nextCursor | Yes |
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 covered. The description adds behavioral context: newest-first ordering and cursor pagination. The cursor schema description adds important behavior (opaque token, verbatim copy, rejection of offsets), which goes beyond 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?
The description is a single sentence that front-loads the core purpose and ordering, then adds pagination. The schema parameter descriptions are detailed but each sentence earns its place, especially the cursor warning which prevents a common misuse.
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 list tool with an output schema, the description plus annotations fully cover what an agent needs: what it returns, ordering, pagination mechanics, and safety. The cursor guidance is especially complete, even distinguishing from offset-paginated siblings.
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 adds value by specifying ordering and pagination behavior, and the cursor parameter description in the schema is unusually rich: it explains what the token is, how to use it, and contrasts with other tools. This pushes it above 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?
The description states a specific verb ('List'), a resource ('the account's projects'), and an ordering ('newest first') with pagination. It clearly distinguishes this from sibling tools like project_get (single project) and projects_list is the only list-projects tool, so no ambiguity.
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 use it: to list projects. It doesn't explicitly name alternatives or exclusions, but the sibling set includes project_get, project_create, project_update, project_delete, so the list purpose is clear. The cursor parameter description adds usage guidance by warning against treating it as an offset and referencing jobs_list as similarly keyset-paginated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_updateRename a projectADestructiveInspect
Rename a project. History, revisions, and jobs are unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New human-readable project name. | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a destructive/non-read-only operation, and the description adds useful context by explicitly stating that history, revisions, and jobs are unaffected. It goes beyond annotation hints without contradicting them, though it does not detail any other side effects or permissions.
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-load the core action and then add the most relevant side-effect clarification. There is no redundant wording or filler, so every sentence 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 simple two-parameter rename operation with a complete input schema, output schema, and annotations, the description is sufficient. It tells the agent what the operation does and which data is preserved, leaving no critical gap 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 explains both 'name' and 'projectId'. The tool description adds no parameter-level semantics beyond what the schema provides, so the baseline score of 3 is 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 uses a specific verb and resource, 'Rename a project', and clarifies scope by stating that history, revisions, and jobs are unaffected. This distinguishes it from destructive siblings like project_delete and from project_create/get/list, making the tool's purpose 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 implies the tool is for renaming and reassures that history, revisions, and jobs are unaffected, which gives some context about safe usage. However, it does not explicitly state when not to use it or mention alternatives such as project_create or project_delete, leaving usage guidance largely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_animationRender animation to MP4AInspect
Render a frame range to an H.264 MP4. engine=cycles_cpu (default) is photoreal; lit_preview (EEVEE) keeps materials and lights at ~10x less cost and is the right choice for reviewing motion and timing; preview_fast is shape-only. Animate first: keyframe cameras/objects via scene_apply animation.* operations, then render from that revision. One job renders up to 600 frames; for longer sequences fire parallel jobs over contiguous frame ranges and concatenate the MP4 segments (identical encoder settings make them concat-safe). The MP4 becomes an immutable artifact (download via artifact_get). Optional audioTracks mix owned audio_wav artifacts into an AAC soundtrack with startSeconds relative to this output segment, sourceOffsetSeconds, gainDb and looping. Inputs must belong to this project/deployment; PCM16 44.1 kHz mono/stereo only. Clipping is rejected; lower gainDb. Actual output streams/timing are verified. Returns a durable job handle.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | ||
| width | No | ||
| engine | No | cycles_cpu | |
| height | No | ||
| samples | No | ||
| cameraId | No | ||
| frameEnd | Yes | ||
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| frameStart | Yes | ||
| revisionId | No | "HEAD" (default) uses the project's current head | HEAD |
| audioTracks | No | ||
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite minimal annotations (all hints false), the description discloses key behaviors: output is an immutable artifact downloadable via artifact_get, inputs must belong to the project/deployment, audio must be PCM16 44.1 kHz mono/stereo, clipping is rejected with a directive to lower gainDb, output streams/timing are verified, and the return is a durable job handle. It also states the 600-frame limit and concat-safety of parallel segments. This goes well beyond what annotations provide.
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?
Every sentence in the description adds non-obvious, actionable information: engine tradeoffs, prerequisite ordering, job limits, parallelization strategy, artifact immutability, audio constraints, rejection behavior, verification, and return type. Despite its length, there is no filler or repetition, and it is appropriately front-loaded with the core purpose.
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?
Given 12 parameters, no output schema, and minimal annotations, the description is exceptionally complete. It covers prerequisites, engine selection criteria, operational limits, parallel scaling, artifact lifecycle, audio input validation, failure mode, verification, and return contract. The only minor omissions (explicit sibling differentiation, per-parameter detail for resolution/fps) are largely compensated by schema defaults and clear parameter names.
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?
With only 25% schema description coverage, the description carries the burden of explaining parameters. It richly explains the engine enum and audioTracks semantics (startSeconds, sourceOffsetSeconds, gainDb, looping), plus frame-range implications. However, it leaves fps, width, height, samples, and cameraId entirely implicit, relying on parameter names. That partial compensation yields a middle score.
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 opens with a clear, specific verb and resource: 'Render a frame range to an H.264 MP4.' It also distinguishes internal engine modes, giving it a concrete scope. However, it never explicitly contrasts itself with sibling tools like render_create or render_turntable, so an agent must infer differentiation from the name and context.
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 explicit when-to-use guidance for each engine (cycles_cpu for photoreal, lit_preview for review at 10x lower cost, preview_fast for shape-only) and a prerequisite ('Animate first... via scene_apply animation.*'). It also advises splitting long sequences into parallel contiguous ranges. But it doesn't name alternative tools or state when not to use this tool versus a sibling, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_createCreate renderAInspect
Render a still PNG from a revision through the active camera. engine=cycles_cpu (default) is photoreal and slow; engine=lit_preview uses the scene materials, lights and world in EEVEE for cheaper look development; its shading can differ, especially for transmission. Use it to judge a material or a light rig, and use Cycles for final appearance or transmission checks. engine=preview_fast (Workbench) ignores materials and lighting entirely and only answers questions about shape and layout. Big renders fan out across parallel containers automatically (horizontal strips, stitched server-side); shards=1 forces one instance. The speedup is bounded by your maxConcurrentJobs — strips beyond it would render one after another and pay a container boot each, so the fan-out width is CLAMPED to that policy and the response tells you when it was reduced. Renders above the approval threshold require an approval round-trip. Cycles renders of 16+ samples are DENOISED with OpenImageDenoise and use adaptive sampling, so the sample count is a ceiling rather than a bill and modest counts look far cleaner than they otherwise would; override with the render_settings.update denoise flag. hideObjectIds/hideNamePattern omit objects from THIS RENDER ONLY, with no revision and nothing to undo — that is how you isolate a suspect ("render it without the crystal") in one job instead of bisecting by guesswork. LIGHTS ARE OBJECTS and can be hidden the same way, so hiding all but one is how you find which light is blowing out a highlight — the standard lighting-debug move, and it needs no separate parameter. Returns a durable job handle; the finished PNG is an immutable artifact. purpose=draft preserves existing behavior. purpose=final requires validationJobId from a completed successful deep scene_validate of the exact resolved project revision before any render is queued. Wait for validation, read the full report with job_report, repair/revalidate if needed, then pass that proof. This never starts validation automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| engine | No | cycles_cpu = photoreal final. lit_preview = EEVEE, honours materials/lights/world for look development. preview_fast = Workbench, shape only, ignores all shading. EEVEE transmission depends on the scene settings and does not establish Cycles equivalence. Use cycles_cpu when judging glass or seeing through a surface. | cycles_cpu |
| height | No | ||
| shards | No | Parallel fan-out width. 0 (default) decides from render cost; 1 forces a single instance; 2-8 requests that many strips. Any value here is CLAMPED to maxConcurrentJobs: strips past your concurrency cannot overlap, so they would render one after another and add a container boot each, which is slower than shards=1. The response reports the reduction when it happens. | |
| purpose | No | draft | |
| samples | No | ||
| cameraId | No | ||
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| revisionId | No | "HEAD" (default) uses the project's current head | HEAD |
| hideObjectIds | No | ||
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| hideNamePattern | No | ||
| validationJobId | No | Required for purpose=final: completed passing deep-validation job for this exact project/revision. Known profiles are accepted; the response states that profile and its coverage. | |
| transparentBackground | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all four annotations false, the description carries the full behavioral burden and delivers abundantly: fan-out clamping to maxConcurrentJobs, the approval round-trip threshold, OpenImageDenoise with adaptive sampling making samples a ceiling, render-only object hiding with 'no revision and nothing to undo,' the durable job handle and immutable PNG, and the validation precondition for purpose=final. The non-destructive hiding claim aligns with destructiveHint=false; no contradiction 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?
Well front-loaded: the one-sentence purpose leads, then organized blocks cover engine selection, fan-out, approval, denoising, hiding, and validation. It is long, and the shards/engine content partially duplicates the schema's parameter descriptions, but each paragraph adds operational context the schema lacks, so the length is largely earned.
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 14-parameter mutation tool with no output schema and neutral annotations, the description covers engine trade-offs, concurrency behavior, approval gating, validation prerequisites, the durable job-handle return value, and the non-destructive hiding idiom. Nothing an agent needs to call this correctly 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 only 43%, and the description compensates for the highest-risk parameters: purpose (draft vs final validation gating), hideObjectIds/hideNamePattern (render-only, no undo, with a concrete debugging example), samples (denoise ceiling behavior), and engine (use-case framing beyond the enum). A few low-risk parameters like transparentBackground and cameraId are left to self-evident schema fields, so it falls just short of a perfect 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 opening sentence 'Render a still PNG from a revision through the active camera' names the verb, resource, output format, and camera path in one clause. The word 'still' cleanly differentiates it from siblings render_animation and render_turntable without needing to name 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?
Gives explicit when-to-use guidance per engine: 'Use it to judge a material or a light rig, and use Cycles for final appearance or transmission checks,' and states preview_fast 'only answers questions about shape and layout.' It also spells out the full purpose=final workflow: wait for validation, read the job_report, repair/revalidate, then pass the proof — including the exclusion that render_create 'never starts validation automatically.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_turntableRender turntable stillsAInspect
Render N evenly spaced orbit views of a revision in ONE job — catch problems a single angle hides. A temporary camera orbits the scene bounds at elevationDeg; pass targetObjectIds, targetNamePattern (e.g. "Watch_*"), or excludeNamePattern (e.g. "Studio_*" — the one that works when an assembly's parts share no prefix) to orbit and frame ONLY those objects (product shots: leaves floors/backdrops out of frame). excludeNamePattern only changes what the orbit FRAMES — excluded objects are still rendered and can still fill the frame; hideNamePattern is what removes them from the image. engine=preview_fast (Workbench, default) is near-instant but ignores materials and lights; lit_preview (EEVEE) honours them at ~10x less cost than cycles_cpu, which is the photoreal final. Each frame becomes a PNG artifact — view inline with scene_snapshot artifactId= from job_get artifacts. Returns a durable job handle and a bounded selection summary; the job retains the full resolved target list.
| Name | Required | Description | Default |
|---|---|---|---|
| views | No | Deprecated alias for angles. Use angles for new calls; do not provide both fields. | |
| width | No | ||
| angles | No | Canonical orbit-view count (2-12). Defaults to 6 when neither angles nor the deprecated views alias is supplied; do not pass both. | |
| engine | No | preview_fast | |
| height | No | ||
| samples | No | ||
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| revisionId | No | "HEAD" (default) uses the project's current head | HEAD |
| elevationDeg | No | ||
| hideObjectIds | No | ||
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| hideNamePattern | No | HIDES matching objects from every frame of this turntable (no revision, nothing to undo). This is not the framing filter: hiding the subject renders empty frames, and the job is refused if it would hide everything being orbited. | |
| targetObjectIds | No | ||
| targetNamePattern | No | ||
| excludeNamePattern | No | Drop matches from what the orbit FRAMES, e.g. "Studio_*". The excluded objects are STILL RENDERED and can still appear — this only changes the bounds the camera is fitted to. Use hideNamePattern to take them out of the image. | |
| transparentBackground | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly discloses behavior beyond annotations: the job runs as a single batch, uses a temporary orbiting camera, writes PNG artifacts, returns a durable job handle, and keeps the full resolved target list. It also clarifies subtle selection behavior such as excludeNamePattern affecting framing only while hideNamePattern removes objects from the image. This is far beyond what the sparse annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, camera behavior, targeting semantics, engine selection, artifact workflow, and return behavior. It is front-loaded with the primary purpose, uses concrete examples, and avoids filler or redundant restatements of schema fields.
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 high-complexity tool with 16 parameters, no output schema, and several sibling rendering tools, the description is remarkably complete. It explains what the call returns, how to view artifacts via scene_snapshot, how filtering works, and engine trade-offs, leaving no major operational gap for an agent choosing and invoking the 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?
With schema description coverage at only 44%, the description compensates by explaining the most semantically tricky parameters: targetObjectIds/targetNamePattern/excludeNamePattern/hideNamePattern distinctions, engine trade-offs, and angles/views aliasing. It does not add meaning for width, height, samples, or transparentBackground, but those are less ambiguous and partially inferable from names and defaults.
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 opens with a specific verb and resource: 'Render N evenly spaced orbit views of a revision in ONE job'. This clearly distinguishes turntable stills from render_animation or generic render_create, and the 'catch problems a single angle hides' rationale gives the agent an immediate sense of its 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 description gives useful context like product-shot framing and engine trade-offs, but it never explicitly says when to choose render_turntable over sibling tools such as render_animation or render_create. There is no when-not-to-use guidance or explicit alternative routing, so usage is mostly implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revision_diffSemantic revision diffBRead-onlyIdempotentInspect
Diff two revisions semantically: objects added/removed, transforms, materials, render settings.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| toRevisionId | Yes | Newer revision ID to compare against. | |
| fromRevisionId | Yes | Older revision ID to compare from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is known. The description adds a semantic focus but doesn't mention performance implications, output structure, or any constraints on revisions. It adds modest context beyond 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?
The description is a single sentence, front-loaded with the core action. It is concise, but could be more structured with a brief note on usage or output.
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 diff tool with full schema coverage and no output schema, the description covers the main purpose. However, it lacks detail on the response format or any edge cases (e.g., invalid revisions), which might be inferred by an agent but are not 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 all parameters are described adequately in the schema. The description adds no extra parameter semantics, which is acceptable given full 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 description clearly states it diffs two revisions semantically, listing the specific aspects (objects, transforms, materials, render settings). However, it doesn't explicitly differentiate from sibling tools like revision_restore or scene_inspect, which could overlap in 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 description implies a comparison use case but provides no explicit when-to-use or when-not-to-use guidance. With siblings like revision_restore and scene_inspect, clearer routing would be helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revision_restoreRestore revisionADestructiveInspect
Restore a historical revision by creating a NEW revision on top of the current head — history stays intact. Pass the current head for optimistic concurrency; may require approval.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Short description saved with the restored revision. | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| sourceRevisionId | Yes | Existing revision whose scene should become the new head. | |
| currentHeadRevisionId | Yes | Current head revision ID used to prevent conflicting restores. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly claims 'history stays intact' and says it creates a NEW revision on top of the current head, implying no destructive overwrite. However, the annotations declare destructiveHint: true, which directly conflicts with that claim. The extra details about optimistic concurrency and approval are useful, but the contradiction undermines transparency.
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-load the purpose and core mechanism, then add necessary caveats about concurrency and approval. There is no filler or redundant restating of the schema.
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?
Given 5 parameters and no output schema, the description covers the main purpose, concurrency model, and approval possibility, but it does not describe return values, how approval works, or what happens on a concurrency conflict. It also leaves the destructiveHint contradiction unresolved, which creates uncertainty for a mutation 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 coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by explaining that currentHeadRevisionId is used for optimistic concurrency, which is not present in the schema field description. Other parameters are already well-covered by 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?
Clearly states a specific verb (Restore) and resource (historical revision), and explains the key mechanism: creating a NEW revision on top of the current head. This distinguishes it from read-only siblings like revision_diff and other scene tools, and the phrase 'history stays intact' sharpens the intended behavior.
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 clear context for when to use the tool (restoring a historical revision while preserving history), and gives an important prerequisite: passing the current head for optimistic concurrency, plus a warning that approval may be required. It does not explicitly name alternative tools or when not to use it, so it stops 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.
scene_applyApply scene operationsADestructiveInspect
Apply a batch of validated scene operations to a base revision. Mutating batches commit atomically into one new immutable revision (or nothing); query/select-only batches still execute in Blender and return operationResults, but create no revision and do not move the project head. Returns a durable job handle. Call docs_operations FIRST to see the vocabulary: there are 298 operations covering mesh editing, booleans, lathe/loft/sweep, curves, UV unwrap, modifiers, materials, lights, cameras, render settings, geometry nodes, and batch/query helpers — most modelling needs no scene_script at all. Prefer this over scene_script: operations are validated before dispatch and cost less.
| Name | Required | Description | Default |
|---|---|---|---|
| dryRun | No | Validate against the ACTUAL scene and report what each operation would touch, without committing, queueing a job, or consuming compute. Free and synchronous. Resolves every id and $ref against the target revision, so stale ids, purged materials and unknown targets surface here instead of failing a whole batch, and checks material.create_node_graph sockets against the pinned Blender build; configured layouts and geometry-node graphs retain explicit advisory limits. Use it to probe an uncertain operation before spending a container on it. What it does NOT do: run any geometry, so it cannot tell you a boolean will miss, a profile will not close, or a bevel will overlap — for those, put the READ ONLY mesh.* checks in the real batch and read operationResults. | |
| message | No | Short description saved with the new revision. | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| operations | Yes | Ordered batch of validated scene operations; use docs_operations for exact schemas. | |
| baseRevisionId | No | "HEAD" (default) targets the project's current head. Mutations MUST build on the head: passing an older revision is rejected with REVISION_CONFLICT, since history is linear. To continue from an older scene, revision_restore it forward first. | HEAD |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| generatePreview | No | Render a thumbnail for a new revision (default maximum side 384px; previewMaxSidePx can request up to 1024px). Defaults to on for mutating batches. A batch whose operations only READ or SELECT (mesh.get_*, *.analyze_*, mesh.select_*) creates no revision, so this is forced off even when explicitly true. | |
| previewMaxSidePx | No | Opt-in thumbnail maximum side in pixels; default 384, maximum 1024, preserving the active camera aspect ratio. Larger previews spend more compute at the same 16 samples. Has no effect when generatePreview is false or the batch is read-only. scene_snapshot later reads that stored image and cannot resize or regenerate it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| job | No | |
| dryRun | No | |
| problems | No | |
| readOnly | No | |
| warnings | No | |
| declaredRefs | No | |
| readOnlyNote | No | |
| operationCount | No | |
| dimensionChecks | No | |
| generatePreview | No | |
| geometrySimulation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the atomic all-or-nothing commit into an immutable revision, the read-only no-head-move behavior, and the durable job handle, which go beyond the annotations' single destructiveHint. This gives the agent a clear side-effect model without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences front-load the core behavior, then add the return type and usage guidance. The list of operation categories is verbose but earns its place by establishing scope and justifying the preference over scene_script.
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?
Given a rich schema and output schema, the description covers the essentials: what it applies, revision semantics, read-only behavior, job handle, and where to learn the operation vocabulary. No critical information an agent needs to invoke it safely 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%, so the description does not need to re-document parameters; the baseline is 3. It adds useful orientation by pointing to docs_operations for the operation vocabulary, but offers no per-parameter 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?
States specifically that it applies a batch of validated scene operations to a base revision, and notes atomic revision creation versus read-only execution. It also explicitly differentiates itself from scene_script ('Prefer this over scene_script'), so an agent can pick it apart from the closest 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?
Tells the agent to call docs_operations FIRST and says to prefer scene_apply over scene_script because operations are pre-validated and cheap. It does not spell out the exact conditions under which scene_script should be used instead, but gives enough context for the common path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_inspectInspect sceneARead-onlyIdempotentInspect
Read a revision's scene from its stored structured summary — synchronous, no container. detail: summary | objects | materials | render | cameras | lights | stats | full. Use "cameras" to get camera ids for render_create cameraId, "lights" for the rig with energies, and "stats" for per-object vertex/face counts, UV presence and modifier stacks. Filter with objectIds, or with namePattern/excludeNamePattern — namePattern is how you turn the namePattern a copying operation reports (object.radial_array, object.array_along_curve) back into the full list of ids it created. limit/cursor page the requested entity type. In full mode each included collection uses the same offset/limit; nextCursor continues while any collection has more rows. Object filters affect objects, cameras and lights; materialIds independently filters materials. For exact node names, links and packed image bindings request includeNodeGraphs with detail=materials/full and one materialId or limit=1. Graphs are omitted by default; legacy or partial summaries explicitly report availability. All positions and sizes are metres (1 unit = 1000 mm).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entries returned per requested scene section. | |
| cursor | No | Row offset from nextCursor, e.g. "100". Keep the same revision, detail and filters when paging. | |
| detail | No | Scene section to read; full combines all sections. | summary |
| objectIds | No | Filter by platform id ("obj_…"/"cam_…"/"lgt_…") | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| revisionId | No | "HEAD" (default) uses the project's current head | HEAD |
| materialIds | No | Filter materials by stable mat_ IDs before pagination, independently of object filters. | |
| namePattern | No | Filter by Blender object NAME with * wildcards, e.g. "Tick_*". This is how you resolve the namePattern a copying operation reports back into ids. | |
| includeNodeGraphs | No | Read stored node graphs with detail=materials/full and exactly one materialId or limit=1. Includes counts and complete/truncated/unavailable status. | |
| excludeNamePattern | No | Drop objects whose name matches, e.g. "Studio_*". Applied after namePattern. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive. The description adds significant behavioral context: 'synchronous, no container' (performance expectation), pagination semantics (nextCursor continues while any collection has more rows), filtering interactions (object filters affect objects, cameras, lights; materialIds independent), node graph omission by default, and explicit unit declaration (metres, 1 unit = 1000 mm). No contradiction with annotations; the description enriches them.
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 long but each sentence adds value. It starts with the core purpose and detail enumeration, then moves to filters, pagination, node graphs, and units. It is densely packed but logically ordered; no fluff. A slightly more scannable format (e.g., bullet lists) would improve, but the prose is efficient and 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 tool with 10 parameters and no output schema, the description is remarkably complete. It covers every parameter's usage, edge cases (legacy/partial summaries explicitly report availability), pagination continuation, filtering independence, node graph behavior, and units. There are no evident gaps an agent would need to resolve elsewhere. It is self-sufficient and deeply integrated with the surrounding tool ecosystem.
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 all parameters. The description goes far beyond: it explains that namePattern is the mechanism to resolve object.radial_array / object.array_along_curve names back to ids, clarifies that objectIds filter cameras/lights too, defines how limit/cursor page each entity type, and specifies that in full mode each collection uses the same offset/limit. It also explains the includeNodeGraphs requirement (one materialId or limit=1). This transforms raw parameter definitions into actionable knowledge.
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 opens with a precise verb and resource: 'Read a revision's scene from its stored structured summary.' It immediately lists the eight detail modes, making the scope explicit. This clearly distinguishes it from sibling tools like scene_apply or scene_script, which imply mutation, while this one is read-only.
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 explicit usage instructions: which detail mode to use for camera ids, lights, stats; how to filter with objectIds vs namePattern; how to resolve namePattern from copying operations; pagination rules; and the exact conditions for includeNodeGraphs. It even links to render_create's cameraId, demonstrating cross-tool awareness. Though it doesn't name a specific alternative tool, the usage is so detailed that an agent knows exactly when to use this tool and how.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_scriptRun Blender PythonADestructiveInspect
Run arbitrary Blender Python (bpy) against a base revision and commit the result as a new immutable revision. Policy-gated: an owner must enable scripting on the deployment first. Runs in a credential-free, network-restricted throwaway container; the runner loads the scene before your script and commits it after. Assign a JSON-serializable value to a variable named result to get it back in job_get result.scriptResult with full finite JSON retained in an immutable report up to 8 MiB. Use job_report section=report for complete stored bytes; non-JSON or oversized results are explicitly unavailable. The result variable is not predeclared: no assignment records hasResult=false, while result=None records hasResult=true with JSON null. print() output returns as result.scriptStdoutTail — both are returned in the job_get/job_wait text, so use them for introspection instead of encoding findings into object names. A script that raises commits NOTHING: the revision is only written after the whole script succeeds, so failures leave the base revision untouched. The runner evaluates the depsgraph before your first statement, so world transforms of pre-existing objects are correct on entry; objects your script CREATES keep an identity matrix_world until you call bpy.context.view_layer.update(), so measure world positions only after that call — otherwise obj.matrix_world reads zeros and any floor, bounds or framing number you derive from it is silently wrong. The environment is FIXED (Blender 5.2 LTS) — verify identifiers with docs_bpy_lookup (free, instant) instead of a probe job. Call docs_operations FIRST: the validated DSL already covers 298 operations including booleans, lathe, loft, UV unwrap, modifiers, materials, lights, cameras and render settings, and scene_apply is cheaper and safer for all of them. Reach for scripting only for shader node graphs, novel parametric generators, and computation.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Blender Python script to run in the isolated job; owner-enabled scripting is required. | |
| message | No | Short description saved with the resulting revision. | |
| readOnly | No | Run the script for its ANSWER and commit NOTHING: no revision, no head move, no thumbnail. `result` and print() output still come back. This is the right mode for a probe — measuring, raycasting, reading node state — and it is cheaper because it skips saving and summarising the scene. scene_apply already infers this for a batch that only reads; scripting had no equivalent, so a field build's four-ray occlusion probe committed a revision it did not want. Any scene edits the script makes are DISCARDED in this mode. | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| baseRevisionId | No | "HEAD" (default) targets the project's current head. Mutations MUST build on the head: passing an older revision is rejected with REVISION_CONFLICT, since history is linear. To continue from an older scene, revision_restore it forward first. | HEAD |
| idempotencyKey | Yes | Stable caller-chosen key for safe retries of this same request. | |
| generatePreview | No | Whether to render a preview of the new revision after the script succeeds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses far more than the annotations (destructiveHint=true, etc.). It details failure semantics (scripts that raise commit nothing), the result variable contract (no assignment vs result=None), the depsgraph evaluation behavior and the matrix_world pitfall, the fixed Blender 5.2 environment, and the credential-free/network-restricted container. It even explains the 8 MiB report limit and the unavailability of non-JSON/oversized results. This is a model of behavioral transparency, with no contradiction to 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?
The description is long but every sentence earns its place. It is front-loaded with the core purpose and then systematically covers policy, runner behavior, result handling, failure semantics, depsgraph caveats, environment, and alternatives. The structure flows logically from invocation to expectations to troubleshooting, with no redundancy or filler. It is appropriately sized for a tool with this complexity.
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?
The description is exceptionally complete. Given the tool's complexity (arbitrary Python execution, immutability, failure modes, result retrieval), it covers everything an agent needs to call it correctly: the commit-on-success guarantee, how to get results via job_get, the depsgraph warning, the fixed environment, the readOnly probe mode, and the recommended alternative. It even addresses edge cases like oversized results and identity matrix_world. Nothing essential 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% and the description goes beyond the schema by explaining the semantics of key parameters in context. It elaborates on the readOnly parameter's effect (discards edits, returns result/print output), the baseRevisionId behavior (MUST build on HEAD, REVISION_CONFLICT, and revision_restore as a workaround), and the result variable mechanics that interact with the code parameter. It adds meaning that the schema alone 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 description opens with a precise statement of the tool's action: 'Run arbitrary Blender Python (bpy) against a base revision and commit the result as a new immutable revision.' It clearly identifies the verb, resource, and effect, and differentiates from scene_apply by explicitly noting that scene_apply covers 298 DSL operations and is cheaper/safer. This leaves no ambiguity about the tool's role among its siblings.
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 guidance is explicit and prescriptive: it instructs to call docs_operations FIRST, lists the 298 covered operations, and states 'Reach for scripting only for shader node graphs, novel parametric generators, and computation.' It also explains the readOnly mode for probes and when it is appropriate. This is exemplary when-to-use/when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_snapshotSee the sceneARead-onlyIdempotentInspect
See the scene as an inline image, instantly — no render job. Default: a revision's stored thumbnail (every mutation with generatePreview creates one; omit revisionId for the head; scene_apply previewMaxSidePx can opt into a larger 384..1024px thumbnail). Pass artifactId instead to view any PNG artifact inline (a render_create result or a render_turntable frame). Snapshot after every mutation to verify visually before an expensive render. opticsObjectIds selects existing cached optical measurements; it does not resample the image. For a fresh targeted query without rendering, use scene_apply with scene.analyze_optics. Snapshot policy 2026-09-16: scene_snapshot reads a stored image; it does not render or regenerate it. New thumbnails use the active camera and preserve its aspect ratio with a default maximum side of 384px; scene_apply previewMaxSidePx can request 384..1024px at the same sample setting, with more compute for larger images. Without a camera they frame scene bounds. Lit scenes with transmission use 16-sample Cycles; other lit scenes use EEVEE. Unlit, unreadably dark or failed lit previews may fall back to Workbench for shape and base colour only. Historical thumbnails retain their original engine, size and framing. Read thumbnailEngine, thumbnailFraming, thumbnailSize and thumbnailOptics when available; unknown historical metadata is not inferred from this policy. Use render_create for fine detail, noise and final transmission quality. platform_status and docs_operations guide=true return this deployment's current snapshotPolicy on each call. Prefer those live results over a cached tool description. On connection and release changes, modern subscriptions/listen sends the requested, honored catalog notifications; legacy GET SSE sends tools, prompts and resources list_changed. Private/no-store responses and zero-TTL discovery metadata let compatible hosts rediscover automatically. The server cannot replace schemas retained by a host that ignores freshness signals or never subscribes. The policy version describes new generation behavior, not the age or settings of a stored image.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | No | Required unless artifactId is given — the project whose scene to show | |
| artifactId | No | View any PNG artifact instead; mutually exclusive with projectId | |
| revisionId | No | With projectId; defaults to the project head | |
| opticsObjectIds | No | Filter cached per-object optics by ID; absent measurements remain unavailable. Does not change the image or compute new diagnostics. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only/idempotent, and the description adds substantial behavioral context beyond that: it 'reads a stored image; it does not render or regenerate it,' explains thumbnail fallbacks (Workbench for unlit/dark/failed lit previews), notes historical thumbnails retain original settings, and tells agents to read thumbnailEngine/Framing/Size/Optics metadata. No contradiction with annotations 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?
The description front-loads the core purpose well, but then becomes overlong and drifts into unrelated subscription/SSE/discovery metadata: 'On connection and release changes, modern subscriptions/listen sends the requested...' and 'The server cannot replace schemas retained by a host...'. Information about scene_apply's previewMaxSidePx is also repeated. Several sentences do not earn their place for a tool-invocation definition.
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?
Despite having no output schema, the description covers the output expectation ('inline image'), the main parameters and defaults, relevant behavioral policies (camera, lighting, engines, fallback, historical metadata), and sibling alternatives. It is complete enough for an agent to invoke scene_snapshot correctly in most contexts.
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 baseline is 3. The description adds value by noting artifactId 'views any PNG artifact inline (a render_create result or a render_turntable frame)' and clarifying opticsObjectIds 'selects existing cached optical measurements; it does not resample the image.' These nuances go beyond the schema's description, though some parameter details are restated.
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 and resource: it shows a stored scene or PNG artifact as an inline image, and explicitly contrasts with rendering ('no render job'). It clearly differentiates from siblings like render_create ('Use render_create for fine detail...') and artifact_get by framing this as an inline snapshot viewer.
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 explicit when-to-use guidance ('Snapshot after every mutation to verify visually before an expensive render') and names alternatives with conditions: 'For a fresh targeted query without rendering, use scene_apply with scene.analyze_optics' and 'Use render_create for fine detail, noise and final transmission quality.' No ambiguity remains about when to choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scene_validateValidate sceneAInspect
Validate a revision against a profile; returns issues with codes, severities, and suggested candidate operations. Default: synchronous, from the stored scene summary. deep=true opens the scene in Blender for real mesh analysis (non-manifold, watertight, degenerate, overhangs) and returns a job handle (idempotencyKey required). General deep validation checks evaluated watertightness (open surfaces warn) and zero-area faces/zero-length edges (errors). additionalChecks can add interior_faces and uv_layers. The queued response states requested coverage; completed reports state actual object counts and skipped/partial checks, including pair-budget limits. intersectionMaxPairTriangleWork can raise cumulative pair work from 8 million to at most 64 million; time and memory caps stay fixed. Validation can be scoped with objectNamePattern/excludeNamePattern. intersectionMaxDepthSamples separately raises optional penetration sampling from 32,000 to at most 256,000 within the same time cap. Sampling completion is separate from candidate-pair coverage. resumeFrom with deep=true continues remaining depth samples on the source's exact revision/settings without repeating collision detection. Only the per-job depth sample budget may change; historical reports without checkpoints cannot resume. Repair suggestions can be alternatives: read suggestedOperationsMode and suggestedOperationsNote before applying them. job_get/job_wait return checked totals plus reportArtifactId. Use job_report with this jobId for complete summary totals and ordered issue/object/print-object pages or section=report for all JSON bytes. Inline details may be truncated; profile three_d_print carries a print report (dimensions mm, volume, filament estimate, bed fit). If a deep run does not give you what you need, mesh.analyze_quality is the SECOND route to the same class of measurement: it reports non_manifold, zero_area_faces, degenerate_edges, sharp_angles, stretched_uvs and interior_faces, and it runs INSIDE a scene_apply batch, so you can measure and repair in one job. A build whose deep validation returned nothing downloaded the GLB and wrote its own topology checker instead, because nothing said this existed.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | ||
| profile | No | Default general; continuation inherits its source profile. | |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| resumeFrom | No | Completed source validation and immutable report; requires deep=true and a partial resumable depth checkpoint. | |
| revisionId | No | "HEAD" (default) uses the project's current head | |
| idempotencyKey | No | Stable caller-chosen key for safe retries of this same request. | |
| additionalChecks | No | Deep-only checks added to the profile: interior_faces tests faces whose every edge has more than two face users; uv_layers checks UV presence. Interior-face topology is not an exhaustive volumetric self-intersection test. | |
| objectNamePattern | No | Restrict validation to objects whose name matches, e.g. "Watch_*". Without this a studio backdrop is included in the print bounding box, reporting a 42 mm product as 1870 mm and making the three_d_print report unusable. | |
| excludeNamePattern | No | Drop objects whose name matches, e.g. "Studio_*". Applied after objectNamePattern. Use this when the parts you care about share no common prefix — which is the normal case for an assembly (Case_Body, Bezel_Ring, Dial_Plate, Crown…). Include-only filtering left no way to say "everything except the backdrop", so the backdrop's own open shell and its bounding box polluted every report and a field build hand-triaged 51 findings down to the 3 that were real. | |
| intersectionMaxDepthSamples | No | Deep-only optional penetration-depth sample budget, shared across detected pairs. Default 32,000; maximum 256,000. Sampling runs after surface-crossing detection and does not change candidate-pair coverage. The existing 20-second deadline and geometry caps still apply. Inspect depthSamplesComplete and each penetrationDepthStatus; a larger budget does not guarantee a depth witness or an exhaustive maximum. Scope objects with objectNamePattern/excludeNamePattern. When pair detection completed and the report contains a partial depth checkpoint, scene_validate.resumeFrom continues its remaining samples on the pinned revision. Otherwise a new scoped validation repeats the work. | |
| intersectionMaxPairTriangleWork | No | Deep-only cumulative intersection pair work: the sum of both objects' evaluated triangle counts for each checked pair. Default 8,000,000; maximum 64,000,000. A larger budget can complete more pairs using cached trees. The 20-second deadline, tree geometry and candidate storage limits remain fixed; optional depth samples have a separate intersectionMaxDepthSamples budget. The job's execution deadline still applies. Retry with a new idempotencyKey; this reruns the check rather than resuming it. Read actual coverage; raising this limit never guarantees a pass. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all default false, so the description carries the full burden of behavioral disclosure — and it delivers: sync-vs-async semantics, Blender opening for deep mode, idempotencyKey required for deep, queued vs completed report content, pair-budget and time caps, sampling completion separate from candidate-pair coverage, resume limitations ('historical reports without checkpoints cannot resume'), possible inline truncation, and the warning that repair suggestions can be alternatives. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long (~450 words) but nearly every sentence carries unique information for an 11-parameter tool with no annotations and no output schema. Purpose is front-loaded, and unlike under-specification, this is dense specification. It loses a point for being a wall of text with structural redundancy (budget figures repeated from the schema) rather than organized sections.
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 meaningful annotations, this description must cover sync/async return shapes, how to retrieve complete results (job_get/job_wait, job_report with section=report), truncation caveats, budget limits, resume rules, repair-suggestion caveats, and the alternative route. It covers all of these, plus a 'what not to do' war story showing the failure mode it is designed to prevent. Nothing an agent needs to call it correctly 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 91%, so the baseline is 3, but the description adds value beyond the schema for several parameters: deep=true's meaning (opens Blender, returns job handle), the practical failure modes for objectNamePattern/excludeNamePattern, the semantics of resumeFrom (continues remaining depth samples without repeating collision detection), and profile-specific output for three_d_print. Some restatement of numeric budgets duplicates the schema, but the added interpretive context justifies a 4.
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 opens with a specific verb+resource statement: 'Validate a revision against a profile; returns issues with codes, severities, and suggested candidate operations.' This names the resource (revision), the verb (validate), and the concrete output shape, and it is immediately distinguishable from siblings like scene_apply, scene_inspect, and mesh.analyze_quality, which the description explicitly contrasts with the primary route.
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 explicit when/when-not guidance: default synchronous shallow path vs deep=true for Blender mesh analysis, when resumeFrom applies versus when a new scoped validation must be repeated, and when objectNamePattern/excludeNamePattern is needed (with concrete failure stories: a 42mm product reported as 1870mm; 51 findings hand-triaged to 3). It names an explicit alternative — 'mesh.analyze_quality is the SECOND route to the same class of measurement' — and tells the agent to read suggestedOperationsMode/suggestedOperationsNote before applying repairs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
texture_maps_createPrepare downloadable texture mapsBInspect
Convert uploaded PNG/JPEG images or supplied maps into a bounded PBR map package without changing the scene. Supplied maps win; derived relief and roughness are labeled approximations. Returns a durable job; job_get.result.textureMaps contains map, ZIP, repeat-preview and manifest artifact IDs. Use image_prompt_assist for source-image guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | ||
| options | No | ||
| profile | No | surface | |
| projectId | Yes | ||
| sourceMaps | No | ||
| materialName | No | Image Material | |
| sourceAssetId | No | ||
| idempotencyKey | Yes | Caller-chosen key. Replaying it with IDENTICAL input returns the EXISTING job instead of queueing a second one — a restarted driver adopts its own in-flight work rather than duplicating or orphaning it. Vary the key to force a new job. Full semantics: the same key with DIFFERENT input is rejected with IDEMPOTENCY_CONFLICT (never silently replayed, so a stale result cannot be mistaken for a fresh one). A key is recorded only once a job is actually created, so a request rejected beforehand (validation, APPROVAL_REQUIRED, quota) leaves the key unused and free to reuse. A key bound to a job keeps resolving to that job even after it fails or is cancelled — use a NEW key to genuinely retry cancelled work. Keys live 48 hours and are scoped per principal+deployment+operation, which means they SPAN SESSIONS: a plain descriptive key like "hero-final-1024-v1" will collide with your own run from yesterday and be rejected. Include a project id or a timestamp. This scope used to be stated only in the conflict error, i.e. after the round trip it cost — a field build lost two that way, ~34 hours after unrelated work had taken the same names. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, destructive=false, openWorld=false), it discloses real behavior: supplied maps take precedence over derived ones, derived relief/roughness are labeled approximations, and the call returns a durable job rather than an inline result. Since annotations already carry the safety profile, this added operational context is meaningful.
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?
Four tight sentences, front-loaded with the core transformation and precedence rule before the return contract and the sibling pointer. Dense domain vocabulary but 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?
The return contract is covered well — it names job_get.result.textureMaps and the artifact types (map, ZIP, repeat-preview, manifest) — and an output schema exists so return values need not be restated. The gap is on the input side: with 13% schema coverage over a large nested options surface, the description is not complete enough for the agent to drive options confidently.
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 only 13% and the parameters are numerous and complex (a 20+ key options object, roles, profiles, sourceMaps with channel/colorSpace/invert). The description gestures at 'uploaded PNG/JPEG images or supplied maps' and mentions relief/roughness, but leaves roles, profile, sourceAssetId, materialName and nearly all options undocumented in both schema and prose.
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: 'Convert uploaded PNG/JPEG images or supplied maps into a bounded PBR map package without changing the scene.' An agent can tell it produces downloadable texture-map artifacts rather than applying materials, but it never names the closest siblings (material_from_image, material_from_maps) so the boundary is inferred, 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?
The description scopes the operation ('without changing the scene') and defers one related need to a sibling ('Use image_prompt_assist for source-image guidance'), which implies when this tool is the right entry point. However, it gives no explicit when-to-use vs material_from_image / material_from_maps, and no stated prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_completeComplete uploadAInspect
Verify an uploaded object (size + checksum), quarantine it, and queue validation. The asset becomes usable only after validation passes.
| Name | Required | Description | Default |
|---|---|---|---|
| checksum | No | Expected SHA-256 checksum of the uploaded file, when supplied. | |
| uploadId | Yes | Upload handle returned by upload_create. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| assetId | Yes | |
| uploadId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With all annotation hints set to false, the description carries the burden and adds meaningful behavioral context: it quarantines the object, queues validation, and prevents usability until validation passes. It does not cover failure behavior or idempotency, but it discloses the main side effects well beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler; the core action is front-loaded and the consequence follows immediately. 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 2-parameter tool with an output schema, the description covers the core workflow and the validation gate. It lacks details on how to track validation completion or handle checksum mismatches, but it is reasonably complete for 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 description coverage is 100%, so both parameters (uploadId and checksum) are already documented with descriptions and a format pattern. The tool description adds no parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific multi-step action—verify (size + checksum), quarantine, and queue validation—with a clear resource (an uploaded object). It is functionally distinct from upload_create and other siblings, though it doesn't name 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: the tool finalizes an existing upload and gates the asset until validation passes. However, the description does not explicitly state when to use it versus alternatives, nor does it mention prerequisites beyond what the schema notes about uploadId originating from upload_create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_createCreate uploadAInspect
Create a direct upload handle for an asset file. Returns an expiring authorized PUT URL. Allowed: .blend .glb .gltf .obj .stl .png .jpg .jpeg .ttf .otf .woff .woff2. Use purpose=font for a typeface, then asset_import it — the font becomes a datablock this project's text.create/text.set_font can name, which is the only way to get branded lettering onto a dial or a label (the built-in Bfont is otherwise the only option).
| Name | Required | Description | Default |
|---|---|---|---|
| sha256 | No | Optional SHA-256 checksum of the file bytes. | |
| purpose | No | How the validated asset will be used: import, texture, or font. | asset_import |
| byteSize | Yes | Exact file size in bytes before upload. | |
| filename | Yes | Original filename, including a supported extension. | |
| projectId | No | Stable project ID returned by project_create or projects_list. | |
| contentType | Yes | MIME type to send with the raw upload bytes. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| method | Yes | |
| headers | Yes | |
| uploadId | Yes | |
| expiresAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses key behavior: the URL is expiring and authorized, and the tool only creates a handle rather than performing the upload itself. It also lists allowed extensions. Annotations already indicate non-read-only, but the description adds meaningful context about the expiring URL and the purpose-specific flow.
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 concise and front-loaded with the core behavior. The font explanation is a bit lengthy but earns its place by clarifying a non-obvious workflow. No redundant filler; each sentence contributes 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?
Given an output schema exists (covering return values) and annotations convey the mutation nature, the description covers the essential behavior: creating an expiring PUT URL, allowed extensions, and the font-specific flow. It doesn't mention the subsequent upload_complete step, but that is a workflow detail arguably outside this tool's own description. Overall, it is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds semantic value by explaining the purpose=font workflow and explicitly tying it to asset_import, which goes beyond the enum descriptions. It also relates allowed extensions to filename, reinforcing the schema's 'supported extension' note.
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 clearly states 'Create a direct upload handle' — a specific verb, resource, and target. It also describes the output ('expiring authorized PUT URL'), which distinguishes it from siblings like upload_complete and asset_import. The allowed extensions list further scopes the tool's 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?
Provides a clear workflow for fonts ('Use purpose=font for a typeface, then asset_import it') and implies general use cases for other asset types. It doesn't explicitly list when not to use this tool or name alternatives, but the context is clear enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhooks_deleteDelete a webhookADestructiveInspect
Remove a registered webhook. Requires owner/admin.
| Name | Required | Description | Default |
|---|---|---|---|
| webhookId | Yes | Webhook ID to remove from this deployment. |
Output Schema
| Name | Required | Description |
|---|---|---|
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the destructive nature is known. The description adds a specific behavioral requirement not present in annotations: 'Requires owner/admin.' This is meaningful context that helps the agent anticipate authorization failures. It does not contradict any annotation and adds value beyond the structured metadata.
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 extremely concise: one sentence for the core action and a short permission note. It is front-loaded with the purpose and contains no fluff. Every word 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 simple single-parameter delete operation with an output schema present and destructiveHint annotation, the description covers the essential points: what it does and who can do it. It does not elaborate on side effects or irreversibility, but these are implied by the destructive annotation and the simple nature of the operation. It is adequate, though not exhaustive.
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%; the webhookId parameter already has a clear description ('Webhook ID to remove from this deployment.'). The tool description adds no additional parameter-level detail, so it does not improve on the schema. Baseline 3 is 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 states a clear verb-resource pair: 'Remove a registered webhook.' This unambiguously identifies the operation and distinguishes it from sibling tools like webhooks_list (list) and webhooks_set (create/update). The title 'Delete a webhook' reinforces the 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 description provides no guidance on when to use this tool versus alternatives. It only mentions a permission requirement ('Requires owner/admin'), which is a prerequisite, not usage context. There is no mention of scenarios, conditions, or exclusions relative to other webhook tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhooks_listList webhooksARead-onlyIdempotentInspect
List registered webhooks with delivery health (secrets are never returned).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint as false, establishing a safe read operation. The description adds a critical behavioral detail—'secrets are never returned'—which is beyond what annotations provide and is important for security expectations. This enriches the agent's understanding of the tool's guarantees.
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 a single, tightly crafted sentence. It front-loads the core action ('List registered webhooks') and then appends the additional useful qualifiers ('with delivery health', 'secrets are never returned') without any fluff. Every word 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?
Given the tool's simplicity—no parameters, no required fields, and an existing output schema—the description is sufficient. It conveys the essential purpose and the key security constraint. Since the output schema exists, the description does not need to detail return structure, and nothing needed to call the tool correctly 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 accepts zero parameters, so there is nothing to explain. Per the rubric, 0 params yields a baseline score of 4. The description does not need to add parameter semantics since the schema is empty and coverage is 100%.
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 clearly states the verb 'List', the resource 'webhooks', and adds specific context: 'with delivery health' and the security note that secrets are never returned. This distinguishes it from sibling tools like webhooks_set and webhooks_delete without ambiguity.
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 explicit guidance is given on when to use this tool versus alternatives. It does not mention that webhooks_set is for creating or that webhooks_delete is for removal, nor any situational context. The usage is implied by the verb 'List' but there is no direct comparison or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhooks_setRegister a webhookADestructiveInspect
Register an https URL to receive job lifecycle events (job.completed / job.failed / job.cancelled) as HMAC-signed POSTs — push instead of polling. The whsec_ signing secret is returned ONCE; verify sceneplane-signature: t=<ms>,v1=hmac_sha256(secret, "<t>.<body>"). Requires owner/admin.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTPS endpoint that receives signed terminal job events. | |
| events | No | Job event types to deliver to this webhook. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| secret | Yes | |
| webhookId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite metadata annotations indicating destructiveness, the description adds valuable behavioral context: the signing secret is returned only once, and it explains the exact signature verification format. It also notes the owner/admin permission, which is beyond what annotations provide. No contradiction with annotations is present.
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 no fluff. The primary purpose is stated first, followed by crucial security details and permission context. Every clause delivers specific information, making it efficient and easy to parse.
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?
Given the tool has an output schema (not shown) and annotations, the description covers all critical operational aspects: what events are delivered, how the signature is verified, and the one-time secret exposure. It does not explicitly mention potential side effects (e.g., overwriting an existing webhook), but this is partly covered by the destructiveHint annotation. Overall, it is 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 description coverage is 100% and both parameters are well-documented in the schema itself (url and events with defaults and enums). The tool description only adds a minor clarification (https requirement) and does not meaningfully compensate for any schema gaps, 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 ('Register'), a specific resource ('an https URL'), and the exact purpose: receiving job lifecycle events via HMAC-signed POSTs, explicitly contrasting with polling. It clearly distinguishes itself from siblings like webhooks_delete and webhooks_list by describing the action of registration.
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 implicitly communicates when to use this tool ('push instead of polling') and mentions the permission requirement ('Requires owner/admin'). It does not explicitly state when not to use it or name alternatives, but the context is clear enough for an agent to decide between setting a webhook and polling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
webhook_testSend a test webhook eventAInspect
POST a signed synthetic event ({event: "webhook.test"}) to a registered webhook and report the receiver's HTTP status. Requires owner/admin.
| Name | Required | Description | Default |
|---|---|---|---|
| webhookId | Yes | Webhook ID returned by webhooks_set or webhooks_list. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| delivered | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the description doesn't need to restate those. It adds useful behavioral context: the event is signed, synthetic, and the tool reports the receiver's HTTP status. It also discloses the permission requirement (owner/admin), which is valuable beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the action, includes the payload example, and ends with the permission requirement. Every clause earns its place; no filler or redundancy.
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 tool with a full output schema and clear annotations, the description is nearly complete. It covers the action, payload, permission, and outcome. The only minor gap is not describing what happens on failure (e.g., non-2xx status), but the output schema likely covers that.
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 webhookId well. The description adds context by explaining the webhookId is for a registered webhook and that the event is sent to it, but it doesn't need to add more since there's only one parameter and the schema covers it fully.
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 clearly states the action (POST a signed synthetic event), the resource (a registered webhook), and the expected outcome (report the receiver's HTTP status). It also includes the event payload shape and permission requirement, making it unambiguous and distinguishable from sibling webhook tools like webhooks_set or webhooks_delete.
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 use this tool: to test a registered webhook by sending a synthetic event. It doesn't explicitly name alternatives or exclusions, but the sibling context (webhooks_set, webhooks_list, webhooks_delete) makes the use case clear. A brief 'use this to verify a webhook endpoint' would have made it fully explicit.
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.
5 tool updates
- Changed
material_from_image8 fields changed- added
Input schema / properties / baseColor / itemsAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / baseColor / maxItemsAdded value: +4 - added
Input schema / properties / baseColor / minItemsAdded value: +4 - removed
Input schema / properties / baseColor / prefixItemsRemoved value: -[ - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - } -] - added
Input schema / properties / options / properties / roughnessRange / itemsAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / options / properties / roughnessRange / maxItemsAdded value: +2 - added
Input schema / properties / options / properties / roughnessRange / minItemsAdded value: +2 - removed
Input schema / properties / options / properties / roughnessRange / prefixItemsRemoved value: -[ - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - } -]
- Changed
material_from_maps8 fields changed- added
Input schema / properties / options / properties / roughnessRange / itemsAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / options / properties / roughnessRange / maxItemsAdded value: +2 - added
Input schema / properties / options / properties / roughnessRange / minItemsAdded value: +2 - removed
Input schema / properties / options / properties / roughnessRange / prefixItemsRemoved value: -[ - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - } -] - added
Input schema / properties / uvScale / itemsAdded value: +{ + "exclusiveMinimum": 0, + "maximum": 10000, + "type": "number" +} - added
Input schema / properties / uvScale / maxItemsAdded value: +2 - added
Input schema / properties / uvScale / minItemsAdded value: +2 - removed
Input schema / properties / uvScale / prefixItemsRemoved value: -[ - { - "exclusiveMinimum": 0, - "maximum": 10000, - "type": "number" - }, - { - "exclusiveMinimum": 0, - "maximum": 10000, - "type": "number" - } -]
- Changed
material_recipe12 fields changed- added
Input schema / properties / tint / itemsAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / tint / maxItemsAdded value: +3 - added
Input schema / properties / tint / minItemsAdded value: +3 - removed
Input schema / properties / tint / prefixItemsRemoved value: -[ - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - } -] - added
Input schema / properties / uvOffset / itemsAdded value: +{ + "maximum": 10000, + "minimum": -10000, + "type": "number" +} - added
Input schema / properties / uvOffset / maxItemsAdded value: +2 - added
Input schema / properties / uvOffset / minItemsAdded value: +2 - removed
Input schema / properties / uvOffset / prefixItemsRemoved value: -[ - { - "maximum": 10000, - "minimum": -10000, - "type": "number" - }, - { - "maximum": 10000, - "minimum": -10000, - "type": "number" - } -] - added
Input schema / properties / uvScale / itemsAdded value: +{ + "exclusiveMinimum": 0, + "maximum": 10000, + "type": "number" +} - added
Input schema / properties / uvScale / maxItemsAdded value: +2 - added
Input schema / properties / uvScale / minItemsAdded value: +2 - removed
Input schema / properties / uvScale / prefixItemsRemoved value: -[ - { - "exclusiveMinimum": 0, - "maximum": 10000, - "type": "number" - }, - { - "exclusiveMinimum": 0, - "maximum": 10000, - "type": "number" - } -]
- Changed
preset_apply4 fields changed- added
Input schema / properties / color / itemsAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / color / maxItemsAdded value: +3 - added
Input schema / properties / color / minItemsAdded value: +3 - removed
Input schema / properties / color / prefixItemsRemoved value: -[ - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - } -]
- Changed
texture_maps_create4 fields changed- added
Input schema / properties / options / properties / roughnessRange / itemsAdded value: +{ + "maximum": 1, + "minimum": 0, + "type": "number" +} - added
Input schema / properties / options / properties / roughnessRange / maxItemsAdded value: +2 - added
Input schema / properties / options / properties / roughnessRange / minItemsAdded value: +2 - removed
Input schema / properties / options / properties / roughnessRange / prefixItemsRemoved value: -[ - { - "maximum": 1, - "minimum": 0, - "type": "number" - }, - { - "maximum": 1, - "minimum": 0, - "type": "number" - } -]
5 tool updates
- Added
audio_inspect - Changed
job_report3 fields changed- added
Input schema / properties / filterIdAdded value: +{ + "description": "Continuation filter identity; follow the returned continuation verbatim.", + "pattern": "^[0-9a-f]{64}$", + "type": "string" +} - added
Input schema / properties / filtersAdded value: +{ + "additionalProperties": false, + "description": "Issues only. Match severity, any listed object, and any listed code; original issue order is retained.", + "properties": { + "codes": { + "items": { + "maxLength": 80, + "type": "string" + }, + "maxItems": 32, + "minItems": 1, + "type": "array" + }, + "objectIds": { + "items": { + "maxLength": 64, + "type": "string" + }, + "maxItems": 100, + "minItems": 1, + "type": "array" + }, + "severity": { + "enum": [ + "error", + "warning", + "info", + "unknown" + ], + "type": "string" + } + }, + "type": "object" +} - changed
Output schema / properties / continuation / anyOfPrevious value: -[ - { - "additionalProperties": {}, - "properties": { - "artifactId": { - "description": "Artifact ID returned by a completed job or artifacts_list.", - "type": "string" - }, - "jobId": { - "description": "Durable job ID returned when an asynchronous operation is queued.", - "type": "string" - }, - "offset": { - "maximum": 9007199254740991, - "minimum": -9007199254740991, - "type": "integer" - }, - "section": { - "enum": [ - "summary", - "issues", - "objects", - "printObjects", - "operationResults", - "operationEffects", - "operationWarnings", - "exportMaterials", - "exportObjects", - "report" - ], - "type": "string" - } - }, - "required": [ - "jobId", - "section", - "offset", - "artifactId" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": {}, + "properties": { + "artifactId": { + "description": "Artifact ID returned by a completed job or artifacts_list.", + "type": "string" + }, + "filterId": { + "type": "string" + }, + "filters": { + "additionalProperties": {}, + "properties": { + "codes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "objectIds": { + "items": { + "type": "string" + }, + "type": "array" + }, + "severity": { + "enum": [ + "error", + "warning", + "info", + "unknown" + ], + "type": "string" + } + }, + "type": "object" + }, + "jobId": { + "description": "Durable job ID returned when an asynchronous operation is queued.", + "type": "string" + }, + "offset": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "section": { + "enum": [ + "summary", + "issues", + "objects", + "printObjects", + "operationResults", + "operationEffects", + "operationWarnings", + "exportMaterials", + "exportObjects", + "report" + ], + "type": "string" + } + }, + "required": [ + "jobId", + "section", + "offset", + "artifactId" + ], + "type": "object" + }, + { + "type": "null" + } +]
- Changed
render_animation1 field changed- added
Input schema / properties / audioTracksAdded value: +{ + "items": { + "additionalProperties": false, + "properties": { + "artifactId": { + "pattern": "^art_[0-9a-z]{10,40}$", + "type": "string" + }, + "gainDb": { + "default": 0, + "maximum": 12, + "minimum": -60, + "type": "number" + }, + "loop": { + "default": false, + "type": "boolean" + }, + "sourceOffsetSeconds": { + "default": 0, + "maximum": 120, + "minimum": 0, + "type": "number" + }, + "startSeconds": { + "default": 0, + "maximum": 100, + "minimum": 0, + "type": "number" + } + }, + "required": [ + "artifactId" + ], + "type": "object" + }, + "maxItems": 8, + "minItems": 1, + "type": "array" +}
- Changed
scene_apply2 fields changed- added
Output schema / properties / dimensionChecksAdded value: +{ + "items": { + "additionalProperties": {}, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / geometrySimulationAdded value: +{ + "const": "not_performed", + "type": "string" +}
- Changed
scene_validate5 fields changed- changed
Input schema / properties / intersectionMaxDepthSamples / descriptionPrevious value: -"Deep-only optional penetration-depth sample budget, shared across detected pairs. Default 32,000; maximum 256,000. Sampling runs after surface-crossing detection and does not change candidate-pair coverage. The existing 20-second deadline and geometry caps still apply. Inspect depthSamplesComplete and each penetrationDepthStatus; a larger budget does not guarantee a depth witness or an exhaustive maximum. Scope objects with objectNamePattern/excludeNamePattern and retry with a new idempotencyKey when needed."New value: +"Deep-only optional penetration-depth sample budget, shared across detected pairs. Default 32,000; maximum 256,000. Sampling runs after surface-crossing detection and does not change candidate-pair coverage. The existing 20-second deadline and geometry caps still apply. Inspect depthSamplesComplete and each penetrationDepthStatus; a larger budget does not guarantee a depth witness or an exhaustive maximum. Scope objects with objectNamePattern/excludeNamePattern. When pair detection completed and the report contains a partial depth checkpoint, scene_validate.resumeFrom continues its remaining samples on the pinned revision. Otherwise a new scoped validation repeats the work." - removed
Input schema / properties / profile / defaultRemoved value: -"general" - added
Input schema / properties / profile / descriptionAdded value: +"Default general; continuation inherits its source profile." - added
Input schema / properties / resumeFromAdded value: +{ + "additionalProperties": false, + "description": "Completed source validation and immutable report; requires deep=true and a partial resumable depth checkpoint.", + "properties": { + "artifactId": { + "description": "Artifact ID returned by a completed job or artifacts_list.", + "type": "string" + }, + "jobId": { + "description": "Durable job ID returned when an asynchronous operation is queued.", + "type": "string" + } + }, + "required": [ + "jobId", + "artifactId" + ], + "type": "object" +} - removed
Input schema / properties / revisionId / defaultRemoved value: -"HEAD"
3 tool updates
- Added
material_nodes - Added
material_recipe - Changed
scene_inspect2 fields changed- added
Input schema / properties / includeNodeGraphsAdded value: +{ + "default": false, + "description": "Read stored node graphs with detail=materials/full and exactly one materialId or limit=1. Includes counts and complete/truncated/unavailable status.", + "type": "boolean" +} - added
Input schema / properties / materialIdsAdded value: +{ + "description": "Filter materials by stable mat_ IDs before pagination, independently of object filters.", + "items": { + "type": "string" + }, + "maxItems": 16, + "minItems": 1, + "type": "array" +}
4 tool updates
- Added
image_prompt_assist - Changed
material_from_image3 fields changed- added
Input schema / properties / optionsAdded value: +{ + "additionalProperties": false, + "properties": { + "alphaCutoff": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "alphaMode": { + "enum": [ + "opaque", + "mask", + "blend" + ], + "type": "string" + }, + "displacementMode": { + "enum": [ + "none", + "bump", + "displacement" + ], + "type": "string" + }, + "emissionStrength": { + "maximum": 10000, + "minimum": 0, + "type": "number" + }, + "heightMidlevel": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "heightScale": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "heightSource": { + "enum": [ + "none", + "luminance", + "alpha" + ], + "type": "string" + }, + "maxSize": { + "maximum": 4096, + "minimum": 8, + "type": "integer" + }, + "metallic": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "normalConvention": { + "enum": [ + "opengl", + "directx" + ], + "type": "string" + }, + "normalStrength": { + "maximum": 16, + "minimum": 0, + "type": "number" + }, + "outputNormalConvention": { + "enum": [ + "opengl", + "directx" + ], + "type": "string" + }, + "packing": { + "enum": [ + "none", + "orm" + ], + "type": "string" + }, + "physicalCoverageMeters": { + "additionalProperties": false, + "properties": { + "height": { + "exclusiveMinimum": 0, + "maximum": 100000, + "type": "number" + }, + "width": { + "exclusiveMinimum": 0, + "maximum": 100000, + "type": "number" + } + }, + "required": [ + "width", + "height" + ], + "type": "object" + }, + "roughness": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "roughnessMode": { + "enum": [ + "constant", + "luminance", + "inverted_luminance" + ], + "type": "string" + }, + "roughnessRange": { + "prefixItems": [ + { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + { + "maximum": 1, + "minimum": 0, + "type": "number" + } + ], + "type": "array" + }, + "seamMode": { + "enum": [ + "analyze", + "blend" + ], + "type": "string" + }, + "specular": { + "maximum": 1, + "minimum": 0, + "type": "number" + }, + "tile": { + "enum": [ + "none", + "x", + "y", + "xy" + ], + "type": "string" + } + }, + "type": "object" +} - added
Input schema / properties / profileAdded value: +{ + "enum": [ + "surface", + "decal", + "supplied" + ], + "type": "string" +} - added
Input schema / properties / rolesAdded value: +{ + "items": { + "enum": [ + "base_color", + "normal", + "height", + "roughness", + "metallic", + "opacity", + "emission", + "ao", + "specular", + "specular_color", + "gloss", + "cavity", + "diffuse" + ], + "type": "string" + }, + "maxItems": 13, + "minItems": 1, + "type": "array" +}
- Added
material_from_maps - Added
texture_maps_create
55 tool updates
- First observed
artifact_get - First observed
artifacts_list - First observed
asset_generate_3d - First observed
asset_generate_status - First observed
asset_import - First observed
asset_library_import - First observed
asset_preview - First observed
assets_categories - First observed
assets_search - First observed
audio_generate - First observed
deployment_create - First observed
deployment_delete - First observed
deployment_policy_update - First observed
deployment_update - First observed
deployments_list - First observed
docs_bpy_lookup - First observed
docs_bpy_search - First observed
docs_manual_get - First observed
docs_manual_search - First observed
docs_operations - First observed
export_create - First observed
integrations_delete - First observed
integrations_list - First observed
integrations_set - First observed
job_cancel - First observed
job_get - First observed
job_report - First observed
job_wait - First observed
jobs_list - First observed
material_from_image - First observed
organizations_list - First observed
platform_status - First observed
preset_apply - First observed
presets_list - First observed
project_create - First observed
project_delete - First observed
project_get - First observed
project_update - First observed
projects_list - First observed
render_animation - First observed
render_create - First observed
render_turntable - First observed
revision_diff - First observed
revision_restore - First observed
scene_apply - First observed
scene_inspect - First observed
scene_script - First observed
scene_snapshot - First observed
scene_validate - First observed
upload_complete - First observed
upload_create - First observed
webhook_test - First observed
webhooks_delete - First observed
webhooks_list - First observed
webhooks_set
Related MCP Connectors
Free text/image → 3D: generate, rig, avatar-ify, and refine GLB models. No auth, no payment.
- OwlCADOAuthcom.owlcad
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
3D avatar/asset foundry: text/image -> rigged, validated, engine-ready GLB via x402.
Turn text or an image into an animation-ready 3D model (GLB): generate, rig, animate, retexture.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceBlenderMCP connects Blender to AI agents via the Model Context Protocol, enabling direct 3D object manipulation, material application, asset downloads, and Python code execution with secure token-authenticated local communication.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to fully control Blender through 50+ tools for 3D modeling, animation, materials, and scene management via HTTP endpoints.-
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables AI agents to control Blender through natural language for 3D scene creation, animation, and rendering. It provides over 550 actions and direct Python execution via a bridge to a live local Blender session.7MIT
- AlicenseCqualityBmaintenanceEnables AI agents to build game assets in Blender by modeling, lighting, rendering previews to inspect and correct, validating against engine budgets, and exporting to GLB/FBX.126MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.