Skip to main content
Glama

VoxelDraft – AI Voxel Modeling

Create voxel model

create_voxel_model

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.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNo
paletteNo
commandsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema 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
  2. Changed1 schema 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"
      +}
  3. First observed

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.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources