formlabs-local-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PREFORM_SPAWN | No | Set to 0 to disable spawning even if PREFORM_SERVER_PATH is set. | 1 |
| PREFORM_SERVER_URL | No | Override the base URL entirely (e.g. for a PreFormServer on another machine). | http://localhost:$PORT |
| PREFORM_SERVER_PATH | No | Absolute path to the PreFormServer executable. If set, the MCP server spawns and supervises it. | |
| PREFORM_SERVER_PORT | No | Port the PreFormServer listens on. | 44388 |
| PREFORM_POLL_TIMEOUT | No | Maximum seconds to wait for any async operation. | 600 |
| PREFORM_POLL_INTERVAL | No | Seconds 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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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 |
| create_sceneA | Create a new scene for a printer and material. Returns the scene including its |
| 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. |
| import_modelA | Import a model file (STL, OBJ, 3MF, STEP) into a scene. |
| get_modelA | Get one model's properties: transform, bounding box, supports, lock state. |
| update_modelA | Move, rotate, rescale, rename or lock a model. |
| duplicate_modelA | Make |
| 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. |
| delete_modelB | Remove a model from the scene. |
| auto_orientA | Rotate models to the orientation PreForm judges best for printing. |
| auto_supportB | Generate support structures. Leave parameters unset for PreForm's defaults. |
| 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. |
| fill_build_platformA | Duplicate the given models as many times as fit and lay the copies out. SLA only; returns |
| 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. |
| fill_build_chamberA | Duplicate the given models until the SLS build chamber is full and pack them. SLS only; returns |
| 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. |
| 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. |
| add_drain_holesA | Add hand-placed drain holes to one model. Each entry needs |
| 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 |
| get_interferencesA | List pairs of model ids that overlap or sit closer than |
| 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. |
| 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 |
| print_to_printerA | Upload the scene to a printer and queue it, or start it. Confirm with the user first. |
| list_materialsA | List printers with their materials and print settings. Each material setting's |
| 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 |
| 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
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 45 tools
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.
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.
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.
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.