Skip to main content
Glama

VoxelDraft – AI Voxel Modeling

Server Details

Create, edit, render, save, and export voxel models with interactive 3D previews.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4/5.0

Scored across 8 tools

Disambiguation5/5

Each tool maps to a distinct resource+action: create/edit operate on transient models, render previews, export produces URLs, inspect reports stats, and the project tools list/load cloud projects. The create vs. edit boundary is clearly explained (edit takes a modelRef and returns a new one), so misselection risk is low.

Naming Consistency5/5

All eight tools follow a strict verb_noun pattern (create/edit/export/inspect/render/save_voxel_model, list/load_voxel_project). The only variation is the noun (model vs. project), which correctly reflects different resources rather than inconsistent convention.

Tool Count5/5

Eight tools is well-scoped for an AI voxel modeling server. Each tool earns its place across the modeling lifecycle (build, edit, inspect, preview, export, persist) without redundancy.

Completeness4/5

The lifecycle is broadly covered: create, edit, inspect, render, export, save, load, list. However, there is no delete tool for removing temporary models or cloud projects, and no rename/update-project metadata operation, leaving a minor gap agents must work around.

Available Tools

8 tools
create_voxel_modelCreate voxel modelAInspect

Create an editable VoxelDraft model from compact commands. Returns a short modelRef for later plugin calls and does not save to Cloud Projects. Use VoxelDraft's compact instruction stream instead of emitting one JSON object per voxel. Coordinates are integers 0..63. Colors are either #RRGGBB or a zero-based palette index. Commands: ["box",x1,y1,z1,x2,y2,z2,color,hollow?] ["ellipsoid",cx,cy,cz,rx,ry,rz,color,hollow?] ["cylinder","x"|"y"|"z",x,y,z,radius,height,color,hollow?] ["line",x1,y1,z1,x2,y2,z2,color] ["roof","x"|"z",x1,y1,z1,x2,y2,z2,color] (gable roof, axis is ridge direction) ["runs","x"|"y"|"z",color,[[x,y,z,length],...]] (preferred exact/freeform representation) ["points",color,[[x,y,z],...]] (sparse details only) ["erase",x1,y1,z1,x2,y2,z2] ["recolor",fromColor,toColor] ["copy",x1,y1,z1,x2,y2,z2,dx,dy,dz] ["repeat",x1,y1,z1,x2,y2,z2,dx,dy,dz,count] ["mirror","x"|"y"|"z",plane,x1,y1,z1,x2,y2,z2] (plane is a grid boundary 0..64) Prefer box/roof/ellipsoid/cylinder for bulk geometry, runs for irregular silhouettes, repeat/mirror for repeated or symmetric parts, and points only for small details. This usually uses far fewer model tokens than raw voxel JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
paletteNo
commandsYes

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations (readOnly=false, destructive=false, openWorld=false), the description discloses two behaviorally significant facts: the tool returns a short modelRef for later plugin calls, and the result is NOT saved to Cloud Projects. It also pins down coordinate domain (integer 0..63) and color encoding, which prevents malformed geometry. It omits limits such as the 512-command cap and any 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.

Conciseness4/5

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

The purpose and the critical non-persistence constraint are front-loaded, and the command list is dense and scannable rather than prose. The closing sentence about token savings is mildly redundant with the earlier instruction to avoid raw voxel JSON, but the length is justified by 0% schema coverage.

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

Completeness4/5

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

For a 3-parameter mutation tool with no output schema and no schema descriptions, the description covers what an agent needs: purpose, return contract, persistence behavior, and the full command grammar. Remaining gaps (name length, palette cap, command-count limit, error behavior) are documented in the schema or are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does for the critical 'commands' parameter — every command shape is enumerated with argument order and notes on 'hollow?', axis, and plane semantics. Coordinate range and color formats ('#RRGGBB' or zero-based palette index) are also documented. The 'name' and 'palette' parameters (including palette max of 64) get no description, leaving a gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Create an editable VoxelDraft model') and immediately scopes it: it returns a modelRef and does not persist to Cloud Projects, which cleanly separates it from save_voxel_model and edit_voxel_model among the siblings. An agent can identify the tool and its output contract without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It gives clear in-tool guidance on representation ('use the compact instruction stream instead of one JSON object per voxel', 'prefer box/roof/ellipsoid/cylinder for bulk geometry, runs for irregular silhouettes...') and implies when it applies via the non-persistence note. It never explicitly routes between this tool and edit_voxel_model or load/inspect, so it falls short of a 5.

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

edit_voxel_modelEdit voxel modelAInspect

Edit the temporary model identified by modelRef and return a new modelRef. This does not modify a saved cloud project. Use VoxelDraft's compact instruction stream instead of emitting one JSON object per voxel. Coordinates are integers 0..63. Colors are either #RRGGBB or a zero-based palette index. Commands: ["box",x1,y1,z1,x2,y2,z2,color,hollow?] ["ellipsoid",cx,cy,cz,rx,ry,rz,color,hollow?] ["cylinder","x"|"y"|"z",x,y,z,radius,height,color,hollow?] ["line",x1,y1,z1,x2,y2,z2,color] ["roof","x"|"z",x1,y1,z1,x2,y2,z2,color] (gable roof, axis is ridge direction) ["runs","x"|"y"|"z",color,[[x,y,z,length],...]] (preferred exact/freeform representation) ["points",color,[[x,y,z],...]] (sparse details only) ["erase",x1,y1,z1,x2,y2,z2] ["recolor",fromColor,toColor] ["copy",x1,y1,z1,x2,y2,z2,dx,dy,dz] ["repeat",x1,y1,z1,x2,y2,z2,dx,dy,dz,count] ["mirror","x"|"y"|"z",plane,x1,y1,z1,x2,y2,z2] (plane is a grid boundary 0..64) Prefer box/roof/ellipsoid/cylinder for bulk geometry, runs for irregular silhouettes, repeat/mirror for repeated or symmetric parts, and points only for small details. This usually uses far fewer model tokens than raw voxel JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
paletteNo
commandsYes
modelRefYesShort temporary VoxelDraft model reference returned by model tools

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=false and openWorldHint=false, but the description adds real behavioral context: edits are non-destructive because a new modelRef is returned and the original is not mutated, and the saved cloud project is untouched. It does not cover failure behavior, limits, or modelRef lifetime beyond calling it 'temporary.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Purpose and the crucial non-persistence caveat are front-loaded before the command reference. The command list is long but each line is load-bearing reference material for a DSL the agent must emit; only minor trimming is possible.

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

Completeness5/5

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

With no output schema, the description still states the return value (a new modelRef) and fully specifies the input DSL, coordinate space, and color encoding. For a high-complexity grammar tool, nothing essential to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% and the commands array is structurally opaque (array of mixed arrays), so the description carries the burden and delivers: full command grammar, coordinate integer range 0..63, color as #RRGGBB or zero-based palette index, and the mirror plane range 0..64. This is meaning the schema cannot convey on its own.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Edit the temporary model identified by modelRef') and immediately scopes it against the sibling family by clarifying 'This does not modify a saved cloud project,' which separates it from save_voxel_model/load_voxel_project. An agent can identify the operation and its target without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

Gives concrete direction about how to invoke it ('Use VoxelDraft's compact instruction stream instead of emitting one JSON object per voxel') and when to prefer each command family (box/roof/ellipsoid for bulk, runs for irregular silhouettes, points only for details). It never explicitly states when to choose edit_voxel_model over create_voxel_model or load_voxel_project, so the sibling-routing guidance is implied rather than stated.

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

export_voxel_modelExport voxel modelAInspect

Create direct download URLs for OBJ+MTL or compact VoxelDraft JSON from a modelRef.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNoobj
modelRefYesShort temporary VoxelDraft model reference returned by model tools

TDQS

A3.7/5.0
Behavior3/5

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

Annotations declare non-destructive, non-open-world operation with readOnlyHint=false, which fits an operation that mints URLs. The description adds that the result is 'direct download URLs' and that OBJ exports include an MTL companion, but it omits URL lifetime/expiry, whether multiple URLs are returned, or any auth/size constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

A single front-loaded sentence with no filler; the action, the outputs, and the key input (modelRef) all appear immediately.

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

Completeness4/5

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

There is no output schema, so the description must convey the return value, and it does — download URLs. For a 2-parameter tool this is nearly sufficient, with only URL validity and cardinality left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%: modelRef is documented in the schema, format is not. The description compensates by explaining what each format value yields ('OBJ+MTL' vs 'compact VoxelDraft JSON'), which adds real meaning beyond the bare obj/json enum.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource: it creates direct download URLs for a voxel model, and names the two output formats (OBJ+MTL, compact VoxelDraft JSON). This is distinct from siblings like save_voxel_model or render_voxel_model, though the description never explicitly contrasts them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

Usage is only implied by the verb 'export' and the input requirement of a modelRef. There is no explicit statement of when to prefer this over save_voxel_model or render_voxel_model, nor any exclusions or prerequisites beyond the schema's note that modelRef comes from model tools.

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

inspect_voxel_modelInspect voxel modelBInspect

Inspect a temporary VoxelDraft modelRef. Returns voxel count, command count, bounds, and colors.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelRefYesShort temporary VoxelDraft model reference returned by model tools

TDQS

B3.2/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, which is the notable fact here: an 'Inspect' tool that returns counts is framed as a read, yet it is explicitly not marked read-only. The description never explains what non-read-only effect occurs (e.g., keeping the temporary draft alive or locking it), so the safety profile the agent gets is only partially consistent with the tool's framing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two tight sentences, zero waste, with the read purpose front-loaded and the return payload enumerated immediately after. Nothing needs trimming or reordering.

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

Completeness4/5

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

For a one-parameter, no-output-schema tool, the description covers the operation and its return contents well. The remaining gap is the unexplained non-read-only annotation and any permission/lifetime caveats on the temporary model.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already explains it as a short temporary VoxelDraft reference. The description adds nothing beyond that baseline, so 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Inspect) and resource (temporary VoxelDraft modelRef), and even names the payload it produces (voxel count, command count, bounds, colors). It does not, however, distinguish itself from siblings like render_voxel_model or list_voxel_projects, so an agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

There is no explicit when-to-use, when-not-to-use, or alternative routing. The only contextual clue is that the modelRef is a 'short temporary reference returned by model tools,' which weakly implies inspection after model generation, but that is inference rather than guidance.

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

list_voxel_projectsList my VoxelDraft projectsA
Read-only
Inspect

List private VoxelDraft Cloud Projects. Requires project-read OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is clear. The description adds useful context by naming the required OAuth scope, which is not in the annotations, but does not disclose return format, pagination, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two short, front-loaded sentences with no wasted words. The purpose is stated first, followed by the one relevant operational requirement.

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

Completeness4/5

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

For a zero-parameter, read-only list operation with annotations covering safety, the description is nearly complete. It says what is listed and what access is required, though it omits any note about result format or pagination — minor given the absence of an output schema and the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline for parameter semantics is 4. The description does not need to add parameter detail, and it appropriately does not attempt to document nonexistent inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('private VoxelDraft Cloud Projects'), making the operation immediately clear. It does not explicitly differentiate itself from sibling tools like load_voxel_project or inspect_voxel_model, but the project-level listing purpose is still distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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

The description provides a prerequisite ('Requires project-read OAuth scope') but offers no guidance on when to choose this tool over alternatives or what context makes it appropriate. There are no when-to-use or when-not-to-use statements.

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

load_voxel_projectLoad a VoxelDraft projectAInspect

Load one private Cloud Project and return a short modelRef for later plugin calls. Requires project-read OAuth scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoen
projectIdYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false despite a 'Load' verb, which is non-obvious, and the description adds a concrete auth requirement ('Requires project-read OAuth scope') not present in annotations. It also discloses the return artifact (short modelRef for later plugin calls), going beyond structured fields. It does not, however, clarify why a load is not read-only or detail side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two concise sentences that front-load the action and outcome, then the prerequisite. No filler.

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

Completeness4/5

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

For a simple 2-param loader with no output schema, the description covers purpose, auth requirement, and return value, which is nearly complete. It could add minor detail on the language parameter or the modelRef format, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate; it adds some meaning by implying projectId identifies the private Cloud Project and noting the modelRef output. But it does not explain the language enum or the maxLength constraint. Baseline 3 is appropriate given partial compensation for a 2-param schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Load) and resource (one private Cloud Project/VoxelDraft project) with a clear outcome: returning a modelRef for later plugin calls. It is distinguishable from list_voxel_projects by loading a single project rather than listing. It doesn't explicitly contrast with siblings like inspect_voxel_model, but the purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description implies you use this to obtain a modelRef before other plugin calls, which is useful implied workflow guidance. However, it does not state when to choose this tool over alternatives such as inspect_voxel_model or list_voxel_projects, nor any exclusions. Usage is implied rather than explicit.

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

render_voxel_modelRender voxel modelAInspect

Preview a VoxelDraft modelRef. ChatGPT can render an interactive Three.js/WebGL widget; everyone also receives an interactive WebGL URL. Signed-in VoxelDraft Plus users may additionally receive a cached PNG when includeImage is true.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoiso
languageNoen
modelRefYesShort temporary VoxelDraft model reference returned by model tools
imageSizeNo
backgroundNosolid
includeImageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
viewYes
imageNo
modelYes
quotaNo
statsYes
reasonNo
editUrlYes
modelRefYesShort temporary VoxelDraft model reference returned by model tools
rendererYes
imageSizeYes
renderUrlYes
backgroundYes
imageErrorNo
downloadUrlNo
imageAvailableNo
rendererVersionYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only supply the generic readOnly/openWorld/destructive flags; the description adds real context: rendering happens inside ChatGPT, everyone gets a WebGL URL, and only signed-in Plus users get a cached PNG when includeImage is true. This explains the tiered/cost-dependent behavior that justifies readOnlyHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

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

Two front-loaded sentences that cover output forms and the includeImage condition with little waste. No padding or restatement of the title.

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

Completeness4/5

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

An output schema exists, so return values need not be detailed, and the description still summarizes what the caller receives. Combined with the tier behavior noted, an agent has enough to call it correctly, though parameter-level gaps remain for view/language/imageSize/background.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 17%, so the description should compensate, and it only clarifies includeImage's conditional effect and modelRef's role. The other four parameters (view, language, imageSize, background) are undocumented beyond their enum values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (Preview) plus resource (modelRef), and it explains the deliverable (interactive Three.js/WebGL widget, WebGL URL, optional PNG). It does not differentiate itself from siblings like inspect_voxel_model or export_voxel_model, which an agent must infer.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The word 'Preview' implies visual rendering as opposed to inspecting or exporting, but there is no explicit when-to-use guidance and no sibling is named as an alternative. Usage is only implied by the tool's name and output description.

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

save_voxel_modelSave voxel model to my VoxelDraft accountA
Destructive
Inspect

Save the temporary model identified by modelRef to private VoxelDraft Cloud Projects. Requires project-write OAuth scope. Pass projectId to update an existing owned cloud project.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelRefYesShort temporary VoxelDraft model reference returned by model tools
projectIdNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and non-read-only, so the safety profile is partly covered. The description adds genuinely useful behavior the annotations don't carry: the required OAuth scope and the ownership constraint on updating a project. It still doesn't say that an existing project's contents are overwritten, which is the main residual gap for a destructive write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

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

Two tight sentences with the core action front-loaded, followed by the permission requirement and the optional upgrade path. Every clause carries information; nothing is padding.

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

Completeness4/5

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

For a two-parameter, no-output-schema tool this covers the essentials: what is saved, where, the auth requirement, and what projectId changes. The one meaningful omission is the consequence of saving into an existing project (overwrite vs. merge), which matters given the destructive hint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50% (projectId has no schema description), and the description compensates by explaining exactly what projectId does – updating an existing owned cloud project – and by characterizing modelRef as a temporary reference from model tools. This adds meaning the schema alone does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Save') plus a precise resource ('the temporary model identified by modelRef') and destination ('private VoxelDraft Cloud Projects'), which makes its role among the save/create/edit/export/render siblings reasonably evident. It stops short of explicitly contrasting itself with a named sibling, so it lands just below the top tier.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

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

It states a clear precondition ('Requires project-write OAuth scope') and a conditional branch: pass projectId to update an existing owned project, omit it to create a new one. That is real when-to-use guidance, though it names no alternative tool for the cases this one doesn't cover.

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. 1 tool update
    • Changedrender_voxel_model1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "background": {
        +      "enum": [
        +        "solid",
        +        "transparent"
        +      ],
        +      "type": "string"
        +    },
        +    "downloadUrl": {
        +      "type": "string"
        +    },
        +    "editUrl": {
        +      "type": "string"
        +    },
        +    "image": {
        +      "type": "object"
        +    },
        +    "imageAvailable": {
        +      "type": "boolean"
        +    },
        +    "imageError": {
        +      "type": "string"
        +    },
        +    "imageSize": {
        +      "enum": [
        +        256,
        +        512,
        +        1024
        +      ],
        +      "type": "integer"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelRef": {
        +      "description": "Short temporary VoxelDraft model reference returned by model tools",
        +      "maxLength": 64,
        +      "type": "string"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "quota": {
        +      "type": "object"
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "renderUrl": {
        +      "type": "string"
        +    },
        +    "renderer": {
        +      "type": "string"
        +    },
        +    "rendererVersion": {
        +      "type": "string"
        +    },
        +    "stats": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bounds": {
        +          "anyOf": [
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "max": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "min": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "size": {
        +                  "items": {
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "min",
        +                "max",
        +                "size"
        +              ],
        +              "type": "object"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "colors": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "commandCount": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxelCount": {
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "voxelCount",
        +        "commandCount",
        +        "colors",
        +        "bounds"
        +      ],
        +      "type": "object"
        +    },
        +    "view": {
        +      "enum": [
        +        "iso",
        +        "front",
        +        "back",
        +        "left",
        +        "right",
        +        "top",
        +        "bottom"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "model",
        +    "modelRef",
        +    "name",
        +    "stats",
        +    "renderer",
        +    "rendererVersion",
        +    "view",
        +    "imageSize",
        +    "background",
        +    "editUrl",
        +    "renderUrl"
        +  ],
        +  "type": "object"
        +}
  2. 8 tool updates
    • Changedcreate_voxel_model1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "editUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "modelRef": {
        -      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        -      "maxLength": 64,
        -      "type": "string"
        -    },
        -    "renderUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "stats": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "bounds": {
        -          "anyOf": [
        -            {
        -              "type": "null"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "max": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "min": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "size": {
        -                  "items": {
        -                    "maximum": 64,
        -                    "minimum": 1,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                }
        -              },
        -              "required": [
        -                "min",
        -                "max",
        -                "size"
        -              ],
        -              "type": "object"
        -            }
        -          ]
        -        },
        -        "colors": {
        -          "items": {
        -            "pattern": "^#[0-9a-fA-F]{6}$",
        -            "type": "string"
        -          },
        -          "maxItems": 512,
        -          "type": "array"
        -        },
        -        "commandCount": {
        -          "maximum": 512,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "voxelCount": {
        -          "maximum": 100000,
        -          "minimum": 0,
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "voxelCount",
        -        "commandCount",
        -        "colors",
        -        "bounds"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "modelRef",
        -    "stats",
        -    "editUrl",
        -    "renderUrl"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changededit_voxel_model2 fields changed
      • changedInput schema / properties / modelRef / description
        Previous value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools"
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "editUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "modelRef": {
        -      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        -      "maxLength": 64,
        -      "type": "string"
        -    },
        -    "renderUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "stats": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "bounds": {
        -          "anyOf": [
        -            {
        -              "type": "null"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "max": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "min": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "size": {
        -                  "items": {
        -                    "maximum": 64,
        -                    "minimum": 1,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                }
        -              },
        -              "required": [
        -                "min",
        -                "max",
        -                "size"
        -              ],
        -              "type": "object"
        -            }
        -          ]
        -        },
        -        "colors": {
        -          "items": {
        -            "pattern": "^#[0-9a-fA-F]{6}$",
        -            "type": "string"
        -          },
        -          "maxItems": 512,
        -          "type": "array"
        -        },
        -        "commandCount": {
        -          "maximum": 512,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "voxelCount": {
        -          "maximum": 100000,
        -          "minimum": 0,
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "voxelCount",
        -        "commandCount",
        -        "colors",
        -        "bounds"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "modelRef",
        -    "stats",
        -    "editUrl",
        -    "renderUrl"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedexport_voxel_model2 fields changed
      • changedInput schema / properties / modelRef / description
        Previous value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools"
      • changedOutput schema / (root)
        Previous value: -{
        -  "oneOf": [
        -    {
        -      "additionalProperties": false,
        -      "properties": {
        -        "downloadUrl": {
        -          "format": "uri",
        -          "type": "string"
        -        },
        -        "format": {
        -          "const": "VoxelDraft compact JSON",
        -          "type": "string"
        -        },
        -        "stats": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "bounds": {
        -              "anyOf": [
        -                {
        -                  "type": "null"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "max": {
        -                      "items": {
        -                        "maximum": 63,
        -                        "minimum": 0,
        -                        "type": "integer"
        -                      },
        -                      "maxItems": 3,
        -                      "minItems": 3,
        -                      "type": "array"
        -                    },
        -                    "min": {
        -                      "items": {
        -                        "maximum": 63,
        -                        "minimum": 0,
        -                        "type": "integer"
        -                      },
        -                      "maxItems": 3,
        -                      "minItems": 3,
        -                      "type": "array"
        -                    },
        -                    "size": {
        -                      "items": {
        -                        "maximum": 64,
        -                        "minimum": 1,
        -                        "type": "integer"
        -                      },
        -                      "maxItems": 3,
        -                      "minItems": 3,
        -                      "type": "array"
        -                    }
        -                  },
        -                  "required": [
        -                    "min",
        -                    "max",
        -                    "size"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "colors": {
        -              "items": {
        -                "pattern": "^#[0-9a-fA-F]{6}$",
        -                "type": "string"
        -              },
        -              "maxItems": 512,
        -              "type": "array"
        -            },
        -            "commandCount": {
        -              "maximum": 512,
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "voxelCount": {
        -              "maximum": 100000,
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "voxelCount",
        -            "commandCount",
        -            "colors",
        -            "bounds"
        -          ],
        -          "type": "object"
        -        }
        -      },
        -      "required": [
        -        "format",
        -        "downloadUrl",
        -        "stats"
        -      ],
        -      "type": "object"
        -    },
        -    {
        -      "additionalProperties": false,
        -      "properties": {
        -        "format": {
        -          "const": "OBJ+MTL",
        -          "type": "string"
        -        },
        -        "mtlUrl": {
        -          "format": "uri",
        -          "type": "string"
        -        },
        -        "objUrl": {
        -          "format": "uri",
        -          "type": "string"
        -        },
        -        "optimization": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "materialCount": {
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "vertexCount": {
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "visibleFaceCount": {
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "voxelCount": {
        -              "minimum": 0,
        -              "type": "integer"
        -            }
        -          },
        -          "required": [
        -            "voxelCount",
        -            "vertexCount",
        -            "visibleFaceCount",
        -            "materialCount"
        -          ],
        -          "type": "object"
        -        }
        -      },
        -      "required": [
        -        "format",
        -        "objUrl",
        -        "mtlUrl",
        -        "optimization"
        -      ],
        -      "type": "object"
        -    }
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedinspect_voxel_model2 fields changed
      • changedInput schema / properties / modelRef / description
        Previous value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools"
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "name": {
        -      "type": "string"
        -    },
        -    "palette": {
        -      "items": {
        -        "pattern": "^#[0-9a-fA-F]{6}$",
        -        "type": "string"
        -      },
        -      "maxItems": 64,
        -      "type": "array"
        -    },
        -    "stats": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "bounds": {
        -          "anyOf": [
        -            {
        -              "type": "null"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "max": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "min": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "size": {
        -                  "items": {
        -                    "maximum": 64,
        -                    "minimum": 1,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                }
        -              },
        -              "required": [
        -                "min",
        -                "max",
        -                "size"
        -              ],
        -              "type": "object"
        -            }
        -          ]
        -        },
        -        "colors": {
        -          "items": {
        -            "pattern": "^#[0-9a-fA-F]{6}$",
        -            "type": "string"
        -          },
        -          "maxItems": 512,
        -          "type": "array"
        -        },
        -        "commandCount": {
        -          "maximum": 512,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "voxelCount": {
        -          "maximum": 100000,
        -          "minimum": 0,
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "voxelCount",
        -        "commandCount",
        -        "colors",
        -        "bounds"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "name",
        -    "palette",
        -    "stats"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedlist_voxel_projects1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "count": {
        -      "maximum": 200,
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "projects": {
        -      "items": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "byte_size": {
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "created_at": {
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "id": {
        -            "type": "string"
        -          },
        -          "name": {
        -            "type": "string"
        -          },
        -          "updated_at": {
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "voxel_count": {
        -            "minimum": 0,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "id",
        -          "name",
        -          "voxel_count",
        -          "byte_size",
        -          "created_at",
        -          "updated_at"
        -        ],
        -        "type": "object"
        -      },
        -      "maxItems": 200,
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "projects",
        -    "count"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedload_voxel_project1 field changed
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "editUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "modelRef": {
        -      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        -      "maxLength": 64,
        -      "type": "string"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "byte_size": {
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "created_at": {
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "id": {
        -          "type": "string"
        -        },
        -        "name": {
        -          "type": "string"
        -        },
        -        "updated_at": {
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "voxel_count": {
        -          "minimum": 0,
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "name",
        -        "voxel_count",
        -        "byte_size",
        -        "created_at",
        -        "updated_at"
        -      ],
        -      "type": "object"
        -    },
        -    "renderUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "stats": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "bounds": {
        -          "anyOf": [
        -            {
        -              "type": "null"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "max": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "min": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "size": {
        -                  "items": {
        -                    "maximum": 64,
        -                    "minimum": 1,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                }
        -              },
        -              "required": [
        -                "min",
        -                "max",
        -                "size"
        -              ],
        -              "type": "object"
        -            }
        -          ]
        -        },
        -        "colors": {
        -          "items": {
        -            "pattern": "^#[0-9a-fA-F]{6}$",
        -            "type": "string"
        -          },
        -          "maxItems": 512,
        -          "type": "array"
        -        },
        -        "commandCount": {
        -          "maximum": 512,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "voxelCount": {
        -          "maximum": 100000,
        -          "minimum": 0,
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "voxelCount",
        -        "commandCount",
        -        "colors",
        -        "bounds"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "required": [
        -    "project",
        -    "modelRef",
        -    "stats",
        -    "editUrl",
        -    "renderUrl"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedrender_voxel_model2 fields changed
      • changedInput schema / properties / modelRef / description
        Previous value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools"
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "background": {
        -      "enum": [
        -        "solid",
        -        "transparent"
        -      ],
        -      "type": "string"
        -    },
        -    "editUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "image": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "background": {
        -          "enum": [
        -            "solid",
        -            "transparent"
        -          ],
        -          "type": "string"
        -        },
        -        "browserMsUsed": {
        -          "minimum": 0,
        -          "type": "number"
        -        },
        -        "cached": {
        -          "type": "boolean"
        -        },
        -        "height": {
        -          "enum": [
        -            256,
        -            512,
        -            1024
        -          ],
        -          "type": "integer"
        -        },
        -        "mimeType": {
        -          "const": "image/png",
        -          "type": "string"
        -        },
        -        "view": {
        -          "enum": [
        -            "iso",
        -            "front",
        -            "back",
        -            "left",
        -            "right",
        -            "top",
        -            "bottom"
        -          ],
        -          "type": "string"
        -        },
        -        "width": {
        -          "enum": [
        -            256,
        -            512,
        -            1024
        -          ],
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "mimeType",
        -        "width",
        -        "height",
        -        "cached",
        -        "view",
        -        "background"
        -      ],
        -      "type": "object"
        -    },
        -    "imageAvailable": {
        -      "type": "boolean"
        -    },
        -    "imageError": {
        -      "type": "string"
        -    },
        -    "imageSize": {
        -      "enum": [
        -        256,
        -        512,
        -        1024
        -      ],
        -      "type": "integer"
        -    },
        -    "model": {
        -      "type": "string"
        -    },
        -    "modelRef": {
        -      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        -      "maxLength": 64,
        -      "type": "string"
        -    },
        -    "name": {
        -      "type": "string"
        -    },
        -    "quota": {
        -      "oneOf": [
        -        {
        -          "additionalProperties": false,
        -          "properties": {
        -            "plan": {
        -              "const": "free",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "plan"
        -          ],
        -          "type": "object"
        -        },
        -        {
        -          "additionalProperties": false,
        -          "properties": {
        -            "cached": {
        -              "type": "boolean"
        -            },
        -            "creditsUsed": {
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "dailyRemaining": {
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "monthlyRemaining": {
        -              "minimum": 0,
        -              "type": "integer"
        -            },
        -            "plan": {
        -              "const": "plus",
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "plan",
        -            "creditsUsed",
        -            "dailyRemaining",
        -            "monthlyRemaining",
        -            "cached"
        -          ],
        -          "type": "object"
        -        }
        -      ]
        -    },
        -    "reason": {
        -      "type": "string"
        -    },
        -    "renderUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "renderer": {
        -      "type": "string"
        -    },
        -    "rendererVersion": {
        -      "type": "string"
        -    },
        -    "stats": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "bounds": {
        -          "anyOf": [
        -            {
        -              "type": "null"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "max": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "min": {
        -                  "items": {
        -                    "maximum": 63,
        -                    "minimum": 0,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                },
        -                "size": {
        -                  "items": {
        -                    "maximum": 64,
        -                    "minimum": 1,
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 3,
        -                  "minItems": 3,
        -                  "type": "array"
        -                }
        -              },
        -              "required": [
        -                "min",
        -                "max",
        -                "size"
        -              ],
        -              "type": "object"
        -            }
        -          ]
        -        },
        -        "colors": {
        -          "items": {
        -            "pattern": "^#[0-9a-fA-F]{6}$",
        -            "type": "string"
        -          },
        -          "maxItems": 512,
        -          "type": "array"
        -        },
        -        "commandCount": {
        -          "maximum": 512,
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "voxelCount": {
        -          "maximum": 100000,
        -          "minimum": 0,
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "voxelCount",
        -        "commandCount",
        -        "colors",
        -        "bounds"
        -      ],
        -      "type": "object"
        -    },
        -    "view": {
        -      "enum": [
        -        "iso",
        -        "front",
        -        "back",
        -        "left",
        -        "right",
        -        "top",
        -        "bottom"
        -      ],
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "model",
        -    "name",
        -    "stats",
        -    "renderer",
        -    "rendererVersion",
        -    "view",
        -    "imageSize",
        -    "background",
        -    "editUrl",
        -    "renderUrl"
        -  ],
        -  "type": "object"
        -}New value: +null
    • Changedsave_voxel_model2 fields changed
      • changedInput schema / properties / modelRef / description
        Previous value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools"
      • changedOutput schema / (root)
        Previous value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "editUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "modelRef": {
        -      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        -      "maxLength": 64,
        -      "type": "string"
        -    },
        -    "project": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "byte_size": {
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "created_at": {
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "id": {
        -          "type": "string"
        -        },
        -        "name": {
        -          "type": "string"
        -        },
        -        "updated_at": {
        -          "minimum": 0,
        -          "type": "integer"
        -        },
        -        "voxel_count": {
        -          "minimum": 0,
        -          "type": "integer"
        -        }
        -      },
        -      "required": [
        -        "id",
        -        "name",
        -        "voxel_count",
        -        "byte_size",
        -        "created_at",
        -        "updated_at"
        -      ],
        -      "type": "object"
        -    },
        -    "renderUrl": {
        -      "format": "uri",
        -      "type": "string"
        -    },
        -    "saved": {
        -      "const": true,
        -      "type": "boolean"
        -    }
        -  },
        -  "required": [
        -    "saved",
        -    "project",
        -    "modelRef",
        -    "editUrl",
        -    "renderUrl"
        -  ],
        -  "type": "object"
        -}New value: +null
  3. 8 tool updates
    • Changedcreate_voxel_model1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "editUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "modelRef": {
        +      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +      "maxLength": 64,
        +      "type": "string"
        +    },
        +    "renderUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "stats": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bounds": {
        +          "anyOf": [
        +            {
        +              "type": "null"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "max": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "min": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "size": {
        +                  "items": {
        +                    "maximum": 64,
        +                    "minimum": 1,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "min",
        +                "max",
        +                "size"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "colors": {
        +          "items": {
        +            "pattern": "^#[0-9a-fA-F]{6}$",
        +            "type": "string"
        +          },
        +          "maxItems": 512,
        +          "type": "array"
        +        },
        +        "commandCount": {
        +          "maximum": 512,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxelCount": {
        +          "maximum": 100000,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "voxelCount",
        +        "commandCount",
        +        "colors",
        +        "bounds"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "modelRef",
        +    "stats",
        +    "editUrl",
        +    "renderUrl"
        +  ],
        +  "type": "object"
        +}
    • Changededit_voxel_model4 fields changed
      • removedInput schema / properties / model
        Removed value: -{
        -  "description": "Opaque VoxelDraft model handle",
        -  "type": "string"
        -}
      • addedInput schema / properties / modelRef
        Added value: +{
        +  "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model",
        -  "commands"
        -]New value: +[
        +  "modelRef",
        +  "commands"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "editUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "modelRef": {
        +      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +      "maxLength": 64,
        +      "type": "string"
        +    },
        +    "renderUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "stats": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bounds": {
        +          "anyOf": [
        +            {
        +              "type": "null"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "max": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "min": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "size": {
        +                  "items": {
        +                    "maximum": 64,
        +                    "minimum": 1,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "min",
        +                "max",
        +                "size"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "colors": {
        +          "items": {
        +            "pattern": "^#[0-9a-fA-F]{6}$",
        +            "type": "string"
        +          },
        +          "maxItems": 512,
        +          "type": "array"
        +        },
        +        "commandCount": {
        +          "maximum": 512,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxelCount": {
        +          "maximum": 100000,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "voxelCount",
        +        "commandCount",
        +        "colors",
        +        "bounds"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "modelRef",
        +    "stats",
        +    "editUrl",
        +    "renderUrl"
        +  ],
        +  "type": "object"
        +}
    • Changedexport_voxel_model4 fields changed
      • removedInput schema / properties / model
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / modelRef
        Added value: +{
        +  "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model"
        -]New value: +[
        +  "modelRef"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "oneOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "downloadUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "format": {
        +          "const": "VoxelDraft compact JSON",
        +          "type": "string"
        +        },
        +        "stats": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "bounds": {
        +              "anyOf": [
        +                {
        +                  "type": "null"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "max": {
        +                      "items": {
        +                        "maximum": 63,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "maxItems": 3,
        +                      "minItems": 3,
        +                      "type": "array"
        +                    },
        +                    "min": {
        +                      "items": {
        +                        "maximum": 63,
        +                        "minimum": 0,
        +                        "type": "integer"
        +                      },
        +                      "maxItems": 3,
        +                      "minItems": 3,
        +                      "type": "array"
        +                    },
        +                    "size": {
        +                      "items": {
        +                        "maximum": 64,
        +                        "minimum": 1,
        +                        "type": "integer"
        +                      },
        +                      "maxItems": 3,
        +                      "minItems": 3,
        +                      "type": "array"
        +                    }
        +                  },
        +                  "required": [
        +                    "min",
        +                    "max",
        +                    "size"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "colors": {
        +              "items": {
        +                "pattern": "^#[0-9a-fA-F]{6}$",
        +                "type": "string"
        +              },
        +              "maxItems": 512,
        +              "type": "array"
        +            },
        +            "commandCount": {
        +              "maximum": 512,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "voxelCount": {
        +              "maximum": 100000,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "voxelCount",
        +            "commandCount",
        +            "colors",
        +            "bounds"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "format",
        +        "downloadUrl",
        +        "stats"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "format": {
        +          "const": "OBJ+MTL",
        +          "type": "string"
        +        },
        +        "mtlUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "objUrl": {
        +          "format": "uri",
        +          "type": "string"
        +        },
        +        "optimization": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "materialCount": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "vertexCount": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "visibleFaceCount": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "voxelCount": {
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "voxelCount",
        +            "vertexCount",
        +            "visibleFaceCount",
        +            "materialCount"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "format",
        +        "objUrl",
        +        "mtlUrl",
        +        "optimization"
        +      ],
        +      "type": "object"
        +    }
        +  ],
        +  "type": "object"
        +}
    • Changedinspect_voxel_model4 fields changed
      • removedInput schema / properties / model
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / modelRef
        Added value: +{
        +  "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model"
        -]New value: +[
        +  "modelRef"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "name": {
        +      "type": "string"
        +    },
        +    "palette": {
        +      "items": {
        +        "pattern": "^#[0-9a-fA-F]{6}$",
        +        "type": "string"
        +      },
        +      "maxItems": 64,
        +      "type": "array"
        +    },
        +    "stats": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bounds": {
        +          "anyOf": [
        +            {
        +              "type": "null"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "max": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "min": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "size": {
        +                  "items": {
        +                    "maximum": 64,
        +                    "minimum": 1,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "min",
        +                "max",
        +                "size"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "colors": {
        +          "items": {
        +            "pattern": "^#[0-9a-fA-F]{6}$",
        +            "type": "string"
        +          },
        +          "maxItems": 512,
        +          "type": "array"
        +        },
        +        "commandCount": {
        +          "maximum": 512,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxelCount": {
        +          "maximum": 100000,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "voxelCount",
        +        "commandCount",
        +        "colors",
        +        "bounds"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "name",
        +    "palette",
        +    "stats"
        +  ],
        +  "type": "object"
        +}
    • Changedlist_voxel_projects1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "count": {
        +      "maximum": 200,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "projects": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "byte_size": {
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "created_at": {
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "updated_at": {
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "voxel_count": {
        +            "minimum": 0,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "name",
        +          "voxel_count",
        +          "byte_size",
        +          "created_at",
        +          "updated_at"
        +        ],
        +        "type": "object"
        +      },
        +      "maxItems": 200,
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "projects",
        +    "count"
        +  ],
        +  "type": "object"
        +}
    • Changedload_voxel_project1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "editUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "modelRef": {
        +      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +      "maxLength": 64,
        +      "type": "string"
        +    },
        +    "project": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "byte_size": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "created_at": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "updated_at": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxel_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "voxel_count",
        +        "byte_size",
        +        "created_at",
        +        "updated_at"
        +      ],
        +      "type": "object"
        +    },
        +    "renderUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "stats": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bounds": {
        +          "anyOf": [
        +            {
        +              "type": "null"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "max": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "min": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "size": {
        +                  "items": {
        +                    "maximum": 64,
        +                    "minimum": 1,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "min",
        +                "max",
        +                "size"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "colors": {
        +          "items": {
        +            "pattern": "^#[0-9a-fA-F]{6}$",
        +            "type": "string"
        +          },
        +          "maxItems": 512,
        +          "type": "array"
        +        },
        +        "commandCount": {
        +          "maximum": 512,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxelCount": {
        +          "maximum": 100000,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "voxelCount",
        +        "commandCount",
        +        "colors",
        +        "bounds"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "project",
        +    "modelRef",
        +    "stats",
        +    "editUrl",
        +    "renderUrl"
        +  ],
        +  "type": "object"
        +}
    • Changedrender_voxel_model4 fields changed
      • removedInput schema / properties / model
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / modelRef
        Added value: +{
        +  "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model"
        -]New value: +[
        +  "modelRef"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "background": {
        +      "enum": [
        +        "solid",
        +        "transparent"
        +      ],
        +      "type": "string"
        +    },
        +    "editUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "image": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "background": {
        +          "enum": [
        +            "solid",
        +            "transparent"
        +          ],
        +          "type": "string"
        +        },
        +        "browserMsUsed": {
        +          "minimum": 0,
        +          "type": "number"
        +        },
        +        "cached": {
        +          "type": "boolean"
        +        },
        +        "height": {
        +          "enum": [
        +            256,
        +            512,
        +            1024
        +          ],
        +          "type": "integer"
        +        },
        +        "mimeType": {
        +          "const": "image/png",
        +          "type": "string"
        +        },
        +        "view": {
        +          "enum": [
        +            "iso",
        +            "front",
        +            "back",
        +            "left",
        +            "right",
        +            "top",
        +            "bottom"
        +          ],
        +          "type": "string"
        +        },
        +        "width": {
        +          "enum": [
        +            256,
        +            512,
        +            1024
        +          ],
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "mimeType",
        +        "width",
        +        "height",
        +        "cached",
        +        "view",
        +        "background"
        +      ],
        +      "type": "object"
        +    },
        +    "imageAvailable": {
        +      "type": "boolean"
        +    },
        +    "imageError": {
        +      "type": "string"
        +    },
        +    "imageSize": {
        +      "enum": [
        +        256,
        +        512,
        +        1024
        +      ],
        +      "type": "integer"
        +    },
        +    "model": {
        +      "type": "string"
        +    },
        +    "modelRef": {
        +      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +      "maxLength": 64,
        +      "type": "string"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "quota": {
        +      "oneOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "plan": {
        +              "const": "free",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "plan"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "cached": {
        +              "type": "boolean"
        +            },
        +            "creditsUsed": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "dailyRemaining": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "monthlyRemaining": {
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "plan": {
        +              "const": "plus",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "plan",
        +            "creditsUsed",
        +            "dailyRemaining",
        +            "monthlyRemaining",
        +            "cached"
        +          ],
        +          "type": "object"
        +        }
        +      ]
        +    },
        +    "reason": {
        +      "type": "string"
        +    },
        +    "renderUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "renderer": {
        +      "type": "string"
        +    },
        +    "rendererVersion": {
        +      "type": "string"
        +    },
        +    "stats": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "bounds": {
        +          "anyOf": [
        +            {
        +              "type": "null"
        +            },
        +            {
        +              "additionalProperties": false,
        +              "properties": {
        +                "max": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "min": {
        +                  "items": {
        +                    "maximum": 63,
        +                    "minimum": 0,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                },
        +                "size": {
        +                  "items": {
        +                    "maximum": 64,
        +                    "minimum": 1,
        +                    "type": "integer"
        +                  },
        +                  "maxItems": 3,
        +                  "minItems": 3,
        +                  "type": "array"
        +                }
        +              },
        +              "required": [
        +                "min",
        +                "max",
        +                "size"
        +              ],
        +              "type": "object"
        +            }
        +          ]
        +        },
        +        "colors": {
        +          "items": {
        +            "pattern": "^#[0-9a-fA-F]{6}$",
        +            "type": "string"
        +          },
        +          "maxItems": 512,
        +          "type": "array"
        +        },
        +        "commandCount": {
        +          "maximum": 512,
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxelCount": {
        +          "maximum": 100000,
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "voxelCount",
        +        "commandCount",
        +        "colors",
        +        "bounds"
        +      ],
        +      "type": "object"
        +    },
        +    "view": {
        +      "enum": [
        +        "iso",
        +        "front",
        +        "back",
        +        "left",
        +        "right",
        +        "top",
        +        "bottom"
        +      ],
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "model",
        +    "name",
        +    "stats",
        +    "renderer",
        +    "rendererVersion",
        +    "view",
        +    "imageSize",
        +    "background",
        +    "editUrl",
        +    "renderUrl"
        +  ],
        +  "type": "object"
        +}
    • Changedsave_voxel_model4 fields changed
      • removedInput schema / properties / model
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / modelRef
        Added value: +{
        +  "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +  "maxLength": 64,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "model"
        -]New value: +[
        +  "modelRef"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "editUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "modelRef": {
        +      "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity",
        +      "maxLength": 64,
        +      "type": "string"
        +    },
        +    "project": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "byte_size": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "created_at": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "updated_at": {
        +          "minimum": 0,
        +          "type": "integer"
        +        },
        +        "voxel_count": {
        +          "minimum": 0,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "voxel_count",
        +        "byte_size",
        +        "created_at",
        +        "updated_at"
        +      ],
        +      "type": "object"
        +    },
        +    "renderUrl": {
        +      "format": "uri",
        +      "type": "string"
        +    },
        +    "saved": {
        +      "const": true,
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "saved",
        +    "project",
        +    "modelRef",
        +    "editUrl",
        +    "renderUrl"
        +  ],
        +  "type": "object"
        +}
  4. 1 tool update
    • Changedrender_voxel_model3 fields changed
      • addedInput schema / properties / background
        Added value: +{
        +  "default": "solid",
        +  "enum": [
        +    "solid",
        +    "transparent"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / imageSize / enum
        Previous value: -[
        -  256,
        -  512
        -]New value: +[
        +  256,
        +  512,
        +  1024
        +]
      • addedInput schema / properties / view
        Added value: +{
        +  "default": "iso",
        +  "enum": [
        +    "iso",
        +    "front",
        +    "back",
        +    "left",
        +    "right",
        +    "top",
        +    "bottom"
        +  ],
        +  "type": "string"
        +}
  5. 8 tool updates
    • First observedcreate_voxel_model
    • First observededit_voxel_model
    • First observedexport_voxel_model
    • First observedinspect_voxel_model
    • First observedlist_voxel_projects
    • First observedload_voxel_project
    • First observedrender_voxel_model
    • First observedsave_voxel_model

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    A voxel editor with MCP bridge enabling AI agents to create and edit 3D models, supporting .vox/.obj formats, layers, and a web editor.
    27
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to create complete, Teardown-ready multi-part .vox voxel models with material palette compatibility, previews, manifests, and XML skeletons so they can write coherent mod files.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    990 npm
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources