blender-research-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BLENDER_RESEARCH_MCP_BLENDER_EXECUTABLE | No | Optional path to a Blender executable. When set, the MCP server can launch a visible Blender instance via application.launch. If not set, the server will auto-discover existing Blender sessions on port 9877. |
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 |
|---|---|
| application.statusA | Report whether a compatible Blender MCP session is running and summarize it. |
| application.launchA | Reuse a compatible Blender MCP session or launch the configured Blender with the version-matched session add-on. This tool never opens a project. |
| application.quitA | Commit an active transaction, optionally save the current project, and quit Blender on the next main-thread tick. |
| project.statusA | Read the current Blender project path, dirty state, generation, transaction, and most recent lifecycle operation without requiring a 3D viewport. |
| project.saveA | Commit the active transaction and save the current project, optionally using an absolute Save As path. Existing targets are overwritten. |
| project.openA | Open an existing absolute .blend path on the next main-thread tick. By default the current transaction is committed and dirty current project is saved. |
| project.reloadA | Reload the current saved .blend file on the next main-thread tick. Unsaved changes are discarded unless save_current is true. |
| connection.pingA | Check the authenticated Blender connection, versions, and UI heartbeat. |
| context.getA | Read the active Blender mode, selection, scene, and available viewports. |
| context.snapshotC | Store the current user context in Blender and return a session-local token. |
| context.restoreB | Restore a previously captured session-local Blender context snapshot. |
| scene.inspectB | Return bounded scene objects, collections, materials, images, world, active camera, and render summaries with session-local identities. |
| object.inspectA | Inspect one exact Blender object without changing user context. |
| object.geometry.inspectA | Return a bounded evaluated mesh summary without exposing raw vertex or face arrays. |
| object.lookdev.inspectA | List bounded object-local visibility, modifier, shape-key, and material-slot targets with session identities for safe preview writes. |
| material.inspectA | Inspect one exact material slot and list bounded node input identities, values, ranges, links, drivers, and write eligibility. |
| image.inspectA | Inspect one exact Blender image data-block, including absolute path, identity, dimensions, color space, users, and packed state. |
| viewport.captureA | Temporarily frame an object from a semantic view, capture the 3D editor, and restore the user's context. |
| viewport.raycastA | Resolve a normalized image coordinate against the evaluated Blender geometry represented by a prior viewport capture. |
| observation.bundleC | Capture one to three consistent semantic views with before/after context and object evidence. |
| lookdev.compareB | Capture a baseline and one to three absolute candidates for one inspected LookDev property, rolling every candidate back before returning evidence. |
| transaction.beginC | Begin the single reversible preview transaction for this Blender instance. |
| object.createB | Create one uniquely named bounded primitive, empty, camera, or light in an exact collection inside the active structural transaction. |
| object.duplicateA | Duplicate one exact object with linked or independent object data and a unique new name inside the active structural transaction. |
| object.deleteB | Unlink one exact unselected object now, restore it on rollback, or remove the object data-block when the structural transaction commits. |
| object.setA | Atomically apply typed transform, visibility, Light, and Camera settings to one exact object inside the active transaction. |
| object.transformC | Set one or more local object scale axes to absolute values inside the active transaction. |
| object.visibility.setA | Set absolute object viewport and/or render visibility flags inside the active transaction. |
| modifier.set_stateA | Set absolute viewport and/or render enable flags for one exact modifier inside the active transaction. |
| shape_key.set_valueA | Set one exact non-Basis, non-driven mesh shape key to an absolute value inside the active transaction. |
| material.set_inputA | Set one exact unlinked, undriven scalar/vector/color material input inside the active transaction. Shared materials require explicit confirmation. |
| material.createB | Create a uniquely named canonical Principled PBR material with bounded semantic surface values inside the active structural transaction. |
| material.assignA | Append, replace, or clear one exact material slot on inspected object data. Shared data requires its exact user count and explicit permission. |
| image.loadA | Load or reuse an image from an arbitrary absolute local path with a bounded color-space policy inside the active structural transaction. |
| material.texture.bindB | Bind one exact local image through generated semantic mapping nodes to a Principled PBR channel. Existing links require an exact replacement guard. |
| material.texture.clearB | Clear the exact inspected incoming link set from one Principled semantic channel and restore it if the structural transaction rolls back. |
| world.setB | Create or modify the current World background and an optional exact local environment image inside the active structural transaction. |
| scene.camera.setA | Set one exact Camera object as the active scene camera inside the structural transaction and restore the previous camera on rollback. |
| render.previewA | Render one exact Camera with temporary bounded Eevee Next settings, return PNG evidence, and restore all camera and render settings. |
| render.saveA | Render one exact Camera with bounded Eevee Next settings and overwrite an absolute PNG or EXR output path whose parent already exists. |
| transaction.commitA | End a transaction while retaining its changes in the current Blender session. This never saves the blend file. |
| transaction.rollbackC | Restore transaction property deltas and the captured user context. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Haiyang-Bian/blender-research-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server