Blender MCP Bridge
Enables remote control of Blender via MCP, supporting image-to-3D model creation, execution of Blender Python scripts, and querying of scene data such as objects, materials, and collections.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Blender MCP BridgeCreate a low-poly island scene with a small tree"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
🎨 Blender MCP Bridge
AI-powered Blender control via Model Context Protocol (MCP)
Send images to create 3D models with matching colors, execute Python scripts, and control Blender remotely through Antigravity or any MCP-compatible AI client.
✨ Features
Feature | Description |
🖼️ Image to 3D | Extract dominant colors from images and create 3D models with matching materials |
🐍 Script Execution | Run any Blender Python code remotely through MCP |
📊 Scene Query | Get detailed information about objects, materials, and collections |
⚡ Real-time Updates | Receive live progress status during script execution |
🔒 Thread-safe | Robust architecture with guaranteed responses and no deadlocks |
Related MCP server: mcp-opencode-blender
🏗️ Architecture
┌─────────────────────┐ MCP/stdio ┌─────────────────────────┐
│ Antigravity │◄─────────────────────►│ antigravity_blender_ │
│ (or any MCP AI) │ │ server.py │
└─────────────────────┘ └───────────┬─────────────┘
│
│ TCP Socket
│ (port 8081)
▼
┌─────────────────────────┐
│ blender_server.py │
│ (runs inside Blender) │
└─────────────────────────┘📦 Installation
Prerequisites
Python 3.10+
Blender 4.2+ (with full path accessible)
pip (Python package manager)
Quick Install
# Clone the repository
git clone https://github.com/MITHRAN-BALACHANDER/Blender-MCP-antigravity.git
cd Blender-MCP-antigravity
# Create virtual environment (recommended)
python -m venv venv
.\venv\Scripts\activate # Windows
source venv/bin/activate # Linux/Mac
# Install dependencies
pip install -r requirements.txtInstall as Package (Optional)
pip install -e .🔌 Antigravity Integration
Add the following to your Antigravity MCP server configuration:
Option A: Direct Path
{
"mcpServers": {
"blender": {
"command": "python",
"args": ["C:/path/to/Blender-MCP-antigravity/antigravity_blender_server.py"],
"env": {}
}
}
}Option B: Using Virtual Environment
{
"mcpServers": {
"blender": {
"command": "C:/path/to/Blender-MCP-antigravity/venv/Scripts/python.exe",
"args": ["C:/path/to/Blender-MCP-antigravity/antigravity_blender_server.py"],
"env": {}
}
}
}Note: Replace
C:/path/to/with your actual installation path.
🚀 Quick Start
Step 1: Start Blender Server
# Navigate to project directory
cd Blender-MCP-antigravity
# Start Blender with the socket server
# Windows (use full path if 'blender' is not in PATH)
"C:\Program Files\Blender Foundation\Blender 4.2\blender.exe" --background --python blender_server.py
# Linux/Mac
blender --background --python blender_server.pyExpected output:
==================================================
[BlenderMCP] Server running on 127.0.0.1:8081
[BlenderMCP] Waiting for connections...
==================================================Step 2: Connect Antigravity
Once Blender is running, Antigravity will automatically connect via the MCP configuration.
Step 3: Create 3D Content
Ask Antigravity to create 3D content:
"Create a low-poly island scene in Blender"
"Create a 3D model from this image" (with attached image)
🛠️ MCP Tools Reference
image_to_3d_model
Create a 3D model with colors extracted from an image.
Parameter | Type | Required | Default | Description |
| string | ✅ | - | Base64-encoded image |
| string | ❌ |
| Shape: |
| string | ❌ |
| Name for the object |
Response:
{
"status": "ok",
"colors": ["#3A7D8C", "#D4C4A0", "#4A6E4A"],
"object_name": "ImageModel"
}blender_exec
Execute Python code inside Blender.
Parameter | Type | Required | Description |
| string | ✅ | Python code to execute |
Script Requirements:
✅ Define and call a
main()function✅ Use
send_status("message")for progress updates✅ Use
bpy.data.*APIs (notbpy.ops.*)❌ No infinite loops or blocking operations
Example:
import bpy
def main():
send_status("Creating cube...")
mesh = bpy.data.meshes.new("Cube")
obj = bpy.data.objects.new("Cube", mesh)
bpy.context.collection.objects.link(obj)
import bmesh
bm = bmesh.new()
bmesh.ops.create_cube(bm, size=2.0)
bm.to_mesh(mesh)
bm.free()
send_status("Done!")
main()get_blender_scene
Query the current Blender scene.
Response:
{
"objects": [
{"name": "Cube", "type": "MESH"},
{"name": "Camera", "type": "CAMERA"}
],
"meshes": ["Cube"],
"materials": ["Material"],
"collections": ["Collection"]
}📁 Project Structure
Blender-MCP-antigravity/
├── antigravity_blender_server.py # MCP server (AI client interface)
├── blender_server.py # TCP server (runs in Blender)
├── antigravity_blender_addon.py # Blender UI addon (optional)
├── run_via_bridge.py # Standalone script runner
├── generate_island.py # Example: procedural island
├── create_island_from_image.py # Example: island from reference
├── requirements.txt # Dependencies
├── pyproject.toml # Package config
└── README.md🔧 Troubleshooting
Connection Refused
# Ensure Blender is running with the server
"C:\Program Files\Blender Foundation\Blender 4.2\blender.exe" --background --python blender_server.py
# Check if port 8081 is in use
netstat -an | findstr 8081 # Windows
lsof -i :8081 # Linux/MacTimeout Errors
Check Blender's console for Python errors
Ensure
main()is called at the end of your scriptAdd
send_status()calls for long operationsAvoid blocking calls or infinite loops
Port Already in Use
# Kill existing Blender processes
taskkill /F /IM blender.exe # Windows
pkill blender # Linux/Mac🎯 Examples
Run the Island Generator
# Activate venv first
.\venv\Scripts\activate
# Run example script
python run_via_bridge.py generate_island.pyInteractive Mode (View Output)
# Start Blender with GUI
"C:\Program Files\Blender Foundation\Blender 4.2\blender.exe" --python blender_server.py
# Then run scripts via bridge
python run_via_bridge.py your_script.py🤝 Contributing
Contributions are welcome!
Fork the repository
Create a feature branch:
git checkout -b feature/amazing-featureCommit changes:
git commit -m 'Add amazing feature'Push:
git push origin feature/amazing-featureOpen a Pull Request
📄 License
MIT License - see LICENSE for details.
🔗 Links
Repository: github.com/MITHRAN-BALACHANDER/Blender-MCP-antigravity
Blender: blender.org
MCP Protocol: modelcontextprotocol.io
Antigravity: antigravity.dev
Available Tools
3 toolsblender_execA
Execute a Python script inside Blender.
IMPORTANT RULES:
- The script MUST define a main() function and call it
- Use send_status("message") to report progress
- Use bpy.data.* APIs instead of bpy.ops.* when possible
- Script MUST terminate - no infinite loops
- Catch exceptions and handle errors gracefully
Args:
script: Python code to execute in Blender. Has access to 'bpy' and 'send_status()'.
Returns:
JSON string with execution results including status and any messages.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It thoroughly describes execution rules (e.g., script structure, API preferences, termination requirements, error handling) and return format (JSON string with status and messages), adding significant value beyond what the input schema provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and front-loaded, starting with the core purpose followed by structured rules and parameter details. Every sentence earns its place by providing essential information without redundancy, making it efficient and well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (executing scripts in an external environment), lack of annotations, and presence of an output schema (which covers return values), the description is complete. It addresses purpose, rules, parameters, and behavioral expectations, leaving no significant gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It adds detailed meaning for the single parameter 'script', explaining it as 'Python code to execute in Blender' with access to 'bpy' and 'send_status()', which clarifies semantics not evident from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Execute a Python script inside Blender') and resource ('Blender'), distinguishing it from sibling tools like 'get_blender_scene' (which retrieves scene data) and 'image_to_3d_model' (which converts images). It explicitly mentions the verb 'execute' and the target environment 'Blender', avoiding tautology.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool (to run Python scripts in Blender) but does not explicitly mention when not to use it or name alternatives. The 'IMPORTANT RULES' section implies usage by setting prerequisites, but it lacks explicit exclusions or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_blender_sceneA
Get information about the current Blender scene.
Returns:
JSON string with lists of objects, meshes, materials, and collections.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves scene information and specifies the return format, which is helpful. However, it doesn't cover other behavioral aspects like error conditions, performance implications, or whether it's read-only (implied but not explicit). The description adds some value but lacks comprehensive behavioral details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and well-structured. It uses two brief sentences: one for the purpose and one for the return format, with no wasted words. The information is front-loaded, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is reasonably complete. It explains what the tool does and the return format, which aligns with the output schema's role. However, it could be more comprehensive by addressing usage context or behavioral nuances, slightly reducing completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to explain parameters, so it appropriately focuses on the tool's function and output. This meets the baseline for tools with no parameters, as there's nothing to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get information about the current Blender scene.' It specifies the verb ('Get') and resource ('current Blender scene'), making the function unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'blender_exec' or 'image_to_3d_model', which prevents a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention contexts where it's appropriate, prerequisites, or comparisons to sibling tools like 'blender_exec' or 'image_to_3d_model'. This lack of usage context leaves the agent with minimal direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_to_3d_modelA
Create a 3D model in Blender with colors extracted from an image.
This tool analyzes the provided image to extract dominant colors, then creates
a 3D model in Blender with materials matching those colors.
Args:
image_data: Base64-encoded image data (can include data URL prefix)
model_type: Shape type - "cube", "sphere", or "cylinder" (default: "cube")
model_name: Name for the created 3D object (default: "ImageModel")
Returns:
JSON string with status, extracted colors, and model information.
| Name | Required | Description | Default |
|---|---|---|---|
| image_data | Yes | ||
| model_type | No | cube | |
| model_name | No | ImageModel |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the core behavior (color extraction and 3D model creation) and output format (JSON with status, colors, model info), but lacks details on error handling, performance (e.g., processing time), side effects (e.g., file creation in Blender), or dependencies (e.g., Blender installation). It doesn't contradict annotations, but could be more comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: the first sentence states the core purpose, followed by a process explanation, then a clear 'Args' and 'Returns' section. Every sentence adds value without redundancy, and the bullet-like formatting enhances readability while remaining concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (3 parameters, no annotations, but with an output schema), the description is fairly complete. It covers purpose, parameters, and return values, and the output schema reduces the need to detail JSON structure. However, it lacks context on integration with Blender (e.g., scene management) and error cases, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics for all three parameters: 'image_data' (Base64-encoded, can include data URL), 'model_type' (shape options with default), and 'model_name' (naming with default). This goes beyond the schema's basic titles and types, providing practical usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('create a 3D model in Blender') and resources ('with colors extracted from an image'), distinguishing it from sibling tools like 'blender_exec' (generic execution) and 'get_blender_scene' (retrieval). It explains the two-step process: color extraction from image and 3D model creation with matching materials.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'blender_exec' or other 3D modeling approaches. It mentions the tool's function but lacks context about prerequisites (e.g., Blender availability), use cases (e.g., prototyping, visualization), or limitations (e.g., image complexity).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose with no overlap: blender_exec runs Python scripts, get_blender_scene retrieves scene information, and image_to_3d_model creates 3D models from images. The descriptions reinforce these distinct functions, making misselection unlikely.
The naming follows a consistent verb_noun pattern (blender_exec, get_blender_scene, image_to_3d_model) with clear actions and targets. The minor deviation is that 'blender_exec' uses an abbreviation while others are spelled out, but the pattern remains readable and predictable.
With only 3 tools, the set feels thin for a Blender bridge, as it lacks core operations like modifying objects, rendering, or exporting. While the tools are well-defined, the count is borderline low for the apparent scope of 3D modeling and automation.
There are significant gaps in the tool surface for a Blender integration. Missing are essential CRUD operations (e.g., create/update/delete objects), rendering tools, export capabilities, and scene manipulation functions. This will likely cause agent failures when trying to perform common Blender workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Cloud Blender for AI agents: scenes, assets, renders, MP4, STL, GLB — over hosted remote MCP.
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- AlicenseBqualityCmaintenanceConnects Blender to AI through the Model Context Protocol to enable prompt-assisted 3D modeling and scene manipulation. It supports object creation, material control, and arbitrary Python code execution directly within the Blender environment.22MIT
- AlicenseNot gradedqualityDmaintenanceEnables programmatic control of Blender via OpenCode, supporting 3D model creation, material application, and export through a Model Context Protocol server.MIT
- AlicenseNot gradedqualityCmaintenanceEnables interactive control of Blender for 3D scene manipulation, geometry creation, material application, and viewport rendering via natural language prompts through the Model Context Protocol.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI to control Blender 3D through the Model Context Protocol, allowing Python execution, scene state queries, and automation of 3D workflows.5GPL 3.0
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/MITHRAN-BALACHANDER/Blender-MCP-antigravity'
If you have feedback or need assistance with the MCP directory API, please join our Discord server