blender-mcp-ultra
MCP server para Blender — 217 tools del registry (223 vía MCP), headless, multi-agente, feedback visual VLM.
Estado: beta funcional. Verificado E2E en Blender 5.1; ver
docs/skills/para recetas probadas.
Overview
blender-mcp-ultra connects Blender to any AI assistant (Claude, Cursor, Windsurf, opencode) via the Model Context Protocol (MCP). It provides comprehensive control over Blender with production-grade security and performance.
Features
- 217 tools en 24 módulos (modelado por componentes, animación, física completa, compositor, render por jobs, VLM, multi-agente, assets)
- 19 Skills for Claude Code/Cursor
- Enterprise Security: AST validation, sandboxed execution, rate limiting
- Multi-Provider: OpenAI, Anthropic, Google, DeepSeek, Ollama
- Asset Integration: PolyHaven, Sketchfab
- Clean Architecture: Modular, testable, maintainable
- Performance: LRU cache, lazy loading, connection pooling
Quick Start
Prerequisites
- Python 3.10+
- Blender 4.0+ (or 5.2 LTS)
- An MCP client (Claude Desktop, Cursor, opencode, etc.)
Installation
# Clone the repository
git clone https://github.com/carlosh7/blender-mcp-ultra.git
cd blender-mcp-ultra
# Install dependencies
pip install -e .
# Run tests
python test_all.py
Blender Addon
- Open Blender
- Go to Edit > Preferences > Add-ons
- Click "Install..." and select the
addon/folder - Enable "blender-mcp-ultra"
MCP Server Configuration
Add to your MCP client config:
{
"mcpServers": {
"blender": {
"command": "python",
"args": ["-m", "blender_mcp.server"],
"env": {
"BLENDER_HOST": "localhost",
"BLENDER_PORT": "9876"
}
}
}
}
Tools
Scene Management
scene.get_info()- Get scene informationscene.create(name)- Create new scenescene.delete(name)- Delete scenescene.set_active(name)- Set active scenescene.render_settings()- Get/set render settings
Objects
object.create(type, name, location)- Create objectsobject.delete(name)- Delete objectsobject.select(name, type)- Select objectsobject.transform(name, location, rotation, scale)- Transformobject.duplicate(name, new_name)- Duplicate objectsobject.join(names)- Join objectsobject.get_info(name)- Get object infoobject.list(type)- List objects
Materials
material.create(name, color, metallic, roughness)- Create materialsmaterial.delete(name)- Delete materialsmaterial.assign(object_name, material_name)- Assign materialmaterial.get_info(name)- Get material infomaterial.list()- List materialsmaterial.update(name, color, metallic, roughness)- Update material
Lights
light.create(type, name, location, energy, color)- Create lightslight.delete(name)- Delete lightslight.three_point()- Setup three-point lightinglight.update(name, energy, color, size)- Update lightslight.list()- List lights
Modifiers
modifier.add(object_name, type)- Add modifiermodifier.remove(object_name, modifier_name)- Remove modifiermodifier.apply(object_name, modifier_name)- Apply modifiermodifier.list(object_name)- List modifiersmodifier.update(object_name, modifier_name, properties)- Update modifiermodifier.types()- List modifier types
Animation
animation.keyframe_insert(object_name, property, frame)- Insert keyframeanimation.keyframe_delete(object_name, property)- Delete keyframeanimation.set_keyframe(object_name, property, frame, value)- Set keyframeanimation.get_fcurves(object_name)- Get F-curvesanimation.set_interpolation(object_name, interpolation)- Set interpolationanimation.play(start, end)- Play animationanimation.stop()- Stop animationanimation.clear(object_name)- Clear animation
Camera
camera.create(name, location, lens)- Create cameracamera.delete(name)- Delete cameracamera.set_active(name)- Set active cameracamera.update(name, lens, dof)- Update cameracamera.track_to(camera_name, target_name)- Track objectcamera.list()- List camerascamera.setResolution(width, height)- Set resolutioncamera.set_framing(camera_name, object_name)- Set framing
Render
render.render(filepath, engine)- Render scenerender.viewport(filepath)- Viewport screenshotrender.settings()- Get/set render settingsrender.set_engine(engine)- Set render enginerender.set_output(filepath, format)- Set outputrender.set_cycles_settings(samples, denoising)- Cycles settingsrender.set_eevee_settings(samples, ssr, bloom)- EEVEE settingsrender.set_filmic(look, exposure, gamma)- Color management
I/O
io.export_fbx(filepath)- Export FBXio.export_obj(filepath)- Export OBJio.export_gltf(filepath, format)- Export glTFio.export_stl(filepath)- Export STLio.import_fbx(filepath)- Import FBXio.import_obj(filepath)- Import OBJio.import_gltf(filepath)- Import glTFio.import_stl(filepath)- Import STLio.save_file(filepath)- Save fileio.load_file(filepath)- Load file
UV/Texture
uv.unwrap(method, margin)- Unwrap UVsuv.pack(margin)- Pack UV islandsuv.smart_project(angle_limit)- Smart UV projectuv.list(object_name)- List UV mapsuv.create(object_name, name)- Create UV mapuv.delete(object_name, name)- Delete UV maptexture.create(name, width, height, color)- Create texturetexture.list()- List texturestexture.assign_to_material(material_name, texture_name)- Assign textureuv.bake(type, margin)- Bake textures
Rigging
rigging.create_armature(name, location)- Create armaturerigging.add_bone(armature_name, name, head, tail)- Add bonerigging.add_constraint(object_name, type, target)- Add constraintrigging.create_vertex_group(object_name, name)- Create vertex grouprigging.assign_vertex_group(object_name, group_name, weight)- Assign weightsrigging.auto_weight(object_name, armature_name)- Auto weightrigging.list_bones(armature_name)- List bonesrigging.apply_armature(object_name)- Apply armature
Batch
batch.rename(pattern, replace)- Batch renamebatch.delete_by_type(type)- Delete by typebatch.apply_transforms()- Apply transformsbatch.add_modifier(object_names, modifier_type)- Add modifier to multiplebatch.set_material(object_names, material_name)- Set material for multiplebatch.turntable(object_name, frames, axis)- Create turntable
Scene Utils
scene_utils.cleanup()- Clean scenescene_utils.purge_orphans()- Purge orphansscene_utils.mesh_analysis(object_name)- Analyze meshscene_utils.apply_all_transforms()- Apply transformsscene_utils.origin_to_geometry(object_name)- Origin to geometryscene_utils.fix_normals(object_name)- Fix normalsscene_utils.remove_doubles(object_name, distance)- Remove doublesscene_utils.triangulate(object_name)- Triangulate mesh
Printing (3D)
printing.check_manifold(object_name)- Check manifoldprinting.check_watertight(object_name)- Check watertightprinting.check_thinwalls(object_name, min_thickness)- Check thin wallsprinting.scale_to_mm(object_name, scale_factor)- Scale to mmprinting.set_dimensions_mm(object_name, x, y, z)- Set dimensionsprinting.info(object_name)- Get print info
Shader Nodes
shader.add_node(material_name, node_type)- Add shader nodeshader.connect_nodes(material_name, from_node, from_socket, to_node, to_socket)- Connect nodesshader.set_node_value(material_name, node_name, input_name, value)- Set node valueshader.delete_node(material_name, node_name)- Delete nodeshader.list_nodes(material_name)- List nodesshader.create_material_nodes(material_name, preset)- Create presetshader.group_nodes(material_name, node_names)- Group nodesshader.ungroup_nodes(material_name, group_name)- Ungroup nodes
Geometry Nodes
geonodes.add_modifier(object_name, node_group)- Add GN modifiergeonodes.create_group(name)- Create node groupgeonodes.add_node(group_name, node_type)- Add nodegeonodes.connect(group_name, from_node, from_socket, to_node, to_socket)- Connect nodesgeonodes.list_groups()- List GN groupsgeonodes.scatter(object_name, density, instance_name)- Scatter setupgeonodes.array(object_name, count, offset_axis)- Array setupgeonodes.delete_geometry(object_name, mode)- Delete geometry
Skills
19 specialized skills for Claude Code/Cursor:
- modeling - Professional 3D modeling
- materials - PBR materials
- lighting - Studio lighting
- animation - Professional animation
- camera - Cinematography
- rendering - Render optimization
- geometry_nodes - Procedural systems
- rigging - Character rigging
- compositing - Post-processing
- io_export - File export/import
- simulation - Physics simulations
- texturing - Texture creation
- scene_setup - Scene organization
- procedural - Parametric creation
- optimization - Performance optimization
- workflow - Professional workflows
- multi_dcc - Multi-DCC pipelines
- video - Video production
- production - Production pipelines
Security
- AST Validation: 200+ blocked patterns
- Sandboxed Execution: Isolated namespace with timeout
- Rate Limiting: Per-user token bucket algorithm
- Audit Logging: Structured JSON with file rotation
- Input Validation: SQL injection, XSS, path traversal prevention
Architecture
blender-mcp-ultra/
├── src/
│ ├── core/ # Domain entities and interfaces
│ ├── adapters/ # Blender, LLM, Asset adapters
│ ├── infrastructure/ # Security, Network, Cache, Logging
│ ├── presentation/ # MCP Server, Addon, CLI
│ └── tools/ # 118 tools across 16 categories
├── skills/ # 19 skill definitions
├── tests/ # Unit and integration tests
└── docs/ # Documentation
Testing
# Run all tests
pytest tests/ -v
# Run unit tests only
pytest tests/unit/ -v
# Run integration tests (requires Blender running)
pytest tests/integration/ -v
# Run with coverage
pytest tests/ --cov=src --cov-report=html
License
MIT License
Contributing
Contributions welcome! Please read CONTRIBUTING.md first.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blender_mcp_ultra-3.0.0.tar.gz.
File metadata
- Download URL: blender_mcp_ultra-3.0.0.tar.gz
- Upload date:
- Size: 4.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b48d1b85c3f3e5708389999a717457aa60a39b0ccb4fed66f444364fd449dc1
|
|
| MD5 |
89e0498bb536c5770533b5d2a426afea
|
|
| BLAKE2b-256 |
2b23f9beefeb65924c0d572778289048b181641bdfa18309a473f9f50789b716
|
File details
Details for the file blender_mcp_ultra-3.0.0-py3-none-any.whl.
File metadata
- Download URL: blender_mcp_ultra-3.0.0-py3-none-any.whl
- Upload date:
- Size: 372.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
13865631c1acc1b955faea8ac395e65177c52fc8b71a8a67043d66341fdc3475
|
|
| MD5 |
e1feff23ecede93e7eb1ad42a63ffc20
|
|
| BLAKE2b-256 |
388aa0a06361428816b4bdf5641b7df366cad22b3d14d8d437a3cc5aabc3b195
|