Agentic infrastructure for physical fabrication via 3D printing.
Ask your agent to print something. It just does it — start to finish.
Watch the demo →
CLI demo (terminal)
Kiln lets AI agents design, queue, and execute physical manufacturing jobs on real 3D printers with zero human intervention. It exposes printer control through both a CLI and the Model Context Protocol (MCP), making any MCP-compatible agent (OpenClaw, Claude, GPT, custom) a first-class operator of your print farm.
Three ways to print
| Mode | What it is | You need |
|---|---|---|
| 🖨️ Your printer | Control OctoPrint, Moonraker, Bambu, or Prusa Link printers on your LAN — or remotely via Bambu Cloud | A 3D printer |
| 🏭 Fulfillment centers | Outsource to Craftcloud (150+ services — no API key required). Kiln handles quoting, ordering, and tracking. More providers coming soon | Nothing — no printer required |
| 🌐 Distributed network (coming soon) | Route jobs to decentralized peer-to-peer printer networks, or register your own printer to earn revenue | Nothing — or a printer to earn |
All three modes use the same MCP tools and CLI commands. An agent can seamlessly fall back from a busy local printer to a fulfillment center — all in one workflow.
Why Kiln?
- One control plane, any printer — OctoPrint, Moonraker, Bambu Lab, Prusa Link. Manage a mixed fleet from one place.
- AI-native — 273 MCP tools built for AI agents. Not a web UI with an API bolted on.
- Prints don't fail silently — Cross-printer learning, automatic failure rerouting, preflight safety checks on every job.
- Search → Slice → Print — Browse MyMiniFactory, Cults3D, Thangs, GrabCAD, Etsy (and legacy Thingiverse), auto-slice with PrusaSlicer or OrcaSlicer, print — all from one agent conversation.
- Safety at scale — 28 per-printer safety profiles, G-code validation, heater watchdog, tamper-proof audit logs. Enterprise adds encrypted G-code at rest with key rotation, lockable profiles, RBAC, SSO, fleet site grouping, per-project cost tracking, and PostgreSQL HA.
Architecture
graph TD
A["🤖 AI Agent<br/><sub>Claude · GPT · Custom</sub>"]
A -->|"CLI or MCP"| B["⚙️ Kiln<br/><sub>CLI + MCP Server</sub>"]
B --> C["🖨️ Your Printers"]
B --> F["🏭 Fulfillment"]
B --> N["🌐 Distributed Network<br/><sub>(coming soon)</sub>"]
B --> D["🛒 Marketplaces"]
C --> E1["OctoPrint"]
C --> E2["Moonraker"]
C --> E3["Bambu"]
C --> E4["Prusa Link"]
C --> E5["Elegoo"]
F --> F1["Craftcloud"]
N --> N1["Remote Printers"]
D --> I["MyMiniFactory"]
D --> J["Cults3D"]
D --> K["Thangs"]
D --> L["GrabCAD"]
D --> M["Etsy"]
D --> H["Thingiverse (deprecated)"]
style A fill:#1a1a2e,stroke:#e94560,color:#fff
style B fill:#16213e,stroke:#0f3460,color:#fff
style C fill:#0f3460,stroke:#e94560,color:#fff
style F fill:#0f3460,stroke:#27ae60,color:#fff
style N fill:#0f3460,stroke:#f39c12,color:#fff
style D fill:#0f3460,stroke:#533483,color:#fff
style E1 fill:#2d2d44,stroke:#e94560,color:#fff
style E2 fill:#2d2d44,stroke:#e94560,color:#fff
style E3 fill:#2d2d44,stroke:#e94560,color:#fff
style E4 fill:#2d2d44,stroke:#e94560,color:#fff
style F1 fill:#2d2d44,stroke:#27ae60,color:#fff
style F2 fill:#2d2d44,stroke:#27ae60,color:#fff
style N1 fill:#2d2d44,stroke:#f39c12,color:#fff
style H fill:#2d2d44,stroke:#533483,color:#fff
style I fill:#2d2d44,stroke:#533483,color:#fff
style J fill:#2d2d44,stroke:#533483,color:#fff
Packages
This monorepo contains two packages:
| Package | Description | Entry Point |
|---|---|---|
| kiln | CLI + MCP server for multi-printer control (OctoPrint, Moonraker, Bambu, Elegoo, Prusa Link) | kiln or python -m kiln |
| octoprint-cli | Lightweight standalone CLI for OctoPrint-only setups | octoprint-cli |
Prerequisites
Before installing Kiln, you need your printer's LAN details (Ethernet or Wi-Fi):
| Printer | Type | What You Need |
|---|---|---|
| Prusa MK4/XL/Mini+ | prusaconnect | IP address + API key (both in Settings > Network > PrusaLink on the printer's LCD) |
| OctoPrint (any printer) | octoprint | OctoPrint URL + API key (Settings > API in OctoPrint web UI) |
| Klipper/Moonraker | moonraker | Moonraker URL (usually http://<ip>:7125) |
| Bambu Lab | bambu | IP address + LAN access code + serial number (all on the printer's LCD) |
| Elegoo (SDCP printers) | elegoo | IP address only — no authentication required. For Neptune 4/OrangeStorm Giga, use moonraker instead. |
Kiln only needs IP reachability on your local LAN. Ethernet-only printers are fully supported.
Optional: Install PrusaSlicer or OrcaSlicer to slice STL files directly from Kiln (brew install --cask prusaslicer on macOS).
Quick Start
Kiln CLI
# One-line install (clones repo + installs via pipx)
git clone https://github.com/codeofaxel/Kiln.git ~/.kiln/src && ~/.kiln/src/install.sh
# Or install manually from a local clone
pip install -e ./kiln
# Discover printers on your network (mDNS + HTTP probe)
kiln discover
# Add your printer (pick your type from the Prerequisites table)
kiln auth --name my-printer --host http://octopi.local --type octoprint --api-key YOUR_KEY
# Other printer types:
# kiln auth --name prusa --host http://192.168.1.100 --type prusaconnect --api-key YOUR_KEY
# kiln auth --name klipper --host http://192.168.1.100:7125 --type moonraker
# kiln auth --name bambu --host 192.168.1.100 --type bambu --access-code LAN_CODE --serial SERIAL
# If discovery misses your printer (common on WSL/VLANs), connect directly by IP with kiln auth.
# Check printer status
kiln status
# Upload and print a file
kiln upload model.gcode
kiln print model.gcode
# Slice an STL and print in one step
kiln slice model.stl --print-after
# Batch print multiple files
kiln print *.gcode --queue
# Monitor a running print
kiln wait
# Take a webcam snapshot
kiln snapshot --save photo.jpg
# View print history
kiln history --status completed
# All commands support --json for agent consumption
kiln status --json
Ethernet-Only Printers (No Wi-Fi)
Kiln works the same over Ethernet and Wi-Fi because it talks to printer APIs over LAN IP.
# 1. Connect printer and host to the same router/switch
# 2. Find printer IP from the printer UI or your router DHCP client list
# 3. Verify the printer endpoint responds:
curl http://<printer-ip>/api/version # OctoPrint
curl http://<printer-ip>:7125/server/info # Moonraker
curl -H "X-Api-Key: YOUR_KEY" http://<printer-ip>/api/v1/status # Prusa Link
# 4. Register directly by IP (no discovery required)
kiln auth --name my-printer --host http://<printer-ip> --type prusaconnect --api-key YOUR_KEY
Linux / WSL 2
Kiln runs natively on Linux and Ubuntu under WSL 2.
Option 1: pipx (recommended)
pipx installs Kiln into its own isolated environment and puts the kiln
command on your PATH — works from any directory, no virtualenv to manage.
Note: The pip package name is
kiln3d(notkiln). This matters forpipx uninstall,pip show, etc. The CLI command is stillkiln.
# One-time: install pipx
sudo apt install pipx
pipx ensurepath # adds ~/.local/bin to PATH (restart your shell after)
# Clone and install
git clone https://github.com/codeofaxel/Kiln.git
cd Kiln
pipx install ./kiln
# System dependencies (optional but recommended)
sudo apt install prusa-slicer # Required for slicing STL → G-code
sudo apt install openscad # Required only for text-to-3D generation
# Verify
kiln verify
Uninstall / Update
# Uninstall (package name is kiln3d, not kiln)
pipx uninstall kiln3d
# Update to latest version (if installed from a git clone)
cd Kiln
git pull
pipx install --force ./kiln
# Check what pipx has installed (useful for troubleshooting)
pipx list
Option 2: virtualenv
If you prefer a manual virtualenv:
python3 -m venv ~/.kiln-venv
source ~/.kiln-venv/bin/activate
git clone https://github.com/codeofaxel/Kiln.git
cd Kiln
pip install -e ./kiln # includes all printer backends (OctoPrint, Moonraker, Bambu, Elegoo, Prusa Link)
kiln verify
Tip: Add
source ~/.kiln-venv/bin/activateto your~/.bashrcso thekilncommand is always available when you open a terminal.
WSL 2 networking note: WSL 2 uses a virtual network (NAT), so mDNS printer
discovery (kiln discover) will not find printers on your home network. Instead,
connect directly by IP (same flow for Ethernet-only printers):
# 1. Find your printer's IP (check your router or the printer's LCD/web UI)
# 2. Verify connectivity from WSL
curl http://192.168.1.100:7125/server/info # Moonraker (Klipper)
curl http://192.168.1.100/api/version # OctoPrint
curl -H "X-Api-Key: YOUR_KEY" http://192.168.1.100/api/v1/status # Prusa Link
# Bambu printers use MQTT — just ensure port 8883 is reachable:
# nc -zv 192.168.1.100 8883
# 3. Register the printer with Kiln (pick your type)
kiln auth --name my-printer --host http://192.168.1.100:7125 --type moonraker
# kiln auth --name prusa --host http://192.168.1.100 --type prusaconnect --api-key YOUR_KEY
# kiln auth --name bambu --host 192.168.1.100 --type bambu --access-code LAN_CODE --serial SERIAL
# 4. Check printer status
kiln status
If PrusaSlicer is not in your PATH, set it explicitly:
export KILN_SLICER_PATH=/path/to/prusa-slicer
Bambu TLS security defaults: Kiln now uses certificate pinning (pin mode) for Bambu by default.
On first successful connection, the printer certificate fingerprint is pinned (TOFU) in
~/.kiln/bambu_tls_pins.json. Advanced overrides:
# Strict CA/hostname validation (usually fails on stock self-signed printers)
export KILN_BAMBU_TLS_MODE=ca
# Legacy behavior (no certificate validation) - use only on trusted LANs
export KILN_BAMBU_TLS_MODE=insecure
# Optional explicit pin (SHA-256 fingerprint, hex with or without colons)
export KILN_BAMBU_TLS_FINGERPRINT=0123abcd...
Bambu webcam snapshots require ffmpeg for RTSP frame capture. Install it if you want vision monitoring on Bambu printers:
# macOS
brew install ffmpeg
# Ubuntu/Debian
sudo apt install ffmpeg
Without ffmpeg, Bambu printers will work normally but can_snapshot will be False and vision monitoring tools won't capture frames.
CLI Commands
kiln discover # Scan LAN for printers (mDNS + HTTP probe)
kiln auth --name N --host H --type T # Save printer credentials
kiln doctor-prusa [--json] # Prusa Link diagnostics (endpoints + storage roots)
kiln status [--json] # Printer state + job progress
kiln files [--json] # List files on printer
kiln upload <file> [--json] # Upload G-code file
kiln print <files>... [--queue] [--json] # Start printing (supports batch + queue)
kiln cancel [--json] # Cancel current print
kiln pause [--json] # Pause current print
kiln resume [--json] # Resume paused print
kiln temp [--tool N] [--bed N] [--json] # Get/set temperatures
kiln gcode <cmds>... [--json] # Send raw G-code
kiln printers [--json] # List saved printers
kiln use <name> # Switch active printer
kiln remove <name> # Remove a saved printer
kiln preflight [--material MAT] [--json] # Pre-print safety checks
kiln slice <file> [--print-after] [--json] # Slice STL/3MF to G-code
kiln snapshot [--save PATH] [--json] # Capture webcam snapshot
kiln wait [--timeout N] [--json] # Wait for print to finish
kiln history [--status S] [--json] # View past prints
kiln order materials [--json] # List fulfillment materials
kiln order quote <file> -m MAT [--json] # Get manufacturing quote
kiln order place <quote_id> [--json] # Place a fulfillment order
kiln order status <order_id> [--json] # Track order status
kiln order cancel <order_id> [--json] # Cancel an order
kiln cost <file> [--material PLA] [--json] # Estimate print cost
kiln material set|show|spools|add-spool # Material tracking
kiln level [--status] [--trigger] [--json] # Bed leveling triggers
kiln stream [--port 8081] [--stop] [--json] # Webcam MJPEG proxy
kiln sync status|now|configure # Cloud sync
kiln plugins list|info # Plugin management
kiln generate "a phone stand" --provider meshy --json # Generate 3D model from text (meshy/tripo3d/stability/gemini/openscad)
kiln generate-status <job_id> --json # Check generation status
kiln generate-download <job_id> -o ./models --json # Download generated model
kiln firmware status --json # Check for firmware updates
kiln firmware update [--component klipper] # Apply firmware updates
kiln firmware rollback <component> # Roll back firmware
kiln network register --name N --location L # Register printer on distributed network (coming soon)
kiln network find --material PLA # Find network printers by material (coming soon)
kiln network submit URL --material PLA # Submit job to distributed network (coming soon)
kiln network status <job_id> # Check network job status (coming soon)
kiln network list # List your registered network printers (coming soon)
kiln network update <id> --available # Update printer availability (coming soon)
kiln setup # Interactive printer setup wizard
kiln serve # Start MCP server
kiln rest [--port 8420] [--tier full] [--auth-token TOKEN] # Start REST API server
kiln agent [--model openai/gpt-4o] # Interactive agent REPL (any LLM)
The REST API can be deployed to Fly.io for production use — see deploy.sh for one-command deployment.
Global option: --printer <name> to target a specific printer per-command.
MCP Server
# Start the MCP server (uses printer from ~/.kiln/config.yaml)
kiln serve
# Or override with environment variables
export KILN_PRINTER_HOST=http://192.168.1.100 # Your printer's IP or hostname
export KILN_PRINTER_API_KEY=your_api_key # API key (OctoPrint/Moonraker/Prusa Link)
export KILN_PRINTER_TYPE=prusaconnect # octoprint | moonraker | bambu | prusaconnect
kiln serve
Claude Code Integration
Add to your project's .claude/settings.json (or global ~/.claude/settings.json):
{
"mcpServers": {
"kiln": {
"command": "kiln",
"args": ["serve"]
}
}
}
Note: Claude Code uses your
~/.kiln/config.yamlfor printer credentials (set up viakiln setuporkiln auth). No env vars needed if you've already configured a printer.
Claude Desktop Integration
Add to ~/.config/Claude/claude_desktop_config.json:
{
"mcpServers": {
"kiln": {
"command": "python",
"args": ["-m", "kiln", "serve"],
"env": {
"KILN_PRINTER_HOST": "http://192.168.1.100",
"KILN_PRINTER_API_KEY": "your_key",
"KILN_PRINTER_TYPE": "prusaconnect"
}
}
}
}
Tip: Replace
KILN_PRINTER_TYPEwith your backend:octoprint,moonraker,bambu, orprusaconnect. Or skip env vars entirely if you've already runkiln setup.
Multi-Model Support (OpenRouter / Any LLM)
Kiln works with any LLM that supports OpenAI-compatible function calling — not just Claude.
# Interactive agent REPL with any model via OpenRouter
export KILN_OPENROUTER_KEY=sk-or-...
kiln agent --model openai/gpt-4o
kiln agent --model anthropic/claude-sonnet-4
kiln agent --model meta-llama/llama-3.1-70b-instruct --tier essential
# REST API mode — any HTTP client can call Kiln tools
export KILN_API_AUTH_TOKEN=CHANGE_ME_long_random_token
kiln rest --port 8420 --tier full
# POST http://localhost:8420/api/tools/printer_status
# GET http://localhost:8420/api/tools
# Install with REST API support
pip install kiln3d[rest]
When binding REST to non-localhost addresses (for hosted deployments), set KILN_API_AUTH_TOKEN or pass --auth-token.
Tool tiers automatically match model capability: essential (15 tools) for smaller models, standard (46 tools) for mid-range, full (105 tools) for Claude/GPT-4/Gemini. All 273 tools are available via MCP (kiln serve).
OctoPrint CLI
# Install
pip install -e ./octoprint-cli
# Initialize config
octoprint-cli init --host http://octopi.local --api-key YOUR_KEY
# Use
octoprint-cli status
octoprint-cli files
octoprint-cli print myfile.gcode --confirm
MCP Tools (Selected)
The Kiln MCP server (kiln serve) exposes 273 tools to agents. Key tools are listed below — run kiln tools for the complete catalog.
| Tool | Description |
|---|---|
printer_status | Get printer state, temperatures, job progress |
printer_files | List available G-code files |
upload_file | Upload a local G-code file to the printer |
start_print | Start printing a file |
cancel_print | Cancel the active print job |
pause_print | Pause the active print |
resume_print | Resume a paused print |
set_temperature | Set hotend and/or bed temperature |
preflight_check | Run safety checks before printing |
send_gcode | Send raw G-code commands |
validate_gcode | Validate G-code without sending |
fleet_status | Get status of all registered printers |
register_printer | Add a printer to the fleet |
submit_job | Submit a print job to the queue |
job_status | Check status of a queued job |
queue_summary | Overview of the job queue |
cancel_job | Cancel a queued or running job |
recent_events | Get recent events from the event bus |
kiln_health | System health check (version, uptime, modules) |
register_webhook | Register a webhook for event notifications |
list_webhooks | List all registered webhooks |
delete_webhook | Remove a webhook endpoint |
search_all_models | Search MyMiniFactory, Cults3D, Thangs, GrabCAD, Etsy, and Thingiverse (deprecated) simultaneously |
marketplace_info | Show connected marketplaces and setup hints |
search_models | Search a single marketplace for 3D models |
model_details | Get details for a marketplace model |
model_files | List files for a marketplace model |
download_model | Download a model file from a marketplace |
download_and_upload | Download from any marketplace and upload to printer in one step |
browse_models | Browse popular/newest/featured models |
list_model_categories | List marketplace categories |
slice_model | Slice an STL/3MF file to G-code |
find_slicer_tool | Detect installed slicer (PrusaSlicer/OrcaSlicer) |
slice_and_print | Slice a model then upload and print in one step |
printer_snapshot | Capture a webcam snapshot from the printer |
fulfillment_materials | List materials from external print services (Craftcloud) |
fulfillment_quote | Get a manufacturing quote for a 3D model |
fulfillment_order | Place an order based on a quote |
fulfillment_order_status | Track a fulfillment order |
fulfillment_cancel | Cancel a fulfillment order |
estimate_cost | Estimate print cost from G-code file |
list_materials | List available material profiles |
set_material | Set loaded material on a printer |
get_material | Get loaded material for a printer |
check_material_match | Verify material matches expected |
list_spools | List spool inventory |
add_spool | Add a spool to inventory |
remove_spool | Remove a spool from inventory |
bed_level_status | Get bed leveling status for a printer |
trigger_bed_level | Trigger bed leveling on a printer |
set_leveling_policy | Configure auto-leveling policy |
webcam_stream | Start/stop/status MJPEG stream proxy |
cloud_sync_status | Get cloud sync status |
cloud_sync_now | Trigger immediate sync |
cloud_sync_configure | Configure cloud sync settings |
list_plugins | List installed plugins |
plugin_info | Get details for a specific plugin |
await_print_completion | Poll until a print job finishes (completed/failed/cancelled/timeout) |
compare_print_options | Side-by-side local vs. fulfillment cost comparison |
analyze_print_failure | Diagnose a failed print job with causes and recommendations |
validate_print_quality | Post-print quality assessment with snapshot and event analysis |
generate_model | Generate a 3D model from text (Meshy, Tripo3D, Stability AI, Gemini Deep Think, or OpenSCAD) |
generation_status | Check the status of a model generation job |
download_generated_model | Download a completed generated model with mesh validation |
await_generation | Wait for a generation job to complete (polling) |
generate_and_print | Full pipeline: generate -> validate -> slice -> upload -> print |
validate_generated_mesh | Validate an STL/OBJ mesh for printing readiness |
firmware_status | Check for available firmware updates on the printer |
update_firmware | Start a firmware update (all or specific component) |
rollback_firmware | Roll back a firmware component to its previous version |
print_history | Get recent print history with success/failure tracking |
printer_stats | Aggregate stats for a printer (total prints, success rate, avg duration) |
annotate_print | Add notes to a completed print record |
save_agent_note | Save a persistent note/preference that survives across sessions |
get_agent_context | Retrieve all stored agent memory for context |
delete_agent_note | Remove a stored note or preference |
list_safety_profiles | List all bundled printer safety profiles (28 models) |
get_safety_profile | Get temperature/feedrate/flow limits for a specific printer |
validate_gcode_safe | Validate G-code against printer-specific safety limits |
list_slicer_profiles_tool | List all bundled slicer profiles with recommended settings |
get_slicer_profile_tool | Get full slicer settings (speeds, retraction, temps) for a printer |
get_printer_intelligence | Firmware quirks, material compatibility, calibration guidance |
get_material_recommendation | Recommended hotend/bed/fan settings for a material on a printer |
troubleshoot_printer | Diagnose printer issues from known failure modes database |
list_print_pipelines | List available pre-validated pipelines (quick_print, calibrate, benchmark) |
run_quick_print | Full pipeline: slice → validate → upload → print in one shot |
run_calibrate | Home → bed level → calibration guidance pipeline |
run_benchmark | Slice → upload → stats report (manual start) |
monitor_print_vision | Capture snapshot + printer state + phase hints; agent's vision model analyzes for defects |
watch_print | Poll printer with periodic snapshots; returns batch for agent vision review |
record_print_outcome | Record print quality outcome with safety-validated settings |
get_printer_insights | Query cross-printer learning: success rates, failure breakdown, material stats |
suggest_printer_for_job | Rank printers by historical success for a file/material combination |
recommend_settings | Recommend print settings (temps, speed, slicer profile) from historical successes |
network_register_printer | Register a local printer on a distributed manufacturing network (coming soon) |
network_update_printer | Update a printer's availability on the distributed network (coming soon) |
network_list_printers | List printers registered by this account on the distributed network (coming soon) |
network_find_printers | Search for available printers on the distributed network by material/location (coming soon) |
network_submit_job | Submit a print job to a distributed manufacturing network (coming soon) |
network_job_status | Check the status of a job on the distributed network (coming soon) |
billing_status | Get billing status, fee policy, and payment methods |
billing_summary | Aggregated billing summary |
billing_history | Recent billing charges and payment outcomes |
billing_setup_url | Get URL to link a payment method (Stripe) |
safety_audit | Audit safety compliance across jobs |
safety_settings | Get current safety and auto-print settings |
safety_status | Comprehensive safety status check |
delete_file | Delete a file from the printer |
cache_model | Cache a downloaded model locally for reuse |
search_cached_models | Search cached models by name, source, or tags |
list_cached_models | List all cached models with metadata |
get_cached_model | Get details and local path for a cached model |
delete_cached_model | Remove a model from the local cache |
backup_database | Create a timestamped backup of the Kiln SQLite database |
verify_audit_integrity | Verify integrity of the audit log (hash chain validation) |
clean_agent_memory | Prune stale or expired agent memory entries |
list_trusted_printers | List printers in the trust store with verification status |
trust_printer | Add a printer to the trust store (fingerprint + TLS pinning) |
untrust_printer | Remove a printer from the trust store |
pipeline_status | Get real-time status of a running pipeline |
pipeline_pause | Pause a running pipeline at the current step boundary |
pipeline_resume | Resume a paused pipeline |
pipeline_abort | Abort a running or paused pipeline |
pipeline_retry_step | Retry the failed step in a pipeline |
consumer_onboarding | Step-by-step guide for users without a 3D printer |
validate_shipping_address | Validate and normalize a shipping address |
recommend_material | Recommend material by use case (decorative, functional, outdoor, etc.) |
estimate_price | Instant price estimate before requesting a full quote |
estimate_timeline | Order-to-delivery timeline with per-stage breakdown |
fulfillment_compare_providers | Side-by-side quotes from all fulfillment providers |
fulfillment_filter_materials | Search/filter materials by technology, color, price |
fulfillment_batch_quote | Quote multiple parts in one operation (assemblies) |
fulfillment_provider_health | Health status of all fulfillment providers |
fulfillment_order_history | View past orders for status review or reorder |
fulfillment_reorder | Look up past order details for easy reordering |
fulfillment_insurance_options | Shipping insurance/protection options with pricing |
supported_shipping_countries | List countries supported for fulfillment shipping |
export_audit_trail | Export audit trail as JSON/CSV with date range, tool, action, and session filters (Enterprise) |
lock_safety_profile | Admin-lock a safety profile to prevent agent modifications (Enterprise) |
unlock_safety_profile | Unlock a previously locked safety profile (Enterprise) |
manage_team_member | Add, remove, or update team member roles (admin/engineer/operator) (Enterprise) |
printer_usage_summary | Per-printer usage summary for overage billing (Enterprise) |
uptime_report | Rolling uptime metrics (1h/24h/7d/30d) with SLA tracking (Enterprise) |
encryption_status | Check G-code encryption status and key configuration (Enterprise) |
report_printer_overage | Report printer overage billing details (Enterprise) |
configure_sso | Configure SSO provider (OIDC/SAML) with IdP settings (Enterprise) |
sso_login_url | Generate SSO login URL for OIDC/SAML authentication (Enterprise) |
sso_exchange_code | Exchange authorization code for session token via SSO (Enterprise) |
sso_status | Check SSO configuration and provider status (Enterprise) |
rotate_encryption_key | Re-encrypt all G-code files with a new key (Enterprise) |
database_status | Check database backend (SQLite/PostgreSQL) health and config (Enterprise) |
list_fleet_sites | List all physical sites in the fleet with printer counts (Enterprise) |
fleet_status_by_site | Fleet status grouped by physical site (Enterprise) |
update_printer_site | Assign a printer to a physical site/location (Enterprise) |
create_project | Create a client project for cost allocation (Enterprise) |
log_project_cost | Log a cost entry (material, printer time, labor, etc.) against a project (Enterprise) |
project_cost_summary | Aggregate cost summary with budget tracking for a project (Enterprise) |
client_cost_report | Cross-project cost report for a client (Enterprise) |
Supported Printers
| Backend | Status | Printers |
|---|---|---|
| OctoPrint | Stable | Any OctoPrint-connected printer (Prusa, Ender, custom) |
| Moonraker | Stable | Klipper-based printers (Voron, Ratrig, etc.) |
| Bambu | Stable | Bambu Lab X1C, P1S, A1 (via LAN MQTT) |
| Prusa Link | Stable | Prusa MK4, XL, Mini+ (local REST API — type: prusaconnect) |
| Elegoo | Stable | Centauri Carbon, Saturn, Mars series (via LAN WebSocket/SDCP). Neptune 4/OrangeStorm Giga use Moonraker. |
MCP Resources
The server also exposes read-only resources that agents can use for context:
| Resource URI | Description |
|---|---|
kiln://status | System-wide snapshot (printers, queue, events) |
kiln://printers | Fleet listing with idle printers |
kiln://printers/{name} | Detailed status for a specific printer |
kiln://queue | Job queue summary and recent jobs |
kiln://queue/{job_id} | Detail for a specific job |
kiln://events | Recent events (last 50) |
Modules
| Module | Description |
|---|---|
server.py | MCP server with tools, resources, and subsystem wiring |
printers/ | Printer adapter abstraction (OctoPrint, Moonraker, Bambu, Elegoo, Prusa Link) |
marketplaces/ | Model marketplace adapters (MyMiniFactory, Cults3D, Thangs, GrabCAD, Etsy, Thingiverse — deprecated) |
slicer.py | Slicer integration (PrusaSlicer, OrcaSlicer) with auto-detection |
registry.py | Fleet registry for multi-printer management |
queue.py | Priority job queue with status tracking |
scheduler.py | Background job dispatcher with history-based smart routing |
events.py | Pub/sub event bus with history |
persistence.py | SQLite storage for jobs, events, and settings |
webhooks.py | Event-driven webhook delivery with HMAC signing |
auth.py | Optional API key authentication with scope-based access |
billing.py | Fee tracking for fulfillment and network-routed jobs |
discovery.py | Network printer discovery (mDNS + HTTP probe) |
generation/ | Text-to-model generation providers (Meshy, Tripo3D, Stability AI, Gemini Deep Think, OpenSCAD) with auto-discovery, mesh validation, and printability analysis |
consumer.py | Consumer workflow for non-printer users (address validation, material recommendations, timeline/price estimation, onboarding) |
fulfillment/ | External manufacturing service adapters (Craftcloud) with intelligence layer (provider health, multi-provider comparison, batch quoting, retry/fallback, order history, shipping insurance) |
cost_estimator.py | Print cost estimation from G-code analysis |
materials.py | Multi-material and spool tracking |
bed_leveling.py | Automated bed leveling trigger system |
streaming.py | MJPEG webcam streaming proxy |
cloud_sync.py | Cloud sync for printer configs and job history |
plugins.py | Plugin system with entry-point discovery |
gcode.py | G-code safety validator with per-printer limits |
safety_profiles.py | Bundled safety database (30 printer models, temps/feedrates/flow) |
slicer_profiles.py | Bundled slicer profiles (auto-generates .ini files per printer) |
printer_intelligence.py | Printer knowledge base (firmware quirks, materials, failure modes) |
pipelines.py | Pre-validated print pipelines (quick_print, calibrate, benchmark) |
tool_schema.py | OpenAI function-calling schema converter (MCP → OpenAI format) |
tool_tiers.py | Tool tier definitions (essential/standard/full) for model capability matching |
agent_loop.py | Generic agent loop for any OpenAI-compatible API (OpenRouter, direct, etc.) |
openrouter.py | OpenRouter integration with model catalog and auto-tier detection |
rest_api.py | REST API wrapper (FastAPI) exposing all MCP tools as HTTP endpoints |
data/ | Bundled JSON databases (safety profiles, slicer profiles, printer intelligence) |
payments/ | Payment processing (Stripe, Circle USDC, crypto rails) |
gateway/ | Distributed manufacturing network gateway (coming soon) |
heater_watchdog.py | Auto-cooldown watchdog for idle heaters |
licensing.py | License tier management (Free/Pro/Business/Enterprise, offline-first) |
sso.py | SSO authentication (OIDC/SAML) with IdP role mapping and email domain allowlists |
gcode_encryption.py | G-code encryption at rest (Fernet/PBKDF2 via KILN_ENCRYPTION_KEY) |
printer_billing.py | Per-printer overage billing (20 included, $15/mo each additional) |
teams.py | Team seat management with RBAC (admin/engineer/operator roles) |
uptime.py | Rolling uptime health monitoring (1h/24h/7d/30d windows, 99.9% SLA target) |
project_costs.py | Per-project cost tracking for manufacturing bureaus (material, labor, printer time, fulfillment) |
wallets.py | Crypto wallet configuration (Solana/Ethereum for donations and fees) |
cli/ | Click CLI with 107 commands and JSON output |
deploy/ | Kubernetes manifests and Helm chart for on-prem Enterprise deployment |
Authentication (Optional)
Kiln supports optional API key authentication for MCP tools. Disabled by default.
# Enable auth
export KILN_AUTH_ENABLED=1
export KILN_AUTH_KEY=your_secret_key
# Clients provide their key via
export KILN_MCP_AUTH_TOKEN=your_secret_key
Scopes: read, write, admin. Read-only tools (status, list) never require auth.
Webhooks
Register HTTP endpoints to receive real-time event notifications:
register_webhook(url="https://example.com/hook", events=["job.completed", "print.failed"])
Payloads are signed with HMAC-SHA256 when a secret is provided.
Security defaults:
- Webhook redirects are blocked by default (
KILN_WEBHOOK_ALLOW_REDIRECTS=0). - If redirects are enabled, each hop is SSRF-validated and HTTPS→HTTP downgrade is blocked.
Printer Discovery
Kiln can automatically find printers on your local network:
kiln discover
Discovery uses mDNS/Bonjour and HTTP subnet probing to find OctoPrint, Moonraker, Bambu, and Prusa Link printers.
If discovery returns no results, register printers directly by IP with kiln auth (works for both Ethernet and Wi-Fi LAN setups).
Third-Party Plugins
Third-party entry-point plugins are default-deny in production (KILN_PLUGIN_POLICY=strict).
Allow only specific plugins with:
export KILN_ALLOWED_PLUGINS=my_plugin,other_plugin
For temporary migration compatibility, permissive mode can be enabled:
export KILN_PLUGIN_POLICY=permissive
Model Marketplaces
Kiln includes adapters for discovering and downloading 3D models from popular marketplaces:
| Marketplace | Status | Features |
|---|---|---|
| MyMiniFactory | Stable | Search, details, download. Primary marketplace — recommended for new integrations. |
| Cults3D | Stable | Search, details (metadata-only, no direct download) |
| Thangs | Stable | Search, details, download. Geometric search across multiple sources. |
| GrabCAD | Stable | Search, details, download. Engineering-focused CAD model library. |
| Etsy | Stable | Search, details, download. Digital download 3D-printable listings. |
| Thingiverse | Deprecated | Search, browse, download, categories. Acquired by MyMiniFactory (Feb 2026). API may be sunset or merged; prefer MyMiniFactory adapter. |
Configure credentials for the marketplaces you use:
export KILN_THINGIVERSE_TOKEN=your_token # Thingiverse (deprecated — acquired by MyMiniFactory, Feb 2026)
export KILN_MMF_API_KEY=your_key # MyMiniFactory
export KILN_CULTS3D_USERNAME=your_username # Cults3D
export KILN_CULTS3D_API_KEY=your_key # Cults3D
export KILN_THANGS_API_KEY=your_key # Thangs
export KILN_GRABCAD_API_KEY=your_key # GrabCAD
export KILN_ETSY_API_KEY=your_key # Etsy
All configured marketplaces are searched simultaneously via search_all_models. Agents can inspect details, download files, and upload directly to a printer — enabling a full design-to-print workflow without human intervention.
AI Model Generation
Kiln's universal generation adapter auto-discovers text-to-3D providers from environment variables. Set any of the following and the provider is available instantly:
export KILN_MESHY_API_KEY=your_key # Meshy — cloud text-to-3D
export KILN_TRIPO3D_API_KEY=your_key # Tripo3D — high-quality cloud text-to-3D
export KILN_STABILITY_API_KEY=your_key # Stability AI — synchronous 3D generation
export KILN_GEMINI_API_KEY=your_key # Gemini Deep Think — AI-reasoned text/sketch-to-3D
OpenSCAD is also available for local parametric generation (no API key needed — just install the openscad binary).
| Provider | Type | Async | Output Formats |
|---|---|---|---|
| Meshy | Cloud | Yes | STL, OBJ, GLB |
| Tripo3D | Cloud | Yes | STL, OBJ, GLB |
| Stability AI | Cloud | No (synchronous) | GLB |
| Gemini Deep Think | Cloud + Local | No (synchronous) | STL |
| OpenSCAD | Local | No (synchronous) | STL |
Generated models are automatically validated for printability (manifold check, triangle count, bounding box dimensions) before printing. The registry pattern means new providers can be added in under 100 lines.
Slicer Integration
Kiln wraps PrusaSlicer and OrcaSlicer for headless slicing. Auto-detects installed slicers on PATH, macOS app bundles, or via KILN_SLICER_PATH.
# Slice an STL to G-code
kiln slice model.stl
# Slice and immediately print
kiln slice model.stl --print-after
# Supported formats: STL, 3MF, STEP, OBJ, AMF
Webcam Snapshots
Capture point-in-time images from printer webcams for monitoring and quality checks:
# Save snapshot to file
kiln snapshot --save photo.jpg
# Get base64-encoded snapshot (for agents)
kiln snapshot --json
Supported on OctoPrint, Moonraker, Prusa Link, and Bambu (requires ffmpeg for RTSP capture — see install note above). Agents use the printer_snapshot MCP tool.
Fulfillment Services
Print through external manufacturing services — no 3D printer required, or use alongside your own printers for overflow, specialty materials, or production runs. Kiln handles the entire workflow from idea to delivered product:
# Get material recommendations for your use case
kiln order recommend functional --budget budget
# Instant price estimate (no API call needed)
kiln order estimate FDM --x 80 --y 60 --z 40
# Estimate delivery timeline
kiln order timeline SLA --country US
# List available materials (FDM, SLA, SLS, MJF, etc.)
kiln order materials
# Get a quote for a model
kiln order quote model.stl --material pla-white --quantity 2
# Validate your shipping address
kiln order validate-address --street "123 Main St" --city Austin --state TX --postal-code 78701 --country US
# View shipping insurance options
kiln order insurance 45.00
# Place the order
kiln order place q-abc123 --shipping std
# Track order status
kiln order status o-def456
# View order history
kiln order history
# List supported shipping countries
kiln order countries
Configure your fulfillment provider:
# Craftcloud — works out of the box (no API key required for public endpoints)
export KILN_FULFILLMENT_PROVIDER=craftcloud
# Optional: API key to associate orders with a Craftcloud account
export KILN_CRAFTCLOUD_API_KEY=your_key
# Optional: WebSocket price polling (recommended by Craftcloud, requires pip install websockets msgpack)
export KILN_CRAFTCLOUD_USE_WEBSOCKET=1
# Craftcloud staging (for testing)
export KILN_CRAFTCLOUD_BASE_URL=https://api-stg.craftcloud3d.com
# Optional: explicitly select a provider
export KILN_FULFILLMENT_PROVIDER=craftcloud
Agents use the consumer workflow MCP tools: consumer_onboarding for guided setup, recommend_material for material selection, estimate_price / estimate_timeline for quick estimates, fulfillment_compare_providers for cross-provider quotes, fulfillment_batch_quote for multi-part assemblies, and fulfillment_order_history / fulfillment_reorder for repeat orders.
Development
# Create a virtualenv first (required on modern Ubuntu/Debian/WSL)
python3 -m venv .venv && source .venv/bin/activate
# Install both packages in dev mode
pip install -e "./kiln[dev]"
pip install -e "./octoprint-cli[dev]"
# Run tests (6,339 total)
cd kiln && python3 -m pytest tests/ -v # 6,100 tests
cd ../octoprint-cli && python3 -m pytest tests/ -v # 239 tests
Revenue Model
All local printing is free forever — status checks, file management, slicing, fleet control, and printing to your own printers costs nothing.
Kiln charges a 5% platform fee on orders placed through external manufacturing services (kiln order / fulfillment MCP tools), with:
- First 3 outsourced orders per month free
- $0.25 minimum / $200 maximum per-order cap
The fee is shown transparently in every quote before you commit.
Licensing Tiers
| Tier | Price | What You Get |
|---|---|---|
| Free | $0 | All local printing, slicing, marketplace, safety profiles. Job queue (10 jobs). Up to 2 printers. Billing visibility. |
| Pro | $29/mo | Unlimited printers + fleet orchestration, fleet analytics, unlimited queue depth, cloud sync, priority scheduler. Annual: $23/mo ($276/yr). |
| Business | $99/mo | Everything in Pro + up to 50 printers, 5 team seats, unlimited fulfillment orders (5% fee), shared hosted MCP server, priority support, custom safety profiles, webhook integrations. Annual: $79/mo ($948/yr). |
| Enterprise | From $499/mo | Everything in Business + unlimited printers (20 included, $15/mo each after), unlimited seats, role-based access control, dedicated single-tenant MCP server, on-prem/cloud/hybrid deployment, SSO (SAML/OIDC), full audit trail with export, lockable safety profiles, encrypted G-code at rest, 99.9% uptime SLA, dedicated Slack channel. Annual: $399/mo ($4,788/yr). |
Run kiln upgrade to activate a license key.
Safety
Kiln is safety-first infrastructure for controlling physical machines:
- Pre-flight checks validate printer state, temperatures, and files before every print
- G-code validation blocks dangerous commands (firmware reset, unsafe temperatures)
- Temperature limits enforce safe maximums (300C hotend, 130C bed)
- Confirmation required for destructive operations (cancel, raw G-code)
- Optional authentication with scope-based API keys for multi-user setups
- Structured errors ensure agents always know when something fails
Brand Assets
Logo files live in docs/assets/:
| File | Use |
|---|---|
kiln-banner-1280x640.svg | GitHub / social media banner |
kiln-logo-dark.svg | Primary mark + wordmark (dark bg) |
kiln-logo-light.svg | Mark + wordmark (light bg) |
kiln-horizontal-dark.svg | Horizontal lockup (dark bg) |
kiln-horizontal-light.svg | Horizontal lockup (light bg) |
kiln-logo-dark-notext.svg | Mark only (dark bg) |
kiln-favicon-256.svg | Favicon / app icon |
kiln-logo-transparent.svg | Transparent bg (for dark UIs) |
kiln-logo-transparent-dark.svg | Transparent bg (for light UIs) |
kiln-pfp-1024.svg | Social media profile picture with subtle glow (1024×1024) |
kiln-pfp-1024-flat.svg | Social media profile picture, no glow (1024×1024) |
wallpapers/kiln-wallpaper-iphone-*.svg | iPhone wallpapers (15, 15 Pro/Max, 16, 16 Pro/Max, 17, 17 Air, 17 Pro/Max) |
wallpapers/kiln-wallpaper-macbook-*.svg | MacBook wallpapers (Air 13/15, Pro 14/16) |
All files are vector SVG — scale to any size.
Documentation
| Document | Description |
|---|---|
| Litepaper | Quick overview for non-technical readers |
| Whitepaper | Full technical architecture and protocol design |
| Project Docs | Complete reference (CLI, MCP tools, adapters, config) |
Support Development
Kiln is free, open-source software. If you find it useful, consider sending a tip:
- Solana:
kiln3d.sol - Ethereum:
kiln3d.eth
License
MIT License — free for any use. See LICENSE for details.