Skip to main content
Glama

Control Blender from Claude (or any MCP-compatible AI) using the Model Context Protocol. BlenderMCP connects to your running Blender instance over a local TCP socket — your machine, your scenes, your assets.

Unlike existing Blender MCP projects that rely on execute_blender_code as a catch-all, this project provides dedicated, typed tools for every major Blender subsystem: objects, materials, shader nodes, geometry nodes, modifiers, animation, rigging, physics, compositing, and more.

Status

All 175 tools implemented and integration-tested against Blender 4.2.5 LTS. Full handler coverage across all 25 domains.

Related MCP server: Blender MCP Server

Requirements

  • Python 3.10+

  • uv (recommended) or pip

  • Blender 4.0+ (for the addon)

Quick Start

# Clone and install
git clone https://github.com/kleer001/blender-mcp
cd blender-mcp
uv sync

# Run with mock Blender (no Blender needed)
uv run blender-mcp --mock

# Run against a real Blender instance
uv run blender-mcp

Blender Addon Setup

  1. Copy the blender_addon/ directory to your Blender addons path, or symlink it

  2. Enable Blender MCP in Blender → Edit → Preferences → Add-ons

  3. In the 3D Viewport sidebar (N panel), find the MCP tab and click Start Server

  4. Start the MCP server: uv run blender-mcp

Claude Code

The .mcp.json in the repo root auto-configures Claude Code. Just run claude from the project directory.

Claude Desktop

{
  "mcpServers": {
    "blender-mcp": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/blender-mcp", "blender-mcp"]
    }
  }
}

Architecture

AI Client (Claude, Cursor, ChatGPT)
    │ MCP Protocol (stdio)
    ▼
MCP Server (src/blendermcp/)
    │ TCP Socket (localhost:9334)
    ▼
Blender Addon (blender_addon/)
    │ bpy API (main thread via timer queue)
    ▼
Blender
  • MCP Server — FastMCP-based, runs as a separate process, communicates via stdio

  • Blender Addon — TCP server inside Blender, dispatches commands to handlers on the main thread via bpy.app.timers

  • Connection — JSON over TCP with newline framing, exponential backoff reconnection

Available Tools (175)

Domain

Count

Tools

Scene

6

ping · get_scene_info · load_file · save_file · set_frame · set_frame_range

Objects

12

get_object_info · list_objects · create_object · delete_object · set_transform · apply_transform · duplicate_object · rename_object · set_parent · clear_parent · set_origin · select_objects

Materials

8

list_materials · get_material_info · create_material · assign_material · remove_material · set_material_property · duplicate_material · delete_material

Shader Nodes

12

get_node_tree · create_shader_node · delete_shader_node · connect_shader_nodes · disconnect_shader_node · set_node_input · get_node_input · set_node_position · list_shader_node_types · create_node_group · add_node_group_instance · layout_node_tree

Geometry Nodes

10

get_geonodes_tree · create_geonodes_modifier · create_geonode · delete_geonode · connect_geonodes · disconnect_geonode · set_geonode_input · get_geonode_input · list_geonode_types · set_geonodes_input

Modifiers

8

list_modifiers · add_modifier · remove_modifier · set_modifier_property · apply_modifier · move_modifier · toggle_modifier_visibility · copy_modifiers

Animation

10

get_keyframes · set_keyframe · set_keyframes · delete_keyframe · clear_animation · get_action_info · list_actions · set_interpolation · set_playback_range · playback_control

Rigging

10

create_armature · get_armature_info · add_bone · set_bone_property · get_bone_info · parent_mesh_to_armature · assign_vertex_weights · add_bone_constraint · set_pose_bone_transform · list_bone_constraints

Constraints

6

list_constraints · add_constraint · remove_constraint · set_constraint_property · set_constraint_influence · reorder_constraint

Lighting

7

list_lights · create_light · set_light_property · create_hdri_world · set_world_property · get_world_info · create_light_rig

Camera

6

list_cameras · create_camera · set_camera_property · set_active_camera · camera_look_at · setup_camera_dof

Mesh Editing

8

get_mesh_info · get_vertices · set_vertices · get_vertex_groups · create_vertex_group · set_smooth_shading · separate_mesh · join_meshes

Curves

5

create_curve · get_curve_info · set_curve_points · set_curve_property · convert_to_mesh

Physics

10

add_physics · remove_physics · set_physics_property · get_physics_info · setup_rigid_body_world · setup_cloth_sim · setup_fluid_domain · setup_softbody · bake_physics · free_physics_bake

Particles

6

add_particle_system · remove_particle_system · set_particle_property · get_particle_info · setup_hair · bake_particles

Compositing

8

get_compositor_tree · enable_compositor · create_comp_node · delete_comp_node · connect_comp_nodes · set_comp_node_input · list_comp_node_types · setup_basic_composite

Sculpting

4

enter_sculpt_mode · set_sculpt_brush · remesh · apply_sculpt_mask

Grease Pencil

6

create_grease_pencil · get_gp_info · add_gp_layer · set_gp_layer_property · create_gp_stroke · add_gp_modifier

Textures & UV

6

list_images · load_image · get_uv_maps · create_uv_map · smart_uv_project · pack_images

Viewport

6

get_viewport_info · capture_viewport · set_viewport_shading · set_viewport_camera · frame_selected · frame_all

Rendering

6

get_render_settings · set_render_settings · render_image · render_animation · render_viewport · list_render_engines

Collections

5

list_collections · create_collection · move_to_collection · set_collection_visibility · delete_collection

Import/Export

4

import_file · export_file · list_supported_formats · export_selection

Code Execution

2

execute_python · evaluate_expression

Batch Operations

4

find_objects · batch_set_property · batch_delete · find_error_objects

Development

# Install with dev dependencies
uv sync

# Run tests (unit, no Blender needed)
uv run pytest tests/ --ignore=tests/integration -v

# Run integration tests (requires Blender at /opt/blender-4.2/blender)
uv run pytest tests/integration/ -v -m integration

# Run with mock (no Blender needed)
uv run blender-mcp --mock --debug

# Lint
uv run ruff check src/ tests/

License

MIT

Available Tools

175 tools
add_boneB

Add a bone to an armature. Head and tail are 3D positions.

Inputs: head (required), name (required), tail (required), object (required), +1 more. Returns: object

add_bone_constraintC

Add a constraint to a pose bone. Types: IK, COPY_ROTATION, COPY_LOCATION, LIMIT_ROTATION.

Inputs: bone (required), type (required), object (required), name. Returns: object

add_constraintC

Add a constraint. Types: COPY_LOCATION, COPY_ROTATION, COPY_SCALE, TRACK_TO, DAMPED_TRACK, LOCKED_TRACK, LIMIT_LOCATION, LIMIT_ROTATION, LIMIT_SCALE, IK, CHILD_OF, FLOOR, FOLLOW_PATH, CLAMP_TO.

Inputs: type (required), object (required), bone, name. Returns: object

add_gp_layerC

Add a layer to a grease pencil object.

Inputs: name (required), object (required). Returns: object

add_gp_modifierB

Add a GP modifier. Types: GP_THICK, GP_NOISE, GP_SMOOTH, GP_SUBDIV, GP_TINT, GP_OPACITY.

Inputs: type (required), object (required), name. Returns: object

add_modifierA

Add a modifier to an object. Common types: SUBSURF, BOOLEAN, ARRAY, MIRROR, SOLIDIFY, BEVEL, DECIMATE, SMOOTH, SHRINKWRAP, ARMATURE, CURVE, LATTICE.

Inputs: type (required), object (required), name. Returns: object

add_node_group_instanceC

Add an instance of an existing node group to a material.

Inputs: material (required), group_name (required), location. Returns: object

add_particle_systemB

Add a particle system. Types: EMITTER, HAIR.

Inputs: object (required), name, type. Returns: object

add_physicsC

Add a physics simulation. Types: RIGID_BODY, CLOTH, FLUID, SOFT_BODY, COLLISION.

Inputs: type (required), object (required). Returns: object

apply_modifierA
Destructive

Apply a modifier, baking it into the mesh. Requires Object Mode. Irreversible.

Inputs: object (required), modifier (required). Returns: object

apply_sculpt_maskC

Convert sculpt mask to a vertex group.

Inputs: object (required), vertex_group. Returns: object

apply_transformA

Apply (freeze) the object's transforms to mesh data. Resets the applied transforms to identity.

Inputs: name (required), scale, location, rotation. Returns: object

