blenderwrightBLOCK
MCP server for Blender. 191 tools for modelling, materials, rendering and more, driven by Claude, Cursor, Codex, Ollama, llama.cpp, or any MCP client.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Formerly blend-ai. Same project, new name, nothing else changed.
The most intuitive and efficient MCP Server for Blender. Control Blender entirely through AI assistants like Claude: create 3D models, set up scenes, animate, render, and more, all through natural language.
blenderwright goes beyond tool exposure: it guides the LLM to produce professional 3D results through expert prompts, proven workflows, visual feedback, and mesh quality analysis.
A shuttle launch from two questions: "do you want to have a go at the space shuttle launch?" and then "could you animate the launch?" Claude Code (Fable 5.1) modelled the orbiter, tank, boosters and service tower, lit the plumes as emissive volumes and grew the exhaust cloud from metaballs. Keyframes lift the stack and tilt the camera after it, drivers stream the plumes and boil the smoke, and all 60 Cycles frames come back from a single render_animation call, all through blenderwright with no manual modelling:
Watch it with sound. Launch audio courtesy of NASA: STS-131, "Sound of Launch."
The still it grew from, modelled and rendered in under twenty minutes:
A two-storey Western saloon from a single sentence: "create a Western style 2-story saloon, the outside is more important than any inside detail." Claude Code (Fable 5.1) built the false front, plank siding, balcony, batwing doors and street dressing, then relit it for dusk, all through blenderwright, in about twenty minutes with no manual modelling:

