Skip to content

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Blender MCP Server

Connect AI assistants like Claude, Codex, and Gemini to Blender.

Stars Issues Last Commit


What is This?

An MCP server that lets AI inspect your Blender scene, model, rig, animate, weight-paint, UV-unwrap, render, and export — all driven by ~270 direct-dispatch tools (no per-call Python compilation overhead). Forced auto-update keeps every machine on the same version.

Setup

1. Install the plugin + server

Windows — PowerShell:

iwr https://raw.githubusercontent.com/6xvl/blender-mcp/main/install.ps1 | iex

macOS / Linux — Bash:

curl -fsSL https://raw.githubusercontent.com/6xvl/blender-mcp/main/install.sh | bash

The installer drops the addon into Blender's addons folder, installs uv, runs uv tool install blender-mcp, and patches the installed server.py with this fork's expanded toolset.

2. Activate in Blender

  • Edit → Preferences → Add-ons → search "Blender MCP" → tick it.
  • Press N in the 3D viewport → BlenderMCP tab → Connect to Claude.

Status flips to "Running on port 9876". Blender side is done.

3. Connect your AI

Claude Code:

claude mcp add blender-mcp -- blender-mcp

Codex CLI:

codex mcp add blender-mcp -- blender-mcp

Gemini CLI:

gemini mcp add blender-mcp blender-mcp --trust

Verify by asking the assistant to call bm_ping. Expected response: {"ok": true, "scene": "Scene", "frame": 0}.

Other MCP clients (Claude Desktop, Cursor, Windsurf, manual config)

Generic JSON snippet

Add to your client's MCP config:

{
  "mcpServers": {
    "blender-mcp": {
      "command": "blender-mcp",
      "args": [],
      "env": {}
    }
  }
}

If blender-mcp isn't on PATH, use the absolute path printed by the installer (e.g. C:\Users\<you>\.local\bin\blender-mcp.exe on Windows, ~/.local/bin/blender-mcp on macOS/Linux).

Per-client config file

Client Config file
Claude Code ~/.claude.jsonmcpServers
Claude Desktop (Windows) %APPDATA%\Claude\claude_desktop_config.json
Claude Desktop (macOS) ~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Linux) ~/.config/Claude/claude_desktop_config.json
Codex CLI ~/.codex/config.toml[mcp_servers.blender-mcp]
Gemini CLI ~/.gemini/settings.jsonmcpServers
Cursor Settings → MCP → Add Server
Windsurf Settings → MCP servers → JSON config

Manual install (no installer script)

# 1. Install uv if missing
curl -LsSf https://astral.sh/uv/install.sh | sh        # macOS / Linux
iwr https://astral.sh/uv/install.ps1 | iex             # Windows PowerShell

# 2. Install the MCP server
uv tool install blender-mcp

# 3. Patch server.py with this fork's expanded toolset
#    Find the install dir:
uv tool dir
#    Then overwrite the file at: <UV_TOOL_DIR>/blender-mcp/lib/python*/site-packages/blender_mcp/server.py
curl -fsSL https://raw.githubusercontent.com/6xvl/blender-mcp/main/server/server.py \
  -o "<that-path>"

# 4. Drop the addon into Blender's addons folder
#    Win:   %APPDATA%\Blender Foundation\Blender\<ver>\scripts\addons\
#    mac:   ~/Library/Application Support/Blender/<ver>/scripts/addons/
#    linux: ~/.config/blender/<ver>/scripts/addons/
curl -fsSL https://raw.githubusercontent.com/6xvl/blender-mcp/main/addon/blender_mcp_addon.py \
  -o "<addons-dir>/blender_mcp_addon.py"

Windows quirks

If PATH lookup fails, pass the full binary path:

{
  "mcpServers": {
    "blender-mcp": {
      "command": "C:\\Users\\YOU\\.local\\bin\\blender-mcp.exe",
      "args": []
    }
  }
}

What Can You Do?

