Skip to content

February 2026

Two new contributors

This month we got contributions from two new people: chieftecho and janZ.

chieftecho kicked off the new MCP server work (including follow-up fixes around scene graph JSON export and MCP tool behavior), and janZ contributed a macOS quality-of-life fix for the file dialog.

Welcome to both of you and thanks a lot for the contributions.

MCP server for VoxEdit

VoxEdit now ships with an MCP (Model Context Protocol) server that enables LLM clients to control an existing VoxEdit instance via its network interface. The server implements JSON-RPC 2.0 over stdio and bridges requests into VoxEdit’s binary network protocol.

The initial tool set covers inspecting and manipulating the scene graph, retrieving voxel data from model nodes (compact base64 encoding in SPARSE or RLE), palette queries, brush-style editing tools, undo/redo helpers, node management (add/move/remove/rename/properties), and early animation tooling (create/select animation and add keyframes). Lua scripts exposed by VoxEdit are also turned into callable tools.

voxedit mcp

Filedialog Mac volumes

On macOS, the file dialog now lists mounted volumes by scanning /Volumes and adding them to the “This PC” roots. This makes it much easier to navigate external drives and network mounts.

voxedit filedialog

First GIS CityGML format support

There is now first-pass support for importing GIS data via CityGML/GML as a mesh format (.gml). The implementation is based on tinyxml2 and includes a dedicated GML loader.

Because CityGML datasets can be enormous it's important to say that a lot of tweaks still have to be made in order to get this working for these large datasets. I've used the CityGML of hamburg to create a vengi scene.

vengi-voxconvert -set voxformat_gmlfilenamefilter "LoD2_558*" --input ~/Downloads/lod2-de_hh_2016-11-22_21283_snap_1.GML --output hamburg2.vengi

This alone is creating a scenegraph with 13264 nodes. I suppose these datasets will serve well as a base for further profiling in the scene graph handling...

If any of the minecrafters are reading this, I would be interested whether it works to import these scenes into minecraft.

hamburg free gis data

VMax format fixes

The VoxelMax importer was fixed to properly load standalone .vmaxb files. For single-object files, the loader now derives the palette index from the filename and loads the corresponding palette<i>.png alongside the object data.

High DPI fixes

Several UI elements had hard-coded pixel sizes that didn’t scale well on high-DPI displays. These spots were updated to use the DPI-aware ImGui helpers (ImGui::Size() / ImGui::Height()), including the text brush panel sizing and various small UI previews.

Command system proper arguments and tab completion for the console

The command system was refactored to properly define command parameters: commands can now declare typed arguments (name/description/default/optional), and execution parses raw strings into a named argument map (CommandArgs). If required arguments are missing, the system prints an auto-generated usage line.

This also improves the built-in console’s tab completion. Auto-complete now understands which argument index is being edited and can use argument-specific completers (falling back to the old command-level completion when needed), making completion for commands and their parameters more predictable.

The zsh and bash completion scripts are not yet updated - but once I find the time, expect this to improve, too.

LUA docs autogenerated

Each lua binding function got a help binding, too - this allows me to autogenerate all the lua docs now and keep them up-to-date more easily.

imgui_keyboard

An ImGui-based on-screen keyboard was added and integrated into the UI module. It is used in the bindings dialog to visualize and highlight key combinations and to set new bindings interactively.

keyboard

The project is standalone and can be found here: github.com/mgerhardy/imgui_keyboard