Installation

Tools

Cubes

place_cube

stable destructive

Place Cube

Creates cubes in one reversible edit. Texture and group are optional, allowing untextured blockouts. Explicit face targets never use the current UV selection; partial/custom faces require per-face UV support. Elements accept inflate, plus uv_offset and mirror_uv for box UV cubes; unknown element fields are rejected. Cubes the format's size limiter rejects (for example Java Block elements outside -16…32) are refused and nothing is created, unless Blockbench's Deactivate Size Limit setting is on.

Name Type Required Description
elements object[] required Array of cubes to place, with optional Java shading fields. [minItems: 1]
texture string optional Texture UUID, ID or name. When omitted, uses the default texture if one exists; otherwise creates untextured cubes.
group string optional Parent group UUID or unique name, or root (default). Missing or ambiguous names are rejected.
faces "north" | "south" | "east" | "west" | "up" | "down"[] | unknown | boolean | object[] optional true applies texture to all faces with Auto UV; false skips texture assignment. Named faces use Auto UV; false/custom rectangles disable Auto UV outside Hytale. Hytale always retains Auto UV 1 and custom rectangles must match the geometry's face dimensions. Partial/custom faces require per-face UV support. Single-texture formats may still display the project texture. (default: true)

modify_cube

stable destructive

Modify Cube

Modifies the cube with the given ID. Auto UV setting: saved as an integer, where 0 means disabled, 1 means enabled, and 2 means relative auto UV (cube position affects UV). A new from/to/inflate that the format's size limiter rejects (for example Java Block elements outside -16…32) is refused before anything changes, unless Blockbench's Deactivate Size Limit setting is on.

Name Type Required Description
id string optional ID or name of the cube to modify. Defaults to selected, which could be more than one.
name string optional New name of the cube.
origin number[] optional Pivot point of the cube. [minItems: 3, maxItems: 3]
from number[] optional Starting point of the cube. [minItems: 3, maxItems: 3]
to number[] optional Ending point of the cube. [minItems: 3, maxItems: 3]
rotation number[] optional Rotation of the cube. [minItems: 3, maxItems: 3]
autouv "0" | "1" | "2" optional Auto UV setting. 0 = disabled, 1 = enabled, 2 = relative auto UV.
uv_offset number[] optional UV offset for the texture. [minItems: 2, maxItems: 2]
mirror_uv boolean optional Whether to mirror the UVs.
shade boolean optional Whether to apply shading to the cube. Java 26.3+ projects ignore this flag; shade=false is mapped to shade_direction_override 'up' there, matching Blockbench's own import.
shade_direction_override "" | "north" | "south" | "west" | "east" | "up" | "down" optional Java Edition 26.3+ shade direction override: the face direction whose lighting shade is applied to every face. '' removes the override. Replaces the boolean shade flag in formats with java_cube_shade_direction_override (new Java Block projects default to 26.3).
light_emission integer optional Block light emitted by the cube (0-15). Exported by Java Block formats. [min: 0, max: 15]
inflate number optional Inflation amount for the cube.
color number optional Single digit to represent a color from a palette.
visibility boolean optional Whether the cube is visible or not.

knife_cut_cube

experimental destructive

Knife Cut Cube

Headless Blockbench Knife tool for cubes: splits each target cube with planes perpendicular to one axis at the given positions, keeping each piece's share of the face UVs. The original cube keeps the lowest piece; new pieces get unique names. One undo entry covers every cut and the selection is left unchanged.

Name Type Required Description
cubes string[] optional Cube UUIDs or unique names to cut. Defaults to the selected cubes. [minItems: 1]
axis "x" | "y" | "z" required Axis the cut plane is perpendicular to.
positions number[] required Cut-plane coordinates along the axis, in the cube's from/to space (model space for unrotated cubes). Positions closer than the cube's inflate to its from/to edges, or outside it, are skipped for that cube and reported sorted and deduplicated. [minItems: 1]

slice_cubes_to_block_grid

experimental destructive

Slice Cubes To Block Grid

Cuts cubes wherever they cross a Bedrock block boundary (16-unit grid, x/z centered) and, by default, regroups the pieces into one group per block cell pivoted at that block's origin. Use it to divide an oversized custom block model into per-block sections that each fit Bedrock's 30×30×30 limit. Rotated cubes are left uncut on the affected axes and reported.

Name Type Required Description
cubes string[] optional Cube UUIDs or unique names to slice. Defaults to every cube in the project. [minItems: 1]
axes "x" | "y" | "z"[] optional Axes to slice along. Cubes rotated (or inside groups rotated) about the other two axes are skipped on that axis, as Blockbench's own slicer does. (default: ["x","y","z"]) [minItems: 1]
cell_size number optional Block size in model units; 16 for Bedrock. Horizontal boundaries sit at ±half a cell, vertical ones at multiples. (default: 16)
regroup boolean optional Move every resulting cube into a group named after its block cell (bottom, top, right_top_front, top2, …) pivoted at that block's origin, so each group is one exportable block section. Pieces leave their previous bone; the report lists each source cube's former group. (default: true)
parent string optional Parent group UUID or name for the cell groups; must not be rotated. Defaults to the project root.
group_prefix string optional Prefix for cell group names, e.g. `goal_` yields `goal_top`. Existing groups are reused only when their name and block-origin pivot match; otherwise a numbered name is chosen. (default: "")

inspect_block_bounds

experimental read-only

Inspect Block Bounds

Reports cube, group, and whole-model extents against Blockbench's Bedrock block limit (a 30×30×30 box whose center may sit up to 7 units from the block center), the block cell each cube occupies, and the grid cut positions slice_cubes_to_block_grid would use. Read-only. Extents ignore rotation; rotated cubes are flagged.

Name Type Required Description
cubes string[] optional Cube UUIDs or unique names to inspect. Defaults to every cube in the project. [minItems: 1]
cell_size number optional Block size in model units; 16 for Bedrock. (default: 16)
max_size number optional Maximum geometry size per axis for one block (Bedrock: 30). (default: 30)
max_center_offset number optional How far the limit box may shift from the block center per axis (Bedrock: 7, giving x/z within ±22 and y within -14…30). (default: 7) [min: 0]

Camera & Screenshots

capture_screenshot

stable read-only

Capture Screenshot

Returns the rendered image of a view. Defaults to the user's active viewport ("active"); pass the ID of an offscreen view from create_offscreen_view to render without disturbing the user, or a viewport ID from list_views.

Name Type Required Description
project string optional Project name or UUID.
view string optional View to target: "active" for the viewport the user last interacted with, the ID of an offscreen view from create_offscreen_view, or a viewport ID from list_views. (default: "active") [minLength: 1]
max_size integer optional Longest side of the returned image in pixels; larger images are scaled down proportionally. Omit for full size. [min: 16, max: 8192]
format "png" | "jpeg" | "webp" optional Encoding of the returned image: "png" (default, lossless), or the smaller "jpeg" (no transparency: transparent pixels become white) or "webp".

capture_app_screenshot

stable read-only

Capture App Screenshot

Returns the image data of the Blockbench app.

Name Type Required Description
max_size integer optional Longest side of the returned image in pixels; larger images are scaled down proportionally. Omit for full size. [min: 16, max: 8192]
format "png" | "jpeg" | "webp" optional Encoding of the returned image: "png" (default, lossless), or the smaller "jpeg" (no transparency: transparent pixels become white) or "webp".

set_camera_angle

experimental destructive

Set Camera Angle

Moves a view's camera and returns the resulting frame plus the applied camera state. Defaults to the user's active viewport, which changes what they see and clears any side-view lock they had; target an offscreen view from create_offscreen_view to inspect the model from any angle without moving their camera.

Name Type Required Description
view string optional View to target: "active" for the viewport the user last interacted with, the ID of an offscreen view from create_offscreen_view, or a viewport ID from list_views. (default: "active") [minLength: 1]
position number[] required Camera position. [minItems: 3, maxItems: 3]
target number[] optional Camera target position. [minItems: 3, maxItems: 3]
rotation number[] optional Camera rotation. [minItems: 3, maxItems: 3]
projection "unset" | "orthographic" | "perspective" required Camera projection type.
zoom number optional Orthographic zoom factor (Blockbench default 0.5). Ignored for perspective views and while a side view is locked.
fov number optional Perspective field of view in degrees. Uses the Blockbench setting when omitted. [min: 1, max: 179]
locked_angle "top" | "bottom" | "north" | "south" | "east" | "west" optional Lock an orthographic side view (top, bottom, north, south, east, west). Omit to leave the view free.
max_size integer optional Longest side of the returned image in pixels; larger images are scaled down proportionally. Omit for full size. [min: 16, max: 8192]
format "png" | "jpeg" | "webp" optional Encoding of the returned image: "png" (default, lossless), or the smaller "jpeg" (no transparency: transparent pixels become white) or "webp".

create_offscreen_view

experimental

Create Offscreen View

Creates a private offscreen viewport that renders the current project without moving the user's camera. Use it with set_camera_angle and capture_screenshot (view: <id>) for multi-angle inspection. The camera starts where the user's is unless copy_view is "none". Up to 4 views may exist at once; delete them with delete_offscreen_view when done. Views still open when your MCP session ends are deleted.

Name Type Required Description
id string optional ID for the new view. Generated as view_N when omitted.
width integer optional Width in pixels (16–2048). (default: 1024) [min: 16, max: 2048]
height integer optional Height in pixels (16–2048). (default: 768) [min: 16, max: 2048]
antialias boolean optional Multisample antialiasing. Disable for crisp pixel-art inspection. (default: true)
copy_view string | string optional View whose camera seeds the new one. Defaults to "active" (the user's viewport); pass "none" for Blockbench's default angle. (default: "active")

list_views

experimental read-only

List Views

Lists render targets: the user's connected viewports (the active one flagged) and the plugin's offscreen views, each with size and camera position, target, projection, FOV, zoom, and side-view lock.

No parameters

resize_offscreen_view

experimental

Resize Offscreen View

Changes the pixel size of an offscreen view. The user's viewports follow their layout and cannot be resized here.

Name Type Required Description
view string required ID of the offscreen view to resize.
width integer required Width in pixels (16–2048). [min: 16, max: 2048]
height integer required Height in pixels (16–2048). [min: 16, max: 2048]

delete_offscreen_view

experimental destructive

Delete Offscreen View

Disposes an offscreen view and releases its WebGL context. The user's viewports are not affected.

Name Type Required Description
view string required ID of the offscreen view to dispose.

Capabilities

get_capabilities

stable read-only

Get Capabilities

Discover Blockbench/plugin versions, desktop or web environment, active project summary, and registered model formats. Returns detailed boolean format features (null means unknown; includes molang and java_cube_shade_direction_override) plus the format's remember_files and animation_grouping settings, compact supported-feature lists for all formats, and optional tool registration states. Works with no open project. Format features do not guarantee that every enabled MCP tool can run in the current mode or selection.

Name Type Required Description
format_id string optional Optional registered format ID to inspect, such as 'free'. Defaults to the active project's format. Does not switch or create a project. [minLength: 1]
include_tools boolean optional Include all registered MCP tool names, stability status, and current enabled state. Use list_modes and set_mode to navigate before calling mode-dependent tools. (default: false)

Animation

create_animation

stable destructive

Create Animation

Creates and selects an undoable animation with linear keyframes for existing bones, using Blockbench editor coordinates. Returns its UUID and actual name.

Name Type Required Description
name string required Animation name; `animation.` is added unless the name already starts with it, as in Bedrock and GeckoLib animation files.
loop boolean optional Whether the animation should loop (default: false)
animation_length number optional Length of the animation in seconds [min: 0, max: 10000]
bones Record<string, object[]> required Keyframes keyed by existing bone/group name. Values use Blockbench editor coordinates; rotations are degrees.
particle_effects Record<string, string> optional Particle effects with timestamps (seconds) as keys, spawned at the entity origin. Use manage_particle_keyframes for locators, scripts and more options.

manage_keyframes

experimental destructive

Manage Keyframes

Creates, deletes, or edits keyframes in the animation timeline for specific bones and channels.

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
action "create" | "delete" | "edit" | "select" required Action to perform on keyframes.
bone_name string required Name of the bone/group to manage keyframes for.
channel "rotation" | "position" | "scale" required Animation channel to modify.
keyframes object[] required Keyframe data for the action.

animation_graph_editor

experimental destructive

Animation Graph Editor

Edits a bone channel's interpolation or numeric Bezier easing in one reversible edit. Uses native per-axis handle arrays and chronological segment durations. Custom points are normalized time/value fractions. Partial-axis edits require existing Bezier keys; key-wide mode changes require all axes. Rejects curve edits ignored by quaternion rotation, and step or Bezier curves in GeckoLib models (use geckolib_set_keyframe_easing). Inspect neighboring segments after range edits.

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
bone_name string required Name of the bone/group to modify curves for.
channel "rotation" | "position" | "scale" required Animation channel to modify.
axis "x" | "y" | "z" | string optional Axes to edit. Linear, stepped and smooth require all because interpolation is key-wide. Partial-axis easing/custom edits require selected keys already using Bezier interpolation, preserving other axes' handles. (default: "all")
action "smooth" | "linear" | "ease_in" | "ease_out" | "ease_in_out" | "stepped" | "custom" required Curve modification. linear, stepped and smooth set the key-wide interpolation (linear, step, catmullrom). ease_in, ease_out and ease_in_out apply the CSS cubic-bezier curves of the same name to every segment between the selected keys; custom applies custom_curve. Easing/custom require at least two distinct chronological numeric single-data-point keys. Smooth and Bezier rotation edits are unavailable when native quaternion interpolation would ignore them. GeckoLib models reject stepped (the GeckoLib plugin switches step keys back to linear) and the Bezier actions (GeckoLib has no Bezier interpolation); use geckolib_set_keyframe_easing there. In GeckoLib models smooth also clears the easings of the keys it changes, since GeckoLib ignores easings on catmullrom keys.
keyframe_range object optional Finite ordered time range selecting existing keys; omitted means the full channel. Key-wide interpolation can affect neighboring segments at range boundaries, so edit the full channel when boundary continuity matters.
custom_curve object optional Normalized cubic Bezier control points, required for custom action. Conversion uses each segment's duration and edited-axis endpoint values; unrelated axis handles are preserved.

bone_rigging

experimental destructive

Bone Rigging

Creates and manipulates the bone structure (rig) of a model for animation. Each action is one undoable edit (create with ik_enabled records the IK controller as a second one); undoing delete brings back child bones, elements and their keyframes. mirror duplicates the bone with its descendants and flips the copy like Blockbench's Flip action. The set_ik action is deprecated; use set_ik_controller for Blockbench's null-object IK (source, target, pole).

Name Type Required Description
action "create" | "parent" | "unparent" | "delete" | "rename" | "set_pivot" | "set_ik" | "mirror" required Action to perform on the bone structure.
bone_data object required Bone configuration data.

animation_timeline

experimental destructive

Animation Timeline

Controls the animation timeline: playback, time scrubbing, length, FPS, loop mode, and keyframe selection by time range or relative to the playhead (select_before_playhead/select_after_playhead return the selected keyframe UUIDs).

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
action "play" | "pause" | "stop" | "set_time" | "set_length" | "set_fps" | "loop" | "select_range" | "select_before_playhead" | "select_after_playhead" required Timeline action to perform. select_before_playhead/select_after_playhead replace the keyframe selection with bone keyframes at or before/after the playhead (1e-5 s tolerance, like Blockbench 5.2's native actions) and return their UUIDs.
time number optional Time in seconds. Required for set_time; for select_before_playhead/select_after_playhead it is the reference time and defaults to the current playhead. [min: 0]
length number optional Animation length in seconds, including all keyframes (for set_length action). [min: 0, max: 10000]
fps integer optional Integer frames per second, 10–120 (for set_fps action; Blockbench minimum is 10). [min: 10, max: 120]
loop_mode "once" | "loop" | "hold" optional Loop mode for the animation.
range object optional Time range for selection.
scope "animation" | "timeline" optional Keyframes considered by select_before_playhead/select_after_playhead. animation: every bone animator of the target animation, including ones hidden from the timeline. timeline: only animators shown in the timeline with visible channels, matching the native action; requires the target animation to be selected. (default: "animation")

batch_keyframe_operations

experimental destructive

Batch Keyframe Operations

Edits keyframes in the active animation atomically; all includes hidden animators. Numeric value edits use native transform values. Reverse follows the native Reverse Keyframes action, including the GeckoLib plugin's easing adjustment. Bake samples continuous numeric curves within selected channel spans, caps output at 10000 samples, and restores the playhead. Expressions, step/pre-post curves and effect channels require native baking. Smooth and bake clear GeckoLib easings they replace and report it.

Name Type Required Description
selection "all" | "selected" | "range" | "pattern" optional Which active-animation keyframes to operate on. all includes hidden or collapsed animators. (default: "selected")
range object optional Time range for keyframe selection.
pattern object optional Pattern-based selection.
operation "offset" | "scale" | "reverse" | "mirror" | "smooth" | "bake" required Operation to perform on keyframes. reverse works like Blockbench's Reverse Keyframes action: times flip within the selection, pre/post values and Bezier handles swap, and GeckoLib easings flip direction and move to the key their segment now arrives at, as the GeckoLib plugin does. smooth and bake clear the GeckoLib easings they replace and report it.
parameters object optional Operation-specific parameters.

animation_copy_paste

experimental destructive

Animation Copy/Paste

Copies native keyframe data points and curve metadata into a plugin-local clipboard. Paste preserves exact timestamps, replaces same-channel/time collisions and is undoable, including newly created animators. Mirror paste uses native position/rotation/curve mirroring; scale is unchanged.

Name Type Required Description
action "copy" | "paste" | "mirror_paste" required Copy or paste action.
source object optional Source data for copy operation.
target object optional Target data for paste operation.

variable_placeholders

experimental destructive

Variable Placeholders

Reads or edits the project's animation Variable Placeholders text (one `variable = expression` per line), used to preview Molang animations. add writes a value, slider('name', step, min, max), toggle('name') or impulse('name', duration) line like the native Create Variable Placeholder dialog; set replaces all text; remove deletes a variable's lines. Changes sync through the native panel, refresh the animation preview and return the parsed lines and live controls. Placeholder edits are not recorded in Undo. Requires a format with Molang enabled.

Name Type Required Description
action "get" | "set" | "add" | "remove" required get: read text, parsed lines and live controls. set: replace the whole text. add: write one structured line. remove: delete every line assigning variable.
text string optional Complete placeholder text for set; one `variable = expression` per line. Empty clears all placeholders. [maxLength: 100000]
entry object | object | object | object optional Structured line for add.
replace_existing boolean optional For add: replace an existing line for the same variable (aliases such as v. match) instead of appending a duplicate. (default: true)
variable string optional Variable to delete for remove. [minLength: 1]

list_molang_variables

experimental read-only

List Molang Variables

Lists Blockbench's built-in Molang variables and query functions available in animation previews (like the native View Built-in Variables dialog), with current values for constants and live queries, plus the project's placeholder assignments. Read-only.

Name Type Required Description
filter string optional Case-insensitive substring filter on variable names, e.g. 'camera'.

Armature

list_armatures

stable read-only

List Armatures

Lists all armatures in the current project with their basic info.

No parameters

get_armature

stable read-only

Get Armature

Gets detailed information about a specific armature including its bones.

Name Type Required Description
id string required UUID or name of the armature.
include_bones boolean optional Whether to include bone hierarchy in response. (default: true)

add_armature

stable destructive

Add Armature

Creates a new armature in the project. An armature is a skeletal rig used for mesh deformation.

Name Type Required Description
name string optional Name for the new armature. (default: "armature")
visibility boolean optional (default: true)
locked boolean optional (default: false)
add_initial_bone boolean optional Whether to add an initial bone to the armature. (default: true)

remove_armature

experimental destructive

Remove Armature

Removes an armature and all its bones from the project.

Name Type Required Description
id string required UUID or name of the armature to remove.

update_armature

stable destructive

Update Armature

Updates properties of an existing armature.

Name Type Required Description
id string required UUID or name of the armature.
name string optional New name for the armature.
visibility boolean optional
locked boolean optional
export boolean optional Whether to export this armature.

list_armature_bones

stable read-only

List Armature Bones

Lists all armature bones, optionally filtered by a specific armature.

Name Type Required Description
armature_id string optional Filter bones by armature UUID or name. If not provided, lists all bones.

get_armature_bone

stable read-only

Get Armature Bone

Gets detailed information about a specific armature bone.

Name Type Required Description
id string required UUID or name of the bone.
include_weights boolean optional Whether to include the bone's raw vertex_weights map in the response. Keys are `<first 6 chars of mesh UUID>:<vertex key>` (legacy projects may still hold bare `<vertex key>` entries until reweighted); use get_vertex_weights for per-mesh vertex-key maps. (default: false)

add_armature_bone

stable destructive

Add Armature Bone

Creates a new bone and adds it to an armature or parent bone.

Name Type Required Description
parent_id string required UUID or name of parent armature or bone.
name string optional Name for the new bone. (default: "bone")
origin number[] optional Position of the bone. Defaults to [0, parent.length, 0] for child bones. [minItems: 3, maxItems: 3]
rotation number[] optional 3D vector [x, y, z]. (default: [0,0,0]) [minItems: 3, maxItems: 3]
length number optional Length of the bone. (default: 8)
width number optional Width of the bone. (default: 2)
connected boolean optional Whether bone is connected to parent. (default: true)
color integer optional Marker color index (0-7). [min: 0, max: 7]

remove_armature_bone

experimental destructive

Remove Armature Bone

Removes an armature bone from the project.

Name Type Required Description
id string required UUID or name of the bone to remove.
remove_children boolean optional Whether to also remove child bones. (default: true)

update_armature_bone

stable destructive

Update Armature Bone

Updates properties of an existing armature bone.

Name Type Required Description
id string required UUID or name of the bone.
name string optional
origin number[] optional New position of the bone. [minItems: 3, maxItems: 3]
rotation number[] optional New rotation [x, y, z] in degrees. [minItems: 3, maxItems: 3]
length number optional
width number optional
connected boolean optional
color integer optional [min: 0, max: 7]
visibility boolean optional
locked boolean optional

update_armature_bones_batch

experimental destructive

Update Armature Bones (Batch)

Updates multiple armature bones at once with the same properties.

Name Type Required Description
ids string[] required Array of bone UUIDs or names to update.
visibility boolean optional
locked boolean optional
color integer optional [min: 0, max: 7]

select_armature_bones

stable

Select Armature Bones

Selects armature bones by ID. Can select single bone, multiple bones, or bone hierarchy.

Name Type Required Description
ids string[] optional Array of bone UUIDs or names to select.
armature_id string optional Select all bones in this armature.
include_descendants boolean optional Include all descendant bones in selection. (default: false)
clear_selection boolean optional Clear existing selection before selecting. (default: true)

get_vertex_weights

stable read-only

Get Vertex Weights

Gets vertex weights for a mesh from all bones affecting it.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
bone_id string optional Filter weights by specific bone.

set_vertex_weight

stable destructive

Set Vertex Weight

Sets the weight of a specific vertex on a bone.

Name Type Required Description
bone_id string required UUID or name of the bone.
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
vertex_key string required Key of the vertex in the mesh.
weight number required Weight value (0-1). Set to 0 to remove weight. [min: 0, max: 1]

set_vertex_weights_batch

experimental destructive

Set Vertex Weights (Batch)

Sets multiple vertex weights at once on a bone.

Name Type Required Description
bone_id string required UUID or name of the bone.
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
weights Record<string, number> required Map of vertex_key -> weight value.

clear_vertex_weights

experimental destructive

Clear Vertex Weights

Clears all vertex weights from a bone for a specific mesh, including legacy bare vertex-key entries that still apply to that mesh.

Name Type Required Description
bone_id string required UUID or name of the bone.
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.

set_ik_controller

experimental destructive

Set IK Controller

Creates or updates an inverse-kinematics controller. Blockbench drives IK from a null object: ik_target is the end effector (group/bone, armature bone, or locator) that reaches for the null object, ik_source is the chain root (defaults to the null object's parent), ik_pole (Blockbench 5.2+) sets the bend direction, and lock_ik_target_rotation keeps the effector's rotation. Works with bone rigs and armatures (5.2 allows null objects under armatures and armature bones). Validates every reference and that the target lies below the chain root; returns the solved chain. Replaces the deprecated bone_rigging set_ik flags, which Blockbench never read.

Name Type Required Description
null_object string optional UUID or name of an existing null object to update. Omit to create a new IK controller null object.
name string optional Name for the null object. Defaults to '<ik_target name>_ik' when creating.
position number[] optional Null object position [x, y, z] as Blockbench stores it (model space for root and group parents). Defaults to the end effector's world pivot when creating. [minItems: 3, maxItems: 3]
parent string optional Parent group, armature, or armature bone (UUID or name), or 'root'. Defaults to root when creating. When ik_source is empty the parent is the implicit chain root, so keep IK controllers outside the chain they drive.
ik_target string optional End effector that reaches for the null object: a group/bone, armature bone, or locator (UUID or name). Required when creating; must be a descendant of the chain root. Empty string clears.
ik_source string optional Chain root: a group/bone or armature bone (UUID or name). The chain spans from here down to ik_target. Empty string clears, making the null object's parent the chain root.
ik_pole string optional Pole target controlling the bend direction (Blockbench 5.2+): a group, locator, or other null object (UUID or name). Empty string clears.
lock_ik_target_rotation boolean optional Keep the end effector's world rotation while the chain solves.

Display Settings

get_display_transform

experimental read-only

Get Display Transform

Reads Java Edition display settings (Project.display_settings). Returns translation, rotation, scale, mirror and pivots for a single slot, or a summary of every populated slot when no slot is given. Never modifies state.

Name Type Required Description
slot "thirdperson_righthand" | "thirdperson_lefthand" | "firstperson_righthand" | "firstperson_lefthand" | "ground" | "gui" | "head" | "embedded" | "fixed" | "on_shelf" optional Display slot to read. If omitted, returns every populated slot in the project.

set_display_transform

experimental destructive

Set Display Transform

Writes a Java Edition display slot's transform (translation, rotation, scale, mirror, pivots). Creates the slot if it does not exist yet (seeded from Blockbench's Bedrock item display defaults on bedrock_block projects, identity otherwise) and wraps the change in an undo step. This edits data that ships in the exported model JSON — it changes the deliverable, not just the preview. Values are kept as given, like Blockbench does; outside bedrock_block projects the result warns about those Minecraft Java clamps or ignores (translation beyond ±80, scale beyond ±4, pivots, the embedded slot). Requires a format that supports display mode (e.g. Java Block/Item).

Name Type Required Description
slot "thirdperson_righthand" | "thirdperson_lefthand" | "firstperson_righthand" | "firstperson_lefthand" | "ground" | "gui" | "head" | "embedded" | "fixed" | "on_shelf" required Display slot to modify. embedded is a Bedrock block slot that Minecraft Java ignores.
translation number[] optional Translation offset as [x, y, z] (Minecraft display units, 1/16 block). Minecraft Java clamps each component to ±80. [minItems: 3, maxItems: 3]
rotation number[] optional Rotation in degrees as [x, y, z]. [minItems: 3, maxItems: 3]
scale number[] optional Scale factor as [x, y, z]; a negative component mirrors that axis. Minecraft Java clamps each exported component to ±4. [minItems: 3, maxItems: 3]
rotation_pivot number[] optional Rotation pivot point as [x, y, z]. Only Bedrock reads pivots; Minecraft Java ignores them. [minItems: 3, maxItems: 3]
scale_pivot number[] optional Scale pivot point as [x, y, z]. Only Bedrock reads pivots; Minecraft Java ignores them. [minItems: 3, maxItems: 3]
mirror boolean[] optional Per-axis mirror flags as [x, y, z]. [minItems: 3, maxItems: 3]
reset boolean optional Reset the slot to its default transform before applying any of the other values: identity, or Blockbench's Bedrock defaults on bedrock_block projects. (default: false)

enter_display_mode

experimental destructiveopen-world

Enter Display Mode

Switches Blockbench into Display mode, activates the given slot and optionally loads a reference model (player, zombie, armor stand, …), then returns a screenshot. Pair with set_camera_angle / capture_screenshot for multi-angle fit checks of cosmetics and handheld items. Requires a format that supports display mode.

Name Type Required Description
slot "thirdperson_righthand" | "thirdperson_lefthand" | "firstperson_righthand" | "firstperson_lefthand" | "ground" | "gui" | "head" | "embedded" | "fixed" | "on_shelf" required Display slot to switch to and activate.
reference string optional Optional reference model to load for a fit check (e.g. 'player', 'zombie', 'armor_stand', 'baby_zombie', 'block'). Validated against the live reference model list; an unknown value returns the available names.

Elements

remove_element

experimental destructive

Remove Element

Removes the element with the given ID.

Name Type Required Description
id string required ID or name of the element to remove.

add_group

stable destructive

Add Group

Adds a new group with the given name and options.

Name Type Required Description
name string required
origin number[] optional Pivot point of the group as [x, y, z]. (default: [0,0,0]) [minItems: 3, maxItems: 3]
rotation number[] optional Rotation of the group in degrees as [x, y, z]. (default: [0,0,0]) [minItems: 3, maxItems: 3]
parent string optional Parent group UUID or name, or root for the project root. (default: "root")
visibility boolean optional (default: true)
autouv "0" | "1" | "2" optional Auto UV setting. 0 = disabled, 1 = enabled, 2 = relative auto UV. (default: "0")
selected boolean optional (default: false)
shade boolean optional Outliner shading toggle, matching Blockbench's default (true). Ignored by Java 26.3+ projects, which use per-cube shade_direction_override instead. (default: true)

list_outline

stable read-only

List Outline

Returns the project outline as a hierarchical tree. Each node reports { name, uuid, type, children? }, including groups, armatures, armature bones, cubes, meshes and markers. Parent nodes retain their descendants. Use include_cubes=false and include_meshes=false to omit geometry leaves, or max_depth to bound very deep trees.

Name Type Required Description
include_cubes boolean optional If true, include cubes as leaves. If false, omit cubes while retaining other node types. (default: true)
include_meshes boolean optional If true, include meshes as leaves. If false, omit meshes. (default: true)
max_depth integer optional Maximum tree depth to traverse. Use a small value to summarize large projects. (default: 32) [min: 1, max: 32]

duplicate_element

experimental destructive

Duplicate Element

Duplicates any outliner element or group (with its children) by ID or name using Blockbench's native duplicate, so every property, face UV, texture and mesh vertex key is preserved. Mesh copies inherit their armature bone vertex weights, and copied IK null objects point at the copied bones when their chain was duplicated with them. Optionally offsets the copy and assigns a new name. Selection is left unchanged.

Name Type Required Description
id string required ID or name of the element to duplicate.
offset number[] optional Model-space offset [x, y, z] applied to the copy and every descendant. (default: [0,0,0]) [minItems: 3, maxItems: 3]
newName string optional Name for the top-level copy. Defaults to Blockbench's duplicate naming (trailing number incremented, unique where required).

rename_element

experimental destructive

Rename Element

Renames a cube, mesh or group by ID or name.

Name Type Required Description
id string required ID or name of the element to rename.
new_name string required New name to assign.

find_elements_by_criteria

stable read-only

Find Elements by Criteria

Searches the current project for elements matching the given criteria. Supports name pattern matching (regex or substring), type filtering, scoping to a parent group, cube size ranges, and selection scope. Returns element metadata, never modifies state.

Name Type Required Description
name_pattern string optional Regex pattern to match element names (e.g., '^arm_.*'). Case-sensitive. Patterns over 512 characters, with nested quantifiers such as (a+)+, or that do not compile are rejected with an error.
name_contains string optional Substring to match in element names. Case-insensitive.
type "cube" | "mesh" | "group" | "any" optional Restrict to a single element type. (default: "any")
parent_group string optional UUID or name of a parent group. Only descendants of this group are returned.
min_size number[] optional Minimum [x,y,z] size for cubes. Cubes smaller on any axis are excluded. [minItems: 3, maxItems: 3]
max_size number[] optional Maximum [x,y,z] size for cubes. Cubes larger on any axis are excluded. [minItems: 3, maxItems: 3]
selected_only boolean optional Only consider currently selected elements. (default: false)
limit integer optional Maximum number of results to return. (default: 200) [min: 1, max: 1000]

select_all_of_type

stable destructive

Select All of Type

Selects all elements of the given type (cube, mesh, or group) in the current project. Optionally restrict to descendants of a parent group, or add to (rather than replace) the current selection. As in Blockbench, locked nodes are skipped and selecting a group also selects its contents.

Name Type Required Description
type "cube" | "mesh" | "group" required Element type to select.
add_to_selection boolean optional If true, add to current selection. If false, replace selection. (default: false)
parent_group string optional UUID or name of a parent group. If provided, only descendants of this group are selected.

filter_by_material

stable read-only

Filter Elements by Material

Returns all elements that reference the given texture. For cubes, includes the list of face keys (e.g., 'north', 'up') that use the texture. For meshes, returns the mesh if any face uses the texture.

Name Type Required Description
texture string required Texture ID, UUID or name to search for.
include_face_keys boolean optional Include the list of cube face keys (e.g., 'north') that reference the texture. (default: true)

get_selection

stable read-only

Get Selection

Returns the current selection state: selected cube/mesh/group UUIDs and names, plus the active texture. Use this to verify what `apply_texture` or a paint tool with `fill_mode="selected_elements"` will target.

No parameters

Export

list_export_formats

stable read-only

List Export Formats

Lists registered export codecs, file extensions, compile/export support, and availability under the native export action's condition. Use before `export_model` to pick a codec.

Name Type Required Description
only_current_format boolean optional If true, only return codecs compatible with the current project's format. (default: false)

export_model

experimental destructiveopen-world

Export Model

Compiles the current project through a codec whose native export action is available. Returns JSON metadata and a live .bbmodel resource link; result_format='embedded' returns complete exports as text/blob resources with URI and MIME type. Optionally writes to a local path (requires Blockbench filesystem permission). Partial codec options merge over the configured defaults; for glTF armatures, options.merge_armature=true merges each armature's meshes into one SkinnedMesh. Use `list_export_formats` to discover codecs.

Name Type Required Description
codec_id string optional Codec ID to use for export (e.g., 'obj', 'gltf', 'project', 'bedrock'). If omitted, uses the current project format's codec. Use `list_export_formats` to see available IDs.
options Record<string, unknown> optional Codec-specific export options, merged over the codec's configured export options (keys match the native export dialog). glTF ('gltf'): encoding ('ascii' | 'binary'), scale, embed_textures, armature (export groups as skinned bones), animations, and merge_armature (Blockbench 5.2+; default false exports one SkinnedMesh per armature child mesh, true merges each armature's meshes into a single SkinnedMesh).
path string optional Absolute filesystem path to write the compiled model to. Requires user permission (Blockbench v5.0+ prompts for 'fs' access). If omitted, content is returned in the response only. Fails if the file exists unless overwrite is true.
overwrite boolean optional Replace an existing file at path. Defaults to false so an export never silently replaces another file. (default: false)
max_content_length integer optional Maximum characters of text or base64 to return. Use 0 to omit file content. In embedded mode, only complete files within this limit are embedded; larger files return a truncated preview in metadata.content. (default: 100000) [min: 0, max: 2000000]
result_format "text" | "embedded" optional text preserves the JSON metadata.content payload. embedded moves a complete file into an MCP resource block with URI and MIME type, sets metadata.content to null, and reports its resource_uri. Both modes include a link to the live .bbmodel project resource. (default: "text")

History

undo

stable destructive

Undo

Undoes the most recent edit in the current project. Use `steps` to undo multiple edits in a single call. Returns the action(s) that were undone.

Name Type Required Description
steps integer optional Number of steps to undo. (default: 1) [min: 1, max: 100]

redo

stable destructive

Redo

Redoes the most recently undone edit. Use `steps` to redo multiple edits in a single call. Returns the action(s) that were redone.

Name Type Required Description
steps integer optional Number of steps to redo. (default: 1) [min: 1, max: 100]

get_undo_stack

stable read-only

Get Undo Stack

Returns the current undo/redo history: the list of edit entries, the current index, and which entries are undone vs. applied. Use this to inspect available undo/redo operations and find named checkpoints.

Name Type Required Description
limit integer optional Maximum number of entries to return (most recent first). (default: 50) [min: 1, max: 200]

save_checkpoint

experimental

Save Checkpoint

Inserts a named marker into the undo history. The marker can later be located with `get_undo_stack` so the agent knows how many times to call `undo` to return to this state. Does not modify the project.

Name Type Required Description
name string required Descriptive name for the checkpoint. Shown in undo history so agents can navigate back to this point. [minLength: 1, maxLength: 120]

Import/Export

from_geo_json

stable destructive

Import GeoJSON

Imports one Bedrock geometry (.geo.json) into the current project, which keeps its format (one with bones: Bedrock, GeckoLib, generic, ...), as one undoable edit, and returns a screenshot. Adds the bones with their cubes, locators and texture meshes; the texture size, box UV mode and item display transforms it sets are undone with it, while the project's visible bounds can only grow. If the active project changes while loading, the import is rejected without modifying the new project. URLs on this computer or a private network are refused; pass a file path instead.

Name Type Required Description
geojson string required Bedrock geometry (format 1.12 or later) as inline JSON, an absolute path or file:// URL of a file on this computer (read with Blockbench's file permission), or a public http(s) URL (at most 10 MB).
geometry string optional Identifier of the geometry to import, such as geometry.robot, when the file holds several. Omit it when the file holds one.

Material Instances

get_face_material_instances

stable read-only

Get Face Material Instances

Gets the material instance names for cube faces. Material instances are used in Bedrock Block format to map faces to materials defined in the minecraft:material_instances component.

Name Type Required Description
cube_id string optional ID or name of the cube. If not provided, uses the first selected cube.
faces "north" | "south" | "east" | "west" | "up" | "down"[] optional Specific faces to get/clear material instances for. If not provided, returns/clears all faces.

set_face_material_instance

experimental destructive

Set Face Material Instance

Sets the material instance name for one or more cube faces. Material instances are strings that map to materials defined in the minecraft:material_instances component for Bedrock Block format.

Name Type Required Description
cube_id string optional ID or name of the cube. If not provided, applies to all selected cubes.
material_name string required The material instance name to assign. Use empty string to clear the material instance.
faces "north" | "south" | "east" | "west" | "up" | "down"[] optional Faces to set the material instance on. Defaults to all faces. (default: ["north","south","east","west","up","down"])

list_material_instances

stable read-only

List Material Instances

Lists all unique material instance names used in the project. Returns the material instance names along with which cubes and faces use them.

No parameters

bulk_set_material_instances

experimental destructive

Bulk Set Material Instances

Sets material instance names on multiple cubes at once. Useful for assigning different material instances to different faces across the project.

Name Type Required Description
assignments object[] required Array of material instance assignments. [minItems: 1]

clear_material_instances

experimental destructive

Clear Material Instances

Clears (removes) material instance names from cube faces. Useful for resetting material assignments.

Name Type Required Description
cube_id string optional ID or name of the cube. If not provided, clears from all selected cubes.
faces "north" | "south" | "east" | "west" | "up" | "down"[] optional Specific faces to clear. If not provided, clears all faces.
all_cubes boolean optional If true, clears material instances from all cubes in the project. (default: false)

Mesh Editing

place_mesh

experimental destructive

Place Mesh

Creates meshes from local vertices and optional indexed triangle/quad faces, with position, rotation, and scale. Texture and group are optional. Returns meshes with UUIDs and vertex_keys/face_keys arrays in input order for subsequent editing.

Name Type Required Description
elements object[] required Array of meshes to place. [minItems: 1]
texture string optional Texture ID or name to apply to the mesh.
group string optional Group/bone to which the mesh belongs.

extrude_mesh

experimental destructive

Extrude Mesh

Extrudes the target mesh's selected face region along averaged normals, honoring distance. Returns new vertex keys and cap/wall face keys. Edge/vertex modes are unsupported.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
distance number optional Signed distance along averaged selected face normals, in local model units. Defaults to Blockbench's current grid snap interval (getSpatialInterval), or 1 when unavailable.
mode "faces" | "edges" | "vertices" optional Use faces. Edge and vertex extrusion are currently unsupported by this headless tool. (default: "faces")

subdivide_mesh

experimental destructive

Subdivide Mesh

Subdivides the target mesh's selected triangles/quads into a regular grid with interpolated UVs. Returns new geometry keys. Unselected neighboring faces remain unchanged and may need matching cuts.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
cuts integer optional Number of cuts per edge; each selected face becomes (cuts + 1) squared faces. (default: 1) [min: 1, max: 10]

create_sphere

stable destructive

Create Sphere

Creates a sphere mesh at the specified position with the given parameters. The sphere is created as a mesh with vertices and faces using spherical coordinates.

Name Type Required Description
elements object[] required Array of spheres to create. [minItems: 1]
texture string optional Texture ID or name to apply to the sphere.
group string optional Group/bone to which the sphere belongs.

select_mesh_elements

experimental destructive

Select Mesh Elements

Selects vertices, edges, or faces of a mesh for manipulation. Keys the mesh does not have are rejected, except when removing them from the selection.

Name Type Required Description
mesh_id string required ID or name of the mesh to select elements from.
mode "vertex" | "edge" | "face" required Selection mode.
elements string[] optional Keys to select: vertex keys in vertex mode, face keys in face mode, 'vkey1-vkey2' edges in edge mode (from get_mesh_info or the creation tools). If not provided, selects all.
action "select" | "add" | "remove" | "toggle" optional Selection action: select (replace), add, remove, or toggle. (default: "select")

move_mesh_vertices

experimental destructive

Move Mesh Vertices

Moves the given vertex keys, or the mesh's selected vertices, by the specified offset in one undo entry. Unknown keys are rejected before anything moves.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
offset number[] required Offset to move vertices by [x, y, z]. [minItems: 3, maxItems: 3]
vertices string[] optional Specific vertex keys to move. If not provided, moves all selected vertices.

delete_mesh_elements

experimental destructive

Delete Mesh Elements

Deletes selected components only from the target mesh. Vertex/edge deletion removes incident faces; keep_vertices retains vertices orphaned by face/edge removal.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
mode "vertices" | "edges" | "faces" optional What to delete: vertices, edges, or faces. (default: "faces")
keep_vertices boolean optional When deleting faces/edges, whether to keep the vertices. (default: false)

merge_mesh_vertices

experimental destructive

Merge Mesh Vertices

Merges vertices that are within a specified distance of each other, in one undo entry. Each face keeps a surviving vertex once; faces the merge collapses (fewer than three vertices left) are removed.

Name Type Required Description
mesh_id string required ID or name of the mesh.
threshold number optional Maximum distance between vertices to merge. (default: 0.1) [min: 0, max: 10]
selected_only boolean optional Whether to only merge selected vertices. (default: true)

create_mesh_face

experimental destructive

Create Mesh Face

Creates a triangle or quad face from 3 or 4 distinct existing vertex keys, with an optional texture, in one undo entry.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
vertices string[] required Vertex keys to create face from. Must be 3 or 4 vertices. [minItems: 3, maxItems: 4]
texture string optional Texture ID or name to apply to the new face.

create_cylinder

experimental destructive

Create Cylinder

Creates one or more cylinder meshes with optional end caps.

Name Type Required Description
elements object[] required [minItems: 1]
texture string optional Texture ID or name. If not provided, uses selected texture.
group string optional Group/bone ID or name.

knife_tool

experimental destructive

Knife Tool

Currently unsupported for meshes: Blockbench's interactive Knife context requires pointer topology that this point-list API cannot safely provide. Use subdivide_mesh or place_mesh for meshes; use knife_cut_cube or slice_cubes_to_block_grid to cut cubes headlessly.

Name Type Required Description
mesh_id string required ID or name of the mesh to cut.
points object[] required Points defining the cut path. [minItems: 2]

create_polyhedron

experimental destructive

Create Polyhedron

Creates icosphere, octahedron, or dodecahedron meshes (Blockbench 5.2 primitives) with a detail level of 0-6, as triangles with coincident vertices merged and planar per-face UVs. Returns vertex_keys/face_keys per mesh.

Name Type Required Description
elements object[] required Polyhedra to create. [minItems: 1]
texture string optional Texture ID or name to apply to every face.
group string optional Group/bone to which the meshes belong.

loop_cut_mesh

experimental destructive

Loop Cut Mesh

Runs Blockbench's native Loop Cut on a mesh: splits the quad ring crossing the start edge with one or more parallel cuts, with offset, direction and 5.2 spacing modes (proportional, even_start, even_end). One undo entry. The new loop vertices become the selection and are returned.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
edge string[] optional Two vertex keys of the edge to start the loop from; the cut runs across the face ring perpendicular to it. Defaults to the mesh's current vertex/face selection (at least two selected vertices). [minItems: 2, maxItems: 2]
cuts integer optional Number of parallel loop cuts. (default: 1) [min: 1, max: 16]
offset number optional Distance of the (first) cut from the start of the edge, in the given unit. Defaults to the edge midpoint (or even spacing for multiple cuts). [min: 0]
unit "size" | "percent" optional Unit of offset: model units ('size') or percent of the start edge length. (default: "size")
direction integer optional Rotates which edge of the start face the loop starts from, as the native Direction slider. (default: 0) [min: 0]
spacing "proportional" | "even_start" | "even_end" optional Blockbench 5.2 spacing: proportional keeps the same ratio on every edge of the loop; even_start/even_end keep the same absolute distance from the loop's start/end side. (default: "proportional")

flip_in_place

experimental destructive

Flip In Place

Mirrors elements in place along an axis using Blockbench's native Flip In Place (flip_in_place_x/y/z): cubes flip around their own center, meshes around their origin, groups also invert rotations in bone-rig formats. For meshes in vertex/edge/face selection mode only the selected components flip. Edit mode only.

Name Type Required Description
ids string[] optional Element or group UUIDs/names to flip. Replaces the selection with these. Defaults to the current selection. [minItems: 1]
axis "x" | "y" | "z" required Axis to mirror across each element's own center (cubes) or pivot (meshes, groups, other elements).

get_mesh_info

stable read-only

Get Mesh Info

Inspects a mesh by UUID/name or the first selected mesh without changing geometry, selection, or undo history. Returns transforms, parent, total counts, mesh-local bounds, selection counts, and optional paginated vertices/faces with actual runtime keys. Faces use perimeter vertex order and normalized mesh-local normals (zero for degenerate faces), stored texture references, and optional UVs. Texture status distinguishes resolved, missing, unassigned (false), disabled (null), and unset; default format materials are not resolved. Pages sort keys lexicographically and expose next_offset; geometry must remain unchanged between calls. Set include_vertices/include_faces false for a compact summary.

Name Type Required Description
mesh_id string optional Mesh UUID or name. Omit to inspect the first selected mesh. [minLength: 1]
include_vertices boolean optional Include a page of vertex keys, local positions, and selection flags. (default: true)
include_faces boolean optional Include a page of face keys, perimeter vertices, local normals, texture references, and selection flags. (default: true)
include_uv boolean optional Include per-vertex UV coordinates for returned faces, in Blockbench texture units. (default: false)
vertex_offset integer optional Zero-based offset into lexicographically sorted vertex keys. (default: 0) [min: 0]
face_offset integer optional Zero-based offset into lexicographically sorted face keys. (default: 0) [min: 0]
limit integer optional Maximum items in each included page. Continue using that page's next_offset; avoid editing geometry between pages. (default: 100) [min: 1, max: 500]

Paint Tools

paint_fill_tool

experimental destructive

Paint Fill Tool

Uses the fill/bucket tool to fill areas with color. In 'face' and 'element' fill modes only the face or element whose UV area contains the given texture pixel is filled, and a pixel no face covers is an error. Seeds outside the texture are rejected, and so are color and color_connected seeds outside the active layer, where the fill reads its seed color. Opacity is 0-255 regardless of Blockbench's opacity range setting.

Name Type Required Description
texture_id string optional Texture ID or name. If not provided, uses selected texture.
x number required Texture pixel X where the fill starts; must lie inside the texture except for 'selection' and 'selected_elements' fills, which ignore it.
y number required Texture pixel Y where the fill starts; must lie inside the texture except for 'selection' and 'selected_elements' fills, which ignore it.
color string optional Fill color as hex string.
opacity number optional Fill opacity (0-255). [min: 0, max: 255]
tolerance number optional Only zero (exact color matching) is supported by the native fill API. Nonzero tolerance is rejected. [min: 0, max: 100]
fill_mode "color" | "color_connected" | "face" | "element" | "selected_elements" | "selection" optional Fill mode. 'face' and 'element' fill only the face/element whose UV area contains (x, y) in texture space (Blockbench 5.2 looks it up with UVEditor.findFaceAtUV); 'color'/'color_connected' match exact colors; 'selected_elements' fills every selected element; 'selection' fills the texture selection (image editor). (default: "color_connected")
blend_mode "default" | "set_opacity" | "color" | "behind" | "multiply" | "add" | "screen" | "overlay" | "difference" optional Fill blend mode.

draw_shape_tool

experimental destructive

Draw Shape Tool

Draws geometric shapes on textures.

Name Type Required Description
texture_id string optional Texture ID or name. If not provided, uses selected texture.
shape "rectangle" | "rectangle_h" | "ellipse" | "ellipse_h" required Shape to draw. '_h' suffix means hollow.
start object required
end object required
color string optional Shape color as hex string.
line_width number optional Line width for hollow shapes. [min: 1, max: 50]
opacity number optional Shape opacity (0-255). [min: 0, max: 255]
blend_mode "default" | "set_opacity" | "color" | "behind" | "multiply" | "add" | "screen" | "overlay" | "difference" optional Shape blend mode.

gradient_tool

experimental destructive

Gradient Tool

Applies gradients to textures.

Name Type Required Description
texture_id string optional Texture ID or name. If not provided, uses selected texture.
start object required
end object required
start_color string required Start color as hex string.
end_color string required End color as hex string.
opacity number optional Gradient opacity (0-255). [min: 0, max: 255]
blend_mode "default" | "set_opacity" | "color" | "behind" | "multiply" | "add" | "screen" | "overlay" | "difference" optional Gradient blend mode.

color_picker_tool

experimental

Color Picker Tool

Picks a texture pixel's color and makes it the primary or secondary color, like Blockbench's color picker. It does not edit the texture, but it changes the active colors, selects the texture, and depending on Blockbench's settings can set the brush opacity or switch the active paint tool.

Name Type Required Description
texture_id string optional Texture ID or name. If not provided, uses selected texture.
x number required X coordinate to pick color from.
y number required Y coordinate to pick color from.
set_as_secondary boolean optional Set as secondary color instead of primary. (default: false)
pick_opacity boolean optional Also pick and apply the pixel's opacity. (default: false)

copy_brush_tool

experimental destructive

Copy Brush Tool

Uses the copy/clone brush to copy texture areas.

Name Type Required Description
texture_id string optional Texture ID or name. If not provided, uses selected texture.
source object required
target object required
brush_size number optional Copy brush size. [min: 1, max: 100]
opacity number optional Copy opacity (0-255). [min: 0, max: 255]
mode "copy" | "sample" | "pattern" optional Copy brush mode. (default: "copy")
aspect_ratio number optional Brush aspect ratio (-16 to 16). Negative narrows the width, positive narrows the height, 0 keeps the brush square/round. [min: -16, max: 16]

eraser_tool

experimental destructive

Eraser Tool

Erases parts of textures with customizable settings.

Name Type Required Description
texture_id string optional Texture ID or name. If not provided, uses selected texture.
coordinates object[] required Array of coordinates to erase at. [minItems: 1]
brush_size number optional Eraser brush size. [min: 1, max: 100]
opacity number optional Eraser opacity (0-255). [min: 0, max: 255]
softness number optional Eraser softness percentage. [min: 0, max: 100]
shape "square" | "circle" optional Eraser shape.
connect_strokes boolean optional Whether to connect erase strokes with lines. Disconnected points are separate native strokes and separate undo entries. (default: true)

paint_settings

experimental destructive

Paint Settings

Configures paint mode settings and preferences, including Blockbench 5.2 screen-space brush projection, brush lock mode and brush aspect ratio. The result also reports the active opacity range (0-255 or 0-100); tool opacity parameters stay 0-255 and are converted automatically.

Name Type Required Description
mirror_painting object optional Mirror painting settings.
lock_alpha boolean optional Lock alpha channel while painting.
pixel_perfect boolean optional Enable pixel perfect drawing.
paint_side_restrict boolean optional Restrict painting to current face side.
color_erase_mode boolean optional Enable color erase mode.
brush_opacity_modifier "none" | "pressure" | "tilt" optional Brush opacity modifier for stylus.
brush_size_modifier "none" | "pressure" | "tilt" optional Brush size modifier for stylus.
paint_with_stylus_only boolean optional Only allow painting with stylus input.
pick_color_opacity boolean optional Pick opacity when using color picker.
pick_combined_color boolean optional Pick combined layer colors.
screen_space_brush_projection boolean optional Project brushes in screen space when painting in the 3D viewport (Blockbench 5.2+, brush tools only).
brush_lock_mode "none" | "element" | "selected_faces" | "face" optional Restrict viewport strokes: 'none', the 'element' the stroke started on, 'selected_faces', or the single 'face' it started on (Blockbench 5.2+).
brush_aspect_ratio number optional Brush aspect ratio (-16 to 16) applied to every tool that supports it (brush and copy brush; Blockbench 5.2+). [min: -16, max: 16]

paint_with_brush

experimental destructive

Paint with Brush

Paints with Blockbench's own brush tool, so blend mode, pixel-perfect drawing, lock alpha and mirror painting apply as when painting by hand. Given brush settings (opacity 0-255, softness 0-100%, hex or named color, shape, blend mode, aspect ratio) are set on the brush first; omitted ones keep the current brush. Paints on the selected pixel layer; if a layer group is selected, a pixel layer inside it is used.

Name Type Required Description
texture_id string optional Texture ID or name. If not provided, uses selected texture.
coordinates object[] required Array of coordinates to paint at. [minItems: 1]
brush_settings object optional Brush settings written to Blockbench's brush before painting. Opacity is 0-255; softness is a 0-100 percentage. Omitted settings keep the current brush.
connect_strokes boolean optional Whether to draw lines between consecutive coordinates, like dragging the brush, as one undo entry. false stamps each coordinate on its own: still one undo entry on Blockbench 5.2 and later, one per coordinate on older versions. (default: true)

create_brush_preset

experimental destructive

Create Brush Preset

Creates a custom brush preset with specified settings. Omitted settings are stored as unset so loading the preset keeps the current value.

Name Type Required Description
name string required Name of the brush preset.
size number optional Brush size. [min: 1, max: 100]
opacity number optional Opacity (0-255), independent of Blockbench's opacity range setting. [min: 0, max: 255]
softness number optional Brush softness percentage. [min: 0, max: 100]
shape "square" | "circle" optional Brush shape. Omit to keep the current shape when loading.
color string optional Brush color as hex string.
blend_mode "default" | "set_opacity" | "color" | "behind" | "multiply" | "add" | "screen" | "overlay" | "difference" optional Brush blend mode. Omit to keep the current blend mode when loading.
pixel_perfect boolean optional Enable pixel perfect drawing.
screen_space boolean optional Enable screen-space brush projection when the preset is loaded (Blockbench 5.2+). Omit to keep the current setting.

load_brush_preset

experimental destructive

Load Brush Preset

Loads and applies a custom or built-in brush preset (e.g. 'screen_space') by name.

Name Type Required Description
preset_name string required Name of the brush preset to load: a custom preset name, or a built-in one such as 'pixel_brush', 'pixel_perfect', 'smooth_brush' or 'screen_space' (also accepts the full 'menu.brush_presets.*' key or its translated label).

texture_selection

experimental destructive

Texture Selection

Creates, modifies, or manipulates texture selections for painting.

Name Type Required Description
action "select_rectangle" | "select_ellipse" | "select_all" | "clear_selection" | "invert_selection" | "expand_selection" | "contract_selection" | "feather_selection" required Selection action to perform.
texture_id string optional Texture ID or name. If not provided, uses selected texture.
coordinates object optional Selection area coordinates.
radius number optional Radius in pixels for expand/contract operations (at most 64). [max: 64]
mode "create" | "add" | "subtract" | "intersect" optional Selection mode. (default: "create")

texture_layer_management

experimental destructive

Texture Layer Management

Lists, creates, manages, and reorders texture layers and layer groups (Blockbench 5.2 hierarchy). Target a layer or group by UUID or name with layer_id; list_layers reports type, parent and depth.

Name Type Required Description
action "list_layers" | "select_layer" | "create_layer" | "delete_layer" | "duplicate_layer" | "merge_down" | "set_opacity" | "set_blend_mode" | "move_layer" | "rename_layer" | "flatten_layers" | "toggle_visibility" | "create_group" | "ungroup" | "move_to_group" | "set_group_folded" required Layer action. list_layers reports the hierarchy (read-only); select_layer makes a layer the paint target; create_group, ungroup, move_to_group and set_group_folded manage layer groups (Blockbench 5.2+); toggle_visibility works on layers and groups; flatten_layers composites visible layers into the texture and disables layers.
texture_id string optional Texture ID or name. If not provided, uses selected texture.
layer_id string optional UUID or exact name of the layer or group to act on. Defaults to the texture's selected layer.
layer_name string optional Name for create_layer/create_group/duplicate_layer, or the new name for rename_layer.
layer_ids string[] optional create_group: UUIDs or names of layers/groups to move into the new group. They must share the same parent.
group_id string optional UUID or name of the destination group for move_to_group and create_layer. Use an empty string for the root.
opacity number optional Layer opacity percentage (0-100) for set_opacity. [min: 0, max: 100]
blend_mode "default" | "normal" | "set_opacity" | "color" | "multiply" | "add" | "darken" | "lighten" | "screen" | "overlay" | "difference" | "alpha_mask" optional Layer blend mode for set_blend_mode ('normal' is an alias of 'default').
target_index integer optional move_layer/move_to_group: position among siblings in the same parent, 0 = bottom-most; clamped to the valid range.
folded boolean optional set_group_folded / create_group: whether the group is collapsed in the layers panel.
visible boolean optional toggle_visibility: explicit visibility to set. Omit to toggle.

Particles

list_particle_presets

experimental read-only

List Particle Presets

Lists particle effect presets (smoke, fire, sparks, magic, glow, snow, drip, ...), built-in sprites and textures, materials and facing modes. Every preset uses a texture that ships with Minecraft and Blockbench, so it previews and runs with no image file. Read this before create_particle_effect.

Name Type Required Description
include_designs boolean optional Include each preset's design knobs, useful as a template for custom effects. (default: true)

create_particle_effect

experimental open-world

Create Particle Effect

Creates a Bedrock particle effect (the Snowstorm format Blockbench, Minecraft Bedrock and GeckoLib use) from a preset plus design knobs, or from raw JSON. Writes <pack_root>/particles/<name>.json (and an optional custom texture to textures/particle/), validates it, and loads it into Blockbench's particle preview. Then place it with manage_particle_keyframes, usually at a locator from add_locator. Refuses invalid effects and existing files unless overwrite is true. Blockbench desktop only.

Name Type Required Description
identifier string required Particle identifier, lowercase namespace:name (for example mymod:chimney_smoke). Do not use the minecraft namespace for new effects.
preset "smoke" | "campfire_smoke" | "fire" | "flame" | "embers" | "sparks" | "magic" | "sparkle" | "glow" | "dust" | "snow" | "drip" | "bubbles" | "hearts" | "poof" | "soul" | "portal" | "steam" | "electric" optional Starting point; list_particle_presets describes each. design knobs override it.
design object optional Knobs layered over the preset (or over a plain default effect). Units are blocks (16 model units) and seconds.
raw Record<string, unknown> optional A complete Bedrock particle file (for example a Snowstorm export) instead of preset/design. Its identifier is replaced by `identifier`.
texture_image object optional Custom texture for the effect. It is saved to <pack_root>/textures/particle/<name>.png and the effect's texture and texture_size are set from it (keep design.sprite unset).
pack_root string optional Absolute resource-pack-style folder that receives particles/<name>.json and textures/particle/*.png. Defaults to the pack of a Bedrock entity opened from a resource pack, else the saved project's folder. [minLength: 1]
overwrite boolean optional Replace an existing effect file (and texture) with the same name. (default: false)

update_particle_effect

experimental destructiveopen-world

Update Particle Effect

Changes an existing particle effect file with design knobs (only the components each knob owns are rewritten) or replaces it with raw JSON, validates it, saves it and refreshes the preview. Also loads an effect file from disk that Blockbench has not seen yet. Blockbench desktop only.

Name Type Required Description
effect string required Particle identifier (mymod:smoke), effect name (smoke), or absolute path to the effect's .json file. A path that is not loaded yet is loaded. [minLength: 1]
design object optional Knobs to change. Only the components a knob owns are rewritten; hand-written parts of the file stay.
raw Record<string, unknown> optional Replace the whole file with this Bedrock particle JSON. The effect keeps its current identifier, so keyframes and the client entity still match.
texture_image object optional Custom texture for the effect. It is saved to <pack_root>/textures/particle/<name>.png and the effect's texture and texture_size are set from it (keep design.sprite unset).
overwrite boolean optional Replace a texture PNG that already exists with different content (another effect may use it). (default: false)

list_particle_effects

experimental read-only

List Particle Effects

Lists particle effects loaded in Blockbench with their file, summary, texture status and validation warnings, every particle keyframe that uses them, keyframes that have no preview file or point at missing locators, and the client-entity particle_effects map a Bedrock pack needs.

Name Type Required Description
include_json boolean optional Include each effect's full JSON. (default: false)

manage_particle_keyframes

experimental destructive

Manage Particle Keyframes

Adds, removes or lists particle keyframes on an animation's Effects track. A keyframe spawns an effect at a time, optionally at a locator; Blockbench previews it in Animate mode (set_mode animate, then animation_timeline set_time and capture a screenshot). Keyframes export with Bedrock and GeckoLib animations. One undo step.

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
action "add" | "remove" | "list" required add particle keyframes, remove them by time, or list them.
keyframes object[] optional Keyframes for add. A keyframe at an existing particle time joins that keyframe as another effect. [maxItems: 200]
times number[] optional Times (seconds) to remove for remove; omit to remove every particle keyframe. [maxItems: 200]
effect_filter string optional For remove: only effects with this name, identifier or file. [minLength: 1]

add_locator

experimental

Add Locator

Adds a locator: a named point on a bone where particle effects (and sounds) spawn and which they follow as the bone animates. Exported as a Bedrock bone locator. Requires a format with locators (Bedrock Entity, GeckoLib, Generic Model). One undo step.

Name Type Required Description
name string required Unique locator name; particle keyframes refer to it.
parent string optional Bone/group name or UUID the locator follows. Omit for the model root. [minLength: 1]
position number[] required Absolute position in model units (16 per block), like a cube corner. [minItems: 3, maxItems: 3]
rotation number[] optional Degrees; orients effects whose shapes or directions use local space (formats with rotatable locators). [minItems: 3, maxItems: 3]
ignore_inherited_scale boolean optional Keep effect size when the parent bone scales.

export_particle_pack

experimental destructiveopen-world

Export Particle Pack

Delivers particle effects to a Bedrock resource pack: writes particles/<name>.json and copies custom textures to textures/particle/, then returns the particle_effects map to paste into the client entity so animation keyframe names resolve. Defaults to every effect the project's keyframes use. Skips identical files; refuses to overwrite different ones unless overwrite is true. Blockbench desktop only.

Name Type Required Description
destination string required Absolute path to the resource pack root (the folder containing manifest.json). [minLength: 1]
effects string[] optional Effects to deliver. Defaults to every effect used by particle keyframes in the project.
overwrite boolean optional Replace files that exist with different content. Identical files are always skipped. (default: false)

Performance

get_average_fps

experimental read-only

Get Average FPS

Measures the average frames per second of Blockbench's render loop by counting rendered frames for duration_ms, then returns the average with the frame count, the fps_limit setting, Blockbench's own last-second counter, window focus at the start of the window plus whether it changed, whether the page was hidden, and whether rendering was paused. The call waits for the whole window; keep other tools idle meanwhile for a representative reading. A minimised or fully occluded Blockbench renders no frames and freezes its timers, so the call returns an empty window at once with document_hidden and rendering_paused set rather than waiting; bring the window to the foreground to measure a real frame rate.

Name Type Required Description
duration_ms integer optional Sampling window in milliseconds (250–10000). The call waits this long while counting rendered frames. (default: 2000) [min: 250, max: 10000]

Project

create_project

stable destructiveopen-world

Create Project

Creates a project with the given name and format, and returns a resource link to its live .bbmodel file.

Name Type Required Description
name string required
format string optional Project format ID from Blockbench's Formats registry (e.g. bedrock_block, java_block, free). Unknown IDs are rejected with the list of valid IDs. (default: "bedrock_block")

get_project_info

stable read-only

Get Project Info

Returns read-only project orientation: format id and display name, project name/UUID, texture resolution (texture_width/height), element counts, and a summary of top-level groups. Includes structured JSON and a resource link to the live .bbmodel project file. Prefer this over `risky_eval` for first-look inspection.

No parameters

Textures

create_texture

experimental destructiveopen-world

Create Texture

Creates a new texture with the given name and size.

Name Type Required Description
name string required
width number optional (default: 16) [min: 16, max: 4096]
height number optional (default: 16) [min: 16, max: 4096]
uv_width number optional Logical UV width for formats with per_texture_uv_size. Supply uv_height too. Independent of bitmap width; omit both to preserve native defaults.
uv_height number optional Logical UV height for formats with per_texture_uv_size. Supply uv_width too. Independent of bitmap height.
data string optional Image data URL, or an absolute path or file:// URL of an image file (desktop only, read with Blockbench's file permission).
group string optional
fill_color number[] | string optional RGBA color to fill the texture, as tuple or HEX string.
layer_name string optional Deprecated and ignored: textures are created without layers. Use texture_layer_management create_layer to add a named layer.
pbr_channel "color" | "normal" | "height" | "mer" optional PBR channel to use for the texture. Color, normal, height, or Metalness/Emissive/Roughness (MER) map.
render_mode "default" | "emissive" | "additive" | "layered" optional Render mode for the texture. Default, emissive, additive, or layered. (default: "default")
render_sides "auto" | "front" | "double" optional Render sides for the texture. Auto, front, or double. (default: "auto")

apply_texture

stable destructive

Apply Texture

Applies the given texture to the element with the specified ID.

Name Type Required Description
id string required ID or name of the element to apply the texture to.
texture string required ID or name of the texture to apply.
applyTo "all" | "blank" | "none" optional Faces that receive the texture: all (every face), blank (default; faces without a texture) or none (no face: the call only checks the element and texture and changes nothing). (default: "blank")

add_texture_group

experimental destructive

Add Texture Group

Adds a reversible texture group. All texture references must exist. Material groups require one texture per channel, either normal or height, and a color map alongside a MER map; use is_material=false for ordinary grouping.

Name Type Required Description
name string required
textures string[] optional Array of texture IDs or names to add to the group.
is_material boolean optional Whether the texture group is a PBR material or not. (default: true)

list_textures

stable read-only

List Textures

Returns a list of all textures in the Blockbench editor.

No parameters

get_texture

stable read-only

Get Texture

Returns the image data of the given texture or default texture.

Name Type Required Description
texture string optional Texture ID or name. If not provided, uses selected texture.

create_pbr_material

experimental destructive

Create PBR Material

Creates a new PBR material (texture group with is_material=true) and optionally assigns textures to PBR channels. Requires a PBR-capable format, distinct textures per channel, either normal or height, and a color texture alongside a MER texture. Uniform values require the corresponding map to be absent. Creation and texture moves are one undoable edit.

Name Type Required Description
name string required Name of the material.
color_texture string optional Texture ID/name for the color (albedo) channel.
normal_texture string optional Texture ID/name for the normal map channel.
height_texture string optional Texture ID/name for the height/displacement map channel.
mer_texture string optional Texture ID/name for the MER (Metalness/Emissive/Roughness) channel.
color_value unknown[] optional Uniform RGBA color [R,G,B,A] when no color texture is provided. [minItems: 4, maxItems: 4]
mer_value unknown[] optional Uniform MER values [Metalness, Emissive, Roughness] (0-255) when no MER texture is provided. [minItems: 3, maxItems: 3]
subsurface_value number optional Subsurface scattering value (0-255) for Bedrock 1.21.30+ materials. [min: 0, max: 255]

configure_material

experimental destructive

Configure Material

Configures a PBR material in one undoable edit. Replaced maps are detached without deleting their textures. Use 'none' to clear a channel before using uniform values or switching between normal and height; a MER map requires a color map.

Name Type Required Description
material string required Material name or UUID to configure.
color_texture string optional Texture ID/name for the color channel, or 'none' to use uniform color.
normal_texture string optional Texture ID/name for the normal map, or 'none' to remove.
height_texture string optional Texture ID/name for the height map, or 'none' to remove.
mer_texture string optional Texture ID/name for MER channel, or 'none' to use uniform values.
color_value unknown[] optional Uniform RGBA color [R,G,B,A] when no color texture. [minItems: 4, maxItems: 4]
mer_value unknown[] optional Uniform MER values [Metalness, Emissive, Roughness] (0-255). [minItems: 3, maxItems: 3]
subsurface_value number optional Subsurface scattering value (0-255). [min: 0, max: 255]

list_materials

stable read-only

List Materials

Lists all PBR materials (texture groups with is_material=true) and their assigned textures per channel.

No parameters

get_material_info

stable read-only

Get Material Info

Gets detailed information about a PBR material including the compiled texture_set.json preview for Bedrock export.

Name Type Required Description
material string required Material name or UUID.

import_texture_set

experimental destructiveopen-world

Import Texture Set

Imports a Minecraft Bedrock texture_set.json on desktop. Validates supported JSON and decodes referenced images before one undoable edit. Returns JSON with material name/UUID and path. Reuses already loaded image paths without deleting textures. Normal and height, or MER and MERS, cannot coexist; MER images require a color image.

Name Type Required Description
path string required Path to the .texture_set.json file to import.

assign_texture_channel

experimental destructive

Assign Texture Channel

Assigns a texture to one PBR channel in a single undoable edit. Detaches the previous map without deleting it or changing its channel. Normal and height cannot coexist; a MER map requires a color map, including in the source material after moving textures.

Name Type Required Description
material string required Material name or UUID.
texture string required Texture name or UUID to assign.
channel "color" | "normal" | "height" | "mer" required PBR channel to assign the texture to.

save_material_config

experimental destructiveopen-world

Save Material Config

Saves the material's texture_set.json file to disk (Bedrock format). Requires the color texture to have a valid file path.

Name Type Required Description
material string required Material name or UUID to save.

activate_texture

stable

Activate Texture

Activates the given texture in the Blockbench texture panel so that subsequent paint operations (draw_shape_tool, paint_with_brush, gradient_tool, etc.) target it. Most paint tools already call this internally when a texture_id is provided, but you can invoke it explicitly to pin the active texture across multiple calls.

Name Type Required Description
texture string required Texture ID, UUID, or name to activate in the texture panel.

delete_texture

experimental destructive

Delete Texture

Removes a texture from the project in one undoable edit, like deleting it from the Textures panel. Faces keep their UV mapping but lose the texture assignment, and a PBR material loses that channel, until the edit is undone. Use list_textures to find IDs.

Name Type Required Description
texture string required Texture ID, UUID, or name to remove.

UI Interaction

trigger_action

experimental destructiveopen-world

Trigger Action

Triggers an available Blockbench Action and respects its condition. The native action owns Undo; only a newly opened dialog may be auto-confirmed.

Name Type Required Description
action string required Action ID from Blockbench's BarItems registry.
confirmDialog boolean optional Whether to confirm a newly opened dialog from this action. Existing unrelated dialogs are never confirmed. (default: true)
confirmEvent string optional JSON object of MouseEvent options, with optional event type (default click).

risky_eval

stable destructiveopen-world

Eval

Evaluates JavaScript and returns its JSON result. Does not create an Undo entry. Mutating code must manage its own correctly scoped Undo transaction; read-only evaluation leaves history unchanged.

Name Type Required Description
code string required JavaScript code to evaluate. Do not pass `console` commands or comments.

emulate_clicks

experimental destructiveopen-world

Emulate Clicks

Emulates clicks on the given interface elements.

Name Type Required Description
position object required
drag object optional Drag options. If set, will perform a drag from position to 'to'.

fill_dialog

experimental destructiveopen-world

Fill Dialog

Fills the dialog with the given values.

Name Type Required Description
values string required Stringified form of values to fill the dialog with.
confirm boolean optional Whether to confirm or cancel the dialog after filling it. True to confirm, false to cancel. (default: true)

list_modes

stable read-only

List Modes

Lists Blockbench editor tabs/modes with IDs, names, native availability, and the current mode. Includes plugin-added modes. Use before set_mode to discover whether Edit, Paint, Animate, or Display is available for the current project. Camera angles are controlled separately by set_camera_angle.

No parameters

set_mode

stable

Set Mode

Switches Blockbench's editor tab through its native mode trigger, respecting the mode's condition. Use mode_id='animate' to enter Animate before animation work, 'paint' before native painting tools, or 'edit' to return. Returns the resulting mode and available modes; refresh tools/list for changed tool availability. Selecting the current mode does nothing. Does not change the project's format. When the user enabled the AI Scratchpad setting, mode_id='ai_scratchpad' relaxes the format's cube size, rotation and integer-size guardrails until another mode is selected.

Name Type Required Description
mode_id string required Mode ID returned by list_modes, such as 'edit', 'paint', 'animate', or 'display'. The Animate tab uses 'animate'. The current project must satisfy the mode's native condition. [minLength: 1]

UV Mapping

set_mesh_uv

experimental destructive

Set Mesh UV

Sets UV coordinates for mesh faces or vertices.

Name Type Required Description
mesh_id string required ID or name of the mesh.
face_key string required Face key to set UV for.
uv_mapping Record<string, number[]> required UV coordinates for each vertex of the face, in logical UV units (not necessarily bitmap pixels).

auto_uv_mesh

experimental destructive

Auto UV Mesh

Maps only the specified/selected faces of the target mesh. project uses the active camera, unwrap projects each face to its own plane, and cylinder/sphere map around the local origin using each face's logical texture UV size (project UV size for untextured faces). Coordinates are logical UV units, not necessarily bitmap pixels. This does not pack UV islands.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
mode "project" | "unwrap" | "cylinder" | "sphere" optional project uses the active preview; unwrap is per-face planar projection; cylinder and sphere use the local origin and each face's logical texture UV dimensions. (default: "project")
faces string[] optional Specific face keys to UV map. If not provided, maps all selected faces.

rotate_mesh_uv

experimental destructive

Rotate Mesh UV

Rotates only the target mesh's specified/selected faces around their combined UV bounding-box center, without clamping or changing selection.

Name Type Required Description
mesh_id string optional ID or name of the mesh. If not provided, uses selected mesh.
angle "-90" | "90" | "180" optional Rotation angle in degrees. (default: "90")
faces string[] optional Specific face keys to rotate UV for. If not provided, rotates all selected faces.

get_cube_uv

stable read-only

Get Cube UV

Inspect a cube's UV mode, offset, mirroring, six face rectangles/rotations, stored and effective texture references, logical UV sizes and bitmap sizes. Read-only; no selection or preview changes.

Name Type Required Description
id string required Cube UUID or unique name. UUID takes precedence over names. [minLength: 1]

set_cube_uv

experimental destructive

Set Cube UV

Edit box UV offsets/mirroring or per-face rectangles, rotation and texture references in one reversible edit. Preserves untargeted faces and selection. Validates UV mode, texture references and rotation support. Hytale rectangles must retain geometry-linked extents and Auto UV; texture assignments use the project/attachment collection, and quads cannot use box UV. Does not pack islands or repaint textures.

Name Type Required Description
id string required Cube UUID or unique name. Does not use or change selection. [minLength: 1]
box_uv boolean optional Explicitly convert UV mode using the native cube operation. Requires optional_box_uv to change mode. Conversion can reset rotations and enable disabled faces.
uv_offset number[] optional Box UV net offset [u, v]; requires box UV mode. [minItems: 2, maxItems: 2]
mirror_uv boolean optional Mirror the box UV net; requires box UV mode. For per-face mirroring, reverse rectangle endpoints.
faces object optional Patch only these faces in per-face UV mode. Other faces are preserved. Explicit rectangles disable automatic UV remapping except in Hytale, where dimension-linked UVs retain native Auto UV. Hytale textures resolve through the project/attachment collection, so only null is accepted as an explicit face texture.

GeckoLib Integration

geckolib_get_format_info

experimental read-only

Get GeckoLib Format Info

Returns the active GeckoLib project's model type, mod ID, object ID, bone and animation counts, cached export paths, and the installed plugin version. Requires the GeckoLib plugin and a GeckoLib Animated Model project.

No parameters

geckolib_set_project_settings

experimental

Set GeckoLib Project Settings

Sets the GeckoLib mod ID, model type and object ID on the active project. Values are validated against the plugin's namespace rules before anything is written. Does not generate the armor template rig.

Name Type Required Description
modid string optional Mod namespace exports are written for, e.g. my_mod.
model_type "Entity" | "Block" | "Item" | "Armor" | "Object" optional GeckoLib model type. Armor only records the type; it does not generate the plugin's armor template rig, which requires creating a new Armor project in Blockbench.
model_identifier string optional Registered object ID the geometry exports as (geometry.<identifier>); may include a folder path.

geckolib_list_easings

experimental read-only

List GeckoLib Easings

Lists every easing name GeckoLib accepts on keyframes, which of them read easingArgs, and each argument's default and meaning. Needs no project, so it can be called while planning an animation.

No parameters

geckolib_get_keyframe_easing

experimental read-only

Get GeckoLib Keyframe Easing

Reads the GeckoLib easing, easing arguments and interpolation of keyframes on one bone channel, or of the current timeline selection. An easing governs the segment arriving at its keyframe, so the first keyframe of a channel is reported as inert.

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
bone_name string optional Bone whose keyframes to target. Omit to act on the current timeline keyframe selection.
channel "rotation" | "position" | "scale" optional Transform channel to target. Required with bone_name, and meaningless without it.
times number[] optional Keyframe times in seconds. Requires bone_name; omit to target every keyframe of that channel. [minItems: 1]

geckolib_set_keyframe_easing

experimental

Set GeckoLib Keyframe Easing

Writes a GeckoLib easing (and its arguments) onto keyframes on one bone channel, or onto the current timeline selection, as one undoable edit. GeckoLib easings apply only to linear keyframes and shape the segment arriving at the keyframe they are set on, so the first keyframe of each channel is skipped and reported. Nothing in Blockbench's native keyframe API can author these.

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
bone_name string optional Bone whose keyframes to target. Omit to act on the current timeline keyframe selection.
channel "rotation" | "position" | "scale" optional Transform channel to target. Required with bone_name, and meaningless without it.
times number[] optional Keyframe times in seconds. Requires bone_name; omit to target every keyframe of that channel. [minItems: 1]
easing "linear" | "step" | "easeInQuad" | "easeOutQuad" | "easeInOutQuad" | "easeInCubic" | "easeOutCubic" | "easeInOutCubic" | "easeInQuart" | "easeOutQuart" | "easeInOutQuart" | "easeInQuint" | "easeOutQuint" | "easeInOutQuint" | "easeInSine" | "easeOutSine" | "easeInOutSine" | "easeInExpo" | "easeOutExpo" | "easeInOutExpo" | "easeInCirc" | "easeOutCirc" | "easeInOutCirc" | "easeInBack" | "easeOutBack" | "easeInOutBack" | "easeInElastic" | "easeOutElastic" | "easeInOutElastic" | "easeInBounce" | "easeOutBounce" | "easeInOutBounce" | "none" required GeckoLib easing name, or "none" to remove the easing and fall back to linear.
easing_args number[] optional Arguments for the Back, Elastic, Bounce and step easings. Omit to use GeckoLib's default (1 overshoot, 0.5 bounciness, 5 steps). Ignored by every other easing. [minItems: 1]
convert_interpolation boolean optional Set targeted keyframes to linear interpolation as part of the same edit. GeckoLib wipes easings from catmullrom, step and bezier keyframes on the next render frame, so without this the call is rejected instead of writing an easing that would not survive. (default: false)

geckolib_reverse_keyframe_easing

experimental

Reverse GeckoLib Keyframe Easing

Reverses and shifts easings the way the GeckoLib plugin's handler for Blockbench's Reverse Keyframes action does: each easeIn becomes easeOut and back, every easing moves to the next later keyframe, and the first keyframe of each channel loses its easing. Use it only after keyframe times were reversed by something that left the easings in place, such as times rewritten with manage_keyframes. Do not use it after the native Reverse Keyframes action or batch_keyframe_operations reverse: with the GeckoLib plugin loaded, both already adjust the easings, so this tool would shift them a second time. It is not its own inverse; use undo to revert it.

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
bone_name string optional Bone whose keyframes to target. Omit to act on the current timeline keyframe selection.
channel "rotation" | "position" | "scale" optional Transform channel to target. Required with bone_name, and meaningless without it.
times number[] optional Keyframe times in seconds. Requires bone_name; omit to target every keyframe of that channel. [minItems: 1]

geckolib_validate_model

experimental read-only

Validate GeckoLib Model

Checks the GeckoLib project against rules derived from the plugin and the GeckoLib runtime: bone-name charset and duplicates, mod ID and object ID validity, armor template bones, texture size against the UV base, and (optionally) compiled animation loop values, easing names, easing arguments and lengths. Each finding carries a stable check ID. Passing does not prove in-game correctness.

Name Type Required Description
include_animations boolean optional Also compile the project's animations and validate their loop values, easings and lengths. (default: true)

geckolib_export_model

experimental destructiveopen-world

Export GeckoLib Model

Compiles the GeckoLib geometry the plugin's model export produces, returning it as JSON and optionally writing it to a path. The text is formatted like Blockbench's own export (its JSON indentation, minify and final-newline settings). Set mode='dialog' to trigger the plugin's own export action and its save dialog instead.

Name Type Required Description
mode "compile" | "dialog" optional compile returns the file content without touching the UI. dialog triggers the GeckoLib plugin's own export action, which opens a native save dialog for the user to complete and updates the project's cached export path. (default: "compile")
path string optional Absolute filesystem path to write the compiled content to. Requires Blockbench filesystem permission. Only used in compile mode. Fails if the file exists unless overwrite is true.
overwrite boolean optional Replace an existing file at path. Defaults to false so a re-export never silently replaces a reference file. (default: false)
max_content_length integer optional Maximum characters of content to return. Use 0 to omit the content and only report its size. (default: 100000) [min: 0, max: 2000000]

geckolib_export_animations

experimental destructiveopen-world

Export GeckoLib Animations

Compiles the project's animations into GeckoLib animation-file JSON, including the easing and easingArgs the plugin writes, and optionally writes it to a path. The text is formatted like Blockbench's own export (its JSON indentation, minify and final-newline settings). Reports which host API compiled it, since only the plugin-patched route stamps geckolib_format_version. Set mode='dialog' to trigger the plugin's own animation export action instead.

Name Type Required Description
mode "compile" | "dialog" optional compile returns the file content without touching the UI. dialog triggers the GeckoLib plugin's own export action, which opens a native save dialog for the user to complete and updates the project's cached export path. (default: "compile")
path string optional Absolute filesystem path to write the compiled content to. Requires Blockbench filesystem permission. Only used in compile mode. Fails if the file exists unless overwrite is true.
overwrite boolean optional Replace an existing file at path. Defaults to false so a re-export never silently replaces a reference file. (default: false)
max_content_length integer optional Maximum characters of content to return. Use 0 to omit the content and only report its size. (default: 100000) [min: 0, max: 2000000]
animation_ids string[] optional Animation UUIDs or names to include. Omit to export every animation in the project. [minItems: 1]

geckolib_export_display

experimental destructiveopen-world

Export GeckoLib Display Settings

Builds the Java item/block display-settings JSON for GeckoLib Item and Block models: parent model, texture size, GUI light, per-perspective display transforms and the namespaced particle texture. The text is two-space JSON, as the plugin's own display export writes it. The parent defaults to the plugin's builtin/entity, which Minecraft Java 1.21.4 and later no longer have; the result then warns, and parent picks another. Reports when the active model type would not normally ship one. Set mode='dialog' to trigger the plugin's own display export action instead.

Name Type Required Description
mode "compile" | "dialog" optional compile returns the file content without touching the UI. dialog triggers the GeckoLib plugin's own export action, which opens a native save dialog for the user to complete and updates the project's cached export path. (default: "compile")
path string optional Absolute filesystem path to write the compiled content to. Requires Blockbench filesystem permission. Only used in compile mode. Fails if the file exists unless overwrite is true.
overwrite boolean optional Replace an existing file at path. Defaults to false so a re-export never silently replaces a reference file. (default: false)
max_content_length integer optional Maximum characters of content to return. Use 0 to omit the content and only report its size. (default: 100000) [min: 0, max: 2000000]
parent string optional Parent model to write, compile mode only. Omit to keep the project's parent, which the GeckoLib plugin sets to builtin/entity for Item models and uses as its default, so files match the plugin's own export. Minecraft Java 1.21.4 and later have no builtin/entity model (the result then carries a warning): when targeting them, pass another parent such as minecraft:item/handheld, or an empty string to write none.

Hytale Integration

hytale_get_format_info

experimental read-only

Get Hytale Format Info

Returns information about the current Hytale format. Requires the Hytale plugin and a Hytale format project to be active.

No parameters

hytale_validate_model

experimental read-only

Validate Hytale Model

Checks exported main-model node count using the installed Hytale codec and verifies bitmap dimensions are multiples of 32. Does not validate attachment exports, shading, all UVs, animation integration or target-engine rendering.

No parameters

hytale_set_cube_properties

experimental

Set Hytale Cube Properties

Sets Hytale-specific properties on a cube: shading_mode (flat, standard, fullbright, reflective) and double_sided.

Name Type Required Description
cube_id string optional ID or name of the cube. If not provided, uses selected cube.
shading_mode "flat" | "standard" | "fullbright" | "reflective" optional Shading mode: flat (no lighting), standard (normal), fullbright (emissive), reflective
double_sided boolean optional Whether to render both sides of faces

hytale_get_cube_properties

experimental read-only

Get Hytale Cube Properties

Gets Hytale-specific properties from a cube (shading_mode, double_sided).

Name Type Required Description
cube_id string optional ID or name of the cube. If not provided, uses selected cube.

hytale_create_quad

experimental

Create Hytale Quad

Creates a Hytale quad with exactly one enabled face matching the signed normal direction, per-face UV and Auto UV 1. Positive width/height and parent references are validated before one reversible edit.

Name Type Required Description
name string required Name for the quad
position number[] optional Finite position [x, y, z] of the quad's starting corner. (default: [0,0,0]) [minItems: 3, maxItems: 3]
normal "+X" | "-X" | "+Y" | "-Y" | "+Z" | "-Z" optional Normal direction: +X, -X, +Y, -Y, +Z, -Z (default: "+Y")
size number[] optional Positive finite [width, height]. Width/height axes are Z/Y for X normals, X/Z for Y normals, and X/Y for Z normals. (default: [16,16]) [minItems: 2, maxItems: 2]
group string optional Parent group UUID or unique name, or root (default). Missing or ambiguous names are rejected.
double_sided boolean optional Whether to render both sides (default: true)

hytale_list_attachments

experimental read-only

List Hytale Attachments

Lists all attachment collections in the current Hytale project.

No parameters

hytale_set_attachment_piece

experimental

Set Attachment Piece

Marks or unmarks a group as an attachment piece. Attachment pieces attach to like-named bones in the main model.

Name Type Required Description
group_name string required Name of the group to mark as attachment piece
is_piece boolean required Whether the group is an attachment piece

hytale_list_attachment_pieces

experimental read-only

List Attachment Pieces

Lists all groups marked as attachment pieces.

No parameters

hytale_create_visibility_keyframe

experimental

Create Visibility Keyframe

Creates a visibility keyframe for a bone. Hytale supports toggling node visibility at keyframes.

Name Type Required Description
bone_name string required Name of the bone/group.
time number required Finite time in seconds between 0 and 10000 for the visibility keyframe. [min: 0, max: 10000]
visible boolean required Whether the bone is visible at this keyframe
animation_id string optional Animation UUID or name. If not provided, uses current animation.

hytale_set_animation_loop

experimental

Set Animation Loop Mode

Sets the loop mode for a Hytale animation. Hytale supports "loop" (continuous) or "hold" (freeze on last frame).

Name Type Required Description
animation_id string optional Animation UUID or name. If not provided, uses current animation.
loop_mode "loop" | "hold" | "once" required Loop mode: loop (continuous), hold (freeze on last frame), once (play once)

hytale_set_cube_stretch

experimental

Set Cube Stretch

Sets the stretch values for a cube. Hytale uses stretch instead of float sizes for better UV handling.

Name Type Required Description
cube_id string optional ID or name of the cube. If not provided, uses selected cube.
stretch number[] required Stretch values [x, y, z]. [minItems: 3, maxItems: 3]

hytale_get_cube_stretch

experimental read-only

Get Cube Stretch

Gets the stretch values for a cube.

Name Type Required Description
cube_id string optional ID or name of the cube. If not provided, uses selected cube.

Prompts

blockbench_native_apis

stable

Essential information about Blockbench v5.0 native API security model and requireNativeModule() usage. Use this when working with Node.js modules, file system access, or native APIs in Blockbench plugins.

No arguments

blockbench_code_eval_safety

stable

Critical safety guide for agents using code evaluation/execution tools with Blockbench v5.0+. Contains breaking changes, quick reference, common mistakes, and safe code patterns for native module usage.

No arguments

model_creation_strategy

stable

Model Creation Strategy

A strategy for creating a new 3D model in Blockbench.

Name Type Required Description
format "java_block" | "bedrock" optional Target model format.
approach "ui" | "programmatic" | "import" optional Creation approach to use.

hytale_model_creation

experimental

Hytale Model Creation Guide

Comprehensive guide for creating Hytale character and prop models. Covers format selection, node limits, shading modes, stretch, quads, and best practices.

Name Type Required Description
format_type "character" | "prop" | "both" optional Which format type to focus on. (default: "both")

hytale_animation_workflow

experimental

Hytale Animation Workflow

Guide for creating animations for Hytale models. Covers 60 FPS timing, quaternion rotations, visibility keyframes, loop modes, and common animation patterns.

Name Type Required Description
animation_type "walk" | "idle" | "attack" | "general" optional Type of animation to focus on. (default: "general")

hytale_attachments

experimental

Hytale Attachments System

Guide for creating and managing attachments in Hytale models. Covers attachment collections, piece bones, modular equipment, and best practices.

No arguments

Resources

project-files

Blockbench Project Files

blockbench://project/{id}.bbmodel

Returns the active project's live .bbmodel file with unsaved edits and embedded textures. UUID-based URIs remain stable across renames. Select a project before reading its file; reading never switches tabs or saves to disk.

projects

Blockbench Projects

projects://{id}

Returns information about available projects. List URIs use the slugified project name (e.g. `projects://my-character`) when unique, or `projects://<slug>~<uuid-prefix>` on collision. Reads accept UUID, exact name, or slug.

nodes

Blockbench Nodes

nodes://{id}

Returns the current 3D nodes in the editor. List URIs use slugified names (e.g. `nodes://head`) when unique, with `~<uuid-prefix>` on collision. Reads accept UUID, exact name, or slug, and return the node as Blockbench saves it in a .bbmodel (its `getSaveCopy()`), plus uuid, name, type, parent (`root` or a UUID) and child UUIDs: a cube's `from`, `to` and `origin` in Blockbench units, `rotation` in degrees, faces and UVs; a mesh's vertices and faces; a group's origin and rotation. Fields Blockbench leaves out at their default are missing, such as a cube's zero rotation.

textures

Blockbench Textures

textures://{id}

Returns information about textures. List URIs use slugified names (e.g. `textures://skin`) when unique, with `~<uuid-prefix>` on collision. Reads accept UUID, exact name, slug, or short numeric texture id.

reference_models

Reference Models

reference-models://{id}

Returns reference models in the current project. Requires the Reference Models plugin. List URIs use slugified names (e.g. `reference-models://turntable`) with `~<uuid-prefix>` on collision. Reads accept UUID, exact name, or slug.

validator-status

Validator Status

validator://status

Returns the current validation status including error/warning counts and a summary of all problems.

validator-checks

Validator Checks

validator://checks/{id}

Returns information about registered validator checks. Use without an ID to list all checks, or provide a check ID to get details about a specific check.

validator-warnings

Validator Warnings

validator://warnings

Returns all current validation warnings with element references where available.

validator-errors

Validator Errors

validator://errors

Returns all current validation errors with element references where available.

hytale-format

Hytale Format Information

hytale://format

Returns comprehensive information about the current Hytale format, including format type, block size, node limits, and feature support.

hytale-attachments

Hytale Attachments

hytale://attachments/{id}

Returns information about attachment collections. List URIs use slugified collection names (e.g. `hytale://attachments/helmet`) with `~<uuid-prefix>` on collision. Reads accept UUID, exact name, or slug.

hytale-pieces

Hytale Attachment Pieces

hytale://pieces/{id}

Returns groups marked as attachment pieces — they connect to like-named bones in the main model. List URIs use slugified bone names (e.g. `hytale://pieces/hand-right`) with `~<uuid-prefix>` on collision.

hytale-cubes

Hytale Cubes

hytale://cubes/{id}

Returns cubes with Hytale-specific properties (shading_mode, double_sided, stretch). List URIs use slugified cube names (e.g. `hytale://cubes/torso`) with `~<uuid-prefix>` on collision.