assign_materialA

Assign a material to an object. If slot is specified, replaces that slot; otherwise appends a new slot.

Inputs: object (required), material (required), slot. Returns: object

assign_vertex_weightsC

Assign vertex weights to a bone's vertex group.

Inputs: bone (required), object (required), vertices (required), weight. Returns: object

bake_particlesC

Bake particle simulation.

Inputs: object (required), system. Returns: object

bake_physicsC

Bake physics simulation. Long-running operation.

Inputs: object. Returns: object

batch_deleteA
Destructive

Delete multiple objects at once. Confirm required.

Inputs: objects (required), confirm. Returns: object

batch_set_propertyC

Set the same property on multiple objects at once.

Inputs: value (required), objects (required), property (required). Returns: object

camera_look_atB

Point a camera at a target object or world location.

Inputs: camera (required), target, location. Returns: object

capture_viewportA
Read-only

Capture a screenshot of the 3D viewport to a file. Returns the file path.

Inputs: filepath. Returns: object

clear_animationA
Destructive

Remove all animation data (keyframes, actions) from an object. Irreversible.

Inputs: object (required). Returns: object

clear_parentA

Clear an object's parent, keeping its world transform.

Inputs: name (required). Returns: object

connect_comp_nodesD

Connect compositor nodes.

Inputs: to_node (required), to_input (required), from_node (required), from_output (required). Returns: object

connect_geonodesC

Connect nodes in a geometry node tree.

Inputs: object (required), to_node (required), modifier (required), to_input (required), +2 more. Returns: object

connect_shader_nodesB

Connect an output socket to an input socket. Sockets can be specified by name or index.

Inputs: to_node (required), material (required), to_input (required), from_node (required), +1 more. Returns: object

convert_to_meshA
Destructive

Convert a curve object to a mesh. Loses curve editability.

Inputs: object (required). Returns: object

copy_modifiersB

Copy all modifiers from source object to target object.

Inputs: source (required), target (required). Returns: object

create_armatureB

Create an armature with an initial bone.

Inputs: name, location. Returns: object

create_cameraB

Create a camera with specified focal length.

Inputs: name, location, focal_length. Returns: object

create_collectionB

Create a new collection, optionally under a parent collection.

Inputs: name (required), parent. Returns: object

create_comp_nodeB

Add a compositor node. Common types: CompositorNodeRLayers, CompositorNodeComposite, CompositorNodeViewer, CompositorNodeMixRGB, CompositorNodeBlur, CompositorNodeGlare, CompositorNodeColorBalance, CompositorNodeBrightContrast, CompositorNodeHueSat.

Inputs: type (required), name, location. Returns: object

create_curveB

Create a curve object. Types: BEZIER, NURBS, POLY (path).

Inputs: name, type, location. Returns: object

create_geonodeB

Add a node to a geometry node tree. Common types: GeometryNodeMeshGrid, GeometryNodeMeshCube, GeometryNodeSetPosition, GeometryNodeTransform, GeometryNodeJoinGeometry, GeometryNodeInstanceOnPoints, GeometryNodeDistributePointsOnFaces.

Inputs: type (required), object (required), modifier (required), name, +1 more. Returns: object

create_geonodes_modifierC

Add a geometry nodes modifier. Creates a new tree or uses an existing one.

Inputs: object (required), name, tree_name. Returns: object

create_gp_strokeB

Create a stroke from point list. Each point: {co: [x,y,z], pressure: float, strength: float}.

Inputs: layer (required), object (required), points (required), frame. Returns: object

create_grease_pencilD

Create a grease pencil object.

Inputs: name, location. Returns: object

create_hdri_worldA

Set up HDRI environment lighting from an image file.

Inputs: filepath (required), strength. Returns: object

create_lightB

Create a light. Types: POINT, SUN, SPOT, AREA.

Inputs: name, type, color, energy, +1 more. Returns: object

create_light_rigB

Create a three-point lighting setup (key, fill, rim). Optionally aimed at a target object.

Inputs: target, key_energy, rim_energy, fill_energy. Returns: object

create_materialB

Create a new Principled BSDF material. base_color is [R, G, B, A] (0-1 range).

Inputs: name, metallic, roughness, base_color. Returns: object

create_node_groupC

