Skip to main content
Glama

🎨 Blender MCP Bridge

Python 3.10+ MCP Compatible Blender 4.2+ License: MIT

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.txt

Install 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.py

Expected 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

image_data

string

-

Base64-encoded image

model_type

string

"cube"

Shape: cube, sphere, cylinder

model_name

string

"ImageModel"

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

script

string

Python code to execute

Script Requirements:

  • ✅ Define and call a main() function

  • ✅ Use send_status("message") for progress updates

  • ✅ Use bpy.data.* APIs (not bpy.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/Mac

Timeout Errors

  1. Check Blender's console for Python errors

  2. Ensure main() is called at the end of your script

  3. Add send_status() calls for long operations

  4. Avoid 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.py

Interactive 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!

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/amazing-feature

  3. Commit changes: git commit -m 'Add amazing feature'

  4. Push: git push origin feature/amazing-feature

  5. Open a Pull Request


📄 License

MIT License - see LICENSE for details.



Available Tools

3 tools
blender_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.
ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.
ParametersJSON Schema
NameRequiredDescriptionDefault
image_dataYes
model_typeNocube
model_nameNoImageModel

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

A3.7/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness2/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Connects 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.
    22
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables programmatic control of Blender via OpenCode, supporting 3D model creation, material application, and export through a Model Context Protocol server.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI to control Blender 3D through the Model Context Protocol, allowing Python execution, scene state queries, and automation of 3D workflows.
    5
    GPL 3.0

Latest Blog Posts

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