Skip to main content
Glama

Buildup — an MCP server for Teardown voxel modding

Status: pre-alpha (0.6.0). The MCP server works for simple vehicles and props: a fresh Claude Code session built a drivable car with it. See docs/ROADMAP.md.

Buildup is an MCP server that lets an AI assistant (such as Claude Code) build complete, Teardown-ready voxel models: multi-part .vox files using Teardown's material palette, previews the AI can look at to correct its work, and a manifest (object names, sizes, anchor points) plus a known-good XML skeleton, so the AI can then write the mod's XML and Lua files coherently.

Goal: anyone can describe a vehicle and get a working Teardown mod, without knowing voxel modelling or modding.

Using it with Claude Code

Requires uv and a clone of this repository. Buildup runs as a local MCP server over stdio:

uv run --project /path/to/teardown-mcp buildup-mcp --workspace /path/to/your/folder/workspace

The easiest way to register it for Claude Code sessions opened in a folder of yours (outside this repository) is:

uv run python scripts/write_mcp_config.py /path/to/your/folder

which writes /path/to/your/folder/.mcp.json. Start Claude Code in that folder, approve the buildup server, and ask for a vehicle. Buildup writes projects to workspace/projects/ and exported mods to workspace/mods/<Mod Name>/; copy a mod folder into Documents\Teardown\mods\ to test it. Buildup never writes into the game's folders.

