blendermcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BLENDER_MCP_BRIDGE_TOKEN | Yes | Shared secret used to authenticate the MCP process to the Blender add-on. Must be set to the same value in the Blender plugin preferences. | |
| BLENDER_MCP_SNAPSHOT_DIR | No | Optional directory for pre-mutation snapshots. | |
| BLENDER_MCP_ALLOWED_ROOTS | No | One or more working directories that file tools are allowed to access. If not configured, file tools remain disabled. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| pingA | Check if the Blender addon is reachable and return version info. |
| get_scene_infoA | Get current scene metadata: name, frame range, FPS, render engine, object/material counts. |
| load_fileA | Load a .blend file. This replaces the current scene — confirm to proceed. |
| save_fileA | Save the current scene. If filepath is provided, save-as to that path. |
| set_frameC | Set the current frame. |
| set_frame_rangeA | Set the scene frame range (start and/or end frame). |
| get_object_infoB | Get detailed info about an object: type, transforms, modifiers, materials, parent, collections. |
| list_objectsA | List all objects in the scene. Optionally filter by type (MESH, CAMERA, LIGHT, EMPTY, etc.). |
| create_objectB | 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). |
| delete_objectA | Delete an object by name. Confirm required. |
| set_transformC | Set an object's location, rotation (radians), and/or scale. |
| apply_transformA | Apply (freeze) the object's transforms to mesh data. Resets the applied transforms to identity. |
| duplicate_objectA | Duplicate an object. If linked=True, the copy shares mesh data with the original. |
| rename_objectA | Rename an object. Returns the actual name assigned (may be auto-incremented). |
| set_parentC | Set parent-child relationship between objects. |
| clear_parentB | Clear an object's parent, keeping its world transform. |
| set_originC | Set an object's origin point. Types: ORIGIN_GEOMETRY, ORIGIN_CENTER_OF_MASS, ORIGIN_CENTER_OF_VOLUME, ORIGIN_CURSOR, GEOMETRY_ORIGIN. |
| select_objectsB | Select objects by name list, glob pattern, or type. Deselects others by default. |
| list_materialsA | List all materials in the blend file with user counts. |
| get_material_infoA | Get material settings: base color, metallic, roughness, node tree summary. |
| create_materialC | Create a new Principled BSDF material. base_color is [R, G, B, A] (0-1 range). |
| assign_materialA | Assign a material to an object. If slot is specified, replaces that slot; otherwise appends a new slot. |
| remove_materialB | Remove a material slot from an object by slot index. |
| set_material_propertyB | Set a Principled BSDF property. Properties: base_color, metallic, roughness, specular, transmission, emission_color, emission_strength, alpha, normal_strength. |
| duplicate_materialB | Duplicate a material. Returns the new material name. |
| delete_materialA | Delete a material. Confirm required. Removes from all object slots. |
| get_viewport_infoA | Get viewport settings: shading mode, overlays, camera, clip distances. |
| capture_viewportB | Capture a screenshot of the 3D viewport to a file. Returns the file path. |
| set_viewport_shadingB | Set viewport shading mode: WIREFRAME, SOLID, MATERIAL, RENDERED. |
| set_viewport_cameraA | Set the active camera for the viewport. Pass camera object name, or None for default. |
| frame_selectedA | Frame the viewport to show selected objects (Numpad .). |
| frame_allA | Frame the viewport to show all objects (Home key). |
| list_collectionsA | List all collections with child counts, object counts, and visibility. |
| create_collectionC | Create a new collection, optionally under a parent collection. |
| move_to_collectionA | Move an object to a collection (removes from current collections). |
| set_collection_visibilityB | Set collection visibility in viewport and/or render. |
| delete_collectionA | Delete a collection. Objects in it become orphaned. Confirm required. |
| get_render_settingsA | Get render settings: engine, resolution, samples, output path, file format. |
| set_render_settingsA | Configure render settings. Engine: CYCLES, BLENDER_EEVEE_NEXT, BLENDER_WORKBENCH. File format: PNG, JPEG, EXR, TIFF. Color mode: BW, RGB, RGBA. |
| render_imageB | Render the current frame to an image file. Uses scene output path if filepath not specified. |
| render_animationA | Render the full animation frame range. This is a long-running operation. |
| render_viewportC | Render the viewport (OpenGL render) to a file. |
| list_render_enginesA | List available render engines. |
| find_objectsB | Search for objects by name pattern (glob), type, material, or collection. |
| batch_set_propertyB | Set the same property on multiple objects at once. |
| batch_deleteB | Delete multiple objects at once. Confirm required. |
| find_error_objectsA | Find objects with issues: missing textures, broken modifiers, invalid references. |
| 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. |
| export_fileB | Export the scene to a file. Format is auto-detected from extension if not specified. |
| list_supported_formatsA | List supported import and export file formats. |
| export_selectionB | Export only selected objects to a file. |
| list_modifiersA | List all modifiers on an object with their type and settings. |
| add_modifierB | Add a modifier to an object. Common types: SUBSURF, BOOLEAN, ARRAY, MIRROR, SOLIDIFY, BEVEL, DECIMATE, SMOOTH, SHRINKWRAP, ARMATURE, CURVE, LATTICE. |
| remove_modifierA | Remove a modifier from an object by name. |
| set_modifier_propertyC | Set a modifier property. Property names are Blender API names (e.g., 'levels' for SUBSURF, 'count' for ARRAY, 'operation' for BOOLEAN). |
| apply_modifierA | Apply a modifier, baking it into the mesh. Requires Object Mode. Irreversible. |
| move_modifierB | Move a modifier up or down in the stack. Direction: UP or DOWN. |
| toggle_modifier_visibilityB | Toggle modifier visibility in viewport and/or render. |
| copy_modifiersA | Copy all modifiers from source object to target object. |
| list_lightsA | List all lights in the scene with type and settings. |
| create_lightC | Create a light. Types: POINT, SUN, SPOT, AREA. |
| set_light_propertyB | Set a light property: energy, color, shadow_soft_size, spot_size, spot_blend, use_shadow, size (area light). |
| create_hdri_worldC | Set up HDRI environment lighting from an image file. |
| set_world_propertyB | Set world/environment property: color, strength. |
| get_world_infoA | Get current world/environment shader settings. |
| create_light_rigB | Create a three-point lighting setup (key, fill, rim). Optionally aimed at a target object. |
| list_camerasA | List all cameras with their settings. |
| create_cameraB | Create a camera with specified focal length. |
| set_camera_propertyB | Set camera property: focal_length, sensor_width, clip_start, clip_end, dof_use, dof_focus_distance, dof_aperture_fstop. |
| set_active_cameraC | Set the active scene camera. |
| camera_look_atB | Point a camera at a target object or world location. |
| setup_camera_dofB | Configure depth of field on a camera. Focus on an object or at a specific distance. |
| get_keyframesA | Get keyframes on an object, optionally filtered to a specific data_path (e.g., 'location', 'rotation_euler'). |
| 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. |
| set_keyframesA | Batch insert multiple keyframes. Each entry: {frame: int, value: float|list}. More efficient than calling set_keyframe repeatedly. |
| delete_keyframeC | Delete a keyframe at a specific frame. |
| clear_animationA | Remove all animation data (keyframes, actions) from an object. Irreversible. |
| get_action_infoA | Get info about an action: frame range, channels, keyframe count. |
| list_actionsA | List all actions in the blend file. |
| set_interpolationA | Set keyframe interpolation for all keyframes on a channel. Types: BEZIER, LINEAR, CONSTANT. |
| set_playback_rangeC | Set the preview/playback range. |
| playback_controlB | Control animation playback: PLAY, PAUSE, STOP. |
| list_constraintsB | List constraints on an object or pose bone. |
| 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. |
| remove_constraintB | Remove a constraint by name. |
| set_constraint_propertyC | Set a constraint property. Common: target, subtarget, influence, axis. |
| set_constraint_influenceC | Set constraint influence (0.0 to 1.0). |
| reorder_constraintB | Move a constraint up or down. Direction: UP or DOWN. |
| get_mesh_infoB | Get mesh info: vertex/edge/face count, UV maps, vertex groups, has_custom_normals. |
| get_verticesB | Get vertex positions. Optionally filter by vertex group. Limited to avoid huge payloads. |
| set_verticesA | Set vertex positions. Each entry: {index: int, co: [x, y, z]}. |
| get_vertex_groupsA | Get vertex groups on a mesh with member counts. |
| create_vertex_groupC | Create a vertex group, optionally assigning vertices with a weight. |
| set_smooth_shadingB | Set shading mode. smooth=True for smooth shading, False for flat. auto_smooth uses angle threshold (radians). |
| separate_meshA | Separate mesh into multiple objects. Modes: LOOSE (by loose parts), MATERIAL (by material), SELECTED. |
| join_meshesA | Join multiple mesh objects into one. The first object becomes the active/target. Destroys source objects. |
| create_curveC | Create a curve object. Types: BEZIER, NURBS, POLY (path). |
| get_curve_infoA | Get curve info: spline count, point count, dimensions, bevel settings. |
| set_curve_pointsC | 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. |
| set_curve_propertyC | Set curve property: bevel_depth, bevel_resolution, extrude, dimensions (2D/3D), resolution_u, fill_mode. |
| convert_to_meshA | Convert a curve object to a mesh. Loses curve editability. |
| add_physicsC | Add a physics simulation. Types: RIGID_BODY, CLOTH, FLUID, SOFT_BODY, COLLISION. |
| remove_physicsC | Remove physics from an object. |
| set_physics_propertyC | Set a physics property. E.g., type=RIGID_BODY, property=mass, value=5.0. |
| get_physics_infoB | Get physics settings on an object. |
| setup_rigid_body_worldC | Configure the rigid body world and collection. |
| setup_cloth_simC | Template: Set up cloth simulation with optional pinning vertex group. |
| setup_fluid_domainB | Template: Set up fluid simulation with domain and optional emitter. |
| setup_softbodyC | Template: Set up softbody simulation. |
| bake_physicsC | Bake physics simulation. Long-running operation. |
| free_physics_bakeC | Free baked physics simulation data. Irreversible. |
| get_node_treeA | Get the full shader node tree: nodes, links, input values. |
| create_shader_nodeB | Add a shader node to a material. Common types: ShaderNodeBsdfPrincipled, ShaderNodeTexImage, ShaderNodeTexNoise, ShaderNodeMixRGB, ShaderNodeBump, ShaderNodeNormalMap, ShaderNodeMapping, ShaderNodeTexCoord, ShaderNodeValToRGB, ShaderNodeMath. |
| delete_shader_nodeB | Remove a node from a material's node tree. |
| connect_shader_nodesC | Connect an output socket to an input socket. Sockets can be specified by name or index. |
| disconnect_shader_nodeB | Disconnect an input socket on a node. |
| set_node_inputB | Set a node input's default value (color, float, vector). |
| get_node_inputB | Get a node input's current default value. |
| set_node_positionC | Set a node's position in the editor. |
| list_shader_node_typesA | List available shader node types. |
| create_node_groupC | Create a node group from selected nodes. |
| add_node_group_instanceB | Add an instance of an existing node group to a material. |
| layout_node_treeB | Auto-arrange nodes in a material's node tree. |
| get_geonodes_treeB | Get the geometry node tree structure: nodes, links, inputs. |
| create_geonodes_modifierC | Add a geometry nodes modifier. Creates a new tree or uses an existing one. |
| create_geonodeC | Add a node to a geometry node tree. Common types: GeometryNodeMeshGrid, GeometryNodeMeshCube, GeometryNodeSetPosition, GeometryNodeTransform, GeometryNodeJoinGeometry, GeometryNodeInstanceOnPoints, GeometryNodeDistributePointsOnFaces. |
| delete_geonodeB | Remove a node from a geometry node tree. |
| connect_geonodesC | Connect nodes in a geometry node tree. |
| disconnect_geonodeC | Disconnect an input on a geometry node. |
| set_geonode_inputB | Set a geometry node input's default value. |
| get_geonode_inputC | Get a geometry node input's current value. |
| list_geonode_typesA | List available geometry node types for the current Blender version. |
| set_geonodes_inputA | Set a modifier-level input (Group Input interface value). |
| get_compositor_treeA | Get the compositor node tree structure. |
| enable_compositorA | Enable the compositor (use_nodes=True on scene). |
| create_comp_nodeC | Add a compositor node. Common types: CompositorNodeRLayers, CompositorNodeComposite, CompositorNodeViewer, CompositorNodeMixRGB, CompositorNodeBlur, CompositorNodeGlare, CompositorNodeColorBalance, CompositorNodeBrightContrast, CompositorNodeHueSat. |
| delete_comp_nodeC | Remove a compositor node. |
| connect_comp_nodesC | Connect compositor nodes. |
| set_comp_node_inputC | Set a compositor node input value. |
| list_comp_node_typesA | List available compositor node types. |
| setup_basic_compositeB | Template: Create Render Layers -> Composite + Viewer setup. |
| create_armatureB | Create an armature with an initial bone. |
| get_armature_infoB | Get armature info: bone hierarchy, bone count. |
| add_boneC | Add a bone to an armature. Head and tail are 3D positions. |
| set_bone_propertyB | Set a bone property: roll, envelope_distance, head, tail, use_connect. |
| get_bone_infoB | Get bone info: head, tail, roll, parent, children, constraints. |
| parent_mesh_to_armatureB | Parent a mesh to an armature. Mode: AUTOMATIC (auto weights), EMPTY (no weights). |
| assign_vertex_weightsC | Assign vertex weights to a bone's vertex group. |
| add_bone_constraintC | Add a constraint to a pose bone. Types: IK, COPY_ROTATION, COPY_LOCATION, LIMIT_ROTATION. |
| set_pose_bone_transformB | Set a pose bone's transform (location and/or rotation in pose space). |
| list_bone_constraintsC | List constraints on a pose bone. |
| add_particle_systemC | Add a particle system. Types: EMITTER, HAIR. |
| remove_particle_systemC | Remove a particle system by name. |
| set_particle_propertyB | Set a particle system property: count, lifetime, emit_from, physics_type, size. |
| get_particle_infoC | Get particle system settings. |
| setup_hairC | Template: Set up hair particles with children and physics. |
| bake_particlesC | Bake particle simulation. |
| enter_sculpt_modeC | Switch an object to sculpt mode. |
| set_sculpt_brushA | Set the active sculpt brush and settings. Brushes: DRAW, CLAY, CLAY_STRIPS, INFLATE, GRAB, SMOOTH, FLATTEN, PINCH, CREASE, SCRAPE. |
| remeshC | Remesh an object. Modes: VOXEL, QUAD (quadriflow). |
| apply_sculpt_maskC | Convert sculpt mask to a vertex group. |
| create_grease_pencilC | Create a grease pencil object. |
| get_gp_infoA | Get grease pencil info: layers, frames, stroke count. |
| add_gp_layerC | Add a layer to a grease pencil object. |
| set_gp_layer_propertyC | Set a GP layer property: color, opacity, thickness, use_lights. |
| create_gp_strokeC | Create a stroke from point list. Each point: {co: [x,y,z], pressure: float, strength: float}. |
| add_gp_modifierB | Add a GP modifier. Types: GP_THICK, GP_NOISE, GP_SMOOTH, GP_SUBDIV, GP_TINT, GP_OPACITY. |
| list_imagesA | List all images in the blend file. |
| load_imageC | Load an image from file into the blend file. |
| get_uv_mapsB | Get UV maps on a mesh object. |
| create_uv_mapC | Add a UV map to a mesh object. |
| smart_uv_projectC | Auto UV unwrap using smart project. Angle limit in radians (default ~66 degrees). |
| pack_imagesA | Pack all external images into the blend file. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 173 tools
Most tools have distinct purposes with clear descriptions, though a few pairs like set_geonode_input vs set_geonodes_input could cause confusion without careful reading. The majority are well-separated by resource type and action.
The dominant pattern is verb_noun (e.g., list_objects, create_material), but a few tools like camera_look_at and playback_control deviate to noun_verb. The naming is generally predictable and readable, with only minor inconsistencies.
With 173 tools, this far exceeds the threshold for an extreme mismatch (50+). While Blender is complex, this server attempts to cover every conceivable feature, making the surface unwieldy and difficult for agents to navigate effectively.
The tool surface is remarkably broad, covering objects, materials, modifiers, animation, physics, node systems (shader, geometry, compositor), sculpting, and more. Minor gaps exist (e.g., manual UV editing, advanced painting), but core workflows are well-supported.