Create a node group from selected nodes.

Inputs: nodes (required), material (required), name. Returns: object

create_objectA

Create a new object. Types: CUBE, SPHERE, CYLINDER, CONE, TORUS, PLANE, CIRCLE, GRID, MONKEY, UV_SPHERE, ICO_SPHERE, EMPTY. Returns the actual name assigned (may differ if name already exists).

Inputs: name, type, location. Returns: object

create_shader_nodeB

Add a shader node to a material. Common types: ShaderNodeBsdfPrincipled, ShaderNodeTexImage, ShaderNodeTexNoise, ShaderNodeMixRGB, ShaderNodeBump, ShaderNodeNormalMap, ShaderNodeMapping, ShaderNodeTexCoord, ShaderNodeValToRGB, ShaderNodeMath.

Inputs: type (required), material (required), name, location. Returns: object

create_uv_mapC

Add a UV map to a mesh object.

Inputs: object (required), name. Returns: object

create_vertex_groupA

Create a vertex group, optionally assigning vertices with a weight.

Inputs: name (required), object (required), weight, vertices. Returns: object

delete_collectionA
Destructive

Delete a collection. Objects in it become orphaned. Confirm required.

Inputs: name (required), confirm. Returns: object

delete_comp_nodeC

Remove a compositor node.

Inputs: node (required). Returns: object

delete_geonodeC

Remove a node from a geometry node tree.

Inputs: node (required), object (required), modifier (required). Returns: object

delete_keyframeC

Delete a keyframe at a specific frame.

Inputs: frame (required), object (required), data_path (required), index. Returns: object

delete_materialA
Destructive

Delete a material. Confirm required. Removes from all object slots.

Inputs: name (required), confirm. Returns: object

delete_objectA
Destructive

Delete an object by name. Confirm required.

Inputs: name (required), confirm. Returns: object

delete_shader_nodeB

Remove a node from a material's node tree.

Inputs: node (required), material (required). Returns: object

disconnect_geonodeB

Disconnect an input on a geometry node.

Inputs: node (required), input (required), object (required), modifier (required). Returns: object

disconnect_shader_nodeC

Disconnect an input socket on a node.

Inputs: node (required), input (required), material (required). Returns: object

duplicate_materialB

Duplicate a material. Returns the new material name.

Inputs: name (required), new_name. Returns: object

duplicate_objectB

Duplicate an object. If linked=True, the copy shares mesh data with the original.

Inputs: name (required), linked, new_name. Returns: object

enable_compositorA

Enable the compositor (use_nodes=True on scene).

Inputs: no named parameters. Returns: object

enter_sculpt_modeB

Switch an object to sculpt mode.

Inputs: object (required). Returns: object

evaluate_expressionA
Read-only

Evaluate a Python expression inside Blender and return the result. Safe for read-only queries like 'len(bpy.data.objects)' or 'bpy.context.mode'.

Inputs: expression (required). Returns: object

execute_pythonA
Destructive

Execute Python code inside Blender. Dangerous patterns are blocked by default. Use this only when no dedicated tool exists for the operation. Confirm required.

Inputs: code (required), confirm. Returns: object

export_fileB

Export the scene to a file. Format is auto-detected from extension if not specified.

Inputs: filepath (required), format. Returns: object

export_selectionB

Export only selected objects to a file.

Inputs: filepath (required), format. Returns: object

find_error_objectsA
Read-only

Find objects with issues: missing textures, broken modifiers, invalid references.

Inputs: no named parameters. Returns: object

find_objectsA
Read-only

Search for objects by name pattern (glob), type, material, or collection.

Inputs: type, material, collection, name_pattern. Returns: object

frame_allA

Frame the viewport to show all objects (Home key).

Inputs: no named parameters. Returns: object

frame_selectedA

Frame the viewport to show selected objects (Numpad .).

Inputs: no named parameters. Returns: object

free_physics_bakeB
Destructive

Free baked physics simulation data. Irreversible.

Inputs: object. Returns: object

get_action_infoA
Read-only

Get info about an action: frame range, channels, keyframe count.

Inputs: name (required). Returns: object

get_armature_infoA
Read-only

Get armature info: bone hierarchy, bone count.

Inputs: object (required). Returns: object

get_bone_infoA
Read-only

Get bone info: head, tail, roll, parent, children, constraints.

Inputs: bone (required), object (required). Returns: object

get_compositor_treeA
Read-only

Get the compositor node tree structure.

Inputs: no named parameters. Returns: object

get_curve_infoA
Read-only

Get curve info: spline count, point count, dimensions, bevel settings.

Inputs: object (required). Returns: object

get_geonode_inputC
Read-only

Get a geometry node input's current value.

Inputs: node (required), input (required), object (required), modifier (required). Returns: object

get_geonodes_treeB
Read-only

Get the geometry node tree structure: nodes, links, inputs.

Inputs: object (required), modifier. Returns: object

get_gp_infoB
Read-only

Get grease pencil info: layers, frames, stroke count.

Inputs: object (required). Returns: object

get_keyframesA
Read-only

Get keyframes on an object, optionally filtered to a specific data_path (e.g., 'location', 'rotation_euler').

Inputs: object (required), data_path. Returns: object

get_material_infoA
Read-only

Get material settings: base color, metallic, roughness, node tree summary.

Inputs: name (required). Returns: object

get_mesh_infoA
Read-only

Get mesh info: vertex/edge/face count, UV maps, vertex groups, has_custom_normals.

Inputs: object (required). Returns: object

get_node_inputC
Read-only

Get a node input's current default value.

Inputs: node (required), input (required), material (required). Returns: object

get_node_treeA
Read-only

Get the full shader node tree: nodes, links, input values.

Inputs: material (required). Returns: object

get_object_infoA
Read-only

Get detailed info about an object: type, transforms, modifiers, materials, parent, collections.

Inputs: name (required). Returns: object

get_particle_infoC
Read-only

Get particle system settings.

Inputs: object (required), system. Returns: object

get_physics_infoB
Read-only

Get physics settings on an object.

Inputs: object (required). Returns: object

get_render_settingsA
Read-only

Get render settings: engine, resolution, samples, output path, file format.

Inputs: no named parameters. Returns: object

get_scene_infoA
Read-only

Get current scene metadata: name, frame range, FPS, render engine, object/material counts.

Inputs: no named parameters. Returns: object

get_uv_mapsB
Read-only

Get UV maps on a mesh object.

Inputs: object (required). Returns: object

get_vertex_groupsA
Read-only

Get vertex groups on a mesh with member counts.

Inputs: object (required). Returns: object

get_verticesA
Read-only

Get vertex positions. Optionally filter by vertex group. Limited to avoid huge payloads.

Inputs: object (required), group, limit. Returns: object

get_viewport_infoA
Read-only

Get viewport settings: shading mode, overlays, camera, clip distances.

Inputs: no named parameters. Returns: object

get_world_infoA
Read-only

Get current world/environment shader settings.

Inputs: no named parameters. Returns: object

import_fileA

Import a file into the scene. Supported formats: FBX, OBJ, GLTF/GLB, USD, Alembic, STL, PLY, SVG, DAE. Format is auto-detected from extension if not specified.

Inputs: filepath (required), format. Returns: object

join_meshesA
Destructive

Join multiple mesh objects into one. The first object becomes the active/target. Destroys source objects.

Inputs: objects (required). Returns: object

layout_node_treeC

Auto-arrange nodes in a material's node tree.

Inputs: material (required). Returns: object

list_actionsA
Read-only

List all actions in the blend file.

Inputs: no named parameters. Returns: object

list_bone_constraintsB
Read-only

List constraints on a pose bone.

Inputs: bone (required), object (required). Returns: object

list_camerasA
Read-only

List all cameras with their settings.

Inputs: no named parameters. Returns: object

list_collectionsA
Read-only

List all collections with child counts, object counts, and visibility.

Inputs: no named parameters. Returns: object

list_comp_node_typesA
Read-only

List available compositor node types.

Inputs: no named parameters. Returns: object

list_constraintsB
Read-only

List constraints on an object or pose bone.

Inputs: object (required), bone. Returns: object

list_geonode_typesA
Read-only

List available geometry node types for the current Blender version.

Inputs: no named parameters. Returns: object

list_imagesA
Read-only

List all images in the blend file.

Inputs: no named parameters. Returns: object

list_lightsA
Read-only

List all lights in the scene with type and settings.

Inputs: no named parameters. Returns: object

list_materialsA
Read-only

List all materials in the blend file with user counts.

Inputs: no named parameters. Returns: object

list_modifiersA
Read-only

List all modifiers on an object with their type and settings.

Inputs: object (required). Returns: object

list_objectsA
Read-only

List all objects in the scene. Optionally filter by type (MESH, CAMERA, LIGHT, EMPTY, etc.).

Inputs: type. Returns: object

list_render_enginesA
Read-only

List available render engines.

Inputs: no named parameters. Returns: object

list_shader_node_typesA
Read-only

List available shader node types.

Inputs: no named parameters. Returns: object

list_supported_formatsA
Read-only

List supported import and export file formats.

Inputs: no named parameters. Returns: object

load_fileA
Destructive

Load a .blend file. This replaces the current scene — confirm to proceed.

Inputs: filepath (required), confirm. Returns: object

load_imageB

Load an image from file into the blend file.

Inputs: filepath (required), name. Returns: object

move_modifierB

Move a modifier up or down in the stack. Direction: UP or DOWN.

Inputs: object (required), modifier (required), direction (required). Returns: object

move_to_collectionA

Move an object to a collection (removes from current collections).

Inputs: object (required), collection (required). Returns: object

pack_imagesA

Pack all external images into the blend file.

Inputs: no named parameters. Returns: object

parent_mesh_to_armatureC

Parent a mesh to an armature. Mode: AUTOMATIC (auto weights), EMPTY (no weights).

Inputs: mesh (required), armature (required), mode. Returns: object

pingA
Read-only

Check if the Blender addon is reachable and return version info.

Inputs: no named parameters. Returns: object

playback_controlA

Control animation playback: PLAY, PAUSE, STOP.

Inputs: action (required). Returns: object

remeshC

Remesh an object. Modes: VOXEL, QUAD (quadriflow).

Inputs: object (required), mode, voxel_size. Returns: object

remove_constraintB

Remove a constraint by name.

Inputs: object (required), constraint (required), bone. Returns: object

remove_materialA

Remove a material slot from an object by slot index.

Inputs: object (required), slot. Returns: object

remove_modifierB

Remove a modifier from an object by name.

Inputs: object (required), modifier (required). Returns: object

remove_particle_systemC

Remove a particle system by name.

Inputs: name (required), object (required). Returns: object

remove_physicsC

Remove physics from an object.

Inputs: type (required), object (required). Returns: object

rename_objectA

Rename an object. Returns the actual name assigned (may be auto-incremented).

Inputs: name (required), new_name (required). Returns: object

render_animationA

Render the full animation frame range. This is a long-running operation.

Inputs: no named parameters. Returns: object

render_imageA

Render the current frame to an image file. Uses scene output path if filepath not specified.

Inputs: filepath. Returns: object

render_viewportB

Render the viewport (OpenGL render) to a file.

Inputs: filepath. Returns: object

reorder_constraintB

Move a constraint up or down. Direction: UP or DOWN.

Inputs: object (required), direction (required), constraint (required), bone. Returns: object

save_fileA

Save the current scene. If filepath is provided, save-as to that path.

Inputs: filepath. Returns: object

select_objectsA

Select objects by name list, glob pattern, or type. Deselects others by default.

Inputs: type, names, pattern, deselect_others. Returns: object

separate_meshB

Separate mesh into multiple objects. Modes: LOOSE (by loose parts), MATERIAL (by material), SELECTED.

Inputs: object (required), mode. Returns: object

set_active_cameraA
Idempotent

Set the active scene camera.

Inputs: name (required). Returns: object

set_bone_propertyB
Idempotent

Set a bone property: roll, envelope_distance, head, tail, use_connect.

Inputs: bone (required), value (required), object (required), property (required). Returns: object

set_camera_propertyB
Idempotent

Set camera property: focal_length, sensor_width, clip_start, clip_end, dof_use, dof_focus_distance, dof_aperture_fstop.

Inputs: name (required), value (required), property (required). Returns: object

set_collection_visibilityA
Idempotent

Set collection visibility in viewport and/or render.

Inputs: name (required), render, viewport. Returns: object

set_comp_node_inputC
Idempotent

Set a compositor node input value.

Inputs: node (required), input (required), value (required). Returns: object

set_constraint_influenceB
Idempotent

Set constraint influence (0.0 to 1.0).

Inputs: object (required), influence (required), constraint (required), bone. Returns: object

set_constraint_propertyC
Idempotent

Set a constraint property. Common: target, subtarget, influence, axis.

Inputs: value (required), object (required), property (required), constraint (required), +1 more. Returns: object

set_curve_pointsA

Set control point positions on a spline. Each entry: {co: [x,y,z], handle_left: [x,y,z], handle_right: [x,y,z]} for Bezier, or {co: [x,y,z,w]} for NURBS/Poly.

Inputs: object (required), points (required), spline_index (required). Returns: object

set_curve_propertyB
Idempotent

Set curve property: bevel_depth, bevel_resolution, extrude, dimensions (2D/3D), resolution_u, fill_mode.

Inputs: value (required), object (required), property (required). Returns: object

set_frameC
Idempotent

Set the current frame.

Inputs: frame (required). Returns: object

set_frame_rangeC
Idempotent

Set the scene frame range (start and/or end frame).

Inputs: end, start. Returns: object

set_geonode_inputC
Idempotent

Set a geometry node input's default value.

Inputs: node (required), input (required), value (required), object (required), +1 more. Returns: object

set_geonodes_inputA
Idempotent

Set a modifier-level input (Group Input interface value).

Inputs: value (required), object (required), modifier (required), input_name (required). Returns: object

set_gp_layer_propertyA
Idempotent

Set a GP layer property: color, opacity, thickness, use_lights.

Inputs: layer (required), value (required), object (required), property (required). Returns: object

set_interpolationA
Idempotent

Set keyframe interpolation for all keyframes on a channel. Types: BEZIER, LINEAR, CONSTANT.

Inputs: object (required), data_path (required), interpolation. Returns: object

set_keyframeC

Insert a keyframe on an object property at a specific frame. Use index for individual channels (0=X, 1=Y, 2=Z), or -1 for all channels.

Inputs: frame (required), object (required), data_path (required), index, +1 more. Returns: object

set_keyframesA

Batch insert multiple keyframes. Each entry: {frame: int, value: float|list}. More efficient than calling set_keyframe repeatedly.

Inputs: object (required), data_path (required), keyframes (required). Returns: object

set_light_propertyA
Idempotent

Set a light property: energy, color, shadow_soft_size, spot_size, spot_blend, use_shadow, size (area light).

Inputs: name (required), value (required), property (required). Returns: object

set_material_propertyA
Idempotent

Set a Principled BSDF property. Properties: base_color, metallic, roughness, specular, transmission, emission_color, emission_strength, alpha, normal_strength.

Inputs: value (required), material (required), property (required). Returns: object

set_modifier_propertyB
Idempotent

Set a modifier property. Property names are Blender API names (e.g., 'levels' for SUBSURF, 'count' for ARRAY, 'operation' for BOOLEAN).

Inputs: value (required), object (required), modifier (required), property (required). Returns: object

set_node_inputB
Idempotent

Set a node input's default value (color, float, vector).

Inputs: node (required), input (required), value (required), material (required). Returns: object

set_node_positionC
Idempotent

Set a node's position in the editor.

Inputs: node (required), location (required), material (required). Returns: object

set_originB

Set an object's origin point. Types: ORIGIN_GEOMETRY, ORIGIN_CENTER_OF_MASS, ORIGIN_CENTER_OF_VOLUME, ORIGIN_CURSOR, GEOMETRY_ORIGIN.

Inputs: name (required), type. Returns: object

set_parentC

Set parent-child relationship between objects.

Inputs: child (required), parent (required). Returns: object

set_particle_propertyA
Idempotent

Set a particle system property: count, lifetime, emit_from, physics_type, size.

Inputs: value (required), object (required), system (required), property (required). Returns: object

set_physics_propertyA
Idempotent

Set a physics property. E.g., type=RIGID_BODY, property=mass, value=5.0.

Inputs: type (required), value (required), object (required), property (required). Returns: object

set_playback_rangeC
Idempotent

Set the preview/playback range.

Inputs: end (required), start (required). Returns: object

set_pose_bone_transformA
Idempotent

Set a pose bone's transform (location and/or rotation in pose space).

Inputs: bone (required), object (required), location, rotation. Returns: object

