Skip to content

Features ​

  • Seven printer backends, selected with PRINTER_TYPE: OctoPrint, Klipper (Moonraker), Duet, Repetier-Server, Bambu Lab, PrusaLink or Prusa Connect, and Creality
  • Per-call type, host, port, and api_key arguments for working with more than one printer
  • Printer status, file listing, G-code upload from inline content or a local path, starting a stored file, pausing, resuming, cancelling a job, and setting bed or nozzle temperatures
  • The counterpart/1 tools shared with bambu-printer-mcp: one progress shape for every firmware (state, job, progress, time left, layers, temperatures, problems), detected printer capabilities, camera snapshots, and the loaded filament (Spoolman on Moonraker)
  • counterpart_printer_info reports capabilities.slicing (supports, copies, orient) for the slicer route this server uses for that printer (for a Bambu printer on OrcaSlicer, when the call passes its bambu_model), so a client can offer those choices without knowing the slicer.
  • counterpart_discover_printers finds printers on the local network without contacting them: Bambu Lab printers from their own SSDP announcements (serial, bambu_model value, name, firmware), and OctoPrint, Klipper (Moonraker) and PrusaLink hosts from their Bonjour adverts (dns-sd on macOS, avahi-browse on Linux)
  • counterpart_setup_fields lists every PRINTER_TYPE this server drives and the .env settings it reads for each (field role, variable, label, hint, required, the Bambu model choices and the model each serial prefix names, and cameraSnapshot: whether camera_snapshot reads the printer's camera with only those settings, false for every kind here), so a client can offer printer setup without printer tables of its own, and the slicer it would run (type, path, whether it is there, and the Bambu profiles folder) with the SLICER_TYPE, SLICER_PATH and BAMBU_PROFILES_ROOT fields, required only when what they default to is missing
  • counterpart_propose_filaments proposes which loaded spool prints each of a model's colours before slicing: nearest OKLab colour with the asked-for material preferred, one feed per print (the AMS or the external spool), a verdict and a person-readable note per part ("White isn't loaded. Closest loaded: A2 Sunflower Yellow PLA Basic."), each spool's label, name and slicer profile, and, with the person's chosen spools, a check against what is loaded now and the full mapping including painted slots
  • get_printer_filaments slots carry label ("A2", "External", "Spool") and a name a person reads (Bambu: Bambu Studio's colour name and the product, "Sunflower Yellow PLA Basic")
  • Errors carry their details in structuredContent (status, retryable, suggestion, message); a printer refusal on print_3mf also carries a stable code: printer-command-rejected, printer-not-ready, or printer-upload-failed when the file didn't reach the printer and no print command was sent, so a client can act on the code instead of the wording. A Bambu print_3mf call made with a progress token reports its LAN upload as MCP progress: progress is bytes sent, total the file's bytes, and _meta["counterpart/stage"] is "upload", at most once per whole percent.
  • STL tools: inspect dimensions, scale, rotate, translate, extend the base, merge vertices, center, lay flat, transform one section of a model, and render multi-angle SVG previews
  • A print and heating safety gate on every backend: the exact G-code is inspected, every heater target is checked against hardware and material ceilings, and the printer's state is checked. There is no confirmation prompt and no bed check: your client's own print action is the approval. Heater-off, pause, and cancel are never gated; resume only continues a paused job this server inspected and started, and asks a person only when the printer cannot hand the file back for re-reading
  • Slicing through PrusaSlicer, Slic3r, OrcaSlicer, CuraEngine, FULU OrcaSlicer-bambulab, or Bambu Studio command lines, with G-code peak-temperature checks and a one-call process-and-print pipeline
  • Bambu-compatible CLI slicing with the exact model and nozzle machine preset resolved from your slicer installation, filament slots and colours, placement options, and a local template registry
  • Bambu Lab project printing: upload a sliced .3mf over FTPS and start it over MQTT with the plate's G-code path, MD5, AMS mapping (ams_slots, one tray per used filament), and calibration flags, after checking the plate against a fresh printer report; or print through FULU's authenticated BambuNetwork route. Auto-slice unsliced projects with FULU OrcaSlicer-bambulab or Bambu Studio
  • Bambu AMS inventory (get_printer_filaments), pause, resume and stop over the connection that printed
  • Required Bambu printer model for print operations, asked for through MCP elicitation when missing
  • FULU OrcaSlicer-bambulab setup inspection and diagnostic BambuNetwork bridge RPC, with raw print methods refused
  • Optional Blender MCP bridge: discover a standard Blender MCP server's tools, forward calls, export named scene objects to a verified STL, and run verified STL edits
  • Optional Autodesk Fusion bridge through the pinned faust-machines Fusion MCP server: check Fusion and its add-in, forward any of its CAD tools, start a parametric design, and export STL, F3D and parameters with verified output
  • Slicer, bridge, and Blender executables come from server configuration unless you explicitly opt in to per-call selectors
  • MCP resources for printer status, files, and file details
  • Transports: stdio (default) and streamable HTTP, plus a Docker image

Released under the GPL-2.0 license. An independent open-source project, not affiliated with any printer manufacturer or host software.