Skip to main content
Glama
mkebiclioglu

formlabs-local-mcp

by mkebiclioglu

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
PREFORM_SPAWNNoSet to 0 to disable spawning even if PREFORM_SERVER_PATH is set.1
PREFORM_SERVER_URLNoOverride the base URL entirely (e.g. for a PreFormServer on another machine).http://localhost:$PORT
PREFORM_SERVER_PATHNoAbsolute path to the PreFormServer executable. If set, the MCP server spawns and supervises it.
PREFORM_SERVER_PORTNoPort the PreFormServer listens on.44388
PREFORM_POLL_TIMEOUTNoMaximum seconds to wait for any async operation.600
PREFORM_POLL_INTERVALNoSeconds between operation status polls.2.0

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": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
health_checkA

Return the PreFormServer version. Call this first to confirm the server is reachable; it starts PreFormServer if needed.

preform_statusA

Report how this MCP server is set up without touching PreFormServer: whether PreFormServer is installed and where, its version, local or remote mode, allowed directories, and how file paths are rewritten for a Wine-hosted PreFormServer (path_style, path_map). Use it to diagnose setup problems before health_check.

install_preform_serverA

Download the latest PreFormServer from Formlabs (about 170 MB), verify Formlabs' code signature, and install it into a user-owned folder. Ask the user before calling this. Safe to call again: it is a no-op when the installed version is already the latest.

get_userA

Return the Formlabs account currently logged in (after login).

create_sceneA

Create a new scene for a printer and material. Returns the scene including its id. Provide EITHER machine_type + material_code + layer_thickness_mm OR the absolute path of a .fps print-settings file. Get valid codes from list_printer_types and list_materials; never guess them.

list_scenesA

List every scene PreFormServer currently holds in memory.

get_sceneA

Get a scene: its models (ids, bounding boxes, supports), print settings, material usage and build volume.

update_sceneA

Change a scene's printer, material, layer thickness or print setting while keeping its models.

delete_sceneA

Delete a scene and its models. Deleting "default" resets it to empty.

load_formA

Open an existing .form file as a new scene. file must be an absolute path. Returns the scene.

import_modelA

Import a model file (STL, OBJ, 3MF, STEP) into a scene. file must be an absolute path. Returns the model with its id. Defaults differ from the raw API: repair_behavior=REPAIR (the API default ERROR fails on slightly broken meshes most CAD tools export) and units=MILLIMETERS (use INCHES for inch files, DETECTED to let PreForm guess). After importing, the scene is re-read and the call fails with IMPORT_PRODUCED_EMPTY_SCENE if no model was added: the file is malformed, do not retry.

get_modelA

Get one model's properties: transform, bounding box, supports, lock state.

update_modelA

Move, rotate, rescale, rename or lock a model. position is {x,y,z} mm; orientation is Euler degrees {x,y,z}. lock (FREE, LOCKED_XY_ROTATION_FREE_TRANSLATION, LOCKED_ROTATION_FREE_TRANSLATION, FULLY_LOCKED) controls what auto_layout / auto_pack may change.

duplicate_modelA

Make count copies of a model. Returns the scene. Run auto_layout or auto_pack afterwards.

replace_modelA

Swap a model's mesh for a new file while keeping its placement and supports. Useful when the user re-exports a revised part. file must be an absolute path.

delete_modelB

Remove a model from the scene.

auto_orientA

Rotate models to the orientation PreForm judges best for printing. mode="DENTAL" uses the Dental Workspace algorithm; tilt (degrees) applies only in DENTAL mode.

auto_supportB

Generate support structures. Leave parameters unset for PreForm's defaults. density and slope_multiplier are unitless factors around 1.0; raft_type is FULL_RAFT, MINI_RAFT or MINI_RAFTS_ON_BP.

auto_layoutA

Arrange models on the build platform. SLA printers only (machine types starting with FORM- or FRM). For SLS printers (Fuse) use auto_pack. mode="DENTAL" uses the Dental Workspace layout.

fill_build_platformA

Duplicate the given models as many times as fit and lay the copies out. SLA only; returns new_model_ids. For SLS printers use fill_build_chamber.

auto_packA

Pack all models into the 3D build chamber. SLS printers only (machine types starting with FS or PILK; PreFormServer 3.63 refuses it for the Fuse X1, FUSX-1-0, where models stay where import_model put them). For SLA printers use auto_layout. packing_mode is PACK_HEIGHT (minimize build height, faster print) or PACK_VOLUME (tightest packing).

fill_build_chamberA

Duplicate the given models until the SLS build chamber is full and pack them. SLS only; returns new_model_ids. Set fill_to_height_mm to fill only part of the chamber.

pack_and_cageA

Pack models and build a printed cage around them so they stay together after SLS printing. SLS only; acts on the most recently created scene. packing_type is PACK_VOLUME (default), PACK_HEIGHT, PACK_NORMAL or PACK_NONE. Returns the scene.

hollow_modelA

Hollow models to save resin. Follow up with auto_add_drain_holes so resin can escape.