Ask things like: "List every armature and its bones", "Bend the elbow 90° on Forearm_R at frame 30", "Apply a 45° diagonal cut to Right_Arm and split weights between Bicep_R and Forearm_R", "Render the camera view at frame 20 to disk", "Export the rig and all animations as FBX for Roblox", "Label each side of this mesh with Top/Bottom/Front/Back/Left/Right textures".

Tool categories

Category Examples
Inspect bm_list, bm_ping, bm_read_console, bm_inspect_modifier, bm_inspect_animation, bm_count_vgroup_weights
Transform bm_set_transform, bm_apply_transforms, bm_set_origin, bm_translate, bm_rotate, bm_scale
Mesh edit bm_rotate_verts, bm_translate_verts, bm_mirror_verts, bm_pca_align, bm_mesh_separate, bm_bisect_plane, bm_subdivide
Rig + skin bm_add_armature, bm_auto_weights, bm_smooth_weights, bm_weight_by_axis_split, bm_weight_by_plane_split, bm_paint_weight_to_bone
Animate bm_keyframe_bone, bm_keyframe_object, bm_set_frame, bm_push_to_nla, bm_keyframe_material_emission
Materials / UV bm_create_material, bm_label_faces_by_side, bm_color_faces_by_side, bm_uv_unwrap, bm_resize_texture
Modifiers bm_add_modifier, bm_apply_modifier, bm_add_armature_modifier, bm_add_softbody, bm_add_cloth, bm_add_fluid
Export bm_export_fbx, bm_export_format (OBJ/GLB/GLTF/DAE)
Maintenance bm_force_mode_set, bm_reload_addon

Full tool catalog with signatures + docstrings: docs/tools_blender_mcp.md (auto-generated from server.py). Once connected, call bm_list for scene objects and ask your assistant for tool details.


Forced Auto-Update

Every Blender startup, the addon reads VERSION from this repo's main branch via raw URL. If different from local, both blender_mcp_addon.py and server.py are atomically replaced. No opt-out by default. Restart Blender to load the new code.

To disable on a machine:

# top of blender_mcp_addon.py
_BM_AUTOUPDATE_REPO = ""   # empty disables the probe

To publish an update from a fork:

# edit addon/blender_mcp_addon.py or server/server.py
echo "1.0.1" > VERSION
git add -A && git commit -m "feat: …" && git push
# next Blender startup on any installed machine pulls the new files

Troubleshooting

Symptom Fix
bm_ping returns "Could not connect to Blender" N panel → BlenderMCP → Connect to Claude. Then /mcp reconnect on the client side.
Tool returns {"error": "timeout", …} A bpy op is blocking the main thread. Run bm_force_mode_set OBJECT and retry. If persistent, toggle the addon off+on.
Tab missing in N panel Window → Toggle System Console for tracebacks. Reload Scripts (F3 → "Reload Scripts").
bm_set_mode errors with "context is incorrect" Use bm_force_mode_set — it overrides the VIEW_3D context.
Auto-update didn't run Network issue, _BM_AUTOUPDATE_REPO was emptied, or local VERSION already matches. Check bm_read_console mode=summary for autoupdate log lines.

Local Development

D:\Projects\BlenderMCP\
├── addon\blender_mcp_addon.py    # Blender side (handlers + console tee + autoupdate)
├── server\server.py              # MCP server side (276 @mcp.tool)
├── sync.ps1                      # push source → live install paths + wipe pycache
├── install.ps1 / install.sh      # public one-shot installers
├── textures\sides\               # T/B/F/K/L/R label PNGs for bm_label_faces_by_side
├── VERSION                       # auto-update probe target
├── LICENSE
└── README.md

Workflow:

# 1. Edit either source file
# 2. Push to all live install paths + clear pycache
.\sync.ps1
# 3. Call the hot-reload MCP tool from your client — no UI toggle needed
bm_reload_addon
# 4. /mcp reconnect (socket restart)

Report Issues | MIT Licensed

About

MCP server for Blender — ~270 direct-dispatch tools, hang detection, forced auto-update

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages