Blender MCP Server

Blender MCP Server

MCP server that controls Blender via HTTP bridge, enabling 3D modeling, animation, and export operations from Cursor agent.

Category
Visit Server

README

Blender MCP Server

MCP server for Cursor that controls Blender through a local HTTP bridge.
bpy runs inside Blender — this repo does not import bpy in the MCP process.

Separate from Summit — export .glb files to Summit's Assets/ when ready.

Architecture

Cursor Agent → MCP (this repo) → HTTP bridge → bpy → Blender
Path Role
server.py MCP entry (stdio)
mcp_server/ Tools exposed to the agent
blender_addon/blender_mcp_bridge/ Blender addon (HTTP + bpy commands)
config.json Bridge port, Summit export paths, default .blend

Blender 5.1: /home/juan/blender-5.1.2/blender

Quick start

1. Install MCP server (Python)

cd /home/juan/source/blender_mcp_server
./scripts/setup_mcp.sh
cp config.example.json config.json   # edit paths if needed

2. Install Blender addon

BLENDER_VERSION=5.1 ./scripts/install_addon.sh
# Detect version: ls ~/.config/blender/

In Blender:

  1. Edit → Preferences → Add-ons → enable Blender MCP Bridge
  2. N panel → MCP tab → Start Server (default http://127.0.0.1:9876)

Or start headless with the default export blend:

./scripts/start_bridge.sh

Logs: bridge.log in this repo. Override blend: BLENDER_MCP_BLEND=/path/to/file.blend ./scripts/start_bridge.sh

3. Connect Cursor

Merge cursor.mcp.example.json into ~/.cursor/mcp.json:

{
  "mcpServers": {
    "blender": {
      "command": "/home/juan/source/blender_mcp_server/.venv/bin/python",
      "args": ["/home/juan/source/blender_mcp_server/server.py"],
      "env": {
        "BLENDER_MCP_CONFIG": "/home/juan/source/blender_mcp_server/config.json"
      }
    }
  }
}

Restart Cursor. Open this folder as workspace when animating.

4. Test

With Blender bridge running:

curl -s http://127.0.0.1:9876/health

In Cursor chat (with MCP enabled):

Use ping_blender, then scene_information

MCP tools

Connection: ping_blender, get_server_config

Inspection: scene_information, list_objects, list_armatures, list_bones, list_actions, get_object_transform

Animation: create_action, rename_action, set_active_action, set_frame, set_bone_rotation_keyframe, set_action_loop_mode

Export / validate: export_gltf, export_to_summit, validate_scene_scale, validate_action_root_motion, validate_rts_asset, render_preview

Modeling (recipes): create_summit_bobcat — low-poly harvester blockout + idle / harvest animations

Bridge-only commands (not MCP tools yet)

Callable via scripts/run_command.py or HTTP bridge dispatch:

Command Purpose
create_natural_idle_action Breathing idle from a pose frame (quaternion offsets)
create_rifle_attack_action Forward rifle aim + recoil clip
create_idle_action Static hold from source action
prepare_rifleman_locomotion Import walk GLB, remap bones, strip hip motion, create idle
duplicate_action Copy an action
strip_action_root_motion Remove root bone location keys

Human Rifleman pipeline (current)

Source blends live under ~/Documents/BlenderSaves/summit/:

File Content
riflemenStand.blend idle — natural breathing (~48 frames)
riflemenwalk.blend walk — in-place rifle run sprint (22 frames)
riflemenfire.blend attack — rifle aim + recoil (~24 frames)
riflemenExport.blend Merged master (idle + walk + attack)
riflemen-backup-dont-edit.blend Safety backup

Regenerate walk + attack from stand (run FBX + procedural fire), then merge + export:

/home/juan/blender-5.1.2/blender --background --python scripts/prepare_rifleman_animations.py

Body textures (Ch36): merge exports from riflemenStand.blend (painted mesh). The exporter rebuilds Ch36_Body for glTF PBR and syncs packed images into the GLB. If sidecar PNGs look stale in Godot, reimport Rifleman.glb or run:

/home/juan/blender-5.1.2/blender --background --python scripts/fix_and_export_rifleman_body.py
/home/juan/blender-5.1.2/blender --background --python scripts/extract_textures_from_glb.py

Re-export only (if walk/fire blends already exist):

/home/juan/blender-5.1.2/blender --background --python scripts/prepare_rifleman_export.py

Output: /home/juan/source/summit/Assets/Units/Human/Rifleman.glb
Godot view: Scenes/Units/HumanRiflemanView.tscn (animations idle, walk, attack).

Rifle mesh is parented to mixamorig1:RightHand in the fire blend. Attack uses explicit aim quaternions (+Y barrel forward), not a copied walk pose.

Or export from the open blend via MCP:

export_to_summit(target_key="summit_human_units", filename="Rifleman.glb", action_names=["idle","walk","attack"])

Bobcat harvester (vehicle recipe)

V2 (RTS parts catalog — recommended)

Procedural Generals-style assembly from reusable mechanical parts:

BLENDER_VERSION=5.1 ./scripts/install_addon.sh
/home/juan/blender-5.1.2/blender --background --python scripts/create_summit_bobcat_v2.py

Output blend: ~/Documents/BlenderSaves/summit/bobcatExport.blend
Silhouette preview: ~/Documents/BlenderSaves/summit/bobcat_v2_silhouette.png
Output GLB: /home/juan/source/summit/Assets/Units/Human/Bobcat.glb (idle, harvest)

MCP: create_summit_bobcat_v2, validate_rts_asset, validate_rts_silhouette, render_rts_silhouette_preview

Parts catalog (modeling/parts/): cabin, wheel, bucket, hydraulic, chassis, fender, exhaust, headlight, arm, grille.

Animated pivots (stable Godot contract): Bobcat_Arm_L, Bobcat_Arm_R, Bobcat_Bucket.

V1 (blockout)

/home/juan/blender-5.1.2/blender --background --python scripts/create_summit_bobcat.py

Summit export

Config keys in config.json:

"export_targets": {
  "summit_human_units": "/home/juan/source/summit/Assets/Units/Human",
  "summit_props": "/home/juan/source/summit/Assets/Props"
}

Default blend: riflemenExport.blend (see default_blend in config).

Then switch workspace to /home/juan/source/summit to wire Godot views and sim.

Summit conventions

Rule Value
Scale 1 Blender unit = 1 meter
Infantry height ~1.6 m (Ch36 reference mesh)
Forward +Y in Blender
Animation names idle, walk, attack, death (infantry); vehicles: idle, harvest
Vehicle tri budget 2500 tris (blockout recipe)
Locomotion Walk in place — no hip translation (validate_action_root_motion)

See also Summit player identity for team color masks when authoring units:

  • Paint tint regions in Blender (vertex color or *_TeamMask.png)
  • One GLB per unit type; player color applied at runtime in Godot
  • Human = military paint zones; Robot = LED emissive mask; etc.

Headless

blender mychar.blend --background --python scripts/run_command.py -- '{"command":"scene_information","args":{}}'

Roadmap

  • [x] Rifleman idle / walk / attack pipeline + prepare_rifleman_export.py
  • [x] Bobcat blockout recipe + create_summit_bobcat.py
  • [x] validate_rts_asset + MCP modeling tools
  • [x] create_natural_idle_action, create_rifle_attack_action (bridge)
  • [x] start_bridge.sh headless bridge daemon
  • [ ] Expose locomotion commands as MCP tools
  • [ ] Team color mask validation / export hints for Summit shader
  • [ ] death animation for rifleman
  • [ ] Rigging helpers
  • [ ] Auto tool registration review gate

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured