VoxelDraft – AI Voxel Modeling
Server Details
Create, edit, render, save, and export voxel models with interactive 3D previews.
- Status
- Healthy
- Uptime
- 100.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 8 tools
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.
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.
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.
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 toolscreate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| palette | No | ||
| commands | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| palette | No | ||
| commands | Yes | ||
| modelRef | Yes | Short temporary VoxelDraft model reference returned by model tools |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | obj | |
| modelRef | Yes | Short temporary VoxelDraft model reference returned by model tools |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| modelRef | Yes | Short temporary VoxelDraft model reference returned by model tools |
TDQS
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.
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.
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.
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.
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.
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 projectsARead-onlyInspect
List private VoxelDraft Cloud Projects. Requires project-read OAuth scope.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | en | |
| projectId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | iso | |
| language | No | en | |
| modelRef | Yes | Short temporary VoxelDraft model reference returned by model tools | |
| imageSize | No | ||
| background | No | solid | |
| includeImage | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| view | Yes | |
| image | No | |
| model | Yes | |
| quota | No | |
| stats | Yes | |
| reason | No | |
| editUrl | Yes | |
| modelRef | Yes | Short temporary VoxelDraft model reference returned by model tools |
| renderer | Yes | |
| imageSize | Yes | |
| renderUrl | Yes | |
| background | Yes | |
| imageError | No | |
| downloadUrl | No | |
| imageAvailable | No | |
| rendererVersion | Yes |
TDQS
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.
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.
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.
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.
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.
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 accountADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| modelRef | Yes | Short temporary VoxelDraft model reference returned by model tools | |
| projectId | No |
TDQS
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.
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.
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.
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.
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.
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 tool update
- Changed
render_voxel_model1 field changed- changed
Output 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" +}
8 tool updates
- Changed
create_voxel_model1 field changed- changed
Output 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
- Changed
edit_voxel_model2 fields changed- changed
Input schema / properties / modelRef / descriptionPrevious value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools" - changed
Output 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
- Changed
export_voxel_model2 fields changed- changed
Input schema / properties / modelRef / descriptionPrevious value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools" - changed
Output 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
- Changed
inspect_voxel_model2 fields changed- changed
Input schema / properties / modelRef / descriptionPrevious value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools" - changed
Output 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
- Changed
list_voxel_projects1 field changed- changed
Output 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
- Changed
load_voxel_project1 field changed- changed
Output 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
- Changed
render_voxel_model2 fields changed- changed
Input schema / properties / modelRef / descriptionPrevious value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools" - changed
Output 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
- Changed
save_voxel_model2 fields changed- changed
Input schema / properties / modelRef / descriptionPrevious value: -"Short temporary VoxelDraft model reference that expires after 7 days of inactivity"New value: +"Short temporary VoxelDraft model reference returned by model tools" - changed
Output 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
8 tool updates
- Changed
create_voxel_model1 field changed- changed
Output 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" +}
- Changed
edit_voxel_model4 fields changed- removed
Input schema / properties / modelRemoved value: -{ - "description": "Opaque VoxelDraft model handle", - "type": "string" -} - added
Input schema / properties / modelRefAdded value: +{ + "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity", + "maxLength": 64, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "model", - "commands" -]New value: +[ + "modelRef", + "commands" +] - changed
Output 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" +}
- Changed
export_voxel_model4 fields changed- removed
Input schema / properties / modelRemoved value: -{ - "type": "string" -} - added
Input schema / properties / modelRefAdded value: +{ + "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity", + "maxLength": 64, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "model" -]New value: +[ + "modelRef" +] - changed
Output 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" +}
- Changed
inspect_voxel_model4 fields changed- removed
Input schema / properties / modelRemoved value: -{ - "type": "string" -} - added
Input schema / properties / modelRefAdded value: +{ + "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity", + "maxLength": 64, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "model" -]New value: +[ + "modelRef" +] - changed
Output 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" +}
- Changed
list_voxel_projects1 field changed- changed
Output 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" +}
- Changed
load_voxel_project1 field changed- changed
Output 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" +}
- Changed
render_voxel_model4 fields changed- removed
Input schema / properties / modelRemoved value: -{ - "type": "string" -} - added
Input schema / properties / modelRefAdded value: +{ + "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity", + "maxLength": 64, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "model" -]New value: +[ + "modelRef" +] - changed
Output 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" +}
- Changed
save_voxel_model4 fields changed- removed
Input schema / properties / modelRemoved value: -{ - "type": "string" -} - added
Input schema / properties / modelRefAdded value: +{ + "description": "Short temporary VoxelDraft model reference that expires after 7 days of inactivity", + "maxLength": 64, + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "model" -]New value: +[ + "modelRef" +] - changed
Output 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" +}
1 tool update
- Changed
render_voxel_model3 fields changed- added
Input schema / properties / backgroundAdded value: +{ + "default": "solid", + "enum": [ + "solid", + "transparent" + ], + "type": "string" +} - changed
Input schema / properties / imageSize / enumPrevious value: -[ - 256, - 512 -]New value: +[ + 256, + 512, + 1024 +] - added
Input schema / properties / viewAdded value: +{ + "default": "iso", + "enum": [ + "iso", + "front", + "back", + "left", + "right", + "top", + "bottom" + ], + "type": "string" +}
8 tool updates
- First observed
create_voxel_model - First observed
edit_voxel_model - First observed
export_voxel_model - First observed
inspect_voxel_model - First observed
list_voxel_projects - First observed
load_voxel_project - First observed
render_voxel_model - First observed
save_voxel_model
Related MCP Connectors
Create, inspect, validate, and save editable 3D building scenes with Pascal's hosted MCP server.
Generate authentic pixel art - sprites, animations, and tilesets - from any MCP client
Build interactive 3D web apps — scenes, physics, audio and music — from composable components.
Create and edit 3D content in Drawcall Design; find and inspect Drawcall Market assets.
Related MCP Servers
- AlicenseCqualityDmaintenanceA voxel editor with MCP bridge enabling AI agents to create and edit 3D models, supporting .vox/.obj formats, layers, and a web editor.27MIT
- AlicenseNot gradedqualityDmaintenanceEnables creating, modifying, and managing MagicaVoxel .vox files through natural language, with tools for shape generation, patterns, color operations, and optional ML-powered suggestions.23MIT
- AlicenseNot gradedqualityCmaintenanceEnables 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
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to model, sculpt, rig, animate and bake particle effects by editing a semantic scene document, with built-in software rendering, measurable critics that flag floating or broken geometry, and game-ready glTF export. It exposes templates, atomic edit batches, motion and effect previews, undo history, and no GPU, browser, or Blender required.990 npmApache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.