protein-blender-mcp
Enables AI-assisted styling and rendering of protein 3D structures in Blender, including loading structures, applying cartoon/stick/surface styles and colors, managing materials and scenes, framing cameras, rendering previews or final images, saving .blend files, and running custom Blender Python.
Click on "Deploy 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., "@protein-blender-mcp Fetch 4HHB, show it as a cartoon colored by chain, and render a preview."
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.
protein-blender-mcp
Style protein 3D structures in Blender by describing what you want in plain English.
"Fetch 4HHB, show the protein as a cartoon colored by chain, the hemes as sticks, put it on a white background and render it."
protein-blender-mcp is a Model Context Protocol server that connects an AI assistant such as Claude to Blender. It uses Molecular Nodes to import and draw structures. The assistant turns your words into tool calls like add_style(style="sticks", selection="resname HEM", color="element"). It then renders a preview to check the result, so you can keep refining in conversation.
You ──► Claude ──► protein-blender-mcp (MCP server) ──TCP:9877──► Blender add-on ──► Molecular NodesWhat you can ask for
Load: fetch from the PDB (
4HHB) or AlphaFold DB (UniProt ID), or open a local.pdb/.cif/.bcif/.sdffileStyles: cartoon, ribbon, surface, sticks, spheres, ball-and-stick, layered on any selection
Selections: chains, residue ranges, ligands, binding pockets ("residues within 5 Å of ATP"), backbone, residue types
Colors: by element, chain, rainbow (N→C), secondary structure, residue type, B-factor, AlphaFold pLDDT, Goodsell style, or any named / hex color
Materials: default, ambient occlusion, flat, squishy, transparent
Scene: background color or transparency, camera framing from front/back/top/…, EEVEE or Cycles, resolution
Output: preview renders returned to the assistant, final PNG renders, saved
.blendfilesEscape hatch: run arbitrary Blender Python for anything else (lighting, animation, node tweaks)
Related MCP server: Blender MCP
Requirements
Blender 4.2 or newer (developed on 5.2)
Molecular Nodes installed and enabled in Blender
uv (recommended), or Python 3.10+
An MCP client, such as Claude Desktop, Claude Code or Cursor
Installation
1. Install the Blender add-on
Download this repository and zip the
addon/protein_blender_mcpfolder, or runpython scripts/build_addon.py, which writesdist/protein_blender_mcp.zip.Close every other Blender window before installing or updating any extension. Installing an extension makes Blender re-sync the shared Python packages used by all extensions, including Molecular Nodes' scipy, pandas and MDAnalysis. On Windows, a second running Blender keeps those files locked, so they get removed but not restored. Molecular Nodes then fails with errors like
No module named 'databpy'. If that happens, close all Blender windows and install the zip again; the re-sync restores everything.You can also install from the command line (with Blender closed):
blender --command extension install-file -r user_default -e dist/protein_blender_mcp.zipIn Blender, open Edit → Preferences → Get Extensions, click the ⌄ menu in the top right, and choose Install from Disk…. Select the zip.
In the 3D viewport, press N, open the Protein MCP tab, and click Start MCP Bridge.
2. Register the MCP server with your client
Claude Code
claude mcp add protein-blender -- uvx --from git+https://github.com/OmarArias-Gaguancela/protein-blender-mcp protein-blender-mcpClaude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"protein-blender": {
"command": "uvx",
"args": ["--from", "git+https://github.com/OmarArias-Gaguancela/protein-blender-mcp", "protein-blender-mcp"]
}
}
}From a local clone
pip install -e .Then use protein-blender-mcp as the command.
Set PROTEIN_BLENDER_PORT if you changed the port in the Blender panel.
Windows: Claude desktop app and uv
The Claude desktop app on Windows redirects files that programs it launches write under AppData into its own private folder. That breaks the folder links uv creates when it downloads a Python, giving errors like:
error: Missing expected target directory for Python minor version link at
`C:\Users\<you>\AppData\Roaming\uv\python\cpython-3.13...`To fix it, store uv's Pythons outside AppData with UV_PYTHON_INSTALL_DIR, and pin Python 3.13:
claude mcp add --scope user protein-blender -e UV_PYTHON_INSTALL_DIR=C:\Users\<you>\.uv\python -- uvx --python 3.13 --from git+https://github.com/OmarArias-Gaguancela/protein-blender-mcp protein-blender-mcpFor Claude Desktop, add the same thing to the server entry:
"env": { "UV_PYTHON_INSTALL_DIR": "C:\\Users\\<you>\\.uv\\python" },
"args": ["--python", "3.13", "--from", "git+https://github.com/OmarArias-Gaguancela/protein-blender-mcp", "protein-blender-mcp"]When you run claude mcp add from Windows PowerShell 5.1, PowerShell drops the -- separator and you get unknown option '--python'. Run the command from Git Bash, cmd, or PowerShell 7 instead.
Example prompts
"Load 1EMA (GFP) as a cartoon colored rainbow from N to C terminus, with the chromophore as ball-and-stick."
"Show 6VXX as a surface colored by chain, with a flat material on a black background."
"Fetch AlphaFold model P69905 and color it by pLDDT confidence."
"Zoom in on the binding pocket of 3HTB: residues within 5 Å of the ligand as sticks, everything else as a transparent cartoon."
"Make the helices cylinders and the sheets flat, then render a 1920×1080 image with Cycles to
~/Desktop/figure.png."
Tools
Tool | What it does |
| Molecules, chains, ligands, style layers, render settings |
| Download from RCSB or AlphaFold DB with an initial style |
| Load a local structure file |
| Add a style layer to a selection with a color and material |
| Remove style layers |
| Point the camera at a molecule or selection |
| Background color or transparency |
| Engine, resolution, samples |
| Render and return the image |
| Scene housekeeping |
| Run custom Python inside Blender |
Security note
The Blender add-on listens only on 127.0.0.1. The execute_blender_python tool runs whatever code the assistant sends, so only connect clients you trust. Stop the bridge from the panel when you're not using it.
Troubleshooting
"Could not reach Blender": make sure Blender is open and the panel says Running on port 9877.
"Molecular Nodes is not installed": install it from Get Extensions and enable it.
Nothing visible after styling: ask the assistant to call
get_scene_infoandframe_camera. A selection may have matched no atoms.
License
MIT
Available Tools
13 toolsadd_styleA
Add a style layer to a molecule, optionally limited to a selection.
Layers stack, so "cartoon for the protein plus sticks for the ligand" is two calls. molecule is the object name from get_scene_info (default: the active or most recently loaded one). label names the layer for later removal.
options passes extra settings straight to the Molecular Nodes style node, e.g. cartoon: {"quality": 4, "helix_shape": "Cylinder", "loop_radius": 0.3, "sheet_arrows": "Flat"}; surface: {"quality": 4, "scale": 1.5, "separate_by": "chain_id"}; spheres/sticks: {"scale": 0.8}.
Selections use MDAnalysis selection syntax, for example: "chainID A" one chain (also "segid A") "chainID A B" several chains "protein" / "nucleic" all protein / DNA-RNA atoms "resid 10:50" residue range "resname HEM" a ligand or residue type by name "not protein and not nucleic and not water" ligands and other het groups "protein and around 5 resname ATP" binding pocket within 5 A "backbone" / "name CA" backbone atoms / alpha carbons "resname LYS ARG" / "resname ASP GLU" basic / acidic residues Combine with and / or / not and parentheses.
Color can be a scheme or a single color. Schemes: "element", "chain", "rainbow" (N->C terminus), "secondary_structure", "residue_type", "b_factor", "plddt", "goodsell". Single colors: a name ("red", "skyblue", "gold"...), a hex code ("#ff8800") or an RGB list ([255, 136, 0]).
Inputs: style (required), color, label, options, +3 more.
clear_stylesB
Remove every style layer from a molecule so it can be restyled from scratch.
Inputs: molecule.
delete_moleculeC
Remove a molecule from the scene.
Inputs: molecule (required).
execute_blender_pythonA
Run Python inside Blender for anything the other tools do not cover (custom
lighting, node tweaks, animation). Available names: bpy, mn (Molecular Nodes),
mg (Molecular Nodes geometry nodes), get_molecule(name). Assign to result or
print() to return output. Prefer the dedicated tools when they fit.
Inputs: code (required).
fetch_structureA
Download a structure by ID and add it to the scene with an initial style.
pdb_id: a PDB code like "4HHB", or a UniProt accession when database is "alphafold". Use style="none" to load without any style and build it up with add_style.
Inputs: pdb_id (required), color, style, database, +1 more.
frame_cameraC
Point the scene camera at a molecule, or zoom in on a selection such as a binding site, from the given viewpoint.
Inputs: molecule, selection, viewpoint.
get_scene_infoA
List the molecules in the scene with their chains, ligands, residue counts and current style layers, plus render settings and the available styles, color schemes and materials. Call this before styling to learn chain IDs and ligand names.
Inputs: no named parameters.
load_fileC
Load a local structure file (.pdb, .cif, .bcif, .sdf, .mol) into the scene.
Inputs: path (required), color, style, material.
remove_styleB
Remove one style layer by its index (see get_scene_info).
Inputs: index (required), molecule.
render_imageA
Render the scene from the camera and return the image so you can check the styling. preview=True renders at 50% size for speed; set preview=False and give a path for the final figure.
Inputs: path, preview.
save_blendC
Save a copy of the current scene as a .blend file.
Inputs: path (required).
set_backgroundA
Set the background color the camera sees (name or hex), or make it transparent for figures placed on another background. Lighting is kept separate, so dark backgrounds still light the molecule; raise lighting_strength (e.g. 1.5) for a brighter scene.
Inputs: color, transparent, lighting_strength.
set_render_settingsB
Choose the render engine (EEVEE is fast, CYCLES is photoreal), output size in pixels and sample count.
Inputs: width, engine, height, samples.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Each tool targets a distinct resource+action: scene inspection, structure acquisition (fetch_structure by ID vs load_file from disk, clearly differentiated), style layer lifecycle (add/remove/clear), camera, background, render settings, render, save, and delete. The only potential overlap is execute_blender_python as a catch-all escape hatch, but its description explicitly says to prefer the dedicated tools, so boundaries stay clear.
All 13 names follow a strict verb_noun snake_case pattern (get_scene_info, add_style, remove_style, clear_styles, set_background, render_image, fetch_structure, load_file). No camelCase or vague bare verbs anywhere in the set.
13 tools sits squarely in the well-scoped range and each one maps to a real step in the molecular-visualization workflow: load, style, frame, light/background, render, save. Nothing feels redundant or padded.
The domain lifecycle is well covered — acquisition (fetch/load), styling with layered add/remove/clear, camera framing, background, render settings, rendering, saving and deletion — with execute_blender_python as a safety net. Minor gaps remain around exporting to non-.blend formats, transforming/duplicating molecules, and scene-level lighting controls being only partially exposed (via background or Python).
Maintenance
Related MCP Connectors
Connect your AI assistant to Blender for 3D modeling, Geometry Nodes, materials, lighting, animation, rendering and export. Inspect real scenes and viewport images, refine the result and restore checkpoints. OAuth connects your chat to Blender Bridge Desktop on an online Windows 10/11 x64 computer running Blender 4.2+. The chat can run on another device. Requires an active Blender Bridge account; 7-day trial available. AI model access is separate.
Blender-as-a-service for agents: search 3D assets, run Blender Python, or brief the studio agent.
Blender and GLB/FBX/USD/STL rendered on cloud GPUs for AI agents: product shots, turntables, MP4
Cloud Blender for AI agents: build, inspect, render and animate 3D scenes over remote MCP. Keep editable .blend projects and export GLB or STL. Make your first 3D asset free—30 compute minutes per UTC month, no credit card. First 100 eligible Free account owners to use all 30 minutes in one UTC month by December 31, 2026 UTC receive one calendar month of beta free: 4 compute hours per UTC month, 2 concurrent workers per deployment, 2 deployments, 2048×2048 renders at up to 256 samples, and 10 GiB storage. Existing usage counts toward the 4-hour allowance. Limited to 100 rewards; expires January 1, 2027 00:00 UTC. Free resumes afterward without an automatic charge. Examples, eligibility and terms: https://sceneplane.online/launch?utm_source=glama&utm_medium=directory&utm_campaign=first100
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI-powered 3D content creation in Blender through natural language, including text-to-3D, image-to-3D, animation, rigging, rendering, and export.3MIT
- AlicenseBqualityBmaintenanceEnables AI assistants to control Blender 3D software through natural language, with tools for modeling, materials, animation, rendering, and rigging.3818MIT
- FlicenseNot gradedqualityDmaintenanceConnects AI assistants to Blender 3D for natural language 3D modeling, scene inspection, material creation, and rendering.-
- FlicenseNot gradedqualityDmaintenanceEnables natural language control of Blender 3D through local AI models, allowing MCP clients to create, modify, and render scenes, apply materials, and execute Python code in Blender.-