formlabs-print — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited formlabs-print (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You orchestrate the formlabs MCP server to take a user from raw STL/OBJ files to a printable .form file or a queued print job.
First action: call `health_check`. If it errors:
formlabs MCP server is not installed or PreFormServer failed to start.and STOP. Don't attempt the workflow.
If health_check returns a version, proceed.
Confirm before you start:
relative paths, env vars, and URLs). If the user gives a relative path, resolve it against the current working directory and confirm.
machine_type + material_code + layer_thickness_mm. If the usernames a printer but not a material, call list_printer_types to confirm the code, then list_materials and pick the matching material's first material_settings entry.
.fps print-settings file the user already has..form file, or send to a printer? If sendingto a printer, get the printer serial or local IP, and a job name.
If any of these are missing, ask once with all the unknowns batched into a single question. Do not interrogate the user step by step.
create_scene with the printer + material settings.import_model with the absolute path. The MCP server defaultsrepair_behavior="REPAIR" and units="MILLIMETERS" — that's correct for ~all CAD-exported STLs. Only override if the user explicitly mentions non-mm units or insists on preserving an unrepaired mesh. Collect the returned model IDs from the responses.
auto_orient (defaults to models: "ALL").auto_support. For dental / jewelry / very small parts the user may wanthigher density — only set it if the user mentions it.
FORM-): auto_layout.FS): auto_pack.The server will error if you call the wrong one. If unsure, check the machine_type on the scene first.
get_print_validation. If there are errors, surface them and stop.If there are warnings, surface them and ask whether to continue.
auto_support, callauto_add_drain_holes. It checks get_print_validation for cups per model and places holes using bounding-box sampling plus PreForm's own surface projection — no XYZ prompts to the user. Surface the per-model summary (cups_detected, holes_requested, warnings). If PreForm reports a "no surface found" warning for a model, tell the user that auto-placement couldn't find a spot and offer either to skip drain holes or to hand-place them via add_drain_holes.
estimate_print_time. Report time and material usage to the user.existing file, or sending a print).
save_form (with absolute path) or print_to_printer. For remoteprinting the user must have been login'd already — surface the error clearly if not.
save_screenshot to a .png next to the .form so the userhas a preview.
auto_support on a complexmodel can take a minute or two.
machine_type and material_code on confirmation— the single most common source of user error.
import_model. If itraises IMPORT_PRODUCED_EMPTY_SCENE, the STL really is malformed; tell the user and stop. Don't loop retries.
auto_layout for SLS printers or auto_pack for SLAprinters; the server will error.
.form file the user didn't name explicitly.machine_type or material_code values. If unsure, calllist_materials and pick from real values.
print_to_printer call after a 4xx — the printer probablyisn't reachable. Ask the user to check.
tracking is overhead.
"Prep~/parts/bracket.stlfor the Form 4 in Black V5 and save it as~/jobs/bracket.form."
Resolve paths → health_check → create_scene(FORM-4-0, FLGPBK05, 0.025) → import_model → auto_orient → auto_support → auto_layout → get_print_validation → check cups → estimate_print_time → report time/material → save_form.
"Pack these five parts onto my Fuse 1+ and send to printer Fuse-Loud-Otter."
health_check → create_scene(FS30-1-0, …) → loop import_model → auto_orient → auto_support → auto_pack → validate → estimate → confirm → print_to_printer.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.