{
  "markdown": "<!-- mcp-name: io.github.codeofaxel/kiln -->\n<p align=\"center\">\n  <img src=\"docs/assets/kiln-banner-1280x640.svg\" alt=\"Kiln\" width=\"640\">\n</p>\n\n<p align=\"center\">\n  <a href=\"https://pypi.org/project/kiln3d/\"><img src=\"https://img.shields.io/pypi/v/kiln3d\" alt=\"PyPI\"></a>\n  <a href=\"https://pepy.tech/projects/kiln3d\"><img src=\"https://img.shields.io/pepy/dt/kiln3d\" alt=\"PyPI Downloads\"></a>\n  <a href=\"https://pypi.org/project/kiln3d/\"><img src=\"https://img.shields.io/pypi/pyversions/kiln3d\" alt=\"Python\"></a>\n  <a href=\"https://github.com/codeofaxel/Kiln/blob/main/LICENSE\"><img src=\"https://img.shields.io/github/license/codeofaxel/Kiln\" alt=\"License\"></a>\n  <a href=\"https://github.com/codeofaxel/Kiln/blob/main/policies/SIGNING.md\"><img src=\"https://img.shields.io/badge/verified%20by-sigstore%20%2B%20SLSA-0f6fdc?logo=sigstore&logoColor=white\" alt=\"Verified by Sigstore + SLSA\"></a>\n  <a href=\"https://glama.ai/mcp/servers/codeofaxel/kiln\"><img src=\"https://glama.ai/mcp/servers/codeofaxel/kiln/badge?v=2\" alt=\"Kiln MCP server\" width=\"120\"></a>\n</p>\n\n---\n\n**The open-source MCP server for 3D printing.**\n\nKiln lets AI agents (Claude Desktop, Claude Code, Codex, or any custom MCP client) drive real 3D printers end to end — Bambu Lab, Creality, Prusa, Elegoo, Voron, Sovol, AnkerMake, Artillery, FlashForge, QIDI, RatRig, and SparkX, over OctoPrint, Moonraker/Klipper, PrusaLink, and Direct USB.\n\nIn a single conversation, an agent can design a part, slice it, queue it on the right printer, monitor the camera, recover from failures, and ship the result. No human in the middle.\n\n> **Reading this as an AI agent?** [**kiln3d.com/agents**](https://kiln3d.com/agents?utm_source=github&utm_medium=readme) is written for you rather than for the person running you: install, MCP config, the design-to-print loop, and exactly what Kiln will refuse to do and why.\n\n```bash\npip install kiln3d\n```\n\n<p align=\"center\">\n  <img src=\"docs/assets/kiln-demo-loop.svg\" alt=\"A Kiln agent session: the user asks for a coaster with their dog's photo; Kiln designs it, checks it will print, slices, and prints it on a Bambu A1 — done in 41 minutes.\" width=\"640\">\n</p>\n\n<p align=\"center\">\n  <img src=\"docs/assets/ash-coaster.jpg\" alt=\"A 3D-printed coaster with a relief portrait of a French bulldog and the name ASH along the bottom edge, held in a hand\" width=\"640\">\n</p>\n\n<p align=\"center\">\n  <em>\"a coaster with a photo of my dog Ash\" — start to finish, from one sentence.</em><br>\n  <a href=\"https://kiln3d.com/?utm_source=github&utm_medium=readme#demo\">Watch the demo →</a>\n</p>\n\n<p align=\"center\">\n  <sub>Kiln's built in the open. If it made your printing more fun, or just saved you a headache, a ⭐ on the repo helps the next maker find it.</sub>\n</p>\n\n## Quick Start\n\n**Using Claude Desktop? Install Kiln in one click.** [Download `kiln.mcpb`](https://github.com/codeofaxel/Kiln/releases/latest/download/kiln.mcpb) and double-click it — Claude Desktop installs Kiln and wires it in (just Claude Desktop: steps 1 and 2 below are how Codex and every other AI app connect), so those steps aren't yours. Two things still are: OpenSCAD, and Kiln's terms — the command shows them and asks you to type your acceptance, which is why it's yours and not your AI's: `uvx --from kiln3d kiln accept-terms`. The bundle and that command both run on [`uv`](https://docs.astral.sh/uv/getting-started/installation/) — free, with a one-line install for each platform at that link. If Claude Desktop says the server failed to start, that's uv missing: install it and restart. Updates arrive with the extension, not via `kiln self-update`.\n\nEveryone else — three steps. Then ask your AI to make something.\n\n**1. Install**\n\n```bash\npip install kiln3d\n```\n\n**2. Connect your AI** — Kiln sets itself up inside Claude Desktop, Claude Code, and Codex:\n\n```bash\nkiln signin        # create your free account\nkiln install-mcp   # connects Kiln to your AI apps\n```\n\nRestart your AI app and it can run your printer. (Claude Code and Codex can even run this whole setup for you — the one-prompt version lives at [kiln3d.com/install](https://kiln3d.com/install?utm_source=github&utm_medium=readme).) Using a different MCP client? `kiln install-mcp --print` prints the config — or paste it yourself:\n\n<details>\n<summary><strong>Manual MCP config (any client, no sign-in needed)</strong></summary>\n\n```json\n{\n  \"mcpServers\": {\n    \"kiln\": {\n      \"command\": \"python3\",\n      \"args\": [\"-m\", \"kiln\", \"serve\"]\n    }\n  }\n}\n```\n\n**No install needed?** Swap the command for a zero-install runner — `\"command\": \"uvx\"`, `\"args\": [\"kiln3d\", \"serve\"]` (Python), or `\"command\": \"npx\"`, `\"args\": [\"kiln3d\"]` (Node). Same server, nothing to `pip install`.\n\nDrop this into Claude Desktop, Claude Code, Codex, Cursor, or any MCP-capable agent. Runs on the free tier until you sign in.\n</details>\n\n**3. Ask** — paste a sentence like this into your agent. Kiln does the rest:\n\n> Make me a coaster with my dog's photo on it\n\nThat's the whole happy path. Your AI does the designing, slicing, and printing — you never touch a CLI. OS-specific walkthrough (Windows, WSL 2, Linux) at **[kiln3d.com/install](https://kiln3d.com/install?utm_source=github&utm_medium=readme)**.\n\n> [!TIP]\n> `kiln doctor` checks your whole setup and tells you exactly what to fix. `kiln self-update` upgrades in place when a new release lands.\n\n<details>\n<summary><strong>Prefer to drive it yourself? (CLI tour)</strong></summary>\n\n```bash\n# Discover printers on your network (mDNS + HTTP probe)\nkiln discover\n\n# Add your printer (see the printer table under \"Supported Printers\")\nkiln auth --name my-printer --host http://octopi.local --type octoprint --api-key YOUR_KEY\n# Other types:\n# kiln auth --name prusa  --host http://192.168.1.100      --type prusalink --api-key YOUR_KEY\n# kiln auth --name klipper --host http://192.168.1.100:7125 --type moonraker\n# kiln auth --name bambu  --host 192.168.1.100             --type bambu --access-code LAN_CODE --serial SERIAL\n\nkiln status                       # Printer state + job progress\nkiln upload model.gcode           # Upload a file\nkiln print model.gcode            # Start printing\nkiln slice model.stl --print-after  # Slice an STL and print in one step\nkiln print *.gcode --queue        # Batch print\nkiln wait                         # Monitor a running print\nkiln snapshot --save photo.jpg    # Webcam snapshot\nkiln history --status completed   # Print history\n\n# Every command supports --json for agent consumption\nkiln status --json\n```\n\nGlobal option: `--printer <name>` targets a specific printer per command. The full command reference is in [Project Docs](docs/PROJECT_DOCS.md).\n</details>\n\n<details>\n<summary><strong>Connect a specific agent (Claude Code, Claude Desktop, env vars)</strong></summary>\n\n**Claude Code** — install the plugin (one-time: install [uv](https://astral.sh/uv) first if you don't have it — it's free and takes one line):\n\n```bash\nclaude plugin marketplace add codeofaxel/Kiln\nclaude plugin install kiln@kiln\n```\n\nOr wire it by hand — add to `.claude/settings.json` (project) or `~/.claude/settings.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"kiln\": { \"command\": \"kiln\", \"args\": [\"serve\"] }\n  }\n}\n```\n\nClaude Code uses your `~/.kiln/config.yaml` for printer credentials (set via `kiln setup` or `kiln auth`). No env vars needed if a printer is already configured.\n\n**Claude Desktop** — add to `~/.config/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"kiln\": {\n      \"command\": \"python3\",\n      \"args\": [\"-m\", \"kiln\", \"serve\"],\n      \"env\": {\n        \"KILN_PRINTER_HOST\": \"http://192.168.1.100\",\n        \"KILN_PRINTER_API_KEY\": \"your_key\",\n        \"KILN_PRINTER_TYPE\": \"prusalink\"\n      }\n    }\n  }\n}\n```\n\nSet `KILN_PRINTER_TYPE` to your backend: `octoprint`, `moonraker`, `bambu`, `prusalink`, `elegoo`, `duet`, or `usb` — or skip env vars entirely if you've run `kiln setup`.\n\n**Any other LLM (OpenRouter)** — Kiln works with any model that supports OpenAI-compatible function calling, not just Claude:\n\n```bash\nexport KILN_OPENROUTER_KEY=sk-or-...\nkiln agent --model openai/gpt-4o\nkiln agent --model meta-llama/llama-3.1-70b-instruct --tier essential\n```\n\nTool tiers auto-match model capability: **essential** (15 tools) for smaller models, **standard** (60 tools) for mid-range, **full** (135 tools) for stronger models. All <!-- KILN_MCP_TOOL_COUNT:OLD --> 908 tools are available over MCP via `kiln serve`.\n</details>\n\n<details>\n<summary><strong>Platform &amp; printer setup notes (Linux/WSL 2, Ethernet-only, Bambu)</strong></summary>\n\n### Prerequisites by printer type\n\n| Printer | `--type` | What you need |\n|---------|----------|---------------|\n| **Prusa MK4/XL/Mini+** | `prusalink` | IP + API key (Settings › Network › PrusaLink on the LCD) |\n| **OctoPrint** (any printer) | `octoprint` | OctoPrint URL + API key (Settings › API) |\n| **Klipper/Moonraker** | `moonraker` | Moonraker URL (usually `http://<ip>:7125`) |\n| **Creality K1/K2/Hi/Ender V4/V3 KE** | `creality` | IP + `printer_model` (e.g. `creality_k1_max`); probes local Moonraker ports |\n| **Bambu Lab** | `bambu` | IP + LAN access code + serial number (all on the LCD) |\n| **Elegoo** (SDCP) | `elegoo` | IP only — no auth. Neptune 4 / OrangeStorm Giga use `moonraker`. |\n| **Duet / RepRapFirmware** | `duet` | IP only, plus the machine password if one is set (`M551` in `config.g`). |\n| **Direct USB** (Marlin) | `serial` | USB cable only — no network. Ender 3, Prusa MK3, CR-10, any Marlin/RepRap printer. |\n\nKiln only needs IP reachability on your LAN. Ethernet-only printers are fully supported.\n\n**Optional tools:** [PrusaSlicer](https://www.prusa3d.com/prusaslicer/) OrcaSlicer, or BambuStudio for slicing STL → G-code (`brew install --cask prusaslicer`); [OpenSCAD](https://openscad.org/downloads#snapshots) for local text-to-3D generation — install the current build (`brew install --cask openscad@snapshot`); set `KILN_GEMINI_API_KEY` to enable Gemini-generated geometry.\n\n### Linux / WSL 2\n\n`pipx` installs Kiln into its own isolated environment and puts `kiln` on your PATH. (The pip package is `kiln3d`; the CLI command is `kiln`.)\n\n```bash\nsudo apt install pipx && pipx ensurepath\ngit clone https://github.com/codeofaxel/Kiln.git && cd Kiln\npipx install ./kiln\nsudo apt install prusa-slicer            # optional: slicing for printing\nsudo snap install openscad --edge        # optional: the design engine (current build)\nkiln verify\n\n# Update / uninstall\ngit pull && pipx install --force ./kiln\npipx uninstall kiln3d\n```\n\n**WSL 2 networking:** WSL 2 uses NAT, so mDNS discovery (`kiln discover`) won't see printers on your home network. Connect directly by IP instead (same as Ethernet-only setups).\n\n### Ethernet-only printers (no Wi-Fi)\n\nKiln works the same over Ethernet and Wi-Fi — it talks to printer APIs over LAN IP. Verify the printer endpoint responds, then register by IP:\n\n```bash\ncurl http://<ip>/api/version                              # OctoPrint\ncurl http://<ip>:7125/server/info                         # Moonraker / Creality (local Moonraker)\ncurl -H \"X-Api-Key: YOUR_KEY\" http://<ip>/api/v1/status   # Prusa Link\n# Bambu uses MQTT — ensure port 8883 is reachable:  nc -zv <ip> 8883\n\nkiln auth --name my-printer --host http://<ip> --type prusalink --api-key YOUR_KEY\n```\n\nIf PrusaSlicer isn't on your PATH: `export KILN_SLICER_PATH=/path/to/prusa-slicer`.\n\n### Bambu TLS &amp; webcam\n\nKiln pins the printer certificate (TOFU) on first connection in `~/.kiln/bambu_tls_pins.json`. Overrides:\n\n```bash\nexport KILN_BAMBU_TLS_MODE=ca         # strict CA/hostname (usually fails on stock self-signed printers)\nexport KILN_BAMBU_TLS_MODE=insecure   # legacy, no validation — trusted LANs only\nexport KILN_BAMBU_TLS_FINGERPRINT=0123abcd...   # explicit SHA-256 pin\n```\n\nWebcam capture is model-dependent: **A1, A1 Mini, P1P, P1S** serve frames over TLS+JPEG (no extra software). The **X1 series** (X1C, X1E) serves RTSPS, which Kiln relays via `ffmpeg` — so on an X1, both snapshots *and* the live stream need `ffmpeg` (`brew install ffmpeg` / `sudo apt install ffmpeg`). `can_snapshot` is reported `True` for every Bambu model; on an X1 without `ffmpeg`, the attempt surfaces a clear model-specific error rather than failing silently.\n</details>\n\nPaid tiers ([kiln3d.com/pricing](https://kiln3d.com/pricing?utm_source=github&utm_medium=readme)) add Git-for-3D versioning, product templates, assembly manuals, fleet workflows, SSO + SCIM, ERP webhooks, and long-term audit logs.\n\n## Why Kiln?\n\n- **One control plane, any printer** — OctoPrint, Moonraker, Creality, Bambu Lab, Prusa Link, Elegoo, Serial. Manage a mixed fleet from one place.\n- **No printer? No problem** — Outsource jobs to Craftcloud's 150+ manufacturing services through the hosted proxy, or use direct mode with your own provider credentials.\n- **AI-native** — <!-- KILN_MCP_CAPABILITY_COUNT:OLD --> 915 MCP capabilities and <!-- KILN_CLI_COUNT:OLD --> 242 CLI commands built for AI agents. Not a web UI with an API bolted on.\n- **Describe it, print it** — Natural-language to physical object pipeline: text or sketch → AI generation → validation → slice → print.\n- **Decorate anything** — QR codes, photos, logos, text, SVGs, and procedural textures (tiger stripe, marble, camo, wood grain, honeycomb) embossed or debossed onto any model with one command.\n- **Manuals included** — Multi-part prints can generate printable PDF assembly manuals with Bill of Materials, isometric step renders, mating arrows, and pause-and-check verification gates. (Business)\n- **Resume, don't restart** — Cancelled or failed print? Resume from the exact layer it stopped on any supported FDM printer. No filament wasted. (Pro)\n- **Modify mid-print** — Add decorations, append features, or swap materials on a live print with atomic revert if anything goes wrong. (Pro)\n- **Smart material routing** — 25 materials, 45 brand-specific filament profiles (Bambu, Prusament, Polymaker, and more) across 11 material families. Intent-based recommendations with printer capability awareness.\n- **Prints don't fail silently** — Cross-printer learning, automatic failure recovery, closed-loop AI generation feedback (failed prints auto-improve future generations), preflight safety checks on every job.\n- **Doomed prints stopped early** — Too big for the build plate, or a material your hotend can't melt? Caught before filament is wasted, rotated to fit when possible, one-command override. Pro shows the fix: true usable area, cleanest split, or the material to switch to.\n- **Search → Slice → Print** — Search and download 3D models from MyMiniFactory and Cults3D (search only), auto-slice with PrusaSlicer, OrcaSlicer, or BambuStudio, print — all from one agent conversation.\n- **Safety at scale** — 51 named 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.\n\n## Supported Printers\n\n| Backend | Status | Printers |\n|---------|--------|----------|\n| **OctoPrint** | Stable | Any OctoPrint-connected printer (Prusa, Ender, custom) |\n| **Moonraker** | Stable | Klipper-based printers (Voron, Ratrig, etc.) |\n| **Creality** | Stable when Moonraker is reachable | SPARKX i7, K1/K1 Max/K1C/K1 SE, K2/K2 Pro/K2 Plus/K2 SE, Creality Hi, Ender-3 V4/V3 KE, Ender-5 Max, CR-10 SE via local Moonraker. Older Marlin Creality printers use `serial` or `octoprint`. |\n| **Bambu** | Stable | Bambu Lab X1C, X1E, P1S, P1P, P2S, A1, A1 Mini, A2L, H2S, H2D, H2D Pro, H2C, X2D (via LAN MQTT) |\n| **Prusa Link** | Stable | Prusa MK4, XL, Mini+ (local REST API — type: `prusalink`) |\n| **Elegoo** | Stable | Centauri Carbon, Saturn, Mars series (via LAN WebSocket/SDCP). Neptune 4 / OrangeStorm Giga use Moonraker. |\n| **Duet / RepRapFirmware** | Beta — not yet verified against physical hardware | Duet 2 and Duet 3 controller boards, over the same HTTP interface Duet Web Control uses. Both RepRapFirmware 2 and 3 are supported. Vision Miner 22 IDEX v4 is the first catalogued machine. Type: `duet`. |\n| **Direct USB** | Stable | Any Marlin-based printer over USB (Ender 3, Prusa MK3, CR-10, etc.). No OctoPrint or Klipper needed — just a USB cable. Type: `serial`. |\n\n<!-- BEGIN SUPPORTED PRINTERS (auto-generated by scripts/generate_supported_printers.py) -->\nKiln ships **tuned profiles for 68 models across 15 brands** — Creality, Bambu Lab, QIDI, Elegoo, Prusa Research, Sovol, AON3D, Artillery, Voron, AnkerMake, FlashForge, INTAMSYS, RatRig, SparkX, Vision Miner. [See the full searchable list →](https://kiln3d.com/printers?utm_source=github&utm_medium=readme)\n<!-- END SUPPORTED PRINTERS -->\n\n## Architecture\n\n```mermaid\ngraph TD\n    A[\"🤖 AI Agent<br/><sub>Claude · GPT · Custom</sub>\"]\n    A -->|\"CLI or MCP\"| B[\"⚙️ Kiln<br/><sub>CLI + MCP Server</sub>\"]\n\n    B --> C[\"🖨️ Your Printers\"]\n    B --> F[\"🏭 Fulfillment\"]\n    B --> D[\"🛒 Marketplaces\"]\n    B --> V[\"📐 Designs (versioned)<br/><sub>Pro+</sub>\"]\n\n    C --> E1[\"OctoPrint\"]\n    C --> E2[\"Moonraker\"]\n    C --> E3[\"Creality\"]\n    C --> E4[\"Bambu\"]\n    C --> E5[\"Prusa Link\"]\n    C --> E6[\"Elegoo\"]\n\n    F --> F1[\"Craftcloud\"]\n\n    D --> I[\"MyMiniFactory\"]\n    D --> J[\"Cults3D\"]\n\n    V --> V1[\"Branches\"]\n    V --> V2[\"Signed Releases\"]\n    V --> V3[\"Cloud Sync\"]\n\n    style A fill:#1a1a2e,stroke:#e94560,color:#fff\n    style B fill:#16213e,stroke:#0f3460,color:#fff\n    style C fill:#0f3460,stroke:#e94560,color:#fff\n    style F fill:#0f3460,stroke:#27ae60,color:#fff\n    style D fill:#0f3460,stroke:#533483,color:#fff\n    style V fill:#0f3460,stroke:#f59e42,color:#fff\n    style E1 fill:#2d2d44,stroke:#e94560,color:#fff\n    style E2 fill:#2d2d44,stroke:#e94560,color:#fff\n    style E3 fill:#2d2d44,stroke:#e94560,color:#fff\n    style E4 fill:#2d2d44,stroke:#e94560,color:#fff\n    style E5 fill:#2d2d44,stroke:#e94560,color:#fff\n    style F1 fill:#2d2d44,stroke:#27ae60,color:#fff\n    style I fill:#2d2d44,stroke:#533483,color:#fff\n    style J fill:#2d2d44,stroke:#533483,color:#fff\n    style V1 fill:#2d2d44,stroke:#f59e42,color:#fff\n    style V2 fill:#2d2d44,stroke:#f59e42,color:#fff\n    style V3 fill:#2d2d44,stroke:#f59e42,color:#fff\n```\n\nAgents can also outsource jobs through **Craftcloud** fulfillment and search models on **MyMiniFactory** and **Cults3D** (search only). On Pro and up, the design store itself is versioned — branches, signed releases, and cross-machine cloud sync are first-class outputs of the system, not a side database.\n\n## Git for 3D\n\nDesigns aren't text, but they need version control. Kiln treats meshes, decorations, and mechanical features as first-class versioned artifacts: branch a design, print variants, merge what works, sign releases with cryptographic proof the mesh hasn't changed.\n\nThree things make this different from `git`:\n\n1. **Outcome-correlated branches.** Every branch is tagged with empirical print results — success rate, warp, adhesion, cost — so cross-branch A/B is automatic, not anecdotal.\n2. **3-way semantic mesh merge.** Z-level / pocket / bounding-box conflict zones rendered as visual diffs, not text patches. Manufacturing tolerance, not character offsets.\n3. **Signed releases with mesh re-fingerprinting.** Ed25519 signatures over a release manifest pinned to an exact mesh; verification re-computes the fingerprint to detect tamper after release.\n\nHere's what `visualize_branch_tree(\"my-coaster\")` actually emits — the same renderer the workshop, CLI, and your agent see (yellow = signed release, light blue = experiment, light red = branch with failed outcomes):\n\n```mermaid\nflowchart TD\n    subgraph tree_coaster[\"📐 my-coaster · design\"]\n        v0[v0: initial]\n        v1[v1: emboss-1mm<br/>83% success]\n        v2[v2: emboss-2mm<br/>92% success · warp 2%]\n        v3[v3: emboss-3mm<br/>warp 5%]\n        v4[v4: merge winner]\n        rel[🔏 1.0.0]\n        v0 --> v1\n        v0 --> v2\n        v0 --> v3\n        v2 --> v4\n        v4 --> rel\n    end\n    classDef root fill:#f3f4f6,stroke:#374151,color:#111\n    classDef released fill:#ffd60a,stroke:#111,stroke-width:3px,color:#111\n    classDef experiment fill:#e0e7ff,stroke:#6366f1,color:#1e1b4b\n    classDef failed fill:#fecaca,stroke:#b91c1c,color:#7f1d1d\n    class v0 root\n    class v1 experiment\n    class v2 experiment\n    class v3 failed\n    class v4 experiment\n    class rel released\n    style tree_coaster fill:#ffffff,stroke:#e5e7eb,stroke-width:1px\n```\n\n| Tier | What you get |\n|------|-------------|\n| Free | Linear local design history (save / diff / rollback) |\n| **Pro** | Branch · merge · cherry-pick · Ed25519 signed releases · solo cloud sync |\n| **Business** | Team pull requests · approval gates · orgs / teams / scopes |\n| **Enterprise** | Audit log export · SSO · step-up authentication on releases · access review |\n\nPatent pending across semantic mesh merge, outcome-correlated branching, and signed-release-with-physical-provenance.\n\n## Tools\n\nThe Kiln MCP server (`kiln serve`) exposes **<!-- KILN_MCP_TOOL_COUNT:OLD --> 908 tools** to agents, plus prompts and resources for **<!-- KILN_MCP_CAPABILITY_COUNT:OLD --> 915 total MCP capabilities**. Rather than list them all here, agents browse the live catalog with `get_skill_manifest` and ToolSearch-style discovery. A representative slice, in the order a print actually happens:\n\n- **design_session**\n  - Talk to Kiln about what you're making and get back a design that matches what you asked for\n  - The front door for making anything: goal, geometry, preview, iterate. Free, unlimited, every tier\n- **compile_scad**\n  - Compile OpenSCAD code into a printable STL — the keyless path underneath a design session\n  - No API key and no external service: the agent writes the geometry, Kiln compiles it locally\n- **generate_model**\n  - Generate a 3D model from a text prompt through an external AI provider\n  - Optional, and off unless you bring your own key (Meshy, Tripo3D, Stability, Gemini)\n- **search_all_models**\n  - Search connected 3D model marketplaces in one call\n  - Covers MyMiniFactory and Cults3D; downloads where the marketplace supports it\n- **import_step_file**\n  - Import a STEP (.step/.stp) CAD file and convert it for Kiln's mesh pipeline\n- **analyze_printability**\n  - Run a full printability analysis on a mesh: overhangs, thin walls, warping risk, bed fit\n- **auto_orient_model**\n  - Find the print orientation that needs the least support and prints strongest\n- **repair_mesh**\n  - Repair mesh defects — holes, degenerate faces, rounding-noise seams\n  - The usual fix for a model an AI generator or a rough scan produced\n- **split_mesh_to_fit**\n  - Cut one solid too big for your build plate into printable pieces that reassemble\n- **recommend_material**\n  - Recommend materials for a use case, with the reasons and the trade-offs\n- **decorate_surface**\n  - Put any image, text, QR code, or pattern onto a model surface as an emboss or deboss\n- **slice_model**\n  - Slice a model (STL/3MF/STEP) to G-code using PrusaSlicer, OrcaSlicer, or BambuStudio\n- **estimate_print_cost_from_mesh**\n  - Estimate material cost, weight, and print time before committing the printer\n- **preflight_check**\n  - Run pre-print safety checks: printer state, temperatures, file validity, bed clearance\n- **start_print**\n  - Start a print on a connected machine\n- **monitor_print**\n  - One-shot print status: progress, temperatures, time remaining, cost, and a camera snapshot where the printer has one\n- **emergency_stop**\n  - Stop a running print immediately\n- **purge_filament**\n  - Heat the nozzle and push a short length through — the clog test, with `load_filament` and `unload_filament` beside it for a spool change\n  - Reports what the printer could actually tell: on a Bambu it reads the AMS and translates the printer's own fault code, and where a machine reports no flow signal it says so rather than claiming success\n- **diagnose_print_failure_live**\n  - Diagnose a failing print from live printer state plus the model's own geometry\n- **retry_print_with_fix**\n  - Diagnose what went wrong on the last print, then re-slice and print with the fix applied\n- **resume_interrupted_print** *(Pro)*\n  - Resume an interrupted print with one call on any supported FDM printer\n- **save_design_version**\n  - Save a new version of a parametric design, so you can go back to the one that worked\n  - Linear history is free; branching, merges, and signed releases are Pro\n- **export_step**\n  - Export a finished design as a real STEP CAD file — analytic B-rep a machine shop can open and measure\n- **fleet_status** *(Business)*\n  - Live status of every printer in a fleet: state, temperatures, connection\n- **fulfillment_quote**\n  - Get a manufacturing quote from Craftcloud's network — printing without owning a printer\n\nBeyond this slice, the catalog covers fleet orchestration, print-failure prediction, design version control, assembly manuals, and per-machine calibration; the deeper tiers are described at [kiln3d.com/pricing](https://kiln3d.com/pricing?utm_source=github&utm_medium=readme). The complete tool catalog, grouped by subsystem, lives in **[Project Docs](docs/PROJECT_DOCS.md)**. If you *are* the agent, [**kiln3d.com/agents**](https://kiln3d.com/agents?utm_source=github&utm_medium=readme) covers the same ground written in the second person, including the refusals worth knowing before you hit them.\n\n<details>\n<summary>MCP resources (read-only context for agents)</summary>\n\n| Resource URI | Description |\n|---|---|\n| `kiln://status` | System-wide snapshot (printers, queue, events) |\n| `kiln://printers` | Fleet listing with idle printers |\n| `kiln://printers/{name}` | Detailed status for a specific printer |\n| `kiln://queue` | Job queue summary and recent jobs |\n| `kiln://queue/{job_id}` | Detail for a specific job |\n| `kiln://events` | Recent events (last 50) |\n</details>\n\n## Capabilities\n\n**Search → download → print.** Kiln searches MyMiniFactory and Cults3D (search only) in one call via `search_all_models`, downloads where supported, and uploads straight to a printer — a full design-to-print loop with no human in the middle. *(Thingiverse is supported but deprecated since its Feb 2026 acquisition by MyMiniFactory; prefer MMF.)* Marketplace access uses free API keys (`KILN_MMF_API_KEY`, `KILN_CULTS3D_USERNAME` + `KILN_CULTS3D_API_KEY`).\n\n**AI model generation.** Set any provider key and it's available instantly — `KILN_MESHY_API_KEY`, `KILN_TRIPO3D_API_KEY`, `KILN_STABILITY_API_KEY`, `KILN_GEMINI_API_KEY` — or use local OpenSCAD with no key. Generated meshes are auto-validated for printability (manifold, triangle count, bounding box) before printing. `kiln generate` renders a 3-view preview by default.\n\n**Slicing.** Wraps PrusaSlicer, OrcaSlicer, and BambuStudio for headless slicing; auto-detects installed slicers on PATH, macOS app bundles, or via `KILN_SLICER_PATH`. Supports STL, 3MF, STEP, OBJ, AMF with material-aware temps and smart supports.\n\n**Fulfillment (no printer required).** Print through Craftcloud's network — quote, validate address, confirm, order, track — or run alongside your own printers for overflow and specialty materials. Normal users go through the hosted proxy (credentials stay server-side, spend limits enforced); operators can use direct mode with `KILN_FULFILLMENT_PROVIDER=craftcloud` + `KILN_CRAFTCLOUD_API_KEY`.\n\n**Decoration &amp; textures.** Emboss or deboss QR codes, photos, logos, text, and SVGs onto any model face, or apply procedural textures (tiger stripe, marble, camo, wood grain, honeycomb) with a single tool call.\n\n## Pricing\n\nAll local printing is **free forever** — status, file management, slicing, fleet control, and printing to your own printers cost nothing. Kiln charges a **5% orchestration fee** on orders placed through external manufacturing services (first 3 orders each calendar month free, on every tier; $0.25 min / $200 max per order), shown transparently in every quote. Outsourced order volume is not capped on any tier.\n\n| Tier | Price | Headline |\n|------|-------|----------|\n| **Free** | $0 | Unlimited local printing, slicing, marketplace search, safety profiles, one printer, design intelligence, linear design history. |\n| **Pro** | $49/mo | Git-for-3D branching/signed releases, product templates, procedural textures, mid-print modification, print resume, failure recovery, nozzle-wear tracking, solo cloud sync. |\n| **Business** | $199/mo | Commercial use, 3 printers + 3 seats, fleet management, cross-printer learning, QR generation, assembly manuals, team pull requests, approval gates, webhooks. |\n| **Enterprise** | Contact us | Large fleets, SSO/SCIM, RBAC, audit trail, encrypted G-code at rest, white-label manuals, 99.9% SLA, on-prem/VPC. |\n\nFull comparison at **[kiln3d.com/pricing](https://kiln3d.com/pricing?utm_source=github&utm_medium=readme)**. Run `kiln upgrade` to activate a license key. For provider-routed orders, the provider remains merchant of record; Kiln acts as orchestration infrastructure.\n\n## Safety\n\nKiln is safety-first infrastructure for controlling physical machines:\n\n- **Pre-flight checks** validate printer state, temperatures, and files before every print\n- **G-code validation** blocks dangerous commands (firmware reset, unsafe temperatures)\n- **Temperature limits** enforce safe maximums (300 °C hotend, 130 °C bed)\n- **Confirmation required** for destructive operations (cancel, raw G-code)\n- **Optional authentication** with scope-based API keys for multi-user setups\n- **Structured errors** ensure agents always know when something fails\n\n## Packages\n\nThis monorepo contains two packages:\n\n| Package | Description | Entry point |\n|---------|-------------|-------------|\n| **kiln** | CLI + MCP server for multi-printer control (OctoPrint, Moonraker, Creality, Bambu, Prusa Link, Elegoo, Direct USB) | `kiln` or `python -m kiln` |\n| **octoprint-cli** | Lightweight standalone CLI for OctoPrint-only setups | `octoprint-cli` |\n\n## Development\n\n```bash\n# Create a virtualenv first (required on modern Ubuntu/Debian/WSL)\npython3 -m venv .venv && source .venv/bin/activate\n\npip install -e \"./kiln[dev]\"\npip install -e \"./octoprint-cli[dev]\"\n\ncd kiln && python3 -m pytest tests/ -v\ncd ../octoprint-cli && python3 -m pytest tests/ -v\n```\n\n### Run in Docker\n\n`docker compose up` self-hosts the Kiln MCP server against your own printer — set `KILN_PRINTER_TYPE`/`KILN_PRINTER_HOST`/`KILN_PRINTER_API_KEY` first. This is a personal self-host quickstart, unrelated to the infrastructure behind the hosted api.kiln3d.com service. Prefer zero setup? [kiln3d.com](https://kiln3d.com/?utm_source=github&utm_medium=readme) runs the hosted version for you.\n\n<details>\n<summary><strong>Configuration reference (auth, webhooks, discovery, plugins)</strong></summary>\n\n### Authentication (optional)\n\nOptional API-key auth for MCP tools, disabled by default. Scopes: `read`, `write`, `admin`. Read-only tools never require auth.\n\n```bash\nexport KILN_AUTH_ENABLED=1\nexport KILN_AUTH_KEY=your_secret_key\nexport KILN_MCP_AUTH_TOKEN=your_secret_key   # clients provide their key here\n```\n\n### Webhooks\n\nRegister HTTP endpoints for real-time event notifications:\n\n```\nregister_webhook(url=\"https://example.com/hook\", events=[\"job.completed\", \"print.failed\"])\n```\n\nPayloads are signed with HMAC-SHA256 when a secret is provided. Redirects are blocked by default (`KILN_WEBHOOK_ALLOW_REDIRECTS=0`); when enabled, each hop is SSRF-validated and HTTPS→HTTP downgrade is blocked.\n\n### Printer discovery\n\n```bash\nkiln discover   # mDNS/Bonjour + HTTP subnet probing\n```\n\nFinds OctoPrint, Moonraker/Creality, Bambu, Elegoo, and Prusa Link printers. If discovery returns nothing, register directly by IP with `kiln auth`.\n\n### Third-party plugins\n\nEntry-point plugins are **default-deny** in production (`KILN_PLUGIN_POLICY=strict`). Allow specific plugins with `KILN_ALLOWED_PLUGINS=my_plugin,other_plugin`, or set `KILN_PLUGIN_POLICY=permissive` for temporary migration compatibility.\n</details>\n\n<details>\n<summary><strong>Modules (for contributors)</strong></summary>\n\n| Module | Description |\n|---|---|\n| `server.py` | MCP server with tools, resources, and subsystem wiring |\n| `printers/` | Printer adapter abstraction (OctoPrint, Moonraker, Creality, Bambu, Prusa Link, Elegoo) |\n| `marketplaces/` | Model marketplace adapters (MyMiniFactory, Cults3D, Thingiverse, metadata-only sources) |\n| `slicer.py` | Slicer integration (PrusaSlicer, OrcaSlicer, BambuStudio) with auto-detection |\n| `registry.py` | Fleet registry for multi-printer management |\n| `queue.py` | Priority job queue with status tracking |\n| `scheduler.py` | Background job dispatcher with history-based smart routing |\n| `events.py` | Pub/sub event bus with history |\n| `persistence.py` | SQLite storage for jobs, events, and settings |\n| `webhooks.py` | Event-driven webhook delivery with HMAC signing |\n| `auth.py` | Optional API key authentication with scope-based access |\n| `discovery.py` | Network printer discovery (mDNS + HTTP probe) |\n| `generation/` | Text-to-model generation providers (Meshy, Tripo3D, Stability AI, Gemini Deep Think, OpenSCAD) with auto-discovery, mesh validation, and printability analysis |\n| `consumer.py` | Consumer workflow for non-printer users (address validation, material recommendations, timeline/price estimation, onboarding) |\n| `cost_estimator.py` | Print cost estimation from G-code analysis |\n| `materials.py` | Multi-material and spool tracking |\n| `material_catalog.py` | Material brand catalog, properties, and purchase-link metadata |\n| `material_inventory.py` | Fleet material inventory and assignment tracking |\n| `bed_leveling.py` | Automated bed leveling trigger system |\n| `streaming.py` | MJPEG webcam streaming proxy |\n| `cloud_sync.py` | Cloud sync for printer configs and job history |\n| `plugin_loader.py` | Internal tool-plugin discovery and registration |\n| `plugins/` | Focused MCP tool modules loaded by the plugin loader |\n| `gcode.py` | G-code safety validator with per-printer limits |\n| `gcode_interceptor.py` | Rule-based G-code interception and safety rewriting |\n| `safety_profiles.py` | Bundled safety database (51 named printer models, temps/feedrates/flow) |\n| `slicer_profiles.py` | Bundled slicer profiles (auto-generates .ini files per printer) |\n| `printer_intelligence.py` | Printer knowledge base (firmware quirks, materials, failure modes) |\n| `pipelines.py` | Pre-validated print pipelines (quick_print, calibrate, benchmark) |\n| `assembly.py` | Multi-part assembly validation and manual planning support |\n| `design_versions.py` | Local design history, version records, diffs, and rollback primitives |\n| `mesh_validation_pipeline.py` | Multi-gate printability validation pipeline |\n| `model_visualizer.py` | Local model preview rendering |\n| `tool_schema.py` | OpenAI function-calling schema converter (MCP → OpenAI format) |\n| `tool_tiers.py` | Tool tier definitions (essential/standard/full) for model capability matching |\n| `agent_loop.py` | Generic agent loop for any OpenAI-compatible API (OpenRouter, direct, etc.) |\n| `openrouter.py` | OpenRouter integration with model catalog and auto-tier detection |\n| `data/` | Bundled JSON databases (safety profiles, slicer profiles, printer intelligence) |\n| `gateway/` | External-provider integration gateway *(as integrations launch)* |\n| `heater_watchdog.py` | Auto-cooldown watchdog for idle heaters |\n| `wallets.py` | Crypto wallet configuration (Solana/Ethereum for donations and fees) |\n| `pro_tool_manifest.json` | Public manifest for kiln-pro tool discovery and REST proxy stubs |\n| `decoration_quota.py` | Free-tier decoration quota tracking and tier resolution hooks |\n| `cli/` | Click CLI with <!-- KILN_CLI_COUNT:OLD --> 242 commands and JSON output |\n\nkiln-pro ([kiln3d.com](https://kiln3d.com/?utm_source=github&utm_medium=readme)) extends public Kiln with paid-tier REST serving, billing, licensing, SSO, RBAC, G-code encryption, uptime reporting, team administration, and project-cost workflows. Public Kiln exposes only the interface/proxy surface for those capabilities; the private implementation stays in kiln-pro.\n</details>\n\n## Documentation\n\n| Document | Description |\n|----------|-------------|\n| [Project Docs](docs/PROJECT_DOCS.md) | Complete reference (CLI, MCP tools, adapters, config) |\n\n<details>\n<summary>Brand assets</summary>\n\nLogo files live in [`docs/assets/`](docs/assets/) — all vector SVG, scale to any size.\n\n| File | Use |\n|------|-----|\n| `kiln-banner-1280x640.svg` / `kiln-banner-1280x640-light.svg` | GitHub / social media banner (dark / light scheme) |\n| `kiln-logo-dark.svg` / `kiln-logo-light.svg` | Primary mark + wordmark (dark / light bg) |\n| `kiln-horizontal-dark.svg` / `kiln-horizontal-light.svg` | Horizontal lockup (dark / light bg) |\n| `kiln-logo-dark-notext.svg` | Mark only (dark bg) |\n| `kiln-favicon-256.svg` | Favicon / app icon |\n| `kiln-logo-transparent.svg` / `kiln-logo-transparent-dark.svg` | Transparent bg (for dark / light UIs) |\n| `kiln-mark-1024.svg` | Square mark tile — profile picture, app tile (1024×1024) |\n| `kiln-x-header-1500x500.svg` | Social header (1500×500) |\n| `wallpapers/kiln-wallpaper-iphone-*.svg` | iPhone wallpapers |\n| `wallpapers/kiln-wallpaper-macbook-*.svg` | MacBook wallpapers |\n\nEvery file above is generated from one geometry, so the mark is identical across\nall of them. Please don't redraw it — scale the vector instead.\n</details>\n\n## Support Development\n\nKiln is free, open-source software. If you find it useful, consider sending a tip:\n\n- **Solana:** `kiln3d.sol`\n- **Ethereum:** `kiln3d.eth`\n\n## Positioning\n\n> **Messaging clarification (February 24, 2026):** We clarified wording to remove ambiguity and align with existing intent; no strategy change. Kiln is orchestration and agent infrastructure for fabrication workflows. Kiln does **not** operate a first-party decentralized manufacturing marketplace/network. Kiln integrates with third-party providers and external provider/network adapters as integrations are available.\n\n**Non-goals:** operating a first-party decentralized manufacturing marketplace/network; replacing partner supply-side networks; owning provider marketplaces instead of integrating with them; acting as merchant of record for provider-routed manufacturing orders.\n\n## License\n\nKiln is a project of **Hadron Labs Inc.**\n\n[AGPL-3.0 License](LICENSE) — open source with copyleft. [Commercial licensing](policies/COMMERCIAL_LICENSE.md) available for companies that need proprietary use.\n\nBy contributing, you agree to the [Contributor License Agreement](policies/CONTRIBUTOR_LICENSE_AGREEMENT.md).\n\n---\n\nAlso listed on [Smithery](https://smithery.ai/servers/codeofaxel/kiln).\n",
  "bytes": 38765,
  "sha": "ad08ae298aba72b9ef45087de979da1fa88b32c9605f0c8e8e5df90d0c3ee004",
  "repo_slug": "codeofaxel/kiln",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_codeofaxel_kiln_710a7ae1/readme"
}