blender-skill
by @taosiuman
Connect to and control Blender via the official Blender MCP Server. Supports two modes: full MCP Server + mcporter (recommended) and direct TCP Socket (light...
Method 1: Via mcporter (recommended)
# List all available tools
mcporter list blender-mcp --schemaCall a specific tool
mcporter call blender-mcp.execute_blender_code code='import bpy; result = {"objects": [o.name for o in bpy.data.objects]}'mcporter call blender-mcp.get_objects_summary
mcporter call blender-mcp.get_object_detail_summary object_name="Cube"
Search API docs
mcporter call blender-mcp.search_api_docs query="bpy.ops.object.delete"Search user manual
mcporter call blender-mcp.search_manual_docs query="Geometry Nodes"Screenshot
mcporter call blender-mcp.get_screenshot_of_window_as_imageRender viewport
mcporter call blender-mcp.render_viewport_to_path output_path="C:\\render.png"
Method 2: Direct TCP Socket to Blender Addon (lightweight)
β οΈ Warning: This mode sends caller-supplied code directly to Blender with no guardrails. Review code before execution.
When you don't need the full MCP Server, you can communicate directly with the Blender Addon via TCP Socket:
import socket
import jsondef send_to_blender(code: str, host="localhost", port=9876, timeout=30.0) -> dict:
"""Send Python code directly to Blender Addon for execution."""
request = json.dumps({
"type": "execute",
"code": code,
"strict_json": False,
}) + "\0"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.settimeout(timeout)
sock.connect((host, port))
sock.sendall(request.encode("utf-8"))
buf = bytearray()
while True:
chunk = sock.recv(65536)
if not chunk:
break
buf.extend(chunk)
if b"\0" in buf:
break
line, _, _ = buf.partition(b"\0")
return json.loads(line.decode("utf-8"))
Example: get all object names in the scene
response = send_to_blender(
'import bpy\nresult = {"objects": [o.name for o in bpy.data.objects]}'
)
print(response)
{"status": "ok", "result": {"objects": ["Cube", "Camera", "Light"]}}
Method 3: Blender Background Mode (headless rendering / batch)
# Start Blender background MCP Server
blender --background myscene.blend --command blender_mcp --host localhost --port 9876Or execute code via CLI
blender --background myscene.blend --python-expr "
import bpy
your code
result = {'count': len(bpy.data.objects)}
print('__BLMCP_RESULT__' + str(result))
"
| Error | Cause | Solution |
|-------|-------|----------|
| ConnectionRefusedError | Blender not running or Addon not started | Start Blender, enable MCP Addon, click "Start Server" |
| ConnectionError: Empty response | Network timeout or Addon crashed | Check Blender console output, verify port |
| result is not JSON-serializable | Returned a Blender object | Use strict_json=False or manually convert to dict |
| Blender executable not found | Blender command not found | Set BLENDER_PATH environment variable |
| Deferred responses not supported | Background mode doesn't support deferred responses | Use synchronous code or switch to GUI mode |
clawhub install blender-skill