BlockbenchMCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BLOCKBENCH_MCP_HOST | No | Bridge host. | 127.0.0.1 |
| BLOCKBENCH_MCP_PORT | No | Must match the plugin's port setting. | 8787 |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_statusA | Get the current Blockbench state: open project, format, counts of cubes/groups/textures/animations, and edit mode. Call this first to understand the workspace. If you are about to BUILD or TEXTURE a model, call get_guide first. |
| get_guideA | Return a playbook. Pass |
| list_formatsA | List all model formats available in this Blockbench install (e.g. free, java_block, bedrock, and any added by plugins such as GeckoLib's animated_entity). Use the returned |
| new_projectA | Create a new project from the start screen, choosing a format. This is the entry point for any new model. |
| set_project_metaC | Update the open project's name, geometry name, or texture resolution. |
| close_projectB | Close the currently open project. |
| save_projectA | Save the open project as a .bbmodel. Provide |
| export_projectC | Export the project through its format's codec (e.g. Java model JSON, Bedrock geometry, GeckoLib model). Provide |
| load_projectA | Load a .bbmodel project file from disk (desktop only). |
| add_groupA | Add a group / bone to the outliner. Groups are the bones used for animation AND the way to apply free 3-axis rotation: a cube alone rotates cleanly on only one axis, so to pose a part at a compound angle, put it in a rotated group (nest groups for multi-axis angles). Set |
| add_cubeA | Add a cube to the model. Coordinates are in Blockbench units. Cubes support |
| add_groupsA | Create many bones/groups in one call — the fast way to lay out a whole skeleton. Pass |
| add_cubesA | Create many cubes in one call — the efficient way to author a detailed model (aim for 20-50+ cubes for a creature, not 6-8). Pass |
| check_modelA | Audit the model for problems that make results look broken: untextured faces (the 'gaps'), zero-area or out-of-bounds UVs, degenerate cube sizes, cubes not parented to a bone in animated formats, and Z-FIGHTING (coplanar_overlap — two faces on the same plane that flicker/clip, the 'two squares inside one another'). Run this after building and before/after texturing, then fix what it reports (for coplanar_overlap, nudge one cube by >=0.1 so the faces aren't coplanar). Returns a grouped issue list. |
| pack_uvA | Shelf-pack the box UVs so every cube gets its own region of the texture. REQUIRED before texturing a box_uv model (GeckoLib/Bedrock): newly created cubes all sit at uv_offset [0,0] and otherwise paint onto the same pixels. Re-run after adding or resizing cubes. Auto-grows the texture (preserving paint) if the layout overflows. |
| add_planeA | Create a flat 2-sided plane (billboard) — the building block of pixel VFX (flames, energy sheets, slashes, motion trails) and for thin details (fins, leaves, paper). It is a zero-depth cube whose two large faces carry the texture; pair it with a VFX texture set to render_sides 'double'. |
| add_meshA | Create a non-cuboid MESH primitive so models aren't limited to axis-aligned boxes — crystals/gems/shards, pyramids, wedges, cones, cylinders, planes. Great for crystal cores, blades, horns, teeth, gems and stylised VFX. NOTE: meshes need a mesh-capable format (free/generic/bedrock); GeckoLib & Java export cubes only — for those build crystals from cubes rotated 45° instead. |
| mirror_elementA | Mirror a cube or group (with its children) across an axis about a pivot — build one side of a symmetric model, then mirror it. Flips geometry and the off-axis rotation signs, and renames left<->right. Returns the created clones. |
| edit_elementB | Edit an existing cube or group (rename, move, rotate, reparent, resize, inflate, visibility). |
| delete_elementA | Delete a cube or group (and its children) from the model. |
| list_outlinerA | Return the full outliner tree (groups/bones and their nested cubes) with uuids, origins and rotations. |
| get_elementA | Get detailed info for one cube or group by uuid or name. |
| set_cube_uvA | Set UV mapping and/or per-face texture on a cube's faces. |
| apply_textureA | Apply a texture to all faces of an element (or all cubes if |
| create_textureB | Create a new texture. Either fill it with a solid color, or supply a full PNG via |
| create_vfx_textureA | Generate a pixelated VFX texture: a bright hot core fading to cool edges in quantized colour bands with jagged transparent edges — the look of pixel flames/energy/projectiles. With frames>1 it bakes a vertical FLIPBOOK and starts the animation player so the effect loops. Defaults to an additive/emissive render mode + 2-sided rendering so it glows on a plane. Apply it to add_plane planes (crossed/layered) and animate with bones. See get_guide topic 'vfx'. |
| set_texture_render_modeA | Set how a texture renders: render_mode ('default' | 'emissive' = full-bright, ignores light | 'additive' = bright pixels add light & dark vanishes, best for fire/energy on planes | 'layered' | 'normal' | 'height' | 'mer'), render_sides ('auto' | 'front' | 'double' for 2-sided planes), flipbook frame timing, and particle flag. Use this to make VFX glow and to show planes from both sides. |
| import_textureB | Import a texture from an image file on disk (desktop only). |
| list_texturesA | List all textures in the project. |
| get_textureA | Read a texture back as an image so you can inspect what it currently looks like. Returns the PNG inline. |
| paint_textureA | Paint directly on a texture with absolute pixel coordinates. Use this for whole-sheet work; for painting onto a specific cube face, paint_faces (face-relative coords) is usually easier. Ops run in order on the canvas (origin top-left, y down). |
| detail_cubesA | SMOOTH base texturing — the @volmur/Hytale look. Assigns the texture to every chosen face (no untextured 'gaps'), then per face bakes a soft vertical gradient in the region colour + gentle directional shading (top lighter, underside darker) + a SUBTLE low-contrast mottle, and finally a 3x3 box blur per UV island (the 'smooth brush'). Run pack_uv FIRST, then this right after create_texture, then paint_faces for crisp features. Avoids the dirty/noisy/grid look (no hard edge outline, low noise by default). Cubes named _core/_glow are filled bright (emissive read). |
| paint_facesA | Paint features onto specific cube faces using coordinates RELATIVE to each face (so [0,0] is that face's top-left corner) — no manual UV math, which is what usually causes misplaced/garbled texture. Use it for eyes, nostrils, mouths, claws, fur tufts, stripes, scars, bandages, armour trim, etc. Either pass one {cube, face, base?, ops?} or a |
| resize_textureC | Resize a texture's bitmap to new dimensions (nearest-neighbour). |
| create_animationA | Create an animation (requires a format that supports animation, e.g. GeckoLib animated_entity or Bedrock entity). Returns the animation uuid. |
| list_animationsA | List all animations and their animated bones. |
| add_keyframeA | Add a single keyframe to an animation for a given bone and channel. |
| add_keyframesB | Add many keyframes at once — the efficient way to author a full animation. Pass an array of {bone, channel, time, value, interpolation}. |
| remove_animationC | Delete an animation from the project. |
| set_camera_angleA | Position the preview camera, by named preset and/or explicit camera position & target. |
| screenshotA | Capture the current 3D preview and return it as an image so you can visually inspect the model and iterate. Optionally specify width/height. |
| screenshot_viewsB | Capture several camera angles in ONE call and return them all as images, so you can see the whole model and catch problems (gaps, wrong rotations, missing detail, asymmetry) from every side. Defaults to iso/front/left/back. This is the main way to review and iterate — do it after each modeling/texturing pass, not just once. |
| list_pluginsA | List Blockbench plugins (installed and available in the store). Filter with |
| install_pluginA | Install a Blockbench plugin from the store (by |
| uninstall_pluginB | Uninstall an installed Blockbench plugin by id. |
| execute_scriptA | Run arbitrary JavaScript inside Blockbench's renderer for anything not covered by a dedicated tool. The code has access to all Blockbench globals (Project, Cube, Group, Texture, Animation, Undo, Canvas, Outliner, Format, Formats, ...) and receives a |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sosadly/blockbench-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server