Atlas / MCP servers / holdmybeer-gg / blenderwright

blenderwrightBLOCK

mcp/holdmybeer-gg/blenderwright

MCP server for Blender. 191 tools for modelling, materials, rendering and more, driven by Claude, Cursor, Codex, Ollama, llama.cpp, or any MCP client.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
186 77r · 94w · 15d
Transport
stdio
License
MIT
Stars
157
01

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:

![blenderwright saloon built from one prompt](https://raw.githubusercontent.com/

Read from source at commit 75b3cf5738d5OBSERVED · 2026-10-07
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add blenderwright -- uvx blenderwright
claude-desktop
{
  "mcpServers": {
    "blenderwright": {
      "command": "uvx",
      "args": [
        "blenderwright"
      ]
    }
  }
}
03

Exposed tools (186)

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.

ToolRiskDescription
add_annotation_layerwriteAdd a layer to an annotation.
add_annotation_strokewriteAdd a stroke to an annotation layer.
add_cloth_simwriteAdd a cloth physics simulation to an object.
add_color_ramp_elementwriteAdd a colour stop to a ColorRamp (ShaderNodeValToRGB) node.
add_constraintwriteAdd a constraint to an object or bone.
add_fluid_simwriteAdd a fluid physics simulation to an object.
add_geometry_nodewriteAdd a node to a geometry nodes modifier
add_image_sequence_stripwriteAdd rendered frames to the sequencer as one image strip.
add_modifierwriteAdd a modifier to a mesh object (non-destructive workflow).
add_multires_modifierwriteAdd a Multiresolution modifier for sculpting detail.
add_particle_systemwriteAdd a particle system to an object.
add_rigid_bodywriteAdd a rigid body physics simulation to an object.
add_shader_nodewriteAdd a shader node to a material
add_sound_stripwriteAdd an audio file to the sequencer as a sound strip.
add_texture_nodewriteAdd an image texture node to a material and connect it to the Principled BSDF Base Color.
analyze_mesh_qualityreadAnalyze mesh topology quality and return a structured defect report.
analyze_sweep_pathreadCheck whether a path can carry a profile of a given radius, without building it.
apply_modifierwriteApply a modifier to an object, making its effect permanent.
apply_transformswriteApply (freeze) transforms on an object, making current transforms the new basis.
assign_materialreadAssign a material to an object.
bake_physicsreadBake a physics simulation for an object.
bevel_edgesreadBevel all edges of a mesh.
boolean_operationreadPerform a boolean operation between two objects using a modifier.
booltool_auto_differencereadAuto boolean difference: subtract the target object from the main object.
booltool_auto_intersectreadAuto boolean intersect: keep only the overlapping volume of two objects.
booltool_auto_slicereadAuto boolean slice: split the main object using the target as a cutter.
booltool_auto_unionwriteAuto boolean union: merge two mesh objects into one, destructively.
bridge_edge_loopswriteBridge two edge loops to create connecting geometry.
capture_viewportreadRender the viewport to a file or return as base64.
check_3d_printabilityreadCheck whether a mesh will 3D print, using Blender
clear_animationdestructiveRemove all animation data from an object.
connect_geometry_nodesreadConnect two nodes in a geometry nodes modifier
connect_shader_nodesreadConnect two shader nodes in a material
convert_curve_to_meshreadConvert a curve object to a mesh object.
convert_objectreadConvert an object to a different type.
create_animation_pathwriteMake an object follow a path (curve) using a Follow Path constraint.
create_annotationwriteCreate a new annotation data block.
create_armaturewriteCreate a new armature object.
create_camerawriteCreate a new camera in the scene.
create_collectionwriteCreate a new collection, optionally nested under a parent collection.
create_curvewriteCreate a new curve object.
create_geometry_nodeswriteCreate a Geometry Nodes modifier on an object.
create_lightwriteCreate a new light in the scene.
create_light_rigwriteCreate a pre-built lighting rig (multiple lights arranged for common setups).
create_materialwriteCreate an empty material: a bare Principled BSDF at default values.
create_principled_materialwriteCreate a plain-surface material with colour, metallic, roughness and more set in one call.
create_procedural_materialwriteCreate a patterned material (wood, marble, fire, veins) as a full node graph in one call.
create_raster_texturewriteGenerate an image texture for patterns shader nodes cannot express.
create_scenewriteCreate a new scene.
create_threaded_shaftwriteCreate a cylindrical shaft with helical external threads.
decimate_meshreadReduce a mesh
delete_collectiondestructiveDelete a collection.
delete_keyframedestructiveRemove a keyframe from an object property at a specific frame.
delete_lightdestructiveDelete a light object from the scene.
delete_materialdestructiveDelete a material by name.
delete_objectdestructiveDelete an object from the scene by name.
delete_particle_systemdestructiveRemove a particle system from an object.
delete_scenedestructiveDelete a scene by name.
disconnect_shader_nodesreadDisconnect all links from a specific socket on a shader node.
dissolve_edgesreadDissolve all edges, merging adjacent faces.
dissolve_facesreadDissolve all faces, merging them into surrounding geometry.
dissolve_vertsreadDissolve all vertices, merging connected edges and faces.
duplicate_materialreadDuplicate a material with a new name.
duplicate_objectreadDuplicate an object.
enable_dyntopowriteEnable dynamic topology (dyntopo) for adaptive sculpting resolution.
enter_sculpt_modereadEnter sculpt mode for a mesh object.
execute_blender_codewriteExecute Python code inside Blender
exit_sculpt_modereadExit sculpt mode and return to object mode.
export_filereadExport scene or selected objects to a 3D file.
extrude_facesreadExtrude all faces of a mesh along their normals.
fill_facesreadFill selected edges with a face.
flip_normalsreadFlip the direction of all face normals on a mesh.
focus_on_objectreadFrame/focus the viewport on a specific object.
get_color_rampwriteRead every stop on a ColorRamp node.
get_node_treereadGet the full node tree of a material (all nodes and links).
get_object_inforeadGet detailed information about an object.
get_scene_inforeadGet full scene information including object tree, hierarchy, counts, frame range, fps, and render engine.
get_selectionreadReport what is currently selected on a mesh.
get_viewport_screenshotreadCapture a screenshot of the current Blender 3D viewport.
grid_fillreadFill a closed edge loop with a grid of quads.
import_filewriteImport a 3D file into Blender.
insert_keyframewriteInsert a keyframe on an object property at a specific frame.
inset_facesreadInset all faces of a mesh, creating a border/frame around each face.
join_objectsreadJoin multiple mesh objects into one (keeps all geometry as-is).
knife_projectreadProject a cutter object
list_geometry_node_inputsreadList all available inputs on a geometry nodes modifier.
list_keyframesreadList all keyframes on an object.
list_lightsreadList all light objects in the scene.
list_materialsreadList all materials in the current Blender file.
list_objectsreadList all objects in the scene, optionally filtered by type.
list_procedural_patternsreadList every procedural pattern with a description of what it looks like.
list_recent_filesreadList recently opened files from Blender preferences.
list_scenesreadList all scenes in the current Blender file.
list_stripsreadList every strip in the sequencer.
loop_cutwriteAdd loop cuts to a mesh object.
make_single_userreadMake an object
make_thingreadMake a thing.
mark_seamdestructiveMark or clear UV seams on all edges of a mesh.
mark_sharpdestructiveMark or clear sharp edges on a mesh.
merge_verticeswriteMerge vertices by distance.
move_to_collectionwriteMove objects to a collection, unlinking them from their current collections.
open_filereadOpen a .blend file.
pack_uv_islandsreadPack UV islands to fit efficiently within the UV space.
parent_mesh_to_armaturereadParent a mesh object to an armature with automatic weights or other methods.
parent_objectswriteSet parent-child relationship between two objects.
point_camera_atreadPoint a camera at an object or a specific location using a Track To constraint.
quads_to_trisreadConvert all quad faces to triangles.
recalculate_normalsreadRecalculate face normals to be consistent (all pointing outward or inward).
remeshwriteRemesh an object to create a clean topology.
remove_annotation_layerdestructiveRemove a layer from an annotation.
remove_color_ramp_elementdestructiveRemove a colour stop from a ColorRamp node.
remove_modifierdestructiveRemove a modifier from an object.
remove_shader_nodedestructiveRemove a shader node from a material
remove_stripdestructiveRemove a strip from the sequencer by name.
rename_objectwriteRename an object.
render_animationreadRender the animation sequence to image files.
render_imagereadRender the current scene to an image file.
render_videoreadRender the scene
repair_meshreadRepair the defects analyze_mesh_quality reports.
save_filewriteSave the current Blender file.
select_all_geometryreadSelect, deselect or invert all vertices, edges and faces on one mesh.
select_by_axisreadSelect the vertices, edges and faces on one side of a mesh along an axis.
select_by_indexreadSelect specific vertices, edges or faces of one mesh by index.
select_faces_by_sidesreadSelect faces of one mesh by how many sides they have.
select_linkedreadGrow the current mesh selection to everything connected to it.
select_objectsreadSelect whole objects in the scene by name.
select_similarreadGrow the current mesh selection to vertices, edges or faces that resemble it.
separate_meshreadSeparate a mesh into parts.
set_active_camerawriteSet the active scene camera.
set_annotation_stroke_propertywriteSet a property on an annotation stroke.
set_bone_propertywriteSet a property on a bone in an armature.
set_brush_propertywriteSet a property on the active sculpt brush.
set_camera_from_viewwriteMatch the active camera to the current 3D viewport view.
set_camera_propertywriteSet a property on a camera.
set_collection_visibilitywriteSet collection visibility in viewport and/or render.
set_color_ramp_elementwriteMove or recolor an existing ColorRamp stop.
set_color_ramp_interpolationwriteSet how a ColorRamp blends between its stops.
set_curve_propertywriteSet a property on a curve object.
set_edge_creasewriteSet edge crease value on all edges for subdivision surface control.
set_eevee_light_pathwriteSet EEVEE light intensity controls (Blender 5.1+).
set_framewriteSet the current frame in the timeline.
set_frame_rangewriteSet the start and end frames of the scene timeline.
set_geometry_node_inputwriteSet an input value on a geometry nodes modifier.
set_handle_typewriteSet the handle type for all control points of a curve.
set_interpolationwriteSet the interpolation type for keyframes on a property.
set_light_propertywriteSet a property on a light object.
set_locationwriteSet the position of an object.
set_material_blend_modewriteSet the blend mode of a material (EEVEE).
set_material_colorwriteSet the base color of a material
set_material_propertywriteSet a property on a material
set_modifier_propertywriteSet a property on a modifier (e.g., levels, count, offset, angle).
set_object_visibilitywriteSet object visibility in viewport and/or render.
set_originwriteSet the origin point of an object.
set_output_formatwriteSet the render output format and optionally the output file path.
set_particle_renderingwriteSet rendering mode for an object
set_particle_velocitywriteSet velocity settings for an object
set_physics_propertywriteSet a property on an existing physics simulation.
set_posewriteSet the pose of a bone in an armature.
set_render_enginewriteSet the render engine.
set_render_resolutionwriteSet the render resolution.
set_render_sampleswriteSet the number of render samples.
set_rotationwriteSet the rotation of an object.
set_scalewriteSet the scale of an object.
set_scene_propertywriteSet a scene property such as frame_start, frame_end, frame_current, fps, unit_system, or render_engine.
set_sculpt_brushwriteSet the active sculpt brush.
set_sculpt_symmetrywriteSet sculpt symmetry axes.
set_shader_node_inputwriteSet the default value of an unconnected input socket on a shader node.
set_shader_node_propertywriteSet a node-level property (not a socket) on a shader node.
set_shadow_settingswriteConfigure shadow settings for a light.
set_smooth_shadingwriteSet smooth or flat shading on an object.
set_uv_projectionwriteApply a projection-based UV mapping to a mesh object.
set_viewport_overlaywriteToggle a viewport overlay setting.
set_viewport_shadingwriteSet the viewport shading mode.
set_world_backgroundwriteSet the world background to a solid color or HDRI environment map.
shade_auto_smoothwriteApply angle-based auto-smooth shading to an object.
smart_uv_projectwriteApply Smart UV Project to a mesh object.
smooth_curvereadSmooth the control points of a curve.
snap_to_gridreadSnap an object
subdivide_curvereadSubdivide a curve by adding control points between existing ones.
subdivide_meshreadSubdivide a mesh.
suggest_extensionsreadSuggest helpful Blender extensions for a planned task.
sweep_profile_along_pathreadSweep a closed profile along a 3D path to make a solid tube, pipe, cable or rope.
switch_curve_directionreadSwitch the direction of a curve
toggle_cyclicreadToggle the cyclic (closed loop) state of a curve.
tris_to_quadsreadConvert adjacent triangle pairs to quad faces where possible.
uv_unwrapreadUnwrap a mesh object
04

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.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
addon/handlers/code_exec.py:86
exec(code, {"__builtins__": SAFE_BUILTINS})
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInventory / provenance · inv.binary · CWE-1104
blend-ai-v1.0.0.zip
blend-ai-v1.0.0.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
src/blenderwright/enum_hints.py:92
modules[module_name] = _enum_pairs(importlib.import_module(module_name))
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
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
Why it matters. 15 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
docs/.nojekyll
.nojekyll
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_long_names.py:64
mod = importlib.import_module(f"blenderwright.tools.{module}")
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_round_wasters.py:53
src = inspect.getsource(importlib.import_module(module))
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_round_wasters.py:89
mod = importlib.import_module(module)
LOWCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
tests/test_tools/test_numeric_text_values.py:66
module = importlib.import_module(tool.fn.__module__)
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_tools/test_print3d.py:28
check_3d_printability("../../etc/passwd")
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_addon/test_handlers/test_camera_handler.py:153
decoded = base64.b64decode(result["base64"])
INFOInventory / provenance · inv.oversize · CWE-1104
docs/shuttle-launch.mp4
docs/shuttle-launch.mp4
Why it matters. 1084870 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
saloon.png
saloon.png
Why it matters. 7360740 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
screenshot.png
screenshot.png
Why it matters. 5947453 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
shader-preview.png
shader-preview.png
Why it matters. 2057717 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
shuttle-launch.gif
shuttle-launch.gif
Why it matters. 6647273 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-07 · audit v0.4.1 · source sha 75b3cf5738d5full audit observations/trust-audit/mcp-server/holdmybeer-gg__blenderwright.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0775b3cf5738d5BLOCKD69first audit
06

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.

Advertisement