protein-blender-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PROTEIN_BLENDER_PORT | No | Set this if you changed the port in the Blender panel. The default port is 9877. | |
| UV_PYTHON_INSTALL_DIR | No | Windows workaround for the Claude desktop app and uv: store uv's Python installations outside AppData, for example C:\\Users\\<you>\\.uv\\python. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Tools for styling protein and nucleic-acid 3D structures in Blender with Molecular Nodes. Typical flow: fetch_structure or load_file -> get_scene_info (see chains and ligands) -> clear_styles / add_style to build the look -> set_background, frame_camera -> render_image to check the result and iterate. Styles stack: each add_style adds another layer, so call clear_styles first when the user wants to restyle from scratch. Pick selections that match the user's words, e.g. 'the ligand' -> "not protein and not nucleic and not water".
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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. |
| 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. |
| load_fileC | Load a local structure file (.pdb, .cif, .bcif, .sdf, .mol) into the scene. |
| add_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]). |
| clear_stylesB | Remove every style layer from a molecule so it can be restyled from scratch. |
| remove_styleB | Remove one style layer by its index (see get_scene_info). |
| frame_cameraC | Point the scene camera at a molecule, or zoom in on a selection such as a binding site, from the given viewpoint. |
| 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. |
| set_render_settingsB | Choose the render engine (EEVEE is fast, CYCLES is photoreal), output size in pixels and sample count. |
| 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. |
| delete_moleculeC | Remove a molecule from the scene. |
| save_blendC | Save a copy of the current scene as a .blend file. |
| 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 |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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).