77 read · 94 write · 15 destructive. Blast radius: 15 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
add_annotation_layer | write | Add a layer to an annotation. |
add_annotation_stroke | write | Add a stroke to an annotation layer. |
add_cloth_sim | write | Add a cloth physics simulation to an object. |
add_color_ramp_element | write | Add a colour stop to a ColorRamp (ShaderNodeValToRGB) node. |
add_constraint | write | Add a constraint to an object or bone. |
add_fluid_sim | write | Add a fluid physics simulation to an object. |
add_geometry_node | write | Add a node to a geometry nodes modifier |
add_image_sequence_strip | write | Add rendered frames to the sequencer as one image strip. |
add_modifier | write | Add a modifier to a mesh object (non-destructive workflow). |
add_multires_modifier | write | Add a Multiresolution modifier for sculpting detail. |
add_particle_system | write | Add a particle system to an object. |
add_rigid_body | write | Add a rigid body physics simulation to an object. |
add_shader_node | write | Add a shader node to a material |
add_sound_strip | write | Add an audio file to the sequencer as a sound strip. |
add_texture_node | write | Add an image texture node to a material and connect it to the Principled BSDF Base Color. |
analyze_mesh_quality | read | Analyze mesh topology quality and return a structured defect report. |
analyze_sweep_path | read | Check whether a path can carry a profile of a given radius, without building it. |
apply_modifier | write | Apply a modifier to an object, making its effect permanent. |
apply_transforms | write | Apply (freeze) transforms on an object, making current transforms the new basis. |
assign_material | read | Assign a material to an object. |
bake_physics | read | Bake a physics simulation for an object. |
bevel_edges | read | Bevel all edges of a mesh. |
boolean_operation | read | Perform a boolean operation between two objects using a modifier. |
booltool_auto_difference | read | Auto boolean difference: subtract the target object from the main object. |
booltool_auto_intersect | read | Auto boolean intersect: keep only the overlapping volume of two objects. |
booltool_auto_slice | read | Auto boolean slice: split the main object using the target as a cutter. |
booltool_auto_union | write | Auto boolean union: merge two mesh objects into one, destructively. |
bridge_edge_loops | write | Bridge two edge loops to create connecting geometry. |
capture_viewport | read | Render the viewport to a file or return as base64. |
check_3d_printability | read | Check whether a mesh will 3D print, using Blender |
clear_animation | destructive | Remove all animation data from an object. |
connect_geometry_nodes | read | Connect two nodes in a geometry nodes modifier |
connect_shader_nodes | read | Connect two shader nodes in a material |
convert_curve_to_mesh | read | Convert a curve object to a mesh object. |
convert_object | read | Convert an object to a different type. |
create_animation_path | write | Make an object follow a path (curve) using a Follow Path constraint. |
create_annotation | write | Create a new annotation data block. |
create_armature | write | Create a new armature object. |
create_camera | write | Create a new camera in the scene. |
create_collection | write | Create a new collection, optionally nested under a parent collection. |
create_curve | write | Create a new curve object. |
create_geometry_nodes | write | Create a Geometry Nodes modifier on an object. |
create_light | write | Create a new light in the scene. |
create_light_rig | write | Create a pre-built lighting rig (multiple lights arranged for common setups). |
create_material | write | Create an empty material: a bare Principled BSDF at default values. |
create_principled_material | write | Create a plain-surface material with colour, metallic, roughness and more set in one call. |
create_procedural_material | write | Create a patterned material (wood, marble, fire, veins) as a full node graph in one call. |
create_raster_texture | write | Generate an image texture for patterns shader nodes cannot express. |
create_scene | write | Create a new scene. |
create_threaded_shaft | write | Create a cylindrical shaft with helical external threads. |
decimate_mesh | read | Reduce a mesh |
delete_collection | destructive | Delete a collection. |
delete_keyframe | destructive | Remove a keyframe from an object property at a specific frame. |
delete_light | destructive | Delete a light object from the scene. |
delete_material | destructive | Delete a material by name. |
delete_object | destructive | Delete an object from the scene by name. |
delete_particle_system | destructive | Remove a particle system from an object. |
delete_scene | destructive | Delete a scene by name. |
disconnect_shader_nodes | read | Disconnect all links from a specific socket on a shader node. |
dissolve_edges | read | Dissolve all edges, merging adjacent faces. |
dissolve_faces | read | Dissolve all faces, merging them into surrounding geometry. |
dissolve_verts | read | Dissolve all vertices, merging connected edges and faces. |
duplicate_material | read | Duplicate a material with a new name. |
duplicate_object | read | Duplicate an object. |
enable_dyntopo | write | Enable dynamic topology (dyntopo) for adaptive sculpting resolution. |
enter_sculpt_mode | read | Enter sculpt mode for a mesh object. |
execute_blender_code | write | Execute Python code inside Blender |
exit_sculpt_mode | read | Exit sculpt mode and return to object mode. |
export_file | read | Export scene or selected objects to a 3D file. |
extrude_faces | read | Extrude all faces of a mesh along their normals. |
fill_faces | read | Fill selected edges with a face. |
flip_normals | read | Flip the direction of all face normals on a mesh. |
focus_on_object | read | Frame/focus the viewport on a specific object. |
get_color_ramp | write | Read every stop on a ColorRamp node. |
get_node_tree | read | Get the full node tree of a material (all nodes and links). |
get_object_info | read | Get detailed information about an object. |
get_scene_info | read | Get full scene information including object tree, hierarchy, counts, frame range, fps, and render engine. |
get_selection | read | Report what is currently selected on a mesh. |
get_viewport_screenshot | read | Capture a screenshot of the current Blender 3D viewport. |
grid_fill | read | Fill a closed edge loop with a grid of quads. |
import_file | write | Import a 3D file into Blender. |
insert_keyframe | write | Insert a keyframe on an object property at a specific frame. |
inset_faces | read | Inset all faces of a mesh, creating a border/frame around each face. |
join_objects | read | Join multiple mesh objects into one (keeps all geometry as-is). |
knife_project | read | Project a cutter object |
list_geometry_node_inputs | read | List all available inputs on a geometry nodes modifier. |
list_keyframes | read | List all keyframes on an object. |
list_lights | read | List all light objects in the scene. |
list_materials | read | List all materials in the current Blender file. |
list_objects | read | List all objects in the scene, optionally filtered by type. |
list_procedural_patterns | read | List every procedural pattern with a description of what it looks like. |
list_recent_files | read | List recently opened files from Blender preferences. |
list_scenes | read | List all scenes in the current Blender file. |
list_strips | read | List every strip in the sequencer. |
loop_cut | write | Add loop cuts to a mesh object. |
make_single_user | read | Make an object |
make_thing | read | Make a thing. |
mark_seam | destructive | Mark or clear UV seams on all edges of a mesh. |
mark_sharp | destructive | Mark or clear sharp edges on a mesh. |
merge_vertices | write | Merge vertices by distance. |
move_to_collection | write | Move objects to a collection, unlinking them from their current collections. |
open_file | read | Open a .blend file. |
pack_uv_islands | read | Pack UV islands to fit efficiently within the UV space. |
parent_mesh_to_armature | read | Parent a mesh object to an armature with automatic weights or other methods. |
parent_objects | write | Set parent-child relationship between two objects. |
point_camera_at | read | Point a camera at an object or a specific location using a Track To constraint. |
quads_to_tris | read | Convert all quad faces to triangles. |
recalculate_normals | read | Recalculate face normals to be consistent (all pointing outward or inward). |
remesh | write | Remesh an object to create a clean topology. |
remove_annotation_layer | destructive | Remove a layer from an annotation. |
remove_color_ramp_element | destructive | Remove a colour stop from a ColorRamp node. |
remove_modifier | destructive | Remove a modifier from an object. |
remove_shader_node | destructive | Remove a shader node from a material |
remove_strip | destructive | Remove a strip from the sequencer by name. |
rename_object | write | Rename an object. |
render_animation | read | Render the animation sequence to image files. |
render_image | read | Render the current scene to an image file. |
render_video | read | Render the scene |
repair_mesh | read | Repair the defects analyze_mesh_quality reports. |
save_file | write | Save the current Blender file. |
select_all_geometry | read | Select, deselect or invert all vertices, edges and faces on one mesh. |
select_by_axis | read | Select the vertices, edges and faces on one side of a mesh along an axis. |
select_by_index | read | Select specific vertices, edges or faces of one mesh by index. |
select_faces_by_sides | read | Select faces of one mesh by how many sides they have. |
select_linked | read | Grow the current mesh selection to everything connected to it. |
select_objects | read | Select whole objects in the scene by name. |
select_similar | read | Grow the current mesh selection to vertices, edges or faces that resemble it. |
separate_mesh | read | Separate a mesh into parts. |
set_active_camera | write | Set the active scene camera. |
set_annotation_stroke_property | write | Set a property on an annotation stroke. |
set_bone_property | write | Set a property on a bone in an armature. |
set_brush_property | write | Set a property on the active sculpt brush. |
set_camera_from_view | write | Match the active camera to the current 3D viewport view. |
set_camera_property | write | Set a property on a camera. |
set_collection_visibility | write | Set collection visibility in viewport and/or render. |
set_color_ramp_element | write | Move or recolor an existing ColorRamp stop. |
set_color_ramp_interpolation | write | Set how a ColorRamp blends between its stops. |
set_curve_property | write | Set a property on a curve object. |
set_edge_crease | write | Set edge crease value on all edges for subdivision surface control. |
set_eevee_light_path | write | Set EEVEE light intensity controls (Blender 5.1+). |
set_frame | write | Set the current frame in the timeline. |
set_frame_range | write | Set the start and end frames of the scene timeline. |
set_geometry_node_input | write | Set an input value on a geometry nodes modifier. |
set_handle_type | write | Set the handle type for all control points of a curve. |
set_interpolation | write | Set the interpolation type for keyframes on a property. |
set_light_property | write | Set a property on a light object. |
set_location | write | Set the position of an object. |
set_material_blend_mode | write | Set the blend mode of a material (EEVEE). |
set_material_color | write | Set the base color of a material |
set_material_property | write | Set a property on a material |
set_modifier_property | write | Set a property on a modifier (e.g., levels, count, offset, angle). |
set_object_visibility | write | Set object visibility in viewport and/or render. |
set_origin | write | Set the origin point of an object. |
set_output_format | write | Set the render output format and optionally the output file path. |
set_particle_rendering | write | Set rendering mode for an object |
set_particle_velocity | write | Set velocity settings for an object |
set_physics_property | write | Set a property on an existing physics simulation. |
set_pose | write | Set the pose of a bone in an armature. |
set_render_engine | write | Set the render engine. |
set_render_resolution | write | Set the render resolution. |
set_render_samples | write | Set the number of render samples. |
set_rotation | write | Set the rotation of an object. |
set_scale | write | Set the scale of an object. |
set_scene_property | write | Set a scene property such as frame_start, frame_end, frame_current, fps, unit_system, or render_engine. |
set_sculpt_brush | write | Set the active sculpt brush. |
set_sculpt_symmetry | write | Set sculpt symmetry axes. |
set_shader_node_input | write | Set the default value of an unconnected input socket on a shader node. |
set_shader_node_property | write | Set a node-level property (not a socket) on a shader node. |
set_shadow_settings | write | Configure shadow settings for a light. |
set_smooth_shading | write | Set smooth or flat shading on an object. |
set_uv_projection | write | Apply a projection-based UV mapping to a mesh object. |
set_viewport_overlay | write | Toggle a viewport overlay setting. |
set_viewport_shading | write | Set the viewport shading mode. |
set_world_background | write | Set the world background to a solid color or HDRI environment map. |
shade_auto_smooth | write | Apply angle-based auto-smooth shading to an object. |
smart_uv_project | write | Apply Smart UV Project to a mesh object. |
smooth_curve | read | Smooth the control points of a curve. |
snap_to_grid | read | Snap an object |
subdivide_curve | read | Subdivide a curve by adding control points between existing ones. |
subdivide_mesh | read | Subdivide a mesh. |
suggest_extensions | read | Suggest helpful Blender extensions for a planned task. |
sweep_profile_along_path | read | Sweep a closed profile along a 3D path to make a solid tube, pipe, cable or rope. |
switch_curve_direction | read | Switch the direction of a curve |
toggle_cyclic | read | Toggle the cyclic (closed loop) state of a curve. |
tris_to_quads | read | Convert adjacent triangle pairs to quad faces where possible. |
uv_unwrap | read | Unwrap a mesh object |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (7 observation(s))
- Network
- none-observed
- Shell
- declared (2 observation(s))
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (16)
exec(code, {"__builtins__": SAFE_BUILTINS})blend-ai-v1.0.0.zip
modules[module_name] = _enum_pairs(importlib.import_module(module_name))
clear_animation, delete_collection, delete_keyframe, delete_light, delete_material, delete_object, delete_particle_system, delete_scene, mark_seam, mark_sharp, remove_annotation_layer, remove_color_ra
.nojekyll
mod = importlib.import_module(f"blenderwright.tools.{module}")src = inspect.getsource(importlib.import_module(module))
mod = importlib.import_module(module)
module = importlib.import_module(tool.fn.__module__)
check_3d_printability("../../etc/passwd")decoded = base64.b64decode(result["base64"])
docs/shuttle-launch.mp4
saloon.png
screenshot.png
shader-preview.png
shuttle-launch.gif
Gates applied: no_behavioural_pass.
75b3cf5738d5full audit observations/trust-audit/mcp-server/holdmybeer-gg__blenderwright.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-07 | 75b3cf5738d5 | BLOCK | D | 69 | first audit |
Questions
What is the blenderwright MCP server?
MCP server for Blender. 191 tools for modelling, materials, rendering and more, driven by Claude, Cursor, Codex, Ollama, llama.cpp, or any MCP client.
What tools does blenderwright expose?
186 in total: 77 read-only, 94 that write, and 15 that can delete or overwrite (clear_animation, delete_collection, delete_keyframe, delete_light, delete_material). Every one is listed on this page with its risk.
Is blenderwright safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 15 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does blenderwright need?
No credential environment variables were found in its source, so it appears to need none.
How does blenderwright run?
It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as blenderwright.
How current is this page?
The grade is for one exact copy of the source (75b3cf5738d5), read on 2026-10-07. The repository is watched and re-audited when it changes.