Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
COMFY_URLSNoComfyUI instances sharing the GPU (GPU guard)http://127.0.0.1:8188,http://127.0.0.1:8189
BLENDER_EXENoPath to blender.exe; default is the newest install under Program Files\Blender Foundation
BLENDER_MCP_HOSTNoHost running Blender127.0.0.1
BLENDER_MCP_PORTNoAddon socket port9876
MIN_FREE_VRAM_GBNoGPU guard threshold6
ASSET_VALIDATOR_PYNoPath to a validate_asset.py exposing validate(path, height_m, tri_budget, tol, nonmanifold_max) (and optionally validate_with_doc). Its deps: uv sync --extra validate

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
blender_statusB

Is Blender's MCP addon socket reachable right now?

blender_startB

Launch Blender (optionally opening blend_file) and wait until the addon socket answers.

No-op if it is already up. Finds blender.exe in Program Files or via $BLENDER_EXE.

blender_stopA

Quit Blender. Refuses when the file has unsaved changes unless force=True (which kills it).

blender_scene_infoB

Summary of the open Blender scene (objects, counts, active camera).

blender_object_infoC

Transform, dimensions, materials and mesh stats for one object.

blender_run_pythonB

Run Python inside Blender (bpy available). The reply is the code's stdout: use print().

Executes arbitrary code in the user's Blender session. Keep edits reproducible: record meaningful changes in your build scripts, not only in the live scene.

blender_screenshotB

Screenshot of the Blender 3D viewport (needs the Blender UI open). Returns an image.

blender_turntableA

Render evenly spaced turntable views of all visible meshes; returns the images. View 0 = front (-Y).

mode: material (scene materials + temporary offset key light of strength light), solid (Workbench, fast), wireframe (Cycles on CPU), normal (world-space), mask (alpha silhouette). solid and wireframe skip the GPU guard. The scene is restored. Refuses to render while ComfyUI is running a job or VRAM is low, unless ignore_gpu_guard=True.

blender_renderB

Render explicit camera views: views=[{"az": degrees, "el": degrees}, ...] (az 0 = front/-Y, +az toward +X, el = elevation). objects limits the framed/rendered meshes; ortho=True gives an orthographic camera. focus={"center": [x, y, z], "radius": r} frames that world-space region (e.g. the head of a full body). Modes as in blender_turntable. Returns the images.

blender_render_sceneB

Render through the scene's OWN active camera and lights (shot rendering), one image per frame. mode: beauty | mask (needs objects: only they are drawn, white, silhouette in alpha) | normal. hide hides objects for this render (e.g. actors -> clean background plate). Returns the images.

blender_import_glbB

Import a GLB/glTF/FBX into the open scene. Returns new objects, triangle count and dimensions (x,y,z in m).

blender_export_glbA

Export to a .glb. With objects, only those; otherwise the whole scene.

blender_openC

Open a .blend (replaces the current scene; unsaved changes are lost).

blender_saveB

Save the current file, or save as path when given.

blender_new_sceneB

Remove all objects (orphan data purged). keep: object types to keep, e.g. ["CAMERA", "LIGHT"].

blender_validate_assetA

Run the asset validator (dims within tol of height_m, tri budget, NaN, zero-area faces, non-manifold, PBR maps). With asset_json also cross-checks the sidecar. Needs ASSET_VALIDATOR_PY (see README).

blender_rig_infoC

Bones (name, parent, head/tail in rest pose) of an armature and the meshes bound to it.

blender_set_poseA

Set local Euler rotations (degrees) on pose bones: rotations={"bone": [x, y, z]}. reset=True clears other bones first. Use blender_reset_pose afterwards to go back to rest.

blender_pose_aimA

Pose by direction, no bone-axis knowledge needed: aim={"RightArm": [1, 0, 0.2], "Spine": [0, 0, 1]} points each bone's limb (its head to the head of its continuing child, not the bone tail) along that WORLD direction, parents first. Returns the residual angle per bone in degrees. Prefer this over blender_set_pose for authoring poses.

blender_key_poseA

Keyframe the current pose of the armature at frame (all bones, plus the object's location/rotation). Workflow for a clip: blender_timeline(frame=f) -> blender_pose_aim(...) -> blender_key_pose(frame=f), repeat.

blender_timelineB

Set the frame range / fps and/or jump to a frame (which evaluates existing keyframes).

blender_reset_poseC

Return all pose bones of the armature to the rest pose.

blender_pose_metricsB

Deformation metrics of the CURRENT pose vs rest: face-area ratio percentiles, fraction of faces stretched >2x or squashed <0.4x, volume ratio (volume loss = candy-wrapper joints), and the number of vertices with zero skin weight.

blender_rom_testA

Range-of-motion test: for each pose apply it, measure deformation and render. Returns a JSON report followed by one image per pose; the rig is reset to rest afterwards.

poses={"name": {"bone": [x, y, z]}} in degrees. Default is a Mixamo-named table whose rotation axes are NOT calibrated: check the images and pass your own poses if they look wrong.

blender_compare_refB

Coarse likeness check: silhouette IoU between an orthographic render of the model (from azimuth/ elevation) and a reference image (alpha, or plain background). Both are cropped to their bounding boxes, so position/scale are ignored; aspect_ratio_diff reports proportion mismatch. Returns JSON and an overlay image (red = reference only, green = render only, yellow = both).

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.5/5.0

Scored across 25 tools

Disambiguation4/5

Most tools target clearly distinct operations, and the render family (blender_turntable, blender_render, blender_render_scene) is carefully differentiated by camera source. The pose tools (blender_set_pose vs blender_pose_aim) overlap slightly, but descriptions explicitly state when to prefer each.

Naming Consistency5/5

Every tool uses the same blender_ snake_case prefix, and names read as clear verb_noun or noun_noun constructs. Minor verb-placement variation (blender_render_scene vs blender_scene_info) does not break the pattern.

Tool Count4/5

25 tools is on the heavy side, but the surface genuinely spans several subdomains (file/lifecycle, rendering, rigging/posing, validation). Each tool maps to a distinct capability rather than redundant variants.

Completeness4/5

The set covers lifecycle (start/stop/status, open/save/new), import/export, scene/object inspection, rendering, rigging/posing/keyframing, and validation/comparison. Gaps like direct object deletion or material editing exist but are largely workable via blender_run_python.

Maintenance

ActivityMaintained
ResponsivenessNo issues