skills/blockbench-modeling/SKILL.md
Create and edit 3D models in Blockbench using MCP tools. Use when building geometry with cubes, creating meshes, placing spheres/cylinders, editing vertices, extruding faces, or organizing models with groups. Covers both cube-based Minecraft modeling and freeform mesh editing.
npx skillsauth add jasonjgardner/blockbench-mcp-project blockbench-modelingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build 3D models using cubes and meshes in Blockbench.
| Tool | Purpose |
|------|---------|
| place_cube | Create cubes with position, size, texture |
| modify_cube | Edit cube properties (position, rotation, UV, etc.) |
| Tool | Purpose |
|------|---------|
| place_mesh | Create mesh with vertices |
| create_sphere | Create sphere mesh |
| create_cylinder | Create cylinder mesh |
| extrude_mesh | Extrude faces/edges/vertices |
| subdivide_mesh | Add geometry detail |
| select_mesh_elements | Select vertices/edges/faces |
| move_mesh_vertices | Move selected vertices |
| delete_mesh_elements | Remove geometry |
| merge_mesh_vertices | Weld nearby vertices |
| create_mesh_face | Create face from vertices |
| knife_tool | Cut edges into faces |
| Tool | Purpose |
|------|---------|
| add_group | Create bone/group |
| list_outline | View model hierarchy |
| duplicate_element | Copy elements |
| rename_element | Rename elements |
| remove_element | Delete elements |
| find_elements_by_criteria | Query elements by name pattern, type, parent, size |
| select_all_of_type | Bulk-select cubes, meshes, or groups |
| filter_by_material | Find elements referencing a texture |
place_cube: elements=[{
name: "body",
from: [-4, 0, -2],
to: [4, 12, 2]
}], faces=true # Auto UV
place_cube: elements=[
{name: "head", from: [-4, 12, -4], to: [4, 20, 4]},
{name: "arm_left", from: [4, 4, -1], to: [6, 12, 1]},
{name: "arm_right", from: [-6, 4, -1], to: [-4, 12, 1]}
], group="body"
modify_cube: id="body", rotation=[0, 45, 0], origin=[0, 6, 0]
place_cube: elements=[{name: "block", from: [0,0,0], to: [16,16,16]}],
texture="stone", faces=true
create_sphere: elements=[{
name: "ball",
position: [0, 8, 0],
diameter: 16,
sides: 12
}]
create_cylinder: elements=[{
name: "pillar",
position: [0, 0, 0],
diameter: 8,
height: 24,
sides: 12,
capped: true
}]
select_mesh_elements: mesh_id="pillar", mode="face", elements=["top_face"]
extrude_mesh: mesh_id="pillar", mode="faces", distance=4
subdivide_mesh: mesh_id="sphere", cuts=2
select_mesh_elements: mesh_id="mesh1", mode="vertex", elements=["v1", "v2"]
move_mesh_vertices: offset=[0, 2, 0]
merge_mesh_vertices: mesh_id="mesh1", threshold=0.1
knife_tool: mesh_id="cube_mesh", points=[
{position: [0, 8, -4]},
{position: [0, 8, 4]}
]
add_group: name="root", origin=[0, 0, 0], rotation=[0, 0, 0]
add_group: name="body", parent="root", origin=[0, 12, 0]
add_group: name="head", parent="body", origin=[0, 24, 0]
place_cube: elements=[{name: "torso", from: [-4, 12, -2], to: [4, 24, 2]}],
group="body"
duplicate_element: id="arm_left", newName="arm_right", offset=[-8, 0, 0]
list_outline # Returns all groups and elements
Query the model without loading the full outline. These tools are read-only except select_all_of_type.
Combine any of: regex name match, substring match, type, parent-group scope, cube size bounds, selection scope.
# All cubes under "body" named like "arm_*"
find_elements_by_criteria: type="cube", parent_group="body", name_pattern="^arm_"
# Small cubes (under 4 units on any axis) in the currently selected elements
find_elements_by_criteria: selected_only=true, max_size=[4, 4, 4]
# Groups whose name contains "hand" (case-insensitive)
find_elements_by_criteria: type="group", name_contains="hand"
Returns { count, truncated, matches: [{ uuid, name, type, parent }] }.
# Replace selection with every cube in the project
select_all_of_type: type="cube"
# Add all meshes under "head" to the current selection
select_all_of_type: type="mesh", parent_group="head", add_to_selection=true
Find every cube or mesh that references a specific texture. For cubes, the exact face keys are returned.
filter_by_material: texture="skin"
# → { texture, count, matches: [{ uuid, name, type: "cube", faces: ["north", "up"] }] }
Useful when refactoring textures: find all users before swapping or retiring a texture.
# Create hierarchy
add_group: name="root", origin=[0, 0, 0]
add_group: name="body", parent="root", origin=[0, 24, 0]
add_group: name="head", parent="body", origin=[0, 24, 0]
add_group: name="arm_left", parent="body", origin=[5, 22, 0]
add_group: name="arm_right", parent="body", origin=[-5, 22, 0]
add_group: name="leg_left", parent="root", origin=[2, 12, 0]
add_group: name="leg_right", parent="root", origin=[-2, 12, 0]
# Add geometry
place_cube: elements=[{name: "head", from: [-4, 24, -4], to: [4, 32, 4]}], group="head"
place_cube: elements=[{name: "body", from: [-4, 12, -2], to: [4, 24, 2]}], group="body"
place_cube: elements=[{name: "arm", from: [-1, 0, -1], to: [1, 10, 1]}], group="arm_left"
place_cube: elements=[{name: "arm", from: [-1, 0, -1], to: [1, 10, 1]}], group="arm_right"
place_cube: elements=[{name: "leg", from: [-2, 0, -2], to: [2, 12, 2]}], group="leg_left"
place_cube: elements=[{name: "leg", from: [-2, 0, -2], to: [2, 12, 2]}], group="leg_right"
create_sphere: elements=[{name: "base", position: [0, 8, 0], diameter: 16, sides: 16}]
subdivide_mesh: mesh_id="base", cuts=1
# Select and move vertices to shape
select_mesh_elements: mesh_id="base", mode="vertex"
move_mesh_vertices: offset=[0, 4, 0], vertices=["top_verts"]
list_outline to see current model structurefind_elements_by_criteria for targeted queries instead of filtering list_outline results client-sidefaces=true for auto UV mapping on cubesduplicate_element with offset for symmetrical partssave_checkpoint (history skill) so you can roll back with undotools
MANDATORY prerequisite — invoke BEFORE any mcp__blockbench__* tool call that creates, modifies, or exports Blockbench content. Orchestrates the other blockbench-* skills (modeling, texturing, animation, PBR, Hytale, MCP overview). Trigger on: 3D model/texture/animation creation or edits in Blockbench; calls to mcp__blockbench__* tools; phrases like 'build a Minecraft model', 'paint a texture', 'animate this rig', 'export the model'. Dispatches to the right sub-skill(s), enforces pre-flight checks (project open, format, outline), wraps risky work in checkpoints, and ensures exports close the loop.
tools
Create and paint textures in Blockbench using MCP tools. Use when creating textures, painting on models, using brush tools, filling colors, drawing shapes, applying gradients, managing texture layers, or working with UV mapping. Covers pixel art texturing, procedural painting, and UV manipulation.
tools
Create and manage PBR (Physically Based Rendering) materials in Blockbench using MCP tools. Use when working with texture_set.json files, creating normal/height/MER maps, configuring material properties for Minecraft Bedrock RTX, or setting up multi-channel texture workflows.
tools
Overview of the Blockbench MCP server tools, resources, and prompts. Use to understand the full MCP capability set, learn how tools work together, or when starting a new Blockbench project. Covers all domains (modeling, animation, texturing, PBR, UI, camera) and their MCP interfaces.