Tools: projects (create_project, list_projects, project_summary, undo), vehicle templates to customize (start_from_template: sedan, SUV, pickup, van, truck), colors and parts (define_color, add_part, remove_part), drawing (draw_profile for silhouettes, draw_box, draw_cylinder, draw_ellipsoid, draw_wedge, cut_edges), operations (mirror_part, hollow_part, move_part, add_wheels, set_anchor for seats, lights and locations, set_handling for driving presets), inspection (preview image with see-through glass, inspect, slice_layers), export_model (.vox, manifest, XML prefab skeleton), teardown_reference, and coherence tools that read the user's game files without changing them: validate_mod (checks a mod folder), read_game_log (the game's errors for a mod) and lookup_api (Teardown's Lua API from the local install).

Related MCP server: VoxelForge

Documentation

Development

Requires uv.

uv sync
uv run python scripts/check.py

Credits

Created by SNX830. The code is written with Claude Code (Anthropic).

MIT licensed (see LICENSE). This project is not affiliated with or endorsed by Tuxedo Labs (Teardown) or ephtracy (MagicaVoxel). It does not contain or redistribute any game files.

Available Tools

22 tools
add_partA

Add an empty part to the body (one named object in the .vox file).

Use one part for the main body; separate parts only for pieces that are separate objects in the XML. Draw into it with the draw_* tools; its size follows its voxels.

Inputs: name (required), project (required).

add_wheelsA

Add a left and a right wheel per axle, as separate parts with axle data for the XML.

Wheels are cylinders along X named wheel_fl, wheel_fr, wheel_bl, wheel_br (f = front, b = back, l = left -X, r = right +X; 1 axle: m, 3 axles: f, m, b; 4: f, m1, m2, b). Example for a body 16 voxels wide and 40 long: axles [{z: -13, steer: true}, {z: 13, drive: true}], diameter 8, width 2, inner_x 9 (wheels at X -11..-9 and 9..11). The body must not overlap the wheels: raise the body or carve wheel arches.

Inputs: axles (required), width (required), inner_x (required), project (required), +4 more.

create_projectA

Create an empty modelling project, saved in the workspace.

Names: 1-40 lower-case letters, digits or '', starting with a letter. Next: define_color, then add_part and the draw* tools.

Inputs: project (required), kind, description.

cut_edgesA

Bevel or slope edges of a block of the part (windshields, hoods, rounded roofs).

A voxel is cut when d1 / depths[0] + d2 / depths[1] < 1, d being the distance from its center to each face. Example: windshield slope on a cabin start [-8, 9, -6], end [8, 15, 10]: edges [['top', 'front']], depths [5, 6] (5 voxels down, 6 back).

Inputs: end (required), part (required), edges (required), start (required), +4 more.

define_colorA

Define a named color: a material plus a displayed color, used by the drawing tools.

In Teardown the material decides how a voxel breaks; the color is only its look. Typical: body paint 'weak metal' (official cars), windows 'glass', lights finish 'emissive'. Redefining an existing name changes its rgb/finish everywhere it is used (its material cannot change). Each material has 8 or 16 color slots. Example: name 'body_paint', material 'weak metal', rgb [180, 30, 30].

Inputs: rgb (required), name (required), project (required), material (required), +1 more.

draw_boxA

Add, paint or carve a rectangular block of cells start <= cell < end.

Example: a body 1.6 m wide, 0.6 m high and 4.0 m long, 0.3 m above the ground, front at -Z: start [-8, 3, -20], end [8, 9, 20] (16 x 6 x 40 voxels). Carve a cabin interior or wheel arches with mode 'carve'.

Inputs: end (required), part (required), start (required), project (required), +2 more.

draw_cylinderA

Add, paint or carve a cylinder (pipes, headlights, exhausts, round details).

Example: an exhaust pipe along Z, 2 voxels across, at x = 5.0, y = 4.0, from z = 20 to 24: axis 'z', center [5, 4], radius 1, span [20, 24]. Wheels: use add_wheels instead.

Inputs: axis (required), part (required), span (required), center (required), +4 more.

draw_ellipsoidA

Add, paint or carve an ellipsoid or a sphere (voxel centers inside the surface).

Example: a dome 1.2 m wide, 0.4 m high, 2 m long on a roof whose top is y = 14: center [0, 14, 0], radii [6, 4, 10] (the lower half lands inside the roof).

Inputs: part (required), radii (required), center (required), project (required), +2 more.

draw_wedgeA

Add, paint or carve a ramp: the block start..end cut diagonally across its extent.

The edge between faces[0] and faces[1] is removed as deep as the block goes. Example: a hood sloping down to the front, full height at the back: faces ['top', 'front'].

Inputs: end (required), part (required), faces (required), start (required), +3 more.

export_modelA
Destructive

Export the model as a mod folder: .vox file, manifest (JSON) and XML skeleton.

Writes workspace/mods// (the user copies it into the game's mods folder).

Reports the XML positions of every object, wheel and anchor, and warnings (missing anchors, overlapping parts, pieces that may fall apart). Then write info.txt and spawn.txt (teardown_reference 'mod_files').

Inputs: project (required), mod_name, skeleton.

hollow_partA

Empty the inside of a part, keeping a shell (fewer voxels, interiors).

The shell stays joined by faces on slopes and curves. Carve openings (doors, windows) afterwards if needed.

Inputs: part (required), project (required), thickness.

inspectA
Read-only

Describe the model in text: sizes, materials, colors and connectivity.

Gives the size in voxels and meters, the filled extent, voxel counts per material and palette index, and the face-connected pieces (voxels touching only by edges or corners may fall apart when damaged in game).

Inputs: project (required), part.

list_projectsA
Read-only

List the projects of the workspace.

Inputs: no named parameters.

mirror_partB

Make a body part left-right symmetric: copy one side, mirrored, over the other side.

With the default plane X = 0, a body spanning X -8..8 stays -8..8. Model details on the left side, then mirror. Voxels on the replaced side are discarded. Wheel parts cannot be mirrored (add_wheels already makes both sides).

Inputs: part (required), project (required), keep, plane_x.

move_partA

Move a part (a wheel's axle moves with it; anchors stay where they are).

Inputs: part (required), offset (required), project (required).

previewA
Idempotent

Render the model as an image with several annotated views. Look at it after edits.

Orthographic views are true views from outside: the front view (camera at -Z) shows the model's right side (+X) on the image LEFT; each panel names the side every image edge shows. Rulers are model-frame meters. Magenta markers: wheel axles and anchors. The image is also saved as preview.png in the project folder.

Inputs: project (required), part, views.

project_summaryB
Read-only

Show a project's colors, parts (extent in voxels and meters), wheels and anchors.

Inputs: project (required).

remove_partA
Destructive

Delete a part and all its voxels (undo brings it back).

Inputs: part (required), project (required).

set_anchorA

Set a named point of the model (driver position, exhaust, lights...).

Official vehicles use player (the driver is shown near it; official cars put it on the left, negative X), vital (meaning not documented) and exhaust (exhaust smoke comes out there, verified in game). Anchors stay put when parts move. Example: player [-4, 9, 2].

Inputs: name (required), project (required), position (required).

slice_layersA
Read-only

Print layers of the model as text grids, one symbol per voxel ('.' = empty).

Rows and columns are labelled with model-frame voxel coordinates; the legend gives the palette index and material of each symbol.

Inputs: axis (required), project (required), positions (required), part.

teardown_referenceB
Read-only

Teardown facts needed to write the mod's XML and text files.

Each fact says whether it is verified in game or only seen in official files.

Inputs: topic (required).

undoA
Destructive

Revert the last edits of a project (any tool that changed it). Cannot be redone.

Inputs: project (required), steps.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 22 tools

    Disambiguation4/5

    Most tools target clearly distinct operations: draw_box/cylinder/ellipsoid/wedge are distinct primitives, and preview/inspect/slice_layers/project_summary produce different outputs. Mild overlap exists between draw_wedge and cut_edges (both cut edges) and between project_summary and inspect (both describe the model), but descriptions distinguish them adequately.

    Naming Consistency4/5

    The set is mostly consistent verb_noun (create_project, add_part, remove_part, draw_box, move_part, mirror_part, hollow_part, cut_edges, add_wheels, set_anchor, export_model). A few deviate to noun or bare-verb form (project_summary, teardown_reference, preview, inspect, undo), which is a minor inconsistency but still readable.

    Tool Count4/5

    22 tools is on the heavier side, but each earns its place: distinct shape primitives, part transformations, multiple inspection views, and export are all genuinely needed for a voxel modelling workflow. No obvious redundant or filler tools.

    Completeness4/5

    Strong lifecycle coverage: create/list projects, add/remove parts, draw/cut/mirror/hollow/move, wheels, anchors, undo, inspection and export. Minor gaps such as no delete/rename project and no part rotation are workable around given existing tools.

    Maintenance

    ActivitySlowing
    ResponsivenessNo recent community issues

    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
      D
      maintenance
      Enables AI assistants to control Blockbench for Minecraft 3D modeling, including project creation, cube placement, UV layout, and texture painting.
      GPL 3.0
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to procedurally model and sculpt 3D voxel characters, weapons, and scenery, execute custom QuickJS generation scripts, convert/export models between voxel and 3D/image formats, and open results in the desktop GUI for inspection or editing.
      5
      1
      MIT