set_render_settingsC
Idempotent

Configure render settings. Engine: CYCLES, BLENDER_EEVEE_NEXT, BLENDER_WORKBENCH. File format: PNG, JPEG, EXR, TIFF. Color mode: BW, RGB, RGBA.

Inputs: engine, samples, filepath, color_mode, +5 more. Returns: object

set_sculpt_brushC
Idempotent

Set the active sculpt brush and settings. Brushes: DRAW, CLAY, CLAY_STRIPS, INFLATE, GRAB, SMOOTH, FLATTEN, PINCH, CREASE, SCRAPE.

Inputs: brush (required), radius, strength. Returns: object

set_smooth_shadingA
Idempotent

Set shading mode. smooth=True for smooth shading, False for flat. auto_smooth uses angle threshold (radians).

Inputs: object (required), angle, smooth, auto_smooth. Returns: object

set_transformA
Idempotent

Set an object's location, rotation (radians), and/or scale.

Inputs: name (required), scale, location, rotation. Returns: object

setup_basic_compositeB

Template: Create Render Layers -> Composite + Viewer setup.

Inputs: no named parameters. Returns: object

setup_camera_dofB

Configure depth of field on a camera. Focus on an object or at a specific distance.

Inputs: camera (required), fstop, focus_object, focus_distance. Returns: object

setup_cloth_simB

Template: Set up cloth simulation with optional pinning vertex group.

Inputs: object (required), pin_group. Returns: object

setup_fluid_domainB

Template: Set up fluid simulation with domain and optional emitter.

Inputs: domain (required), emitter. Returns: object

setup_hairC

Template: Set up hair particles with children and physics.

Inputs: object (required), count, length. Returns: object

setup_rigid_body_worldC

Configure the rigid body world and collection.

Inputs: collection. Returns: object

setup_softbodyC

Template: Set up softbody simulation.

Inputs: object (required). Returns: object

set_verticesA

Set vertex positions. Each entry: {index: int, co: [x, y, z]}.

Inputs: object (required), vertices (required). Returns: object

set_viewport_cameraA
Idempotent

Set the active camera for the viewport. Pass camera object name, or None for default.

Inputs: camera. Returns: object

set_viewport_shadingA
Idempotent

Set viewport shading mode: WIREFRAME, SOLID, MATERIAL, RENDERED.

Inputs: mode (required). Returns: object

set_world_propertyB
Idempotent

Set world/environment property: color, strength.

Inputs: value (required), property (required). Returns: object

smart_uv_projectB

Auto UV unwrap using smart project. Angle limit in radians (default ~66 degrees).

Inputs: object (required), angle_limit. Returns: object

toggle_modifier_visibilityB
Idempotent

Toggle modifier visibility in viewport and/or render.

Inputs: object (required), modifier (required), render, viewport. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 175 tools

    Disambiguation4/5

    The vast majority of tools target distinct domains (objects, materials, cameras, modifiers, nodes, etc.) with clear action-resource pairs. However, a few tools like execute_python vs evaluate_expression and set_frame_range vs set_playback_range could cause confusion, though descriptions clarify their intents.

    Naming Consistency4/5

    Tool names overwhelmingly follow a verb_noun snake_case pattern (list_objects, create_material, set_transform, delete_object), making navigation predictable. Minor deviations include 'ping', 'remesh', 'playback_control' and the adjective-initial 'smart_uv_project', which break strict consistency but remain readable.

    Tool Count1/5

    With 175 tools, this server is drastically over-scaled for any agent to effectively choose from, far exceeding the 50+ threshold for extreme mismatch. Even for a comprehensive application like Blender, the tool surface should be partitioned into several smaller, purpose-specific servers.

    Completeness3/5

    The server covers an impressively wide range of Blender functionality, including objects, materials, lighting, animation, physics, nodes, armatures, and particles. However, notable lifecycle gaps exist, such as no mode-switching tool, no rename/material/action/image operations, no action deletion, and no way to delete UV maps or vertex groups, forcing reliance on escape hatches like execute_python.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      An MCP server that enables AI models to directly control Blender for 3D modeling, scene manipulation, and material management through natural language. It supports advanced workflows including Python code execution, viewport visualization, and integration with external asset libraries like Poly Haven and Hyper3D.
      22
      1
      MIT