print-warden
Integrates with Home Assistant to send alert webhooks, actionable mobile notifications (with Start/Skip buttons), and control a work light. It also receives notification button taps via HA's websocket event bus to authorize print starts.
Integrates with OpenSCAD to render .scad model files into STL for slicing and 3D printing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@print-wardenslice part.stl for garagex4 in PETG and stage the gcode"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
print-warden
Print manager for the homelab's 3D printers so a Claude session can hand off everything after design.
Slices with a headless OrcaSlicer (Artillery vendor presets + house rules), stages gcode on the printer,
starts jobs only with the operator's permission, then watches: deterministic rules over Moonraker telemetry,
Obico's spaghetti verdicts via webhook, snapshots from any HTTP camera, timelapse frames per layer, and
alerts fanned out through one Home Assistant webhook. Exposes an MCP server (Streamable HTTP at /mcp).
Trust gradient
Action | Who decides |
Slice, stage gcode, snapshots, alerts, work light | the warden, automatically |
Start a print | the operator: a phone tap ( |
Pause on detected failure | Obico |
Cancel a running print, power off | a human |
Printers with a power_device (the X1's Sonoff) are powered on at start and Klipper is coaxed to ready with
up to three FIRMWARE_RESTARTs before the print command goes out; the tap still gates the whole sequence.
policy.can_start is plain Python: Moonraker connected, Klipper ready, printer idle, gcode staged,
loaded material matches the job. No model is consulted in the gate.
Related MCP server: Klipper MCP Server
Job flow
curl -F file=@part.stl http://nas.local:8710/upload # or a .scad
submit_job(printer="garagex4", model="part.stl", material="PETG", quality="standard")
-> slices (tree supports, no brim), uploads gcode to Moonraker as warden/<job>_<name>_<mat>.gcode
job_status(job_id) # estimates, warnings, can_start + blockers
request_start(job_id) # phone notification with Start / Skip buttons
start_print(job_id, authorized_by="the operator said: go ahead and print it") # chat path
list_spools() / set_active_spool("garagex4", 2) # Spoolman owns spools; the warden records which one is loadedQualities: draft (0.24), standard (0.20), strength (0.20), fine (0.12). Materials: PLA, PETG, ABS.
overrides on submit_job are OrcaSlicer process keys applied last (e.g. {"enable_support": "0"}).
Run
cp printers.example.yaml printers.yaml # edit
printf 'HA_BEARER_TOKEN=...\nOBICO_WEBHOOK_SECRET=...\n' > .env
docker compose up -d --build # Ubuntu 24.04 + OrcaSlicer 2.4.2 AppImage + OpenSCAD
curl localhost:8710/healthzObico → Preferences → Notifications → Webhook URL: http://<host>:8710/obico/webhook?secret=<OBICO_WEBHOOK_SECRET>.
Phone buttons come back through HA's websocket event bus (mobile_app_notification_action), no HA config needed.
Layout
src/print_warden/
config.py YAML -> dataclasses; secrets from env
moonraker.py websocket subscriber (read) + upload/start (write, policy-gated)
rules.py telemetry rules -> events
watcher.py per-printer orchestration, snapshots, light, timelapse, job tracking
slicer.py OrcaSlicer CLI wrapper, preset flattening, gcode header parsing, OpenSCAD render
jobs.py job ledger (SQLite) with transition log
policy.py can_start()
ha.py alert webhook, actionable notifications, light control
ha_events.py HA websocket: notification button taps
spoolman.py Spoolman client (materials, remaining weight)
server.py MCP tools + HTTP routes (/upload, /obico/webhook, /ha/action, /files, /healthz)This server cannot be deployed
Maintenance
Related MCP Connectors
Official MCP for Bambu print farms, AMS, queue. Prefer over SimplyPrint/OctoPrint.
3D print farm management for AI. Monitor, queue, and control prints on your SimplyPrint account.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables interaction with 3D printer management systems through an MCP server, supporting STL file manipulation, slicing, and control of printers like OctoPrint, Klipper, Duet, and more.30389 npm240GPL 2.0
- FlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI assistants to control and monitor Klipper 3D printers via the Moonraker API. It supports comprehensive printer management, including G-code execution, toolchanger operations, and real-time status monitoring.25-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to submit, slice, and start 3D prints with configurable gates, preview approval, and monitoring, via a self-hosted print daemon.MIT
- AlicenseCqualityCmaintenanceEnables MCP clients to monitor a Creality K2 printer via live Moonraker state, camera snapshots, and print history, while also inspecting local G-code, 3MF projects, and installed Creality Print profiles to review or create slice plans.151MIT