Sceneplane
Server Details
Cloud Blender for AI agents: build, inspect, render and animate 3D scenes over remote MCP. Keep editable .blend projects and export GLB or STL. Make your first 3D asset free—30 compute minutes per UTC month, no credit card. First 100 eligible Free account owners to use all 30 minutes in one UTC month by December 31, 2026 UTC receive one calendar month of beta free: 4 compute hours per UTC month, 2 concurrent workers per deployment, 2 deployments, 2048×2048 renders at up to 256 samples, and 10 GiB storage. Existing usage counts toward the 4-hour allowance. Limited to 100 rewards; expires January 1, 2027 00:00 UTC. Free resumes afterward without an automatic charge. Examples, eligibility and terms: https://sceneplane.online/launch?utm_source=glama&utm_medium=directory&utm_campaign=first100
- Status
- Healthy
- Uptime
- 50.1% over 82 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 65 tools
Given 65 tools, boundaries are unusually well drawn: the descriptions explicitly route between near-neighbours (scene_apply vs scene_script, asset_import vs asset_library_import vs upload_*, material_from_image vs material_from_maps vs material_recipe vs texture_maps_create, render_create vs render_turntable vs scene_snapshot, job_get vs job_wait vs job_report). A few pairs still require careful reading — material_from_image/material_from_maps/texture_maps_create, and docs_bpy_search/docs_manual_search — but each has a stated tie-breaker. No two tools appear to do the same thing.
Predominantly snake_case noun_verb throughout (artifact_get, job_wait, project_create, deployment_policy_update), which is predictable and readable. Minor deviations: singular/plural drifts (artifact_get vs artifacts_list, job_* vs jobs_list, asset_* vs assets_search/assets_categories) and a lone webhook_test among webhooks_*. The documentation tools also use a different docs_<domain>_<verb> shape, but consistently.
The surface genuinely spans many domains (projects, revisions, scenes, renders, exports, assets, materials, audio, vegetation, jobs, deployments, webhooks, integrations, docs), so breadth is defensible rather than padded. Still, 65 tools is far past the comfortable range for an agent to hold in context, and some families (docs_manual_get/search, assets_* vs asset_*, texture_maps_create vs material_from_maps) could be collapsed.
Lifecycle coverage is strong: project CRUD, revision diff/restore, scene inspect/apply/script/validate/snapshot, render stills/animation/turntable, export, full asset pipeline (search, preview, upload, import, generate, status), material and texture authoring, audio, jobs, deployments, webhooks, integrations. Gaps are minor — no delete/cleanup for artifacts or uploads, no organization/role management beyond listing, and material/asset discovery depends on scene_inspect rather than a dedicated listing tool.
Available Tools
65 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 declare readOnly/idempotent/non-destructive, so the description focuses on what annotations cannot say: results are newest-first, each entry carries its producing revision, and the payload does not include download URLs. Pagination behavior (the cursor/nextCursor cycle) is only implied via the schema, which keeps it 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?
Three tight sentences, front-loaded with the action and scope, then the recoverability note, then the pointer to artifact_get. Every clause carries information an agent would otherwise have to infer.
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 annotations covering safety, a full output schema covering return shape and nextCursor, and 100% parameter coverage, the description only needs to supply ordering, filtering, and cross-tool routing — all of which it does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented including kind examples and the cursor's row-offset semantics. The description only restates that filtering is by revision or kind, adding no format or constraint detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource ('List a project's artifacts') plus the content types it covers (renders, exports, previews, audio), the ordering (newest-first) and the filter axes. It is immediately distinguishable from artifact_get, which the description explicitly defers download URLs to.
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 routes the agent away from two siblings with stated conditions: download URLs come from artifact_get, and recovering a lost artifact id does not require walking jobs_list. There is no explicit 'when not to use' framing, but the alternatives are named with reasons, which is more than most definitions do.
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
External generation, not a catalog search: start only when the user has chosen or already authorized this generation path. Do not spend provider credits to discover candidate assets. 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 cover the safety profile (non-readOnly, openWorld, non-idempotent, non-destructive), and the description adds the costly details they don't: this consumes external provider credits, each provider requires an integrations_set token first, and output is one freestanding object per task. The provider-capability matrix and the poll→import chain are exactly the context needed before invoking.
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 the disambiguation and the authorization gate, then capabilities, then the follow-up workflow. Dense but every sentence carries operational information; nothing repeats the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a credit-consuming external generation call with three params and an output schema, the description covers cost, auth prerequisites, argument/provider compatibility, scope constraints, and the full downstream workflow. 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%, so baseline is 3, but the description adds real semantics the schema lacks: which providers accept imageUrl versus prompt-only (hyper3d), and the constraint that prompt should describe a single freestanding asset. Provider-token requirements further constrain the enum 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?
Opens with a specific verb+resource ('Start a text/image → 3D generation') and immediately distinguishes itself from the catalog-search siblings ('External generation, not a catalog search'). An agent can tell it apart from assets_search and asset_import without opening any 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?
Explicit gating condition ('start only when the user has chosen or already authorized this generation path'), an explicit prohibition ('Do not spend provider credits to discover candidate assets'), and named alternatives for the excluded cases (scene ops for ground planes/assemblies, duplicating for reuse). It also routes to the follow-up tools: asset_generate_status then asset_library_import.
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 the current project head as a new revision. Use upload_create then upload_complete before this tool; for library slugs or generated provider models use asset_library_import. Stale base revisions reject with REVISION_CONFLICT. Returns an asynchronous job handle; job_wait/job_get reveal success, errors and the committed revision.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Uploaded file format. auto (default) sniffs file bytes; specify gltf or stl explicitly for those formats. font covers supported uploaded font files. | auto |
| assetId | Yes | Validated ast_… asset ID returned by upload_complete; quarantined or rejected uploads cannot be imported. | |
| placement | No | Requested placement policy; currently both values preserve importer-native transforms. Neither recenters the asset or moves it to the scene cursor. | origin |
| projectId | Yes | Stable project ID returned by project_create or projects_list. | |
| unitPolicy | No | Requested unit convention; currently reserved, with importer-native units preserved for either value. Inspect dimensions and scale explicitly after import. | 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 | Existing destination collection name or ID, up to 64 characters. If absent or not found, importer collection links are preserved. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds genuinely new behavior: asynchronous job handle return, job_wait/job_get for resolving success/errors, REVISION_CONFLICT rejection on stale bases, and that quarantined/rejected uploads cannot be imported. This is rich context beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, each carrying distinct information (purpose, prerequisites/alternative, error condition, return handling). Front-loaded with purpose and prerequisites; only minor density cost from packing routing and error semantics together.
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 an output schema present, the description need not detail return values, yet it still tells the agent the return is a job handle and how to resolve it. Combined with annotations, the error path, prerequisites, and alternative routing, an agent has everything needed to invoke 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?
Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics by tying baseRevisionId to the REVISION_CONFLICT outcome and the linear-history rule. It does not restate per-parameter detail, but it meaningfully frames how the inputs interact.
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 (Import), resource (validated uploaded asset), and target (current project head as a new revision). It also explicitly names the sibling it is not (asset_library_import), so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite chain (upload_create then upload_complete before this tool) and an explicit alternative with its triggering condition (library slugs or generated provider models -> asset_library_import). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
asset_library_importImport a library assetADestructiveInspect
Import a library asset into a project as a new revision. Returns a job handle. Use only after the user has chosen the asset/action or delegated source selection; search and asset_preview can present options without importing or creating a project. 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?
Beyond annotations it discloses source-specific side effects: HDRIs become the world environment, models join the scene, texture sets create a wired PBR material, and Sketchfab requires an org token. It doesn't spell out that replacing the world environment is the destructive aspect flagged by destructiveHint, nor what a job handle implies for completion.
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 what it does and returns, then proceeds source by source. Dense but every clause carries operative information; only the nested parentheticals make it slightly hard 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?
Covers the high-risk decisions for a 10-parameter mutating import: source, slug format, sizing, auth, and revision targeting. An output schema exists so return values needn't be described, and the 'job handle' mention is enough; minor gaps are the enum-only parameters.
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 30%, and the description compensates for slug (per-source semantics), targetSize (with concrete meter anchors), applyToObjects, and baseRevisionId indirectly, but resolution, materialName, and type go unexplained in both places. Strong on the hardest parameters, silent on the rest.
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 ('Import a library asset into a project as a new revision') and adds an outcome ('Returns a job handle'). It does not distinguish itself from the sibling asset_import, which is the one ambiguity an agent would still need to resolve elsewhere.
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 precondition ('Use only after the user has chosen the asset/action or delegated source selection') and names the discovery alternatives (search, asset_preview) that present options without importing. It lacks an explicit when-not relative to asset_import, but the selection ritual is clear.
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
Read-only preview of an asset's thumbnail as an inline image before importing it. For candidate suggestions, show this actual preview with its source/license and offer reuse, adapt or build from scratch unless already chosen. slug is the exact, case-preserved Poly Haven slug or Sketchfab uid returned by assets_search. An unavailable preview is not an invented image.
| 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 cover read-only, idempotent, open-world, and non-destructive behavior. The description adds valuable behavioral detail: it returns an inline image, requires exact case-preserved slugs, and crucially states 'An unavailable preview is not an invented image' to prevent hallucination.
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 workflow guidance, slug format, and failure behavior. Every sentence earns its place, though the second sentence is somewhat long and agent-instructional.
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 preview tool with full schema coverage and rich annotations, the description covers purpose, return format (inline image), slug requirements, and failure behavior. It is nearly complete, though it doesn't specify image dimensions or error response format.
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 baseline is 3. The description adds meaning beyond the schema by specifying that slug is 'exact, case-preserved' and that it can be a 'Poly Haven slug or Sketchfab uid', which clarifies format and source mapping.
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 (preview), resource (asset's thumbnail), output format (inline image), and timing (before importing). This clearly distinguishes it from sibling tools like assets_search, asset_import, and asset_generate_3d.
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 to use it before importing and for candidate suggestions with source/license, offering reuse/adapt/build. It does not name explicit alternatives or when-not-to-use cases, but the context is clear enough for an agent.
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 libraryARead-onlyIdempotentInspect
Read-only search of existing 3D asset catalogs; returns real slugs for asset_library_import. For new models without an explicit/prior source choice, check relevant existing project assets and search available catalogs before building. Preview a few suitable results with source/license, then ask whether to reuse, adapt or build from scratch. Honor explicit from-scratch choices. source=polyhaven (default, CC0 — HDRIs, PBR texture sets, models) needs no setup. source=sketchfab searches public downloadable-model metadata (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 | Catalog to search. Sketchfab public search can work without a token; import needs an approved connection. | polyhaven |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| rejections | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond readOnlyHint/idempotentHint/openWorldHint: polyhaven needs no setup (CC0 HDRIs, textures, models), while sketchfab requires integrations_set provider=sketchfab for import, is limited to type=model, and each hit's license must be honored. Setup/auth and licensing constraints are exactly what 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?
Front-loads purpose in the first clause and every sentence carries routing or constraint information. It is a dense paragraph that folds workflow coaching into one long run of clauses, which costs a little scannability but adds no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return format needn't be explained, and the description still notes hits carry source/license. All decision-relevant context — default source, setup requirements, license obligations, downstream tool — is present; only minor detail like result paging is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds meaning the schema does not — that source=polyhaven is the default with no setup, and that sketchfab only works for type=model. It does not expand on query/limit semantics, so it sits just 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?
Opens with a specific verb+resource+scope ('Read-only search of existing 3D asset catalogs') and names the downstream consumer ('returns real slugs for asset_library_import'), which distinguishes it from asset_library_import and asset_generate_3d. An agent can route correctly without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to search (no explicit/prior source choice; before building), what to do with results (preview a few with source/license, then ask reuse vs adapt vs build), and the exclusion ('Honor explicit from-scratch choices'). This is a genuine decision procedure, not implied 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
Change execution limits, approvals or scripting for an existing deployment; omitted fields remain unchanged. Requires owner/admin and deployments:admin scope for narrowed credentials; only the owner may toggle dangerousScriptingEnabled. May restrict future work or enable arbitrary Blender Python. Validates platform and plan ceilings, records a policy version, and rejects concurrent policy edits. Use deployment_update to rename or enable/disable the workspace, or deployments_list to find its slug. Returns policyVersion and scriptingEnabled.
| Name | Required | Description | Default |
|---|---|---|---|
| deployment | Yes | deployment slug | |
| maxQueuedJobs | No | Maximum queued jobs for this deployment, 1-200, subject to the account plan; a full queue rejects new submissions. | |
| renderMaxWidth | No | Maximum render width in pixels, 16-4096, additionally capped by the account plan. | |
| renderMaxHeight | No | Maximum render height in pixels, 16-4096, additionally capped by the account plan. | |
| renderMaxSamples | No | Maximum render samples, 1-4096, additionally capped by the account plan. | |
| jobTimeoutSeconds | No | Execution timeout per job in seconds, 10-3600, additionally bounded by the account plan. | |
| maxConcurrentJobs | No | Concurrent worker/job limit for this deployment, 1-20, subject to the account plan. Raising this does not bypass shared account quotas. | |
| renderApprovalThreshold | No | width*height*samples above which renders need interactive approval; capped at the plan's renderMaxWidth*renderMaxHeight*renderMaxSamples | |
| maxOperationsPerMutation | No | Maximum scene_apply operations per batch, 1-128. Omit to preserve the current batch limit. | |
| dangerousScriptingEnabled | No | Owner-only switch for scene_script arbitrary Blender Python. True enables scripting; false disables it. Omit to leave the existing security policy unchanged. | |
| approvalRequiredForRestore | No | Whether revision_restore must obtain interactive approval before replacing the current scene head. Omit to preserve the existing setting. |
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?
Goes well beyond the annotations (destructiveHint=true, idempotentHint=false) by disclosing partial-update semantics ('omitted fields remain unchanged'), the owner-only restriction on dangerousScriptingEnabled, plan/platform ceiling validation, policy version recording, and rejection of concurrent edits. This is exactly the behavioral context the annotations cannot carry.
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 the core action and the omitted-fields rule, then routing guidance. Dense with no filler, but it packs many clauses into a single long paragraph, which slightly hurts scannability.
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 destructive 11-param mutation with an output schema, the description covers auth requirements, partial-update behavior, concurrency, validation, and even the return fields (policyVersion, scriptingEnabled). 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 100%, so the schema already documents all 11 parameters and the baseline is 3. The description still adds meaning not in the schema: omitted fields preserve current values, and only the owner may flip dangerousScriptingEnabled. That extra semantic is useful but limited in scope, so a 4 rather than a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Change execution limits, approvals or scripting for an existing deployment') and explicitly carves out scope against siblings like deployment_update and deployments_list. An agent can distinguish it from the other deployment_* tools without opening any 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?
Names the alternatives and the conditions that route elsewhere: 'Use deployment_update to rename or enable/disable the workspace, or deployments_list to find its slug.' Also gives the prerequisite auth (owner/admin and deployments:admin). Explicit when-to-use and when-not.
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 an existing deployment; disabling blocks new work. Requires owner/admin and deployments:admin scope for narrowed credentials. Use deployments_list to find its slug, deployment_policy_update for execution limits or scripting, and deployment_create for a new workspace. Returns the updated slug and ok flag.
| 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 flag destructiveHint=true and readOnlyHint=false, so the safety profile is known; the description adds real value beyond that by naming the required role/scope (owner/admin, deployments:admin for narrowed credentials) and the operational consequence of disabling. It stops short of covering reversibility or how partial updates interact with unmentioned fields, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, purpose front-loaded first, sibling routing second, return values last. Dense but every clause carries information; the permissions clause is slightly compressed ('for narrowed credentials') but not wasteful.
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 elaboration, yet the description still summarizes them. Combined with explicit permissions, side effects, and sibling routing, an agent has everything needed 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%, and the description still adds meaning: the `disabled` flag is tied to blocking new work, and the permission caveat hints at credential sensitivity. This is above the baseline 3 for fully documented parameters, though it does not explain the name/slug distinction beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific operations (rename, enable/disable) on a specific resource (existing deployment) and immediately scopes the side effect: 'disabling blocks new work'. An agent can distinguish it from deployment_create, deployment_delete, and deployment_policy_update without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to alternatives with the selecting condition: deployments_list to find the slug, deployment_policy_update for execution limits or scripting, deployment_create for a new workspace. This is textbook when-to-use guidance.
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, .blend, or the complete editable .ngp document for an ngPlant project. Native ngp is a byte-preserving download with no selection, modifiers, scale, presets or baking. 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 | ||
| 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 | ||
| selectionPolicy | No | ||
| 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?
With annotations present, the description adds substantial behavior beyond them: selection is resolved against the exported revision before dispatch, the response enumerates selected objects by type, stale ids or empty matches fail loudly, surface-less curves are skipped and named, and the call returns a durable job handle producing an immutable artifact. This is far richer than the minimal annotation hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core purpose is front-loaded in the first sentence, and the following sentences are information-dense rather than filler. However, the single long paragraph packs many distinct concerns (presets, selection, curves, job lifecycle) and is heavier than strictly necessary.
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 mutation semantics, selection resolution, and job/artifact lifecycle for a complex 18-param tool. A few undocumented parameters (bakeSize, bakeObjectLimit, bakeOverflow) leave minor gaps.
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 50% across 18 params, but the description compensates well: it explains enginePreset's Y-up/scale behavior per engine (unity/godot/print/unreal), that print is ×1000 AND Z-up as a whole convention, and how selection/id staleness works. It leaves some params (bakeSize, bakeObjectLimit, bakeOverflow, format) unexplained, so shy of 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?
States a specific verb (export) plus the resource (a revision) and enumerates the exact output formats (GLB, OBJ, STL, .blend, .ngp) for an ngPlant project. This cleanly distinguishes it from sibling mutation tools like render_create or asset_generate_3d.
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 concrete routing guidance for parameters: ngp means byte-preserving with no selection/modifiers, enginePreset selects target-engine conventions, and bakeLighting explicitly points to bakeTextures as the alternative for metal/glass turntables. It lacks explicit when-to-use-this-tool-vs-siblings guidance (e.g. vs render_create), so not a 5.
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 this is read-only, idempotent, non-destructive and not open-world; the description adds genuine value on top by disclosing that it emits a prompt plus upload/material steps and delegates generation to the harness's own image tool. That clarifies the call has no side effects and no compute cost, though it does not describe the shape of the returned prompt/steps.
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 tight sentences, no filler. The scope statement comes first, the return/delegation behavior next, and the negative constraint ('does not generate... or spend Blender compute') last, which is the right ordering for an agent deciding whether to call.
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 19-param planning tool with no output schema, the description summarizes the return ('a prompt and upload/material steps') but does not describe its structure, and it leaves most parameters undocumented while coverage is low. It is adequate to understand the tool's role but thin for calling it precisely.
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 32% across 19 parameters, so the description carries much of the documentation burden, yet it mentions no parameter at all. The artifact-type list echoes the purpose enum but adds no syntax, format, defaults or interaction guidance (e.g. how layout, resolution and physicalCoverageMeters relate).
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 ('Plan a source image') and enumerates the artifact types it covers (surfaces, decals, trim sheets, atlases, environments, animation). It also carves out a clear boundary against the generation siblings: it returns a prompt and steps, not pixels, and does not 'spend Blender compute.'
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 usable selection condition: use this when you want a prompt plus upload/material steps rather than an actual generated image or spend. It does not, however, name the concrete alternatives (e.g. texture_maps_create, material_from_image, asset_generate_3d) that a caller would be choosing between.
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
Remove this organization's stored credential for a third-party asset/generation provider; subsequent calls requiring it will need setup again. Requires owner/admin with deployments:admin. Use integrations_list to inspect configuration. Replace provider keys on the Sceneplane website. Does not delete imported scene assets or revoke the token at the provider. Returns deleted=false if none was stored.
| 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 declare destructive=true and idempotent=false, but the description adds substantial non-redundant context: what is destroyed (the stored credential), downstream consequence (subsequent calls requiring it need setup again), auth requirements, the deleted=false return case, and the explicit boundaries of the deletion. This is exactly the value-add expected above the annotation baseline.
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 the core effect and its consequence, then prerequisites, then scope boundaries. Dense but each sentence carries distinct information; the website note is the only mildly marginal addition.
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 destructive one-parameter tool, the description covers effect, authorization, boundaries, and the edge-case return value, while annotations and an output schema handle safety flags and return shape. Nothing needed to invoke 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 description coverage is 100% and the single 3-param provider enum is fully documented as 'Configured integration to remove.' The description doesn't add syntax or selection guidance beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Remove') and a precise resource ('this organization's stored credential for a third-party asset/generation provider'), which is clearly distinct from integrations_set (writing) and integrations_list (reading). An agent can route confidently without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives prerequisites (owner/admin with deployments:admin) and an explicit inspection path ('Use integrations_list to inspect configuration'). It also clarifies a scope exclusion (doesn't delete imported assets or revoke provider tokens) and points to the website for replacing keys. No explicit 'when not to use' statement, so 4 rather than 5.
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
Read-only list of configured third-party source integrations (masked hints only, never tokens). Check import/generation availability without requesting credentials in chat. Poly Haven needs no connection; Sketchfab has public model search but import needs an approved connection. Hyper3D, Hunyuan3D and Tripo3D generate models; they are not searchable asset catalogs.
| 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 readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine value beyond that by disclosing that credentials are never returned ('masked hints only, never tokens') and by describing the connectivity prerequisites that determine what the list will show.
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 the core statement and the security guarantee, then the provider matrix. The final sentence is slightly encyclopedic for a list tool, but each clause maps to a real decision an agent must make about the returned integrations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No parameters and an output schema exists, so return structure needn't be described. What remains ambiguous for a zero-arg integration-list call — what is masked, and which providers require approved connections — is explicitly answered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies; there is no argument syntax to explain. The description correctly spends its words on result semantics and provider states instead of inventing parameter detail.
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 ('Read-only list of configured third-party source integrations') and immediately clarifies the payload shape ('masked hints only, never tokens'), which separates it from integrations_set/integrations_delete. An agent knows exactly what this returns 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 a concrete use case — 'Check import/generation availability without requesting credentials in chat' — and explains per-provider conditions (Poly Haven needs no connection, Sketchfab import needs an approved connection, Hyper3D/Hunyuan3D/Tripo3D are generators not catalogs). It does not explicitly name when to skip this tool in favor of a sibling, 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.
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 when an open job should stop. Work stops at a checkpoint and may still complete; cancellation is rejected for terminal jobs or once result publication starts. Compute already used is still accounted for. Returns current status and cancelRequested/cancelAccepted, not proof of cancellation; poll job_get or job_wait for the terminal state. Use jobs_list to locate a job or job_report for detailed results.
| 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?
Goes well beyond the annotations by describing cooperative cancellation semantics, partial completion at checkpoints, rejection conditions, compute accounting, and that the response is not proof of cancellation. This gives the agent rich behavioral context that annotations alone (destructiveHint, idempotentHint, etc.) do not 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?
Front-loads the core purpose, then adds constraints, billing, return semantics, and alternatives in tightly packed but non-redundant sentences. Every 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?
Despite having an output schema, it still usefully clarifies that the response is not proof of cancellation and directs the agent to poll job_get or job_wait. Combined with annotations and schema, 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?
Schema description coverage is 100%, so the schema already documents both jobId and reason fully. The description adds no parameter-specific meaning, which is the baseline case when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('cancel' a 'job') and immediately scopes it as cooperative cancellation for open jobs. It clearly distinguishes itself from job_get, job_wait, jobs_list, and job_report by naming their distinct roles.
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 when to use it ('when an open job should stop'), when it will be rejected (terminal jobs or once result publication starts), and which alternatives to use for locating jobs, polling terminal state, or getting detailed results.
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 cover the read-only/idempotent safety profile, and the description adds substantial non-obvious behavior: continuation identity pinning (artifactId, filterId), byte-budget short pages, truncation semantics for oversized records, and the distinction between pending/failed/cancelled/incomplete/truncated states versus real validation results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core operation, then ordered detail on sections, paging, and states. Dense but nearly every clause carries operational information; some sentences (state enumeration) run long and could be tightened.
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-shape detail is unnecessary, and the description still covers what an agent needs to page correctly and to interpret terminal states. Nothing critical for a correct call 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 baseline is 3, but the description adds a genuinely important semantic the schema only hints at: offset counts records for list sections but counts bytes for section=report, and limit may return fewer due to the byte budget. Filters are left to the schema, which already documents them 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?
States a specific verb and resource ('Read bounded pages from a completed job's immutable report_json artifact') and names the sibling it differs from (artifact_get for the complete file). The section enumeration makes the scope concrete without requiring 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 explicit routing advice: use section=summary for cheap aggregates, note that issues is the default for validation and summary for scene_apply/export, and points to artifact_get for full download. It stops short of saying when this tool should be avoided in favour of job_get or job_wait, so not a full 5.
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
Find recent jobs in the bound deployment, optionally by project or status, including when you have lost a job ID. Read-only; returns items and an opaque nextCursor. Use job_get for one job's status/result, job_wait to await its terminal state, job_report for complete paged reports, or job_cancel to request a stop. Copy nextCursor verbatim until null.
| 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 readOnlyHint, idempotentHint, and non-destructive, and the description is consistent with that ('Read-only'). Beyond annotations it adds real value: it discloses the return shape (items plus opaque nextCursor) and the pagination termination rule ('copy nextCursor verbatim until null'). It does not discuss rate limits or result ordering, so a 4 rather than 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 the sibling-routing sentence, then the pagination rule. Every clause carries information an agent needs; there is 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?
An output schema exists, so the description needn't explain return values, yet it still names items/nextCursor. Combined with complete sibling routing and annotation coverage of the safety profile, an agent has everything required 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?
Schema description coverage is 100%, so all four parameters (limit, cursor, status, projectId) are already fully documented in the schema, including the keyset-vs-offset cursor warning. The description restates the filter intent and the cursor-copy rule but adds no semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list recent jobs) scoped to the bound deployment, with optional project/status filtering. It also carves out a distinct use case — recovering when a job ID has been lost — that separates it from the sibling lookup 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?
Explicitly names the alternatives and the conditions that select them: job_get for a single job's status/result, job_wait to await terminal state, job_report for full paged reports, job_cancel to stop. This is genuine routing guidance, not inference.
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 that this is read-only, idempotent, and non-destructive, while the description adds useful operational context: the 90s default is tied to cold-starting Blender containers, long calls risk transport errors, and validation coverage must be checked via inlineComplete and coverageComplete. Nothing contradicts 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 front-loaded with the core behavior and key timeout default, then moves to alternatives and output caveats. It is dense but mostly purposeful; the validation-report sentences are useful but overlap somewhat with the output 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 long-polling job tool with two parameters, an output schema, and safety annotations, the description covers the essential calling strategy, timeout risks, alternatives, and how to interpret truncated or incomplete validation coverage. An agent has enough information to invoke 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?
Schema coverage is 100% and the parameter descriptions are already detailed, so the baseline is 3. The description adds some value by explaining that 90s is the usual cold-start requirement and by framing the tradeoff between round trips and connection risk, though much of the timeout guidance is also present in the schema 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 uses a specific verb and resource: 'Long-poll a job until it reaches a terminal state or the timeout elapses.' It also distinguishes this from a polling loop with job_get and from the webhook alternative, so an agent can identify the tool's role 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?
It explicitly says this is cheaper than a job_get loop, advises chaining calls for longer jobs, and names webhooks_set as an alternative that avoids polling. It also gives concrete timeout guidance and warns that long single calls trade round trips for connection risk.
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 imageADestructiveInspect
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 set destructiveHint=true and readOnlyHint=false, and the description earns credit by disclosing what actually happens: a new revision is committed, applyToObjects assigns it, maps pack into the .blend, and a durable job handle is returned. It adds the 2048px generation cap and the decal/profile behavior switch, which annotations do not cover. It doesn't explain the consequence of the destructive hint (linear history, revision conflicts on stale baseRevisionId), so a small gap remains.
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 and scope, then the cap/alternative, then flow, then the profile caveat. It is dense (semicolon-packed sentences) but nearly every clause carries a discriminator or constraint that an agent needs. Slightly heavier than ideal for a description that could have deferred the longer options discussion to 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?
Annotations and an output schema exist, so the description needn't restate safety or return shapes; it correctly focuses on the non-obvious parts (upload flow, profile switch, size cap, decal transparency). Given 16 parameters and a deep nested options object, a few gaps remain — destructive/revision-conflict semantics and role interpretation for the roles array — but nothing an agent needs in order 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?
With 19% schema coverage across 16 parameters plus a 20-property nested options object, the schema leaves most of the semantics unstated. The description compensates for the most consequential distinction — profile=surface/decal/supplied invoking the v2 workflow while legacy mask/emboss arguments apply only when profile is omitted — and glosses maskSource, baseRoughness/maskRoughness, baseColor and metallic. But the majority of options (tile, seamMode, normalConvention, displacementMode, physicalCoverageMeters, alphaMode) are left entirely to the schema, so it adds real but partial value.
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') plus a key differentiator ('deterministic, no AI'). Combined with the caps note routing 4K work to asset_import, an agent can tell this apart from material_from_maps and texture_maps_create without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite chain (upload_create → PUT → upload_complete → material_from_image) and a clear exclusion with an alternative for full-resolution label work (embed in GLB via asset_import). It stops short of contrasting the profile vs legacy argument paths against the sibling material_from_maps, so routing is clear but not fully disambiguated.
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 materialADestructiveInspect
Create a scene material from a completed textureJobId or validated role-labeled images. Replaces materials in requested object slots: applyToObjects targets slot zero; assignments targets explicit slots. Commits one revision after all targets validate; existing mesh UVs and earlier revisions are preserved. Use texture_maps_create for downloads without scene changes, material_from_image for one image, or material_recipe for a procedural proposal. Returns a job; job_wait/job_get expose terminal status, revision and map artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | Unique output roles to deliver. With sourceAssetId, defaults include profile convenience maps; with supplied maps or a completed texture job, defaults to its supplied roles. Unsupported missing maps fail rather than being invented. | |
| options | No | Optional processing and material settings. Supplied maps take precedence over fallback generation; a reused texture job preserves its appearance settings unless overridden. | |
| profile | No | Processing intent: surface or supplied defaults a single sourceAssetId to base_color/roughness with opaque alpha; decal to base_color/opacity with blend alpha. Role-labeled map sets default to their supplied roles. Explicit roles/options override these defaults. | surface |
| uvLayer | No | Existing UV layer to use on target meshes. Omit to use their active UV layer; no UV coordinates are generated or rewritten. | |
| uvScale | No | [U, V] texture-coordinate scale, each positive and at most 10000; default [1, 1]. Changes shader mapping, preserving mesh UV coordinates. | |
| projectId | Yes | Existing project in the bound deployment; owns the processing job and its artifacts. | |
| sourceMaps | No | Role-labeled validated images or texture artifacts, one per role and at most 12 unique images. Sources must share an aspect ratio. Do not combine with textureJobId. | |
| assignments | No | Explicit unique object/slot targets, maximum 50. Replaces existing slot assignments; mutually exclusive with nonempty applyToObjects. | |
| materialName | No | Name for the prepared material/package, 1-64 characters; default Image Material. | Image Material |
| textureJobId | No | Completed texture_maps_create job whose version-2 package should be applied. Alternative to sourceAssetId/sourceMaps; prepared map settings are retained unless overridden. | |
| sourceAssetId | No | Validated PNG/JPEG asset supplying base_color. Do not also supply a base_color entry in sourceMaps or combine with textureJobId. | |
| applyToObjects | No | Existing mesh object IDs to assign at slot zero, replacing that slot's material. Empty creates an unassigned material. Use assignments instead for explicit slots; maximum 50 objects. | |
| baseRevisionId | No | Current project head to mutate, or HEAD (default). A stale revision fails with REVISION_CONFLICT; refresh project_get before retrying. | HEAD |
| idempotencyKey | Yes | Stable caller-chosen key for this request. Reuse the same key and arguments for safe retries; change the key when changing inputs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, so the mutation profile is already conveyed. The description adds real value beyond that: it discloses slot replacement, atomic validation before commit ('commits one revision after all targets validate'), and preservation of UVs and earlier revisions. Return shape is summarized as a job with job_wait/job_get for terminal status, though error/partial-failure semantics are only partially implied.
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 action and input sources, then targeting semantics, then atomicity guarantees, then sibling routing. No filler or repetition of schema text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 14-parameter mutation tool with nested objects and an output schema, the description covers input alternatives, targeting behavior, atomicity/revision semantics, and the follow-up status tools. Return values are delegated to the output schema, which is appropriate.
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 goes beyond it by disambiguating two easily-confused targeting parameters — applyToObjects targets slot zero while assignments targets explicit slots — which is genuine routing value an agent needs.
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 ('Create a scene material') and pins the two valid inputs (completed textureJobId or validated role-labeled images). It is clearly distinguishable from material_from_image and material_recipe, which it names directly.
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 routes the agent to alternatives with conditions: texture_maps_create for downloads without scene changes, material_from_image for one image, material_recipe for a procedural proposal. Both when-to-use and when-not-to-use are covered.
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
Propose editable procedural/hybrid shader operations for wood, metal, stone, fabric or image weathering, with prompts and validation checks. Choose this for node-based materials; use material_from_image for one uploaded image, material_from_maps for a prepared map set, or texture_maps_create for downloads without scene changes. Hybrid recipes reuse existing image nodes and aligned color variants. Proposals only: no mutation, provider call, baking or compute. Review the returned operations, inspect sockets with material_nodes, then execute with scene_apply.
| 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 the description reinforces this with the sharpest possible statement ('Proposals only: no mutation, provider call, baking or compute'). It also discloses the intended workflow sequence (review, inspect sockets with material_nodes, execute with scene_apply), which is real context beyond the annotations. It stops short of describing the proposal payload shape or validation-check behavior.
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?
Five tight sentences, none redundant: purpose first, then routing rule, then hybrid detail, then safety contract, then workflow. Zero filler and every clause pays for itself.
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, nested-object tool with no output schema, the description covers routing, safety, sibling boundaries, and the follow-up workflow, which is most of what an agent needs. The gap is parameter-level completeness: roughly half the schema fields are undocumented, and the description does not close that hole.
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 carries a heavy burden and only partially compensates: it hints that hybrid recipes reuse existing image nodes and aligned color variants, and that weathering uses a deposit/wear tint. It adds no guidance on the mass of undocumented parameters (seed, roughness, uvScale, variation, assignments, extension modes), so many params remain unexplained in both places.
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 (propose) and resource (editable procedural/hybrid shader operations) plus its domain (wood, metal, stone, fabric, image weathering) and explicitly distinguishes itself from its closest siblings by name. An agent can route to this tool without opening any 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 selection rule ('Choose this for node-based materials') and names four alternatives with the exact condition that selects each (material_from_image for one uploaded image, material_from_maps for a prepared map set, texture_maps_create for downloads without scene changes). This is textbook when-to-use guidance.
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 establish that this is a safe, idempotent, closed-world read, so the bar is lower. The description still adds real value beyond them by disclosing the caching subtlety — it returns the versioned live snapshotPolicy when cached tool descriptions differ — which an agent could not infer from the annotations or the empty schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the payload list and closed with the actionable trigger, so the most decision-relevant content comes first. The snapshotPolicy clause is dense but earns its place as the one non-obvious behavioral detail.
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 shape needn't be spelled out, and the description instead covers what an agent needs for the decision: what signals come back and when to call. For a zero-parameter read-only probe, 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?
The tool takes zero parameters, so the description carries no parameter burden and the baseline of 4 applies. The schema is empty and fully consistent with a no-argument probe.
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 capability probe and enumerates concretely what it reports: Blender execution availability, compute budget usage, open job counts, and deployment policy limits. That set of return signals distinguishes it clearly from siblings like deployments_list, jobs_list, or asset_generate_status, which each cover only one slice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: "Call before queueing work to fail fast," which tells the agent precisely when this probe pays off relative to render_create, scene_apply, and other queueing tools. It does not state when-not to call or name an alternative for narrower questions, which keeps it 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.
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. Choose executionEngine=ngplant for plants and procedural vegetation; use vegetation_create/edit to author its native model, while Blender packages standard previews and exports. Blender is the default for other scenes. 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. | |
| executionEngine | No | Use ngplant for plants/vegetation; Blender packages standard outputs. Default blender preserves ordinary scene authoring. | blender |
| 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?
Annotations only carry the safety profile (not read-only, not idempotent-hinted); the description goes far beyond by disclosing the return contract (stable liveUrl plus durable job handle), the sign-in requirement, the polling path via job_get, and the first-immutable-revision timing. This is exactly the behavioral context that structured fields do not supply.
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?
Dense but front-loaded: purpose first, then engine guidance, then the return/workflow contract. It runs long and mixes invocation guidance with agent workflow instructions, so some sentences could be trimmed, but each carries distinct information rather than 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 creation tool with an output schema, annotations, and five enum-heavy parameters, the description covers purpose, alternatives, engine semantics, return values, the required sharing step, and polling. 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%, so the baseline is 3, but the description adds real meaning on top: the ngplant-vs-Blender tradeoff for executionEngine and the true/false defaults for generatePreview that depend on the template, plus the rationale for template=empty. It augments rather than repeats 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 and resource ('Create a project from a template') and immediately frames the engine choice with sibling tools ('vegetation_create/edit to author its native model'). An agent can route this against project_update, scene_apply, and the vegetation tools 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?
Explicit selection rules: executionEngine=ngplant for plants/procedural vegetation, vegetation_create/edit for the native model, Blender as default for other scenes. It also names the when-not condition for preview generation on template=empty. That is genuine when/when-not/alternatives guidance.
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 literal project-name substring (ASCII case-insensitive); %, _ and quotes match literally. |
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 read-only, idempotent, non-destructive behavior, so the safety profile is covered. The description adds useful behavior beyond annotations: results are ordered newest first, are scoped to the account, and use cursor pagination.
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 tight sentence with no waste, and it front-loads the core purpose before ordering and pagination 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?
The tool has an output schema, complete parameter documentation, and annotations, so the description need not explain return values. It covers the essential behavioral facts (ordering and pagination), though it omits any mention of filtering or sibling alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents limit, cursor semantics, and nameFilter in detail. The description adds no parameter-level detail beyond saying cursor pagination, so 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 and resource ('List the account's projects') and adds ordering. It is clear enough to distinguish from project_get/project_update siblings, but it does not explicitly name or contrast those alternatives.
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?
Listing projects implies a context of use, but the description gives no explicit when-to-use guidance or alternatives. It does not tell the agent when to use projects_list rather than project_get or when filtering with nameFilter is appropriate.
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 diffARead-onlyIdempotentInspect
Compare two revisions before reviewing or undoing scene changes. Read-only: reports objects added/removed and changes to transforms, materials and render settings without changing the project head. Uses a stored parent-to-child diff when available, otherwise compares summaries. Use revision_restore only to replace the current scene with an earlier revision; project_get lists recent revision IDs. Returns diff.
| 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 readOnly/idempotent/non-destructive, so the bar is lower, but the description still adds meaningful behavior: it does not change the project head, and it prefers a stored parent-to-child diff over comparing summaries. It stops short of describing the response shape beyond 'Returns diff.'
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 the core action and scope, then alternatives, then mechanism. Four sentences, little waste; only 'Returns diff.' is nearly redundant, adding minimal information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only comparison tool with no output schema, the description conveys scope, safety, alternatives, and diff strategy. The return value could be fleshed out further, but the essential calling context 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%, so both revision parameters and projectId are already documented in the schema; the description adds no syntax or ordering detail beyond what is there. 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?
States a specific verb+resource ('Compare two revisions') and immediately scopes it to reviewing or undoing scene changes, which lets an agent distinguish it from sibling mutation tools like revision_restore.
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 the alternative and its condition ('Use revision_restore only to replace the current scene with an earlier revision') and points to project_get for obtaining revision IDs, so when-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revision_restoreRestore revisionADestructiveInspect
Replace the current scene contents with a historical revision, creating a new head revision. This changes the active scene and discards later edits from that active view; prior revisions remain available. Use revision_diff to review changes first and project_get to read the exact current head. A stale currentHeadRevisionId rejects with REVISION_CONFLICT; policy may require interactive approval. Returns a restore job; check job_wait/job_get for the actual terminal state and new revision.
| 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?
Annotations only declare destructive=true and idempotent=false; the description adds what is actually destroyed ('discards later edits from that active view'), what survives ('prior revisions remain available'), the failure mode (stale currentHeadRevisionId rejects with REVISION_CONFLICT), the policy gate (interactive approval), and the async nature (returns a restore job, terminal state via job_wait/job_get).
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 effect and destruction, then prerequisites, then failure/policy behavior, then return semantics. No filler and nothing duplicates 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 destructive async mutation with no output schema, the description covers effect, data loss, siblings to consult first, conflict handling, approval policy, and how to obtain the terminal result. Nothing 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 baseline is 3, but the description adds real meaning for currentHeadRevisionId by explaining that a stale value triggers REVISION_CONFLICT, giving the optimistic-concurrency parameter a purpose beyond its schema text.
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 ('Replace the current scene contents with a historical revision, creating a new head revision') and immediately clarifies the resulting state. An agent can distinguish it from sibling revision_diff (review) and scene_apply 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?
Explicitly routes the agent to revision_diff to review changes first and project_get to read the exact current head, which is real when-to-use guidance. It does not, however, contrast with other mutation siblings (scene_apply, preset_apply) that might also alter scene contents.
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-11-03: 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. Simple opaque untextured Principled models with no authored camera or lights and only a neutral default world use Workbench directly for shape and base colour; this cannot judge lighting, reflections or glass. Authored cameras, lights, worlds, image textures and linked shader inputs keep the existing lit preview: transmission uses 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 establish read-only, idempotent, non-destructive behavior, but the description adds substantive context: it reads a stored thumbnail rather than rendering/regenerating, explains camera and framing defaults, engine fallbacks, and historical thumbnail metadata. This is meaningful behavior beyond what the 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?
The first sentence is well front-loaded, but the description then expands into hundreds of words of snapshot policy, deployment metadata, subscription/listen behavior, and cache-freshness guidance that do not help an agent select or invoke this tool. Much of that content should live in platform_status or docs rather than in the tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, fully described schema, and absence of an output schema, the description covers the inline-image return, thumbnail-generation behavior, and metadata fields an agent may read. It is more than complete for this tool's complexity, even though the extra material hurts conciseness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already documents projectId/artifactId exclusivity, revisionId defaulting to the head, and opticsObjectIds filtering cached measurements without resampling. The description reinforces those semantics but adds little syntax or meaning that is not already in the 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 opening sentence names a specific verb and resource ('See the scene as an inline image') and immediately distinguishes it from a render job. The description also names sibling alternatives (render_create, scene_apply, artifactId path), so an agent can tell what this tool is for 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?
It explicitly says to snapshot after every mutation to verify before an expensive render, and it routes fresh targeted queries to scene_apply with scene.analyze_optics and fine-detail work to render_create. The projectId-versus-artifactId path is also described, leaving little inference about when to use which mode.
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 mapsAInspect
Prepare downloadable PBR maps from validated PNG/JPEG images without changing scene materials. Supplied maps win; derived relief/roughness are labeled approximations. Use material_from_maps to apply the completed package, material_from_image for a single-image material, or material_recipe for a procedural proposal. Returns a job: job_wait/job_get track completion; job_get.result.textureMaps contains map, ZIP, repeat-preview and manifest artifact IDs for artifact_get.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | Unique output roles to deliver. With sourceAssetId, defaults include profile convenience maps; with supplied maps or a completed texture job, defaults to its supplied roles. Unsupported missing maps fail rather than being invented. | |
| options | No | Optional processing and material settings. Supplied maps take precedence over fallback generation; a reused texture job preserves its appearance settings unless overridden. | |
| profile | No | Processing intent: surface or supplied defaults a single sourceAssetId to base_color/roughness with opaque alpha; decal to base_color/opacity with blend alpha. Role-labeled map sets default to their supplied roles. Explicit roles/options override these defaults. | surface |
| projectId | Yes | Existing project in the bound deployment; owns the processing job and its artifacts. | |
| sourceMaps | No | Role-labeled validated images or texture artifacts, one per role and at most 12 unique images. Sources must share an aspect ratio. Do not combine with textureJobId. | |
| materialName | No | Name for the prepared material/package, 1-64 characters; default Image Material. | Image Material |
| sourceAssetId | No | Validated PNG/JPEG asset supplying base_color. Do not also supply a base_color entry in sourceMaps or combine with textureJobId. | |
| idempotencyKey | Yes | Stable caller-chosen key for this request. Reuse the same key and arguments for safe retries; change the key when changing inputs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, destructive=false, openWorld=false), but the description adds real behavioral context: scene materials are untouched, supplied maps take precedence over derived ones, relief/roughness estimates are labeled approximations, and the result is an async job with map/ZIP/preview/manifest artifacts. One tension: idempotentHint=false while the description implies retry safety via idempotencyKey — mildly inconsistent, though not a flat contradiction of the safety hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the purpose before the sibling routing and the job/artifact workflow. No filler, though the routing sentence is a compressed list that slightly reduces readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter job-producing tool with nested options, the description covers purpose, routing, precedence rules, and the async completion path. Since an output schema exists, return details need not be enumerated, and the agent has everything required to invoke and follow up correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents every parameter, including defaults, enums, ranges and precedence rules (e.g. 'Supplied maps take precedence'). The description's only added semantic is the general precedence/resume note ('a reused texture job preserves its appearance settings unless overridden'), which the schema largely restates, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Prepare downloadable PBR maps from validated PNG/JPEG images without changing scene materials.' It explicitly distinguishes itself from material_from_maps, material_from_image, and material_recipe, so an agent can route without opening any 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?
Names three alternatives with the condition that selects each ('apply the completed package' vs 'single-image material' vs 'procedural proposal'), and describes the downstream job-tracking path. It does not state explicit when-not-to-use conditions beyond the alternative routing, 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.
upload_completeComplete uploadAInspect
Finalize bytes sent to the signed PUT URL from upload_create: verify size/checksum, quarantine the asset and queue validation. Returns uploadId, assetId and quarantined/validated/rejected status; call again with the same uploadId to check deferred validation. Only validated assets may be used by asset_import or material tools. This does not import into a scene or return a Blender job.
| 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?
Annotations cover the safety profile (non-read-only, non-destructive, non-idempotent), and the description adds real substance beyond them: size/checksum verification, quarantine, deferred validation, and the quarantined/validated/rejected status set. The only slight ambiguity is that 'call again with the same uploadId' reads like a safe polling re-invocation while the annotations declare idempotentHint=false; not a contradiction, but the retry/polling semantics could be stated more sharply.
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-loaded with the action and followed by returns and constraints; little waste. It is slightly packed, bundling lifecycle, return values, and exclusions into one breath, but every clause carries information the agent needs.
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 mutation tool with rich annotations and an output schema, the description supplies the pipeline context, the status outcomes, and the reuse/polling rule. Nothing needed to invoke 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 description coverage is 100%, so both parameters are already documented and the baseline is 3. The description usefully ties uploadId back to upload_create and frames checksum as the verification input, but adds no format or syntax beyond the schema's SHA-256 pattern.
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 ('finalize bytes sent to the signed PUT URL'), names its predecessor (upload_create), and explicitly contrasts itself with siblings it is not (asset_import, material tools, scene import, Blender jobs). An agent can place it precisely in the upload pipeline without opening another 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 explicit sequencing: call after upload_create, call again with the same uploadId to poll deferred validation, and only use the asset downstream once validated. It also names exclusions ('does not import into a scene or return a Blender job'), which is exactly the when-not guidance that prevents misuse.
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.
vegetation_createCreate a native plant modelAInspect
Author a procedural plant with ngPlant in an empty ngplant project. Use explicit baseRevisionId, bounded template controls and a stable idempotency key. Blender packages GLB/OBJ/STL/blend outputs. Returns a durable job; poll job_get/job_wait and use vegetation_inspect after commit.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe | Yes | ||
| projectId | Yes | ||
| baseRevisionId | Yes | ||
| 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. | |
| generatePreview | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes | |
| deduped | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give the safety profile (write, non-destructive, non-idempotent, closed-world), and the description adds genuinely new behavior: it returns a durable job rather than a finished asset, Blender packages GLB/OBJ/STL/blend outputs, and idempotency-key replay adopts existing work. The 'stable idempotency key' framing sits slightly at odds with idempotentHint=false, but it reads as scoped idempotency rather than a 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?
Three tight sentences, purpose front-loaded, each sentence adding a distinct fact (what it does, what to supply, how to follow up). No filler, though the follow-up sentence packs return-handling and polling together and could be split for scanning.
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 complex, async, multi-template creation tool with an output schema present, the description covers the job lifecycle, the output packaging, and the idempotency contract, so an agent can call it and handle the result. The remaining gap is the recipe itself and generatePreview, which is meaningful but not fatal since the schema enumerates them.
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 20%, so the description must carry the load, and it compensates for baseRevisionId ('explicit') and the idempotency key ('stable') and gestures at recipe bounds ('bounded template controls'). However it says nothing about the six templateId variants, the seed/color/detail fields, or the generatePreview default, leaving the largest parameter effectively unexplained beyond the raw 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 ('Author a procedural plant with ngPlant') and adds a scoping constraint ('in an empty ngplant project'), which implicitly distinguishes it from vegetation_edit. It does not name any sibling explicitly, so an agent must infer the create-vs-edit split, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a real usage condition ('empty ngplant project') and a post-call workflow ('poll job_get/job_wait and use vegetation_inspect after commit'), which tells the agent how the tool fits between siblings. It stops short of naming when to prefer vegetation_edit or the alternatives, so no explicit exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vegetation_editEdit the saved native plant modelADestructiveInspect
Regenerate an existing saved ngPlant model using its authenticated native .ngp graph. Supported fields come from recipe; branchDepth is fixed by the saved graph. Explicit immutable base revision and stable idempotency key required. Returns a durable job; inspection reports saved effective values.
| Name | Required | Description | Default |
|---|---|---|---|
| recipe | Yes | ||
| projectId | Yes | ||
| baseRevisionId | Yes | ||
| 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. | |
| generatePreview | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes | |
| deduped | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and readOnlyHint=false, and the description adds real context beyond them: branchDepth is fixed by the saved graph, supported fields come from the recipe, a durable job is returned, and an immutable base revision plus idempotency key are mandatory. It does not state explicitly what prior model state gets destroyed, and the caller-driven idempotency-key behavior sits at odds with idempotentHint=false, though that hint refers to natural idempotency rather than the key mechanism.
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-loaded with the action and the model being modified, then the constraints, then the return type. Every sentence carries information; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain the returned effective values, and it correctly points at inspection for them. Given the complex six-variant recipe schema and the destructive mutation, the description covers the critical operational constraints, though it omits explicit sibling routing.
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 20%, so the description must carry weight; it partially does by noting that recipe supplies the supported fields and that branchDepth is fixed, but projectId and generatePreview are never explained and the recipe's six template variants and field ranges are left entirely 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?
Specific verb+resource: 'Regenerate an existing saved ngPlant model using its authenticated native .ngp graph' clearly identifies the operation on a saved model, and 'existing saved' implicitly separates it from vegetation_create. The description is clear but never names or contrasts a sibling tool, so it falls short of the top band.
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 states prerequisites (an existing saved model, immutable base revision, idempotency key) but never says when to choose this over vegetation_create, vegetation_inspect, or vegetation_templates. Usage is implied by 'existing saved' rather than explicitly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vegetation_inspectInspect saved native vegetationARead-onlyIdempotentInspect
Read the immutable committed ngPlant inspection report, verified against saved native document bytes and packaging provenance. Reports effective saved seed/group fields rather than caller recipe. Requires exact revision; no generation or compute.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| revisionId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | Yes | |
| projectId | Yes | |
| revisionId | Yes | |
| engineVersion | Yes | |
| nativeDocument | Yes | |
| executionEngine | Yes | |
| packagingVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds valuable behavior beyond that: the report is immutable and committed, it is verified against saved document bytes and packaging provenance, and it surfaces effective saved seed/group fields rather than caller-supplied recipe values. Only the exact-revision requirement is stated without detail on failure behavior.
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 with the core read action and its authoritative-source nature front-loaded. No filler, though 'packaging provenance' and 'effective saved seed/group fields' are compressed enough to be slightly opaque.
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 an output schema present, return values need not be explained, and annotations cover the safety profile. For a two-parameter read tool the description is nearly complete; the only gap is projectId semantics and the exact-revision prerequisite is asserted without stating what happens on a mismatch.
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 0% for both parameters, so the description must carry the meaning. It does clarify that revisionId must be an exact committed revision, but projectId is never addressed and no format or identifier semantics are given. Partial compensation caps this at the baseline 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 gives a specific verb ('Read') and resource ('immutable committed ngPlant inspection report'), and clarifies it reports saved state rather than a caller recipe, which implicitly separates it from vegetation_create/vegetation_edit. It never names a sibling explicitly, so it does not fully earn a 5, and terms like 'packaging provenance' are jargon-heavy.
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?
'Requires exact revision; no generation or compute' tells the agent a prerequisite and rules out generation behavior, which is genuine usage context. However, it never states when to prefer this over siblings such as vegetation_edit or scene_inspect, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vegetation_templatesFind procedural vegetation templatesBRead-onlyIdempotentInspect
Discover ngPlant plant/vegetation templates and bounded controls in pages of 1–24. Only broadleaf, shrub and reedlike grass can be qualified for the current production image; conifer/palm/fern remain unavailable. ngPlant authors plants; Blender packages standard previews and outputs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| entries | Yes | |
| nextOffset | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: page size bounds of 1–24 and a hard availability constraint (conifer/palm/fern unavailable), plus the division of labor between ngPlant authoring and Blender packaging.
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 tight sentences with the resource and page bound front-loaded, and no filler. The ngPlant/Blender sentence is the least essential but still adds authoring context.
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 format need not be described, and annotations carry the safety profile. What remains under-covered is how to actually drive the search — the query and offset parameters get no treatment anywhere, which matters for a three-parameter discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and none of the three parameters (limit, query, offset) are documented in the schema. The description only gestures at pagination ('pages of 1–24'), leaving the meaning and syntax of query and offset unexplained, so it fails to compensate for the 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?
States a specific verb (discover) and resource (ngPlant vegetation templates) and distinguishes itself from the vegetation_create/edit/inspect siblings as a browsing tool. The phrase 'bounded controls' is vague, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains which template categories are usable for the current production image and which are unavailable, which implies the useful scope of a search. However, it never states when to reach for this tool versus vegetation_create, vegetation_inspect, or assets_search, so the routing guidance is only implied.
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
Delete an organization webhook registration, stopping future deliveries to that registered endpoint. Requires owner/admin with deployments:admin. Use webhooks_list to find the ID. Deletion removes the registration; adding it again requires a new registration. Returns deleted=true; a missing ID is an error.
| 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 flag destructive, non-idempotent, non-read-only behavior, and the description adds genuinely new context: the permission scope required, exactly what ceases (deliveries to that endpoint), the non-reversible nature of removal, and the error behavior for a missing ID. Nothing here contradicts 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?
Four short sentences, all informative, with the action and effect front-loaded before prerequisites and side effects. No redundant restatement of the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with a full output schema, the description covers authentication scope, what is destroyed, recovery implications, and the failure mode. Nothing an agent needs to call 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% and the single parameter is documented as the webhook ID to remove. The description adds practical value beyond the schema by telling the agent where to source a valid ID via webhooks_list.
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 ('Delete an organization webhook registration') plus the operational effect ('stopping future deliveries to that registered endpoint'). This clearly separates it from webhooks_set, webhooks_list, and webhook_test.
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 gives the prerequisite ('Requires owner/admin with deployments:admin') and routes the agent to the sibling needed to obtain the argument ('Use webhooks_list to find the ID'). It also warns that re-creating requires a new registration, which is the key when-not-what-you-want consideration.
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 readOnly, idempotent, closed-world, non-destructive, so the safety profile is covered. The description adds real value beyond that: results include delivery health, and secrets are never returned, which tells the agent what it can and cannot rely on getting back.
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 compact sentence with the core action front-loaded and the security caveat parenthetical. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and annotations cover safety. The description supplies the one non-obvious behavioral fact (no secrets, health included); only details like whether health is computed live or cached are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. The mention of delivery health usefully characterizes the response shape rather than any input.
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 ('List') and resource ('registered webhooks') plus an extra facet, delivery health. It does not explicitly name a sibling boundary against webhooks_set/webhooks_delete, but the read-only listing intent is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb – an agent can infer this is the inspection endpoint for registered webhooks. There is no explicit when-to-use/when-not or pointer to webhooks_set for creation or webhook_test for probing delivery.
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?
Goes far beyond the annotations by disclosing the single-use secret return (the whsec_ secret is returned ONCE), the HMAC verification recipe with the exact signature header format, and the auth level required. The annotations already flag destructive and open-world behavior, and the description adds operational details an agent needs to correctly consume the registration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with purpose and followed by implementation-critical caveats (secret returned once, signature verification, auth level). The signature formula is dense but earns its place because an agent calling this must capture the secret and document the verification contract.
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 (so returns need not be explained), the description supplies the secret-return lifecycle, the signature verification scheme, and the auth prerequisite. An agent can register the webhook and understand how to verify deliveries without external 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?
Schema coverage is 100%, so both parameters are documented (url as HTTPS endpoint, events as an array with defaults and allowed values). The description adds the event taxonomy and "https" constraint but does not add syntax or format semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ("Register an https URL to receive job lifecycle events") and enumerates the exact event types delivered. Clearly distinguishes it from webhooks_list, webhooks_delete, and webhook_test by naming what registration actually does.
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?
Offers "push instead of polling" as a rationale and states the "Requires owner/admin" prerequisite, which is useful context. However, it never explicitly says when to use webhooks_set vs. webhook_test, or that webhooks_list/delete exist for managing existing hooks, so an agent must infer the routing.
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 eventADestructiveInspect
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_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 flag openWorldHint, destructiveHint and non-idempotency; the description adds value by naming the payload, the fact that it is signed, the auth requirement (owner/admin), and that it reaches an external receiver and reports its HTTP status. The main omission is that it never explains why this is marked destructive — that a 'test' event can trigger real processing on the receiver's system — which is the one thing an agent most needs to know before firing 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?
One sentence plus a compact payload snippet, front-loaded with the action and ending with the observable result. Every clause carries information; nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return shape needn't be explained, and the auth prerequisite and payload are covered. The remaining gap is that side effects on the receiver — the reason destructiveHint is true — are not disclosed, which is meaningful for a tool that pushes to an external endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented as 'Webhook ID returned by webhooks_list.' The description only restates 'registered webhook' and adds no format, lookup or validation detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('POST a signed synthetic event ... to a registered webhook') plus the observable outcome ('report the receiver's HTTP status'), and the literal {event: "webhook.test"} payload pins the exact operation. It is unmistakably distinct from webhooks_list, webhooks_set and 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?
'Requires owner/admin' gives a real prerequisite, and 'registered webhook' implies the target must already exist. But there is no explicit statement of when to use this versus the other webhook siblings, nor any when-not guidance (e.g. rate limits, whether to use it before enabling a production endpoint). Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
platform_status3 fields changed- added
Output schema / properties / snapshotPolicy / properties / simpleModelConditionAdded value: +{ + "type": "string" +} - added
Output schema / properties / snapshotPolicy / properties / simpleModelEngineAdded value: +{ + "type": "string" +} - changed
Output schema / properties / snapshotPolicy / requiredPrevious value: -[ - "version", - "readsStoredImage", - "regeneratesImage", - "cameraFraming", - "noCameraFraming", - "maxSidePx", - "transmissiveEngine", - "transmissiveSamples", - "otherLitEngine", - "fallbackEngine", - "historicalImagesRetainSettings" -]New value: +[ + "version", + "readsStoredImage", + "regeneratesImage", + "cameraFraming", + "noCameraFraming", + "maxSidePx", + "transmissiveEngine", + "transmissiveSamples", + "simpleModelEngine", + "simpleModelCondition", + "otherLitEngine", + "fallbackEngine", + "historicalImagesRetainSettings" +]
1 tool update
- Changed
assets_search1 field changed- changed
Input schema / properties / source / descriptionPrevious value: -"Asset catalog to search; Sketchfab requires a configured token."New value: +"Catalog to search. Sketchfab public search can work without a token; import needs an approved connection."
Publisher details
- Operator
- Sceneplane · Publisher source
- Operator website
- https://sceneplane.online · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://sceneplane.online/docs · Publisher source
- Trust center
- Not available
- Restrictions
- A Sceneplane account is required. Free includes 30 compute minutes per UTC month; no credit card or paid Sceneplane plan is needed to connect. Use a remote Streamable HTTP MCP client with OAuth, or a client that supports an Authorization bearer API key. Client subscriptions and organization admin policies may restrict custom connectors. Quotas depend on the Sceneplane plan. Arbitrary Blender Python is disabled by default and requires the organization owner to enable it. Optional third-party model generators require your own provider keys and may charge separately. Sceneplane operates this endpoint; it is not affiliated with or endorsed by the Blender Foundation. · Publisher source
Related MCP Connectors
Blender and GLB/FBX/USD/STL rendered on cloud GPUs for AI agents: product shots, turntables, MP4
Free text/image → 3D: generate, rig, avatar-ify, and refine GLB models. No auth, no payment.
Connect your AI assistant to Blender for 3D modeling, Geometry Nodes, materials, lighting, animation, rendering and export. Inspect real scenes and viewport images, refine the result and restore checkpoints. OAuth connects your chat to Blender Bridge Desktop on an online Windows 10/11 x64 computer running Blender 4.2+. The chat can run on another device. Requires an active Blender Bridge account; 7-day trial available. AI model access is separate.
Build 3D web apps: physics, audio, music, Blender import. Live edits, undo, versions, publishing.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to build models, import assets, animate scenes, render images, and save versioned projects through validated MCP tools backed by headless Blender, with a live browser viewer for inspection.GPL 3.0
- AlicenseNot gradedqualityBmaintenanceEnables MCP hosts and coding agents to model, inspect, measure, and deliver real Blender scenes through 15 tools and 217 catalog operations, returning actual rendered images after key edits. Works against a live Blender GUI via addon or a persistent headless worker, producing editable .blend files, GLB exports, previews, and acceptance records.1BSD 3-Clause
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to model, sculpt, rig, animate and bake particle effects by editing a semantic scene document, with built-in software rendering, measurable critics that flag floating or broken geometry, and game-ready glTF export. It exposes templates, atomic edit batches, motion and effect previews, undo history, and no GPU, browser, or Blender required.47 npmApache 2.0
- FlicenseNot gradedqualityAmaintenanceEnables AI agents to drive a live Blender session over MCP by inspecting scenes, creating and modifying objects, assigning materials, rendering images, and fetching PolyHaven assets. It also exposes prompt-based scene building and review workflows backed by a provider-agnostic LLM layer (Ollama, LM Studio, llama.cpp, OpenAI-compatible endpoints, Azure) that can be switched at runtime.-
Glama MCP Gateway
Add one secure layer between your agents and this server.