blender-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BLENDER_EXE | No | Full path to the Blender executable. | auto-detected |
| BLENDER_MCP_HOST | No | Bridge address. | 127.0.0.1 |
| BLENDER_MCP_PORT | No | Bridge port. | 9876 |
| BLENDER_MCP_ROOT | No | Base for relative file paths. | home directory |
| BLENDER_MCP_TIMEOUT | No | Per-command timeout in seconds. | 300 |
| BLENDER_MCP_AUTOLAUNCH | No | Set to 1 to start Blender if none is running. | |
| BLENDER_MCP_ALLOWED_ROOTS | No | Semicolon-separated roots; import/export/save outside them is refused. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| blender_setupA | Install the bundled Blender addon and enable it, so the bridge can start. Call this ONCE on a machine where Afterwards the user must restart Blender (or launch it if it is closed) - the bridge starts automatically with the addon. |
| blender_statusA | Check whether the Blender bridge is reachable and what it is running. Start with this. If |
| blender_get_sceneA | Get an overview of the open scene: objects, collections, materials, meshes, images, render settings, frame range and the active object. Args: detailed: Include per-object modifiers, constraints, light and camera data. |
| blender_execute_pythonA | Execute arbitrary Python inside Blender and return stdout, the expression value, or the traceback. This is the general escape hatch: use it for anything the dedicated tools do not cover (node graphs, drivers, custom rigging, numpy-style math, bmesh work). Available names: bpy, bmesh, math, mathutils (Vector/Euler/Matrix/ Quaternion), json, os, sys, random, time, view3d (a context manager that injects a 3D viewport area so bpy.ops viewport calls work). Example:
|
| blender_list_operatorsA | Discover the bpy.ops operators available in this Blender build, with their descriptions and (optionally) their exact property names, types, enum options and defaults. Use this to find the right operator before calling blender_run_operator. |
| blender_run_operatorB | Run any bpy.ops operator by name with automatic 3D viewport context fallback and validation of the property names. Call blender_list_operators first if you are unsure of the exact id or property names. |
| blender_search_apiA | Search Blender's operator namespace by keyword. Faster than blender_list_operators when you only know part of a name. |
| blender_list_objectsA | List objects in the scene with transforms, dimensions, materials and modifiers. Supports filtering and offset/limit pagination. Args: collection: Only objects in this collection (includes children). type: Comma separated Blender types, e.g. 'MESH,LIGHT,CAMERA'. name_pattern: Regular expression matched against the object name. parent: A parent object name, or 'none' for top-level objects. detailed: Also include world matrix, shape keys and vertex groups. |
| blender_get_objectA | Get everything known about one object: transforms, hierarchy, materials, modifiers, constraints, mesh statistics, custom properties and world matrix. |
| blender_add_primitiveA | Add a mesh primitive to the scene and return its full description. Example: a smooth torus at the origin ->
|
| blender_create_meshA | Create a mesh object from explicit vertex and face data.
|
| blender_duplicate_objectsB | Duplicate objects together with their mesh data (an independent copy). |
| blender_delete_objectsA | Permanently delete objects from the .blend file. This cannot be undone from the MCP server - save first if the scene matters. |
| blender_rename_objectA | Rename an object and, by default, its mesh/light/camera data block too. |
| blender_set_transformA | Set or offset the transform of one or more objects. With |
| blender_apply_transformA | Bake transforms into mesh data. Use this before exporting or when a modifier must see real geometry rather than an object transform. |
| blender_select_objectsA | Set the selection and active object. Many operators operate on the selection, so this is how you target them. |
| blender_join_objectsB | Join several mesh objects into the first one, merging their geometry. |
| blender_parent_objectsC | Parent one object to another (optionally keeping its world position). |
| blender_shade_smoothA | Set smooth or flat shading on meshes. Pass |
| blender_edit_meshA | Edit mesh topology: extrude, bevel, inset, subdivide, dissolve, delete, merge, recalculate normals and more. Operates on the current edit-mode selection inside the object unless
|
| blender_add_modifierA | Add a modifier to an object. Non-destructive: use blender_apply_modifier or leave it in place for a live, tweakable result. |
| blender_apply_modifierB | Bake a modifier's result into the mesh, making it permanent. |
| blender_create_collectionB | Create a collection, optionally nested under |
| blender_assign_to_collectionA | Add objects to an collection that already exists in the scene. Use blender_create_collection first if the collection is missing. Objects stay linked to their other collections, so this adds a reference rather than moving them. |
| blender_list_materialsA | List all materials. With |
| blender_create_materialC | Create a Principled BSDF material and optionally assign it to objects. Example - a glowing red metal ->
|
| blender_assign_materialA | Assign an existing material to objects, replacing their current slots. |
| blender_set_material_nodeA | Add a procedural or image texture node to a material and wire it into the Principled BSDF. This is the fast path to interesting surfaces without hand-building node trees. Example - marbled stone ->
|
| blender_load_image_textureB | Load an image from disk (including .hdr/.exr) and plug it into a material as Base Color. Creates the material if you do not name one. |
| blender_add_cameraC | Add a camera. |
| blender_look_atA | Aim any object along its local -Z axis at a target (its local +Y becomes 'up'). Works for cameras and spot lights. |
| blender_set_active_cameraA | Choose which camera the render uses. Call this before blender_render or blender_capture_viewport with mode='camera' if the scene has several. |
| blender_add_lightC | Add a light. Typical energies: SUN 2-5, AREA 100-1000 W, POINT 50-500 W,
SPOT 100-1000 W. |
| blender_set_worldA | Set the world/environment: flat colour, a neutral studio grey, a physical sky, an HDRI image, or a vertical gradient. The world is what you see through the background and what ambient light comes from. |
| blender_set_render_settingsC | Configure the renderer: engine, resolution, samples, colour management, transparency, motion blur, depth of field and output settings. |
| blender_capture_viewportB | Take a picture of what Blender is showing and return it as an image. This is how you check your work - call it after a change and look at the result. 'viewport' is nearly instant, 'render' is the real deal. |
| blender_renderA | Render with the current engine and return the resulting image. Cycles at 1080p can take minutes; check samples and resolution with blender_get_scene first, and consider the 'eevee' engine for iteration. |
| blender_save_blendA | Save the scene to a .blend file. Pass a path for Save As, omit it to save in place. Unwritten work is lost if Blender crashes, so save as you go. |
| blender_open_blendA | Open a .blend file, discarding the current scene. Save first. |
| blender_new_fileA | Start a new empty scene, discarding everything currently open. |
| blender_import_modelB | Import a 3D model from disk: .glb/.gltf, .fbx, .obj, .stl, .ply, .usd, .abc, .dae or .blend. Returns the names of the objects that were created. |
| blender_export_modelB | Export the scene to a model file: .glb, .gltf, .fbx, .obj, .stl, .ply, .usd, .abc or .blend. |
| blender_set_frameC | Jump to a frame and/or set the animation range and playback speed. |
| blender_insert_keyframeA | Insert keyframes on the current or given frame. Defaults to keyframing the location of the active object. |
| blender_animation_infoA | Report the frame range, all actions, and which objects are animated. |
| blender_validateA | Audit the model and return a scored report: scale, dimensions, normals, topology, intersections, symmetry, naming, materials, UVs, transforms, pivots, poly budget, LODs, lighting and orphan datablocks. This is the first tool to reach for after building something, and again
before exporting. Pass Each check reports |
| blender_find_problemsA | Like Use this when you want to act rather than read: it returns an |
| blender_analyze_meshA | Deep statistics for one mesh. Beyond face counts: manifold/boundary/wire edge census, whether the shell is closed, signed volume, surface area, min/max/zero-area faces, loose verts and edges, duplicate vertices within 1e-5, UV layers, vertex groups, shape keys and the modifier stack. Use it to decide between fixing a mesh and regenerating it. |
| blender_measureA | Measure real-world distances that are tedious to eyeball: a bounding box, the distance between two object centres, or the extent of a whole assembly. |
| blender_generate_textureA | Generate a procedural texture and write it to a real PNG on disk. Useful for plate text, hazard stripes, carbon weave, rust, brushed metal, leather grain and similar. The file is a normal image you can inspect, pack and ship - not a viewport-only effect. |
| blender_generate_pbr_setA | Generate a matched BaseColor / Roughness / Metallic / Normal / AO set. All five maps come from one height field and one seed, which is what makes
them read as a single material. BaseColor is written sRGB, the data maps
Non-Color. Pass |
| blender_bake_textureA | Bake a material's procedural node setup down to image files on disk. Needs UVs and a node-based material. Cycles is the reliable bake engine; if the bake fails the result says so and why instead of raising. |
| blender_pack_texturesA | Pack every loose image into the .blend so the file is self-contained. Do this before handing a .blend to someone else or committing it. |
| blender_list_imagesA | List every image datablock with size, source, colour space and packed state. |
| blender_set_contextA | Set mode, active object, active collection and selection atomically. Most operator calls need all four set correctly. Doing it in one round trip avoids leaving Blender in a half-applied state when one step fails. |
| blender_select_byA | Select objects by a predicate rather than by name. Names are what agents get wrong on a large scene. This finds every mesh with loose geometry, without a material, without UVs, larger than N metres, belonging to a collection, or matching a glob. |
| blender_undoA | Undo the last change pushed onto Blender's undo stack. Pair it with |
| blender_redoA | Redo the last undone change, restoring the scene to the state it had
before the matching |
| blender_checkpointA | Push a named marker onto the undo stack so a later |
| blender_geometryB | Geometry operations that do not fit the generic modifier tool. Covers mirror, array, solidify, screw, spin, weld, normal fixes, triangulation, decimation, remeshing, wireframe, shrink/fatten and a batch bevel. Edit-mode operations restore object mode automatically, even if the operator raises. |
| blender_modifiersB | Inspect, mute, reorder, remove or apply modifiers across objects. Modifier order changes results, and |
| blender_uvA | Unwrapping and UV maintenance: report, smart project, unwrap, pack islands, weld, scale and centre. A UV layer is created if missing. |
| blender_rigA | Create an armature, add bones, and bind meshes with automatic weights. Also the escape hatch for crash setups: skin the body panels, then simulate. |
| blender_poseA | Set a pose bone's location, rotation and scale. Useful for posing before a physics bake or for checking a rig's range of motion. |
| blender_physicsB | Rigid bodies, cloth, soft bodies, collision and force fields. Set up separate panels as independent rigid bodies, add collision to the
chassis, bake, and inspect. Rigid body constraints go through
|
| blender_scene_opsB | Hierarchy and housekeeping: duplicate a parent with all children, instance or realise collections, purge orphans, and inspect the depsgraph, enabled add-ons or datablock counts. |
| blender_render_extrasC | Turntable renders, a fast clay preview, render pass toggles, and contact sheets assembled from existing images. The clay preview uses Workbench, so it is near-instant even on a heavy scene. |
| blender_batchA | Run many bridge commands in a single round trip. Each step is Command names are the addon's, not the tool names: |
| blender_make_materialA | Create a physically sensible PBR material from a named preset. Presets set the Principled BSDF correctly for the real substance - car paint
gets metallic plus a clear coat, glass gets transmission and IOR 1.52,
leather and fabric get high roughness, emissive presets get emission colour
and strength. Any socket can be overridden. Pass |
| blender_build_shaderA | Build an arbitrary shader node graph from a declarative description. This is the full-control path when a preset is not enough. Socket names are the real Blender ones, so anything from the manual works. Problems are reported per node rather than aborting, so one bad socket does not cost you the whole graph. |
| blender_shader_infoA | Dump a material's node graph: every node, its unconnected inputs with values, its outputs, and all links. Use it to find out what a material actually is before editing it. |
| blender_set_shader_inputA | Set one input socket on one node, by name. No guessing at socket indices. |
| blender_connect_shaderC | Connect an output socket to an input socket inside a material. |
| blender_procedural_materialA | Build a complete procedural surface in one call. Wires a coordinate and mapping node to a noise, voronoi, wave or checker texture, then through a colour ramp into Base Color, a map-range into Roughness, and the raw field into a bump node. This is the graph most hard-surface and natural surfaces actually need, and it is tedious to assemble socket by socket. |
| blender_world_shaderA | Build the world shader: flat colour, vertical gradient, physical sky, or an HDRI image. Nishita with sun elevation gives a believable daylight environment without an HDRI download. |
| blender_paint_vertex_colorsA | Write per-vertex colours as a gradient along an axis. Useful as a mask, for toon shading, or for baking masks into a vertex colour layer. |
| blender_material_reportA | List every material with its users, the objects using it, node count, linked images and blend settings. |
| blender_downloadA | Fetch a URL to a local file and report its size and SHA-256. Only http and https are allowed, the download is size-capped, and nothing
downloaded is ever executed. Combine with |
| blender_import_assetA | Import a 3D model from a URL or a local file, as separate editable objects. Handles fbx, obj, gltf, glb, stl, ply, usd, usdz, abc, dae and blend. A URL is downloaded first, respecting the size cap. Everything arrives as ordinary objects you can then validate, modify and export. |
| blender_export_assetA | Export the scene or a named set of objects to a model file. Sensible defaults per format: fbx applies scale and bakes modifiers with materials embedded, glTF applies modifiers and exports textures, obj keeps normals and UVs. The call fails if the exporter reports success but no file appears, rather than claiming a lie. |
| blender_list_librariesA | List the asset libraries available for search and download. |
| blender_search_libraryA | Search a free CC0 asset library. Poly Haven needs no API key. Returns ids you pass to |
| blender_fetch_assetA | Download an asset from a library by id, and optionally use it. An HDRI becomes the world lighting in one call, which is the fastest route to a believable render without any HDRI hunting. |
| blender_list_addonsB | List every available Blender add-on with its enabled state and version. |
| blender_manage_addonA | Enable, disable or install a Blender add-on. Installing requires |
| blender_list_packagesA | List the Python packages Blender's own interpreter can see, with sys.path and the project-local directory new packages go into. |
| blender_install_packageA | pip install a package into a project-local directory. Packages go to their own directory, never into Blender's bundled
site-packages, so a bad dependency cannot break the application. Refused
without |
| blender_append_node_groupB | Append shader or geometry node groups from another .blend file, so you can reuse an existing shader library instead of rebuilding graphs by hand. |
| blender_list_actionsA | List every action with its frame range, user count, slot names and how many objects use it. |
| blender_manage_actionB | Create, assign, rename, copy or remove an action. Handles Blender 4.4+ slotted actions, creating the slot up front so keys can be inserted immediately afterwards. |
| blender_keyframe_channelA | Insert keyframes on any data path, including modifier levels and custom properties, optionally filling a whole frame range. Broader than the original keyframe tool, which only handled the three standard transforms. |
| blender_remove_keyframesA | Delete keyframes from a data path over a frame range, or clear the whole animation data on an object. |
| blender_curvesA | Inspect and shape the F-curves of an object's action. This is where animation gets its character rather than just its timing: interpolation and easing, handle types, noise and cyclic modifiers, retiming the whole curve, or scaling its values. |
| blender_nlaA | Drive non-linear animation: push an action onto its own track so the active action stops driving the pose, then layer, blend and mute strips. |
| blender_driversA | Add, list or remove drivers with real typed variables and expressions. Useful for procedural motion that should not be baked: spin a wheel from the frame counter, bob something with a sine, or link a value to a custom property. |
| blender_shape_keysC | Create and drive shape keys: facial blends, damage states, LOD morphs or simple deformation without touching the base mesh. |
| blender_simulateA | Step a physics simulation forward, bake it to keyframes, or reset the point cache. Bake is how a cloth or soft-body result becomes a usable animation rather than a live simulation. |
| blender_sequencerA | Drive the video sequencer: add movie or image strips to channels, set the frame range, and render the sequence out to a movie or image sequence. This is the route to an actual rendered video rather than a single still. |
| blender_camera_moveB | Animate the camera: a keyed orbit turntable, a follow constraint, or a two-point dolly. The orbit mode is the quickest route to a review turntable around a model - keys and constraints both, so it renders deterministically. |
| blender_timelineC | Report or set the frame range, fps and step, and manage timeline markers. |
| blender_settings_reportA | Report what the project is actually set to. Covers the scene, the full render configuration including Cycles and EEVEE sampling and colour management, datablock counts, user preferences, file paths, linked libraries and registered handlers. This is the answer to "what are the current settings". |
| blender_set_settingA | Change any single project setting by dotted path, and report the old and new value. Deliberately one setting per call: a bulk setter would let a wrong path silently wreck a whole configuration. |
| blender_blend_contentsA | Inventory every datablock in the file by type, with user counts, orphans and which library each came from. The fastest way to see what a .blend actually contains before merging or cleaning it. |
| blender_scripts_and_textsA | List embedded Text datablocks and every .py file inside Blender's script paths, with sizes. Use it to find an add-on's or a script's real location. |
| blender_filesystemA | List or search files, restricted to the user's home directory, Blender's script folders and the asset cache by default. Pass |
| blender_python_envA | Report Blender's interpreter, sys.path, script paths and whether given modules can be imported. Use it before relying on a library. |
| blender_render_reportA | Report what a render would actually use: engine, effective resolution, frame range, resolved output path and whether that directory exists, colour management, camera and lights. |
| blender_diagnoseA | Quick health check on the project: missing camera, unpacked textures, orphan datablocks, missing linked libraries, meshes without materials, or Blender running headless. Cheaper than a full validate when you just want to know what is wrong. |
| blender_auto_uvA | Unwrap meshes in one call and report the resulting UV coverage. Picks a projection automatically when |
| blender_fix_uv_mappingA | Repair stretched, overlapping or out-of-range UVs on existing meshes, then report what changed per object. |
| blender_generate_lodsA | Create decimated LOD copies of meshes and put them in a LOD collection. Reports the original and generated face counts so the trade-off is visible instead of assumed. |
| blender_fix_topologyB | Repair mesh problems: merge duplicate vertices, recalculate normals and delete loose geometry, reporting the before/after counts per object. |
| blender_auto_validateA | Audit a generated model end to end and, with Built for the "I just generated this, is it usable" question: topology, UVs, materials, scale and naming in one pass. |
| blender_quality_guidelinesA | Fetch the modelling quality guidelines the agent should follow. Covers the things that actually decide whether a generated model reads as believable: real proportions instead of convenient ones, built structure rather than modifier stacks, deliberate camera and lighting before a render, and texture resolution that survives a close-up. |
| blender_auto_light_sceneA | Build a complete lighting rig aimed at the subject. Framing is derived from the target objects' bounds, so the lights land at a sensible distance instead of at a hard-coded guess. |
| blender_camera_focusB | Aim a camera at something and, optionally, frame it. Saves a lot of blind iteration on 'why is my render empty'. |
| blender_download_texturesA | Search a free PBR texture library and download matching maps. Pass |
| blender_download_animationsB | Search downloadable animation sources and list what is available. Pass |
| blender_create_animationA | Generate a procedural animation on the given objects. Useful for previews and for checking that a rig actually moves something before spending time on a real animation. |
| blender_paint_textureA | Paint directly into an image datablock and write it to disk. For placing decals, number plates, liveries or wear masks without leaving Blender. |
| blender_list_installed_addonsA | List the add-ons Blender currently has enabled, with versions and the
module names needed by |
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 122 tools
Many tools occupy nearly identical territory: blender_import_asset/blender_import_model and blender_export_asset/blender_export_model describe essentially the same operations, and validation is split across blender_validate, blender_find_problems, blender_auto_validate, and blender_diagnose. There are also multiple UV tools and several material-creation paths, forcing an agent to parse fine-print differences to avoid misselection.
The blender_ prefix and snake_case style are consistent, and most tools use a verb_noun pattern. However, many domain-noun tools like blender_uv, blender_rig, blender_physics, blender_curves, blender_modifiers, and blender_scene_ops break the verb convention, and vague verbs like manage plus near-duplicate import/export naming weaken predictability.
122 tools is an extreme mismatch, far beyond the 50+ threshold for incoherence. While Blender is a large domain, many tools are bundles or near-duplicates that could be consolidated into a much smaller, more navigable set without losing real capability.
The tool surface covers nearly every major Blender workflow: objects, meshes, materials, textures, UVs, animation, physics, rendering, import/export, and asset libraries, with an explicit Python escape hatch for anything missing. Minor gaps remain as dedicated operations, such as deleting materials/images, adding constraints, or editing vertex groups, but these are workable via blender_run_operator or blender_execute_python.