label_modelA

Emboss or engrave text onto a model's surface. position is the label centre {x,y,z} in scene mm; orientation (Euler degrees) sets the text direction with +x along the text and +z as the surface normal.

add_drain_holesA

Add hand-placed drain holes to one model. Each entry needs position {x,y,z}, orientation, diameter_mm, depth_mm (number or "AUTO") and create_plug; max_search_distance (mm) lets PreForm snap the hole onto the nearest surface. Prefer auto_add_drain_holes unless the user gives coordinates.

auto_add_drain_holesA

Place drain holes automatically on every model that cup detection flags. Runs detect_cups, then for each cupped model samples points under its bounding box and lets PreForm project them onto the surface (depth AUTO). Models without cups are skipped. A "no surface found" warning means the cups are on a side face: offer add_drain_holes instead.

get_print_validationA

Full printability check per model: cups, unsupported_minima, undersupported, has_seamline.

detect_cupsA

Count resin cups (trapped-resin pockets) per model. Faster than full validation.

detect_minimaA

Count unsupported local minima per model (points that would print in mid-air).

detect_supportednessA

Percentage of each model's surface that is unsupported (PreForm's red shading).

detect_thin_wallsA

Find wall regions thinner than threshold_mm per model, with volumes and bounding boxes.

get_interferencesA

List pairs of model ids that overlap or sit closer than collision_offset_mm.

estimate_print_timeA

Estimate print time in seconds for the scene. Read material usage from get_scene.

save_formA

Save the scene as a .form file at an absolute path. Overwrites silently, so confirm with the user first if the file already exists.

save_screenshotB

Render the scene to a .png or .webp at an absolute path. view_type is ZOOM_ON_MODELS, FULL_BUILD_VOLUME or FULL_PLATFORM_WIDTH.

save_fps_fileA

Export the scene's print settings to a .fps file for reuse with create_scene.

list_devicesA

List printers PreFormServer knows: discovered LAN printers (run discover_devices to refresh), Fleet Control queues and Dashboard printers after login, and its built-in virtual printers (connection_type VIRTUAL, one per model such as "Form 4"), which accept print_to_printer as a hardware-free dry run of the whole upload path.

get_deviceA

Status of one printer: connection, tank and cartridge material, time remaining.

discover_devicesB

Scan the local network for Formlabs printers. Pass ip_address to probe one host.

print_to_printerA

Upload the scene to a printer and queue it, or start it. Confirm with the user first. printer is a printer serial name (e.g. "Fuse-Loud-Otter"), a local IP address, a Fleet Control queue id (requires login), or a built-in virtual printer id such as "Form 4" for a dry run without hardware. print_now=true starts immediately if the printer is ready; otherwise the job waits in the queue. Returns job_id.

list_materialsA

List printers with their materials and print settings. Each material setting's scene_settings holds the exact machine_type, material_code, print_setting and layer_thickness_mm for create_scene. Pass machine_type to keep only one printer family; the full list is large.

list_printer_typesA

Short list of printer families with machine_type codes and build volumes. Use it to map a printer name ("Form 4", "Fuse 1+", "Fuse X1") to a machine_type before create_scene. FORM-/FRM codes are SLA (auto_layout); FS/PILK/FUSX codes are SLS (auto_pack). Families PreFormServer accepts but does not list yet (the Fuse X1 in 3.63) carry an unlisted note.

loginA

Log in to Formlabs Web Services for remote printing, Fleet Control and Dashboard printers. Credentials never pass through the conversation: set FORMLABS_USERNAME and FORMLABS_PASSWORD (or FORMLABS_ACCESS_TOKEN) in the MCP server's environment and call this tool with no arguments.

logoutA

Log out of Formlabs Web Services.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.7/5.0

Scored across 45 tools

Disambiguation4/5

Most tools have clearly distinct purposes, and the descriptions carefully separate the tricky families (auto_layout/auto_pack/fill_build_platform/fill_build_chamber by SLA vs SLS, add_drain_holes vs auto_add_drain_holes). However get_print_validation overlaps with the detect_cups/detect_minima/detect_supportedness trio, and health_check vs preform_status are both diagnostics, so a few boundaries blur.

Naming Consistency4/5

Nearly everything follows a snake_case verb_noun pattern (create_scene, delete_model, auto_layout, detect_cups, print_to_printer) with a consistent auto_ prefix for automation tools. Minor deviations like health_check, preform_status, login/logout are acceptable and still readable.

Tool Count2/5

45 tools is very heavy, well past the point where an agent can comfortably scan the surface. While the domain (scene lifecycle, model editing, validation, printing, auth, setup) is genuinely broad, the suite is close to the extreme end and several tools could plausibly be consolidated.

Completeness5/5

The surface covers a full lifecycle: scene create/get/update/delete, model import/get/update/duplicate/replace/delete, positions and supports, validation and interference checks, save/export/screenshot, printer discovery and job submission, materials, and auth. No obvious dead ends for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive