MCP server for the Formlabs Local API (PreFormServer): prep and print Formlabs jobs from Claude Code and other MCP clients
Strong foundation with 30 well-named tools, comprehensive schemas, and clear descriptions. All tools have explicit input schemas with type definitions and descriptions. Tool names follow verb_noun convention (create_scene, import_model, auto_orient). Descriptions average ~120 chars, meeting the 10-1024 char baseline. Tool annotations (readOnlyHint, destructiveHint) are present and correctly applied. Key gaps: output schemas are not documented in the tool definitions (only visible in handler implementations); some parameter descriptions lack format/constraint details (e.g., orientation object structure); error handling guidance is minimal; no confirmation pattern for irreversible operations like print_to_printer despite IRREVERSIBLE risk label.
Automatically add drain holes to models in a scene for SLS printing. Long-running.
Arrange every model in a scene on the build platform for SLA printers (Form 4, Form 3, Fuse 1+). Long-running.
Orient every model in a scene for optimal print quality and material usage. Long-running.
Arrange every model in a scene on the build platform for SLS printers (Fuse 1, Fuse 1+, Fuse X1). Long-running.
Generate supports for every model in a scene. Long-running.
Remove all supports from a model.
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.
Output schemas not documented in tool definitions. Handler implementations return complex objects (scenes with models, bounding boxes, supports, material usage) but tool definitions lack explicit output schema documentation. LLMs cannot plan downstream calls without knowing response structure.
Orientation parameter (set_model_orientation) lacks format specification. Description states 'Euler degrees {x,y,z}, or {z_direction:[..], x_direction:[..]} unit vectors' but does not specify numeric ranges, vector normalization, or which format is preferred. LLMs may pass invalid values.
No confirmation or dry-run pattern for irreversible operations. print_to_printer is marked IRREVERSIBLE but lacks a confirmation step or preview. delete_scene and delete_model are DESTRUCTIVE but can be called directly. Agents may accidentally trigger unwanted prints or deletions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 73 | 2026-07-28+ | v2 |
Delete a model from a scene.
Delete a scene and its models. Deleting "default" resets it to empty.
Estimate the print time and material usage for a scene. Long-running.
Get a model: its bounding box, supports, and per-model print settings.
Validate a scene: check for collisions, build volume violations, and other issues. Returns per-model results and a summary.
Get a scene: its models (ids, bounding boxes, supports), print settings, material usage and build volume.
Return the Formlabs account currently logged in (after `login`).
Return the PreFormServer version. Call this first to confirm the server is reachable; it starts PreFormServer if needed.
Import a 3D model file (.stl, .obj, .step, .iges, .3mf) into a scene. Returns the model including its `id`.
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.
List every printer connected to the Formlabs account (after `login`). Includes virtual printers for testing.
List every material available for a printer, including valid layer thicknesses and print settings.
List every model in a scene.
List every printer model Formlabs makes and PreFormServer supports.
List every scene PreFormServer currently holds in memory.
Load a .form file into a new scene. Returns the scene including its `id`.
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.
Upload a scene to a printer and start the print job. Requires the user to be logged in (after `login`). Always confirm with the user before calling this.
Save a scene as a .form file (PreForm's native format). Long-running.
Save a screenshot of a scene as a .png file. Long-running; may fail on headless systems without a GPU.
Set a model's orientation manually.
Set a model's position on the build platform manually.
Change a scene's printer, material, layer thickness or print setting while keeping its models.
Error handling lacks recovery guidance. Tool descriptions do not explain what to do if a call fails (e.g., 'If import_model fails with file not found, check the path with preform_status'). Handlers may throw PreFormError but LLMs receive no actionable next steps.
Parameter constraints not fully specified. machine_type and material_code are described as 'e.g. FORM-4-0' and 'e.g. FLGPBK05' but lack enum constraints or validation rules. LLMs may hallucinate invalid codes. Discovery tools (list_printer_types, list_materials) exist but are not referenced in create_scene description.