Skip to main content
Glama
AaronGoldsmith

mcp-printable

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

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_get_scene_infoA

Get a summary of all objects in the Blender scene: names, types, dimensions, vertex counts.

blender_get_object_infoA

Get detailed info about a specific object: dimensions, mesh stats, modifiers, materials, manifold check.

object_name: the object to inspect. (name is a deprecated alias kept so older callers keep working; every other single-object tool uses object_name.)

blender_clear_sceneA

Remove all objects from the scene. Refuses to wipe a non-empty scene unless force=True.

Default behavior protects in-progress user work — if the scene already has objects, this tool returns an error listing them and asks the agent to confirm intent. Pass force=True to override (for genuine fresh-build scenarios). Always sets units to mm regardless.

blender_restore_checkpointA

Restore the scene from the auto-saved checkpoint — the undo button for a destroyed mesh.

A checkpoint is saved automatically before every blender_boolean and blender_execute_code call, so this rolls back to the state just before the most recent mutating operation. Replaces ALL current scene objects. Use immediately after a DEGENERATE RESULT warning or a botched edit — a subsequent mutating call overwrites the checkpoint with the broken state.

blender_rename_objectA

Rename an object (e.g., 'Cylinder.001' -> 'hinge_barrel').

blender_booleanA

Boolean op on two meshes with built-in connectivity + manifold checks. Always prefer this over raw modifiers in execute_code.

operation: DIFFERENCE | UNION | INTERSECT. solver: EXACT (reliable) | FAST. use_self (EXACT only): classify self-intersecting operands via winding numbers. Set True when an operand contains multiple overlapping shells (multi-shell meshes) — without it the EXACT solver can silently annihilate the target (an ANNIHILATION warning in the result flags this). Slower; default False. use_hole_tolerant (EXACT only): better results when operands have holes (non-watertight geometry). Slower; default False. Returns face counts, connected components, warnings. A WARNING means the boolean may have silently failed — inspect the numbers and re-run.

blender_execute_codeA

Run Python in Blender (bpy, bmesh, mathutils, math available). Set __result__ to return a value. Keep under ~20 lines.

For boolean ops use blender_boolean instead — it's safer and validates the result. NEVER use bpy.ops.object.join() (creates internal faces). After any geometry change call blender_validate(checks=['HEALTH']) to verify watertight + manifold.

blender_get_screenshotA

Single screenshot from a custom camera angle. Use when render_tiled's 4 fixed views miss what you need.

elevation: deg above horizontal (0=side, 90=top, negative=below). azimuth: deg rotation (0=front, 90=right, 180=back). focus_object + isolate: frame and isolate one part for a clean detail view.

blender_render_tiledA

4-angle labeled grid render — your primary feedback tool after every modeling step.

Default views: iso/front/right/top. Available: iso, front, back, right, left, top. Use focus_object (+isolate) to zoom into a specific part. Follow up with cross_section_gallery if internal geometry needs verification.

blender_render_turntableA

N-angle turntable around one object. Use for cylindrical geometry (barrels, pins) where 4 fixed angles miss details.

steps=8 → every 45°, steps=12 → every 30°. elevation in degrees (negative=below).

blender_cross_sectionA

Cut and render the exposed internal face. Use to verify internal geometry that renders can't show: pin holes, wall thickness, knuckle interleave, clearance gaps.

percent: 0-100, position along the chosen axis (50 = middle). object_names: cut multiple objects with the same plane and render them together. Essential for verifying chain joints, ball-in-socket captivity, or any pair where parts wrap around each other.

Provide exactly one of object_name OR object_names — sending both raises ValueError to avoid silent precedence bugs.

blender_cross_section_galleryA

Grid of cross-sections at multiple positions along one or more axes. The only way to verify complex internal geometry (knuckle interleave, pin holes, socket bores).

Default: all 3 axes × [10, 30, 50, 70, 90]%. X-axis slices are usually most informative for hinges. object_names: cut multiple objects with the same planes and render each tile with all of them. Use for chain joints / mating-part captivity verification.

Provide exactly one of object_name OR object_names — sending both raises ValueError to avoid silent precedence bugs.

blender_render_printability_heatmapA

Render the object with faces colored by printability issues.

Red = overhang, Yellow = thin wall, Green = OK. Returns a multi-angle tiled image plus issue counts.

blender_render_with_dimensionsA

Render the scene with bounding box dimension data for each object.

Returns an isometric render plus dimension measurements for each object.

blender_render_before_afterA

Capture before/after screenshots around a modeling operation.

Provide the bpy code to execute between captures. Returns a side-by-side comparison.

blender_check_intersectionA

Check if two meshes physically overlap. Use after assembly — separate parts should NEVER volumetrically overlap (would mean a boolean went wrong, or parts were placed too close).

Distinct from clearance (which measures distance between non-touching objects). Returns contact_type: NONE | SURFACE_CONTACT (coincident faces, expected for flush-fit assemblies) | VOLUMETRIC_OVERLAP (parts share volume and will fuse), plus overlap_volume_mm3, contact_area_mm2 (half the intersection mesh's surface area — the contact patch), mean_penetration_um (overlap volume spread over the contact area — micron-scale means flush contact / float dust, tens of microns or more means real penetration; use it to judge borderline cases yourself), and the raw face-pair count.

blender_check_retentionA

Verify a moving part is captive by translating it displacement mm in direction and checking intersection with static_objects. Returns CAPTIVE or FREE.

direction: '+X'/'-X'/'+Y'/'-Y'/'+Z'/'-Z'. Use for: car body on axles, ball in socket, hinge pin in barrel.

blender_check_clearanceB

Minimum gap between two objects. Default 0.3mm is typical FDM print-in-place clearance — below this, parts fuse.

blender_check_clearance_sweepA

Rotate inner_object through 360° and check clearance at each step. MANDATORY for any joint, hinge, or articulating mechanism.

A hinge that looks fine at 0° may collide at 90°. Returns worst-case clearance and the angle where it occurs. passes=False → the joint WILL fuse during printing.

blender_validateA

Run specified printability checks on a mesh. Valid checks: 'ALL', 'HEALTH', 'OVERHANGS', 'THIN_WALLS', 'CLEARANCE'.

Replaces individual mesh_health, overhang, and thin_wall checks. Use checks=['ALL'] to run the full printability suite before STL export. Set clearance_partners to check clearance against named neighbors. Per-face issue lists are capped at 10 exemplars; pass verbose=True for the full lists (can be very large on dense meshes).

blender_export_stlA

Export mesh(es) to a single STL for 3D printing. Warns about non-manifold edges.

With no object args: exports ALL mesh objects bundled into one STL (most common for printing). Use object_name for one part, object_names=[...] for a specific bundle. Relative paths resolve against the MCP server's cwd, not Blender's (which is its install dir, read-only on Windows).

blender_import_stlB

Import an STL file into the scene.

Relative paths are resolved against the MCP server's working directory.

blender_save_blendA

Save the current scene as a .blend file.

If path is omitted, saves to the current file or a temp location. Relative paths are resolved against the MCP server's working directory.

blender_version_infoA

Report the MCP server version vs. the installed Blender addon version.

The server auto-updates from PyPI, but the addon is a copy inside Blender's addons dir that only updates via 'python install.py' + Blender restart — use this to diagnose stale-addon behavior. Addons older than 0.2.3 don't report a version and show as unknown.

scad_compileA

Compile OpenSCAD code to STL via CGAL. Always follow with scad_validate_printability on the result.

output_path: relative paths resolve against MCP server cwd (so "cube.stl" lands in your project dir, not Blender's). Omit to write to a tempdir.

scad_render_viewsA

Render multiple labeled views of an OpenSCAD model into a grid image.

Default views: iso, front, right, top. Set preview=False for CGAL- rendered final views (slower).

scad_cross_sectionA

Slice the model with a thin slab and render the cut. The only reliable way to verify internal geometry (clearances, hollows, joints).

percent: 0-100 along the chosen axis (mapped onto the model's actual bounds). slab_thickness in model units. Compiles the code to STL first, so expect CGAL render time on heavy models.

scad_validate_printabilityA

Watertight / manifold / volume / overhang checks on an STL via trimesh. Run after every scad_compile.

PASS/WARN/FAIL verdict + structured report.

scad_import_stlA

Return an OpenSCAD snippet that imports the given STL — for Blender→SCAD handoff or further parametric modification.

Returned snippet includes a NOTE about the --render-mode path caveat.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription
Print-in-Place Design (FDM, backend-agnostic)Cardinal print-path rule, clearance values, ball-socket/hinge/snap-fit patterns, validation checklist. READ FIRST for any moving-parts mechanism.
Blender Design LoopPlan→build→verify→validate→export workflow, boolean rules, unit safety, visual feedback hierarchy, common failure modes.
Blender: Image Displacement to Printable ReliefTurn a 2D image into raised printable 3D relief on a Blender primitive. PIL preprocessing, displace modifier setup, calibration table.
Blender App ControlHow to launch, restart, kill, and run multiple Blender instances for the Printable MCP.
OpenSCAD Backend ReferenceSetup, tool reference, validator details, cross-backend handoff, and always-on rules for the OpenSCAD backend (scad_* tools).

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/AaronGoldsmith/mcp-printable'

If you have feedback or need assistance with the MCP directory API, please join our Discord server