Kiln

io.github.codeofaxel由 GitHub 帳號 codeofaxel 發布v1.5.1更新於 Nov 4, 2026

Spawn an object into existence: describe it, and your agent designs it, checks it, and 3D prints it.

已驗證Streamable HTTP可網頁執行開發者工具商業與電商媒體與設計

概覽

AI 產生的概覽

Kiln 讓 AI 助理在一次對話中設計、切片、列印並監控自有 3D 印表機,還能搜尋模型市集。

可以做什麼
  • 設計與準備模型:編譯 OpenSCAD、產生或匯入網格、修復、定向、拆分、表面裝飾、可列印性分析、材料建議、切片為 G-code
  • 搜尋並下載模型市集中的可列印模型,直接送到印表機
  • 管理印表機檔案:列出、上傳(可選確認權杖)、分析 G-code 中繼資料、刪除
  • 執行與控制工作:列印前檢查、開始、暫停、繼續、取消、跳過失敗物件、緊急停止與解除鎖定、設定溫度、風扇、燈光與速度
  • 監控印表機:狀態、一次性報告與攝影機快照、機群狀態、AMS/CFS 耗材槽、熱床網格、工具位置、近期事件
  • 帳號與安全:授權狀態、破壞性操作的確認權杖、事件歷史
適用情境
適合希望助理把一個想法或既有模型檔一路做到實體列印,或檢查、監控一台或多台連網 3D 印表機的情況。也適合在同一個對話中完成模型搜尋、切片與可列印性檢查。
執行需求
可使用帶 OAuth 登入的遠端託管端點,或在印表機旁的電腦本機安裝 PyPI 套件 kiln3d(以 uvx 或 python -m kiln 執行)。連接印表機需要 KILN_PRINTER_HOST 與 KILN_PRINTER_TYPE,並依機型提供 KILN_PRINTER_API_KEY 或區域網路存取碼。選用:OpenSCAD 以及 PrusaSlicer、OrcaSlicer 或 BambuStudio 等切片軟體;市集與 AI 生成金鑰皆為選用。需要能連到印表機的區域網路。
安裝前請注意
它會操控實體機器:開始、暫停、取消、刪除檔案、送出原始 G-code、設定加熱器並觸發緊急停止,部分刪除無法復原。列印應先預覽並由人確認,建議保持確認模式開啟。它會保存 KILN_PRINTER_API_KEY、區域網路存取碼等印表機憑證以及選用的第三方金鑰。涉及付費方案,外包製造訂單收取 5% 費用,商業用途屬付費方案功能。使用託管服務時資料會傳送到 Kiln 的伺服器。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Kiln,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.codeofaxel%2Fkiln/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "kiln": {
      "type": "http",
      "url": "https://api.kiln3d.com/mcp"
    }
  }
}

README

[Kiln]

[PyPI] [PyPI Downloads] [Python] [License] [Verified by Sigstore + SLSA] [Kiln MCP server] [MCP Toplist]


Spawn an object into existence.

Kiln is how AI agents make real things, safely. Describe what you want to exist, and your agent designs it, checks it will print, and prints it on your own 3D printer, or has it printed and shipped to you. Every version is kept, Git-style, so you can try the risky idea and keep the one that worked.

The open-source MCP server for 3D printing.

Kiln lets AI agents (ChatGPT, Claude Desktop, Claude Code, Claude Duet, Codex, Cursor, Gemini, Grok, Hermes Agent, OpenClaw, 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. It is compatible with OctoPrint, Moonraker/Klipper, PrusaLink, and Direct USB.

In 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. You approve every print, or let one printer run on its own for as long as you choose.

Reading this as an AI agent? kiln3d.com/agents 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.

bash
pip install kiln3d

[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.]

[A 3D-printed coaster with a relief portrait of a French bulldog and the name ASH along the bottom edge, held in a hand]

"a coaster with a photo of my dog Ash" — start to finish, from one sentence.
Watch the demo →

Version control for 3D printing. Branch a design to try the risky idea, compare any two versions with the numbers, merge the one that printed, and undo anything. See how it works →

[Two versions of a spur gear side by side: version 1 solid, version 2 with five spokes, a recessed web and a keyed bore, 39.7% less material]

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.

Quick Start

Using Claude Desktop? Install Kiln in one click. 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 — 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.

Using ChatGPT, Claude, Claude Duet, Gemini, Grok, Cursor or Hermes Agent? Nothing to install. Add Kiln inside the app by its address, https://api.kiln3d.com/mcp, and sign in (Claude Duet uses the one you add in Claude; Hermes Agent takes one terminal command, on its page): it designs the part, checks it will print, and shows it in 3D, right in the chat where the app can show it. Each app's page says exactly what was seen there: ChatGPT, Claude, Claude Duet, Codex, Cursor, Gemini, Grok, Hermes Agent. To run your own printer, do the three steps below on the computer next to it.

Using OpenClaw? Tell it to install Kiln from ClawHub and it sets Kiln up on the computer it runs on: see how.

Everyone else — three steps. Then ask your AI to make something.

1. Install

bash
pip install kiln3d

2. Connect your AI — Kiln sets itself up inside Claude Desktop, Claude Code, and Codex:

bash
kiln signin        # create your free accountkiln install-mcp   # connects Kiln to your AI apps

Restart 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.) Using a different MCP client? kiln install-mcp --print prints the config — or paste it yourself:

Manual MCP config (any client, no sign-in needed)
json
{  "mcpServers": {    "kiln": {      "command": "python3",      "args": ["-m", "kiln", "serve"]    }  }}

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.

Drop this into Claude Desktop, Claude Code, Codex, Cursor, or any MCP-capable agent. Runs on the free tier until you sign in.

3. Ask — paste a sentence like this into your agent. Kiln does the rest:

Make me a coaster with my dog's photo on it

That'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.

[!TIP] kiln doctor checks your whole setup and tells you exactly what to fix. kiln self-update upgrades in place when a new release lands.

Prefer to drive it yourself? (CLI tour)
bash
# Discover printers on your network (mDNS + HTTP probe)kiln discover
# Add your printer, saying which printer it is (see "Supported Printers")kiln auth --name my-printer --host http://octopi.local --type octoprint --api-key YOUR_KEY --printer-model "Ender 3"# Other types:# kiln auth --name prusa  --host http://192.168.1.100      --type prusalink --api-key YOUR_KEY --printer-model MK4# kiln auth --name klipper --host http://192.168.1.100:7125 --type moonraker --printer-model "Voron 2.4"# kiln auth --name bambu  --host 192.168.1.100             --type bambu --access-code LAN_CODE --serial SERIAL --printer-model P1S# A printer Kiln doesn't list yet: add who makes it, e.g. --printer-make Anycubic --printer-model "Kobra X"
kiln status                       # Printer state + job progresskiln upload model.gcode           # Upload a filekiln print model.gcode            # Start printingkiln slice model.stl --print-after  # Slice an STL and print in one stepkiln print *.gcode --queue        # Batch printkiln wait                         # Monitor a running printkiln snapshot --output photo.jpg  # Webcam snapshotkiln history --status completed   # Print historykiln park --plan                  # Describe the safe park, send nothing; then --step 1, 2, 3kiln home --plan                  # Same for the Home button; --plate-clear where Z homes onto the platekiln filament wipe --plan         # Same for the wipe-pad pass; --plate-clear where its plan presses the plate
# Every command supports --json for agent consumptionkiln status --json

Global option: --printer <name> targets a specific printer per command. The full command reference is in Project Docs.

Connect a specific agent (Claude Code, Claude Desktop, env vars)

Claude Code — install the plugin (one-time: install uv first if you don't have it — it's free and takes one line):

bash
claude plugin marketplace add codeofaxel/Kilnclaude plugin install kiln@kiln

Or wire it by hand — add to .claude/settings.json (project) or ~/.claude/settings.json (global):

json
{  "mcpServers": {    "kiln": { "command": "kiln", "args": ["serve"] }  }}

Claude 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.

Claude Desktop — add to ~/.config/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "kiln": {      "command": "python3",      "args": ["-m", "kiln", "serve"],      "env": {        "KILN_PRINTER_HOST": "http://192.168.1.100",        "KILN_PRINTER_API_KEY": "your_key",        "KILN_PRINTER_TYPE": "prusalink"      }    }  }}

Set 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.

Any other LLM (OpenRouter) — Kiln works with any model that supports OpenAI-compatible function calling, not just Claude:

bash
export KILN_OPENROUTER_KEY=sk-or-...kiln agent --model openai/gpt-4okiln agent --model meta-llama/llama-3.1-70b-instruct --tier essential

Tool tiers auto-match model capability: essential (15 tools) for smaller models, standard (60 tools) for mid-range, full (135 tools) for stronger models. All 880 tools are available over MCP via kiln serve.

Platform & printer setup notes (Linux/WSL 2, Ethernet-only, Bambu)

Prerequisites by printer type

Printer--typeWhat you need
Prusa MK4/XL/Mini+prusalinkIP + API key (Settings › Network › PrusaLink on the LCD)
OctoPrint (any printer)octoprintOctoPrint URL + API key (User Settings › Application Keys)
Klipper/MoonrakermoonrakerMoonraker URL (usually http://<ip>:7125)
Creality K1/K2/Hi/Ender V4/V3 KEcrealityIP + printer_model (e.g. creality_k1_max); probes local Moonraker ports
Bambu LabbambuIP + serial number + LAN access code, all on the printer's screen; LAN Only Mode and Developer Mode on to start and control prints
Elegoo (SDCP)elegooIP only — no auth. Neptune 4 / OrangeStorm Giga use moonraker.
Duet / RepRapFirmwareduetIP only, plus the machine password if one is set (M551 in config.g).
Direct USB (Marlin)usbUSB cable only — no network. Ender 3, Prusa MK3, CR-10, any Marlin/RepRap printer.

Kiln only needs IP reachability on your LAN. Ethernet-only printers are fully supported.

Optional tools: PrusaSlicer OrcaSlicer, or BambuStudio for slicing STL → G-code (brew install --cask prusaslicer); OpenSCAD 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.

Linux / WSL 2

pipx installs Kiln into its own isolated environment and puts kiln on your PATH. (The pip package is kiln3d; the CLI command is kiln.)

bash
sudo apt install pipx && pipx ensurepathgit clone https://github.com/codeofaxel/Kiln.git && cd Kilnpipx install ./kilnsudo apt install prusa-slicer            # optional: slicing for printingsudo snap install openscad --edge        # optional: the design engine (current build)kiln verify
# Update / uninstallgit pull && pipx install --force ./kilnpipx uninstall kiln3d

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).

Ethernet-only printers (no Wi-Fi)

Kiln 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:

bash
curl http://<ip>/api/version                              # OctoPrintcurl http://<ip>:7125/server/info                         # Moonraker / Creality (local Moonraker)curl -H "X-Api-Key: YOUR_KEY" http://<ip>/api/v1/status   # Prusa Link# Bambu uses MQTT — ensure port 8883 is reachable:  nc -zv <ip> 8883
kiln auth --name my-printer --host http://<ip> --type prusalink --api-key YOUR_KEY --printer-model MK4

If PrusaSlicer isn't on your PATH: export KILN_SLICER_PATH=/path/to/prusa-slicer.

Bambu TLS & webcam

Kiln pins the printer certificate (TOFU) on first connection in ~/.kiln/bambu_tls_pins.json. Overrides:

bash
export KILN_BAMBU_TLS_MODE=ca         # strict CA/hostname (usually fails on stock self-signed printers)export KILN_BAMBU_TLS_MODE=insecure   # legacy, no validation — trusted LANs onlyexport KILN_BAMBU_TLS_FINGERPRINT=0123abcd...   # explicit SHA-256 pin

Webcam capture is model-dependent: A1, A1 Mini, P1P, P1S serve frames over TLS+JPEG (no extra software), and Kiln can show that camera as live video in the print monitor on the computer connected to the printer. The X1 series (X1C, X1E) streams RTSPS, which Kiln's live-video relay does not carry: on an X1, Kiln takes snapshots by cutting a frame from that stream with ffmpeg (brew install ffmpeg / sudo apt install ffmpeg), and there is no live video. 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.

Paid tiers (kiln3d.com/pricing) add version control on every design, product templates, assembly manuals, fleet workflows, SSO + SCIM, ERP webhooks, and long-term audit logs.

Why Kiln?

  • One control plane, any printer — compatible with OctoPrint, Moonraker, Creality, Bambu Lab, Prusa Link, Elegoo, Serial. Manage a mixed fleet from one place.
  • No printer? No problem — Outsource jobs to Craftcloud's 150+ manufacturing services, quoted and ordered through Kiln.
  • AI-native — 887 MCP capabilities and 253 CLI commands built for AI agents. Not a web UI with an API bolted on.
  • Describe it, print it — Natural-language to physical object pipeline: text or sketch → AI generation → validation → slice → print.
  • 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.
  • 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)
  • Resume, don't restart — Cancelled or failed print? Resume from the exact layer it stopped on any supported FDM printer. No filament wasted. (Pro)
  • Modify mid-print — Add decorations, append features, or swap materials on a live print with atomic revert if anything goes wrong. (Pro)
  • Smart material routing — 38 materials and brand filament profiles for 69 brands and lines (the per-brand tune is part of Kiln Pro). Intent-based recommendations with printer capability awareness.
  • 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.
  • 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.
  • 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.
  • Safety at scale — a named safety profile for every supported printer, 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.

Supported Printers

BackendStatusPrinters
OctoPrintStableCompatible with any OctoPrint-connected printer (Prusa, Ender, custom)
MoonrakerStableKlipper-based printers (Voron, Ratrig, etc.)
CrealityStable when Moonraker is reachableSPARKX 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.
BambuStableBambu Lab X1C, X1E, P1S, P1P, P2S, A1, A1 Mini, A2L, H2S, H2D, H2D Pro, H2C, X2D (via LAN MQTT)
Prusa LinkStablePrusa MK4, XL, Mini+ (local REST API — type: prusalink)
ElegooStableCentauri Carbon (via LAN WebSocket/SDCP). Neptune 4 / OrangeStorm Giga use Moonraker.
Duet / RepRapFirmwareBeta — not yet verified against physical hardwareDuet 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.
Direct USBStableAny Marlin-based printer over USB (Ender 3, Prusa MK3, CR-10, etc.). No OctoPrint or Klipper needed — just a USB cable. Type: serial.

Kiln ships tuned profiles for 70 models across 15 brands — Creality, Bambu Lab, QIDI, Elegoo, Prusa Research, Sovol, Voron, AON3D, Artillery, AnkerMake, FlashForge, INTAMSYS, RatRig, SparkX, Vision Miner. See the full searchable list →

Architecture

mermaid
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 --> D["🛒 Marketplaces"]    B --> V["📐 Designs (versioned)<br/><sub>Pro+</sub>"]
    C --> E1["OctoPrint"]    C --> E2["Moonraker"]    C --> E3["Creality"]    C --> E4["Bambu"]    C --> E5["Prusa Link"]    C --> E6["Elegoo"]
    F --> F1["Craftcloud"]
    D --> I["MyMiniFactory"]    D --> J["Cults3D"]
    V --> V1["Branches"]    V --> V2["Signed Releases"]    V --> V3["Cloud Sync"]
    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 D fill:#0f3460,stroke:#533483,color:#fff    style V fill:#0f3460,stroke:#f59e42,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 E5 fill:#2d2d44,stroke:#e94560,color:#fff    style F1 fill:#2d2d44,stroke:#27ae60,color:#fff    style I fill:#2d2d44,stroke:#533483,color:#fff    style J fill:#2d2d44,stroke:#533483,color:#fff    style V1 fill:#2d2d44,stroke:#f59e42,color:#fff    style V2 fill:#2d2d44,stroke:#f59e42,color:#fff    style V3 fill:#2d2d44,stroke:#f59e42,color:#fff

Agents can also outsource jobs through Craftcloud fulfillment and search models on MyMiniFactory and Cults3D (search only). The design store itself is versioned — branches and cross-machine cloud sync on the designs a free Kiln account keeps, and on every design with signed releases on Pro and up — first-class outputs of the system, not a side database.

Version control for 3D printing

A printed part goes through versions the way code does, and usually ends up as bracket_final_v2_REAL.stl. Kiln keeps every version for you, so you can try the risky idea and keep the one that printed. Your agent does it in plain words: "try 4 mm walls on a branch, and keep the 3 mm one."

  • Branch and undo. Try the risky idea on a branch. The working version stays untouched, and any step can be undone.
  • See what changed. Compare two versions side by side or drag between them, with how much material each change added or removed.
  • Prints on the record. Every print is filed under the version that made it, so you can look up how each one went.
  • Merge. Bring the change that printed best back into your main design. Kiln merges what it can and asks you about the rest.
  • Signed releases. Sign the version you ship, and prove later that it hasn't changed.

[A line sweeps across a spur gear: on one side the solid first version, on the other the second version with five spokes, a recessed web and a keyed bore]

Drag across a part to see two versions at once, on every plan.

PlanWhat you get
FreeEvery version saved on your computer, with diff and rollback. With a free Kiln account: branch, merge, cherry-pick, undo and pull requests on the designs you keep, synced to the account
ProAll of that on every design, plus the change drawn on the part, pinned comments, signed releases, versioned decorations and features, and design provenance
BusinessApproval gates, team review, organizations and teams
EnterpriseNamed-approver sign-off, step-up sign-in before production releases, audit log export, SSO, access reviews

See how version control works →

Tools

The Kiln MCP server (kiln serve) exposes 880 tools to agents, plus prompts and resources for 887 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:

  • design_session
    • Talk to Kiln about what you're making and get back a design that matches what you asked for
    • The front door for making anything: goal, geometry, preview, iterate. Free, unlimited, every tier
  • compile_scad
    • Compile OpenSCAD code into a printable STL — the keyless path underneath a design session
    • No API key and no external service: the agent writes the geometry, Kiln compiles it locally
  • generate_model
    • Generate a 3D model from a text prompt through an external AI provider
    • Optional, and off unless you bring your own key (Meshy, Tripo3D, Stability, Gemini)
  • search_all_models
    • Search connected 3D model marketplaces in one call
    • Covers MyMiniFactory and Cults3D; downloads where the marketplace supports it
  • import_step_file
    • Import a STEP (.step/.stp) CAD file and convert it for Kiln's mesh pipeline
  • analyze_printability
    • Run a full printability analysis on a mesh: overhangs, thin walls, warping risk, bed fit
  • auto_orient_model
    • Find the print orientation that needs the least support and prints strongest
  • repair_mesh
    • Repair mesh defects — holes, degenerate faces, rounding-noise seams
    • The usual fix for a model an AI generator or a rough scan produced
  • split_mesh_to_fit
    • Cut one solid too big for your build plate into printable pieces that reassemble
  • recommend_material
    • Recommend materials for a use case, with the reasons and the trade-offs
  • decorate_surface
    • Put any image, text, QR code, or pattern onto a model surface as an emboss or deboss
  • slice_model
    • Slice a model (STL/3MF/STEP) to G-code using PrusaSlicer, OrcaSlicer, or BambuStudio
  • show_on_stage
    • Turn over a file you already have — a model, or the sliced file about to print — on Kiln's interactive 3D stage, without re-making or re-slicing it
  • estimate_print_cost_from_mesh
    • Estimate material cost, weight, and print time before committing the printer
  • preflight_check
    • Run pre-print safety checks: printer state, temperatures, file validity, bed clearance
  • start_print
    • Start a print on a connected machine
  • monitor_print
    • One-shot print status: progress, temperatures, time remaining, cost, and a camera snapshot where the printer has one
  • emergency_stop
    • Stop a running print immediately
  • purge_filament
    • Heat the nozzle and push a short length through — the clog test, with load_filament and unload_filament beside it for a spool change
    • Reports what the printer could actually tell: where a machine reports no flow signal it says so rather than claiming success
    • Always says where the purge went: over the machine's own purge chute where Kiln knows it for your model (served through Kiln's hosted service for a printer paired to your Kiln sign-in, free, and kept on your machine so it keeps working offline), or in place with the reason — never a guessed coordinate
  • wipe_nozzle
    • Clean the nozzle tip on the printer's own wipe pad (served through Kiln's hosted service for a printer paired to your Kiln sign-in, free, and kept on your machine so it keeps working offline); refuses, and says what to use instead, on any model whose pad Kiln does not know
    • Run it in steps where the pass is new to a machine: plan_only describes every motion and sends nothing; step=N sends one motion, says what it left armed, and holds the cool-down until the last step. A wipe that presses or crosses the plate asks for plate_clear on every call: a person's word, never inferred. Where a model's wipe has not yet been run on a real machine, Kiln says so and runs it in steps only
  • home_axes
    • The Home button, from Kiln: your model's own homing routine where Kiln has it (served through Kiln's hosted service for a printer paired to your Kiln sign-in, free, and kept on your machine so it keeps working offline), the firmware's own routine elsewhere, a refusal that names the screen's jog controls where neither is safe
    • Run it in steps the first time: plan_only describes every motion before anything moves; step=N sends one motion and says what it left armed
  • park_head
    • Move the head to the model's own spot off the plate and leave it there; never a Z touch, never heat
  • plate_status
    • What Kiln knows is on the build plate: the print that left a part there and how long ago, or that it is clear — a person's word (kiln plate clear, or plate_clear on home and park) or a look through the printer's camera (look_at_plate); nothing marks it clear on its own
    • Home, park, slicing and starting a print refuse to cross a recorded part, and the refusal shows the plate through the camera where the printer has one, so an old record is checked rather than trusted
  • diagnose_print_failure_live
    • Diagnose a failing print from live printer state plus the model's own geometry
  • retry_print_with_fix
    • Diagnose what went wrong on the last print, then re-slice and print with the fix applied
  • resume_interrupted_print (Pro)
    • Resume an interrupted print with one call on any supported FDM printer
  • save_design_version
    • Save a new version of a parametric design, so you can go back to the one that worked
    • Linear history is free; branching and merges are free on the designs you keep in a free Kiln account and on every design with Pro; signed releases are Pro
  • export_step
    • Export a finished design as a real STEP CAD file — analytic B-rep a machine shop can open and measure
  • fleet_status (Business)
    • Live status of every printer in a fleet: state, temperatures, connection
  • fulfillment_quote
    • Get a manufacturing quote from Craftcloud's network — printing without owning a printer

Beyond 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. The complete tool catalog, grouped by subsystem, lives in Project Docs. If you are the agent, kiln3d.com/agents covers the same ground written in the second person, including the refusals worth knowing before you hit them.

MCP resources (read-only context for agents)
Resource URIDescription
kiln://statusSystem-wide snapshot (printers, queue, events)
kiln://printersFleet listing with idle printers
kiln://printers/{name}Detailed status for a specific printer
kiln://queueJob queue summary and recent jobs
kiln://queue/{job_id}Detail for a specific job
kiln://eventsRecent events (last 50)

Capabilities

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).

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.

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.

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. Orders go through Kiln's hosted service, which keeps provider credentials server-side and enforces your spend limits.

Decoration & 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.

Pricing

All 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 ($0.25 min / $200 max per order; a Pro account's first 3 orders each calendar month free; no fee on Business and Enterprise), shown transparently in every quote. Outsourced order volume is not capped on any tier.

TierPriceHeadline
Free$0Unlimited local printing, slicing, marketplace search, safety profiles, one printer, design intelligence, linear design history, and branching on the designs you keep in a free account.
Pro$49/moBranching on every design, signed releases, product templates, procedural textures, mid-print modification, print resume, failure recovery, nozzle-wear tracking, solo cloud sync.
Business$199/moCommercial use, 3 printers + 3 seats, fleet management, cross-printer learning, QR generation, assembly manuals, team pull requests, approval gates, webhooks.
EnterpriseContact usLarge fleets, SSO/SCIM, RBAC, audit trail, encrypted G-code at rest, white-label manuals, 99.9% SLA, on-prem/VPC.

Founding offer: half off for life while founding spots last — Pro $24.50/mo or $234/yr, Business $99.50/mo or $954/yr. Students get half off for 12 months. Details and how to claim the student price: kiln3d.com/pricing.

Full comparison at kiln3d.com/pricing. Already subscribed? Run kiln signin to put this machine on your plan. For provider-routed orders, the provider remains merchant of record; Kiln acts as orchestration infrastructure.

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 (300 °C hotend, 130 °C bed)
  • A person says go before every print — in your AI app's approval dialog, by typing a code Kiln shows on your screen, or at the terminal — unless you chose not to be asked: for a while (a day at most), always on a printer you named yourself (at your own terminal, or on your Kiln account page with two-factor), or by switching on auto-print yourself; stopping, pausing and watching a print never need that yes
  • 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

Packages

This monorepo contains two packages:

PackageDescriptionEntry point
kilnCLI + MCP server for multi-printer control (OctoPrint, Moonraker, Creality, Bambu, Prusa Link, Elegoo, Direct USB)kiln or python -m kiln
octoprint-cliLightweight standalone CLI for OctoPrint-only setupsoctoprint-cli

Development

bash
# Create a virtualenv first (required on modern Ubuntu/Debian/WSL)python3 -m venv .venv && source .venv/bin/activate
pip install -e "./kiln[dev]"pip install -e "./octoprint-cli[dev]"
cd kiln && python3 -m pytest tests/ -vcd ../octoprint-cli && python3 -m pytest tests/ -v

Run in Docker

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 runs the hosted version for you.

Configuration reference (auth, webhooks, discovery, plugins)

Authentication (optional)

Optional API-key auth for MCP tools, disabled by default. Scopes: read, write, admin. Read-only tools never require auth.

bash
export KILN_AUTH_ENABLED=1export KILN_AUTH_KEY=your_secret_keyexport KILN_MCP_AUTH_TOKEN=your_secret_key   # clients provide their key here

Webhooks

Register HTTP endpoints for 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. Redirects are blocked by default (KILN_WEBHOOK_ALLOW_REDIRECTS=0); when enabled, each hop is SSRF-validated and HTTPS→HTTP downgrade is blocked.

Printer discovery

bash
kiln discover   # mDNS/Bonjour + HTTP subnet probing

Finds OctoPrint, Moonraker/Creality, Bambu, Elegoo, and Prusa Link printers. If discovery returns nothing, register directly by IP with kiln auth.

Third-party plugins

Entry-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.

Modules (for contributors)
ModuleDescription
server.pyMCP server with tools, resources, and subsystem wiring
printers/Printer adapter abstraction (OctoPrint, Moonraker, Creality, Bambu, Prusa Link, Elegoo)
marketplaces/Model marketplace adapters (MyMiniFactory, Cults3D, Thingiverse, metadata-only sources)
slicer.pySlicer integration (PrusaSlicer, OrcaSlicer, BambuStudio) with auto-detection
registry.pyFleet registry for multi-printer management
queue.pyPriority job queue with status tracking
scheduler.pyBackground job dispatcher with history-based smart routing
events.pyPub/sub event bus with history
persistence.pySQLite storage for jobs, events, and settings
webhooks.pyEvent-driven webhook delivery with HMAC signing
auth.pyOptional API key authentication with scope-based access
discovery.pyNetwork 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.pyConsumer workflow for non-printer users (address validation, material recommendations, timeline/price estimation, onboarding)
cost_estimator.pyPrint cost estimation from G-code analysis
materials.pyMulti-material and spool tracking
material_inventory.pyFleet material inventory and assignment tracking
bed_leveling.pyAutomated bed leveling trigger system
streaming.pyMJPEG webcam streaming proxy
cloud_sync.pyCloud sync for printer configs and job history
plugin_loader.pyInternal tool-plugin discovery and registration
plugins/Focused MCP tool modules loaded by the plugin loader
gcode.pyG-code safety validator with per-printer limits
gcode_interceptor.pyRule-based G-code interception and safety rewriting
safety_profiles.pyPer-printer safety limits (temps, feedrates, flow) for every supported model, served per printer from Kiln's catalogue, over a bundled generic floor for any other machine
slicer_profiles.pyBundled slicer profiles (auto-generates .ini files per printer)
printer_intelligence.pyPrinter roster and spec sheets: each machine's limits, per-material temperatures and motion facts, with the spec sheet served per printer from Kiln's catalogue (curated quirks, calibration recipes and failure modes are in Kiln Pro)
pipelines.pyPre-validated print pipelines (quick_print, calibrate, benchmark)
assembly.pyMulti-part assembly validation and manual planning support
design_versions.pyLocal design history, version records, diffs, and rollback primitives
mesh_validation_pipeline.pyMulti-gate printability validation pipeline
model_visualizer.pyLocal model preview rendering
tool_schema.pyOpenAI function-calling schema converter (MCP → OpenAI format)
tool_tiers.pyTool tier definitions (essential/standard/full) for model capability matching
agent_loop.pyGeneric agent loop for any OpenAI-compatible API (OpenRouter, direct, etc.)
openrouter.pyOpenRouter integration with model catalog and auto-tier detection
data/Bundled JSON databases (safety profiles, slicer profiles, printer intelligence)
heater_watchdog.pyAuto-cooldown watchdog for idle heaters
wallets.pyCrypto wallet configuration (Solana/Ethereum for donations and fees)
pro_tool_manifest.jsonPublic manifest for kiln-pro tool discovery and REST proxy stubs
decoration_quota.pyFree-tier decoration quota tracking and tier resolution hooks
cli/Click CLI with 253 commands and JSON output

kiln-pro (kiln3d.com) 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.

Documentation

DocumentDescription
Project DocsComplete reference (CLI, MCP tools, adapters, config)
Brand assets

Logo files live in docs/assets/ — all vector SVG, scale to any size.

FileUse
kiln-banner-1280x640.svg / kiln-banner-1280x640-light.svgGitHub / social media banner (dark / light scheme)
kiln-logo-dark.svg / kiln-logo-light.svgPrimary mark + wordmark (dark / light bg)
kiln-horizontal-dark.svg / kiln-horizontal-light.svgHorizontal lockup (dark / light bg)
kiln-logo-dark-notext.svgMark only (dark bg)
kiln-favicon-256.svgFavicon / app icon
kiln-logo-transparent.svg / kiln-logo-transparent-dark.svgTransparent bg (for dark / light UIs)
kiln-mark-1024.svgSquare mark tile — profile picture, app tile (1024×1024)
kiln-x-header-1500x500.svgSocial header (1500×500)
wallpapers/kiln-wallpaper-iphone-*.svgiPhone wallpapers
wallpapers/kiln-wallpaper-macbook-*.svgMacBook wallpapers

Every file above is generated from one geometry, so the mark is identical across all of them. Please don't redraw it — scale the vector instead.

Support Development

Kiln is free, open-source software. If you find it useful, consider sending a tip:

  • Solana: kiln3d.sol
  • Ethereum: kiln3d.eth

Positioning

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.

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.

License

Kiln is a project of Hadron Labs Inc.

AGPL-3.0 License — open source with copyleft. Commercial licensing available for companies that need proprietary use.

By contributing, you agree to the Contributor License Agreement.


Also listed on Smithery and LobeHub: [MCP Badge]

Trademarks

OctoPrint is a registered trademark. Other product and company names are trademarks of their respective owners; Kiln is not affiliated with or endorsed by them.

來源:README.md,提交 3f45e7a

工具

200

printer_status

Printer status

Get printer state, temperatures, job progress, and capabilities. Returns a JSON object with: - ``printer``: connection status, operational state, tool/bed temperatures - ``job``: current file name, completion percentage, elapsed and remaining time - ``capabilities``: what this printer backend supports (``full`` only) Use this as the first call to understand what the printer is doing. Args: printer_name: Target printer. Omit for the default printer. detail: ``"full"`` (default) for everything, or ``"lite"`` for frequent polling during a print — same field names, but ``capabilities`` is omitted and ``printer`` is trimmed to the readings that actually move. Both levels carry every warning. ``detail`` exists so polling and inspection share ONE vocabulary. The retired ``print_status_lite`` returned the same numbers under different names (``completion_pct``, ``hotend_temp``), which is why clients grew defensive key-alias lists to read either shape.

輸入參數detailprinter_name

monitor_print

Print status report

One-shot print status report (human-readable text: progress, temps, speed, cost, ETA). Use for quick status checks. Returns a fixed-format text report with progress, temps, speed, errors, cost estimate, camera snapshot, and health commentary. For structured data + AI vision inspection, use ``monitor_print_vision``. For persistent background monitoring, use ``watch_print``. This is the text report from the computer the printer is attached to. When Kiln's hosted connector is also connected, ``monitor_printer`` there is the door for the inline live monitor and camera; call that one to show the person a live panel. The report's closing ``Live monitor:`` line says whether a panel came with THIS result or where the live monitor is instead — repeat it as written. :param printer_name: Target printer name. Omit for the default printer. :param include_snapshot: Whether to capture and save a camera snapshot. :param brief_id: Optional saved-goal id from ``design_session``. When the brief resolves, the report appends a single ``Goal:`` line with the design's duty and environment — so the agent watching a print can answer "is this the right design for the goal?" without a separate lookup. Best-effort: a missing kiln-pro install or an unresolvable brief silently skips the line. :param show_panel: Open the inline live monitor panel again even though one opened by an earlier call is still live above. Pass only when the person asks to see the panel again; the report itself is unchanged. Read by the inline monitor's result hook (``kiln.local_monitor``), not here. INLINE LIVE MONITOR: in apps that draw MCP Apps panels, this tool's result also carries Kiln's inline print monitor — a live panel with progress, temperatures, and the camera while a print runs. The result's own 'Live monitor:' line says whether that panel is open here, attached b

輸入參數brief_idshow_panelprinter_nameinclude_snapshot

printer_files

List printer files

List all G-code files available on the printer. Handles FTPS directory listing (Bambu), REST file API (OctoPrint/Moonraker) automatically. Returns a JSON array of file objects, each containing: - ``name``: file name - ``path``: full path on the printer - ``size_bytes``: file size (may be null) - ``date``: upload timestamp as Unix epoch (may be null) When G-code metadata is available, files may also include: - ``material``, ``estimated_time_seconds``, ``tool_temp``, ``bed_temp``, ``slicer``, ``layer_height``, ``filament_used_mm`` Use this to discover which files are ready to print. Pass a file's ``name`` or ``path`` to ``start_print`` to begin printing it. For detailed metadata on a specific file, use ``analyze_print_file()``.

無需輸入參數。

upload_file

Upload a file to the printer

Upload a local G-code file to the printer. Handles FTPS (Bambu), REST multipart upload (OctoPrint/Moonraker), and serial file transfer automatically. Args: file_path: Absolute path to the print file on the local filesystem. The file must exist and be readable. Accepted extensions follow the TARGET PRINTER, not one fixed list — ``printer_status()`` reports them per machine, and a Bambu declares ``.3mf`` FIRST because that is the only thing it will start a print from. Bare ``.gcode`` / ``.gco`` / ``.g`` is right for OctoPrint, Moonraker, PrusaLink and Duet; on a Bambu it has no start block and is refused before anything is sent (wrap it with ``wrap_gcode_as_3mf`` first). When ``slice_model`` produced the file, upload the path it names in ``recommended_upload_path`` and do not choose between its outputs by hand — it already knows the printer. printer_name: Which printer to upload to. Omit for the default printer. The G-code dialect scan and the bed-fit gate follow the named machine too, so the bytes are checked against the bed they are actually going to. After a successful upload the file will appear in ``printer_files()`` and can be started with ``start_print()``.

輸入參數file_path必填printer_name

upload_file_confirm

Confirm a file upload

Confirm and execute a pending file upload. When ``KILN_CONFIRM_UPLOAD`` is enabled, ``upload_file()`` returns a confirmation token instead of uploading immediately. Pass that token here to proceed with the upload. Args: token: The confirmation token returned by ``upload_file()``.

輸入參數token必填

analyze_print_file

Analyze a printer file

Analyze a G-code file on the printer and extract its metadata. Reads the file header to extract slicer-embedded metadata such as material type, estimated print time, temperatures, layer height, and filament usage. This is especially useful when filenames are meaningless (e.g. ``test5112.gcode``) and the agent needs to understand what a file will print. .. note:: For multi-object .gcode.3mf files, also consider using ``list_plate_objects()`` to see individual objects on the plate. Args: filename: Name or path of the file as shown by ``printer_files()``. Returns a JSON object with: - ``filename``: the file name - ``metadata``: extracted metadata (material, time, temps, slicer, etc.) - ``has_metadata``: whether any metadata was found

輸入參數filename必填

delete_file

Delete a printer file

Delete a G-code file from the printer's storage. Args: file_path: Path of the file as shown by ``printer_files()``. This is irreversible -- the file cannot be recovered once deleted.

輸入參數file_path必填

start_print

Start a print

Start printing a file already uploaded to the printer (file must exist on printer). ``version_id`` / ``design_id`` / ``branch_id`` name the kept design the file came from, when there is one, so the print's record lands on that version's history; a file that is not a Kiln design passes none. Use ``upload_file`` first, or use ``slice_and_print`` / ``run_quick_print`` to slice + upload + print in one step. Automatically runs pre-flight safety checks before starting. If any check fails the print is blocked and the check results are returned so the agent can diagnose and fix the issue. Args: file_name: Name or path of the file as shown by ``printer_files()``. use_ams: AMS filament feeding mode (Bambu only). Tri-state: - ``"auto"`` (default): auto-detect AMS by probing the printer. If an AMS is connected with loaded trays, enables AMS automatically and selects the first loaded slot if no ``ams_mapping`` is provided. Falls back to external spool if no AMS is detected. - ``"true"``: Force AMS on. Use when you know AMS is connected. - ``"false"``: Force AMS off. Use external spool. ams_mapping: The tray each extruder feeds from (Bambu only), by the printer's own tray id: ``unit * 4 + slot`` on a chained unit (unit B's first slot is 4), the unit id itself on an AMS HT (HT-A is 128). ``ams_status()`` lists each tray's ``tray_id`` and its Studio name (``B1``, ``HT-A``). Defaults to ``[0]`` when AMS feeding is on and ``[]`` (external spool) when it is off. Use ``-1`` for unused positions. timelapse: Record a timelapse video (Bambu only). Default ``False``. bed_leveling: Run automatic bed leveling before print (Bambu only). Default ``True``. Set ``False`` to skip for reprints (~2 min saved). flow_cal

輸入參數use_amsbed_typebranch_iddesign_idfile_name必填flow_calitimelapseversion_idams_mappingbed_levelingplate_numberprinter_name另有 7 個

cancel_print

Cancel the print

Cancel the currently running print job. Sends cancel via MQTT (Bambu) or REST API (OctoPrint/Moonraker) automatically. The printer must have an active job (printing or paused). :param printer_name: Which printer to stop. Omit for the default printer. Any registered printer can be stopped. :param preserve_temperatures: When ``True``, re-asserts the pre-cancel hotend + bed (+ chamber, if expected_chamber_target is provided) targets immediately after the cancel command, so the printer does NOT cool down. Use this when you plan to swap in a different file (e.g., a mid-print decoration resume 3MF) and need bed adhesion + nozzle temperature held across the cancel-then- start-print transition. Without this, Bambu firmware defaults to cooling on cancel, which can warp the existing part or kill bed adhesion on a partial print you're about to resume. Default ``False`` preserves legacy behaviour (cool down to idle). :param expected_tool_target: Optional caller-supplied tool target to preserve. When provided AND ``preserve_temperatures=True``, this overrides the introspected ``state.tool_temp_target``. Useful when the printer was paused and the firmware has already cleared the target (so a fresh state read returns 0) but the caller knows what the pre-pause target was. :param expected_bed_target: Bed target in Celsius to restore with ``preserve_temperatures=True``, overriding the printer's reported target; pass it when that reported target has already dropped to 0 (after a long pause) so the bed is still restored. :param expected_chamber_target: Optional chamber target (M141) to re-assert via raw G-code. Not all printers expose chamber heating via the adapter API, so this is sent as a raw M141 command best-effort. Pass ``None`` to skip chamber preservation. WARNING:

輸入參數printer_nameexpected_bed_targetexpected_tool_targetpreserve_temperaturesexpected_chamber_target

calibrate_direct

Run printer calibration

Send calibration commands directly to the printer adapter. For a full guided calibration pipeline (home + bed level + intelligence guidance), use ``run_calibrate`` instead. This tool sends raw calibration commands via MQTT (Bambu) or G-code (OctoPrint/Moonraker) automatically. The printer must be idle — calibration cannot run during a print. Available options (printer-specific -- not all printers support all): - ``"bed_leveling"``: Auto bed mesh probing and Z offset calibration - ``"vibration"``: Input shaper / vibration compensation tuning - ``"flow"``: Extrusion flow / first-layer inspection calibration - ``"all"``: Run all available calibration routines When no options specified, defaults to bed leveling only. Bambu printers support all options. OctoPrint/Moonraker support ``bed_leveling`` and ``vibration``. Other printers may not support remote calibration. :param options: Which routines to run: ``"bed_leveling"``, ``"vibration"``, ``"flow"`` or ``"all"``, as a list. Omitted, bed leveling only.

輸入參數options

emergency_stop

Emergency stop

Trigger an emergency stop on one or all printers. Sends the strongest stop each printer accepts: Moonraker's emergency-stop endpoint; ``M112`` on OctoPrint, Duet and USB-serial printers; a cancel plus ``M112`` on Elegoo; a job cancel on Prusa Link, which has no raw G-code endpoint; and on Bambu the print-stop command, a heater cut and ``M112``. Creality printers use whichever of these their connection is. Unlike ``cancel_print``, this is not meant to allow a graceful cooldown. Only the Bambu stop is read back: its ``success`` means the printer reported the job ended. On every other printer ``success`` means the stop command was delivered, not that anything was observed. ``success`` is False for any printer whose stop failed or could not be confirmed; when stopping all printers, ``not_confirmed_stopped`` lists each one with the reason. Tell the user to stop those at the machine; calling this tool again for them is safe. Use only in genuine safety emergencies (thermal runaway, collision, spaghetti failure threatening the hotend, etc.). WARNING: After an emergency stop the printer typically requires a power cycle or firmware restart before it can print again. Args: printer_name: Specific printer to stop. If None, stops ALL printers. reason: Reason code, one of ``user_request`` (default), ``thermal_runaway``, ``collision_detected``, ``material_jam``, ``power_anomaly``, ``software_fault``, ``interlock_breach``, ``agent_request``; any other value is refused. source: Trigger source label for audit context. note: Optional operator note.

輸入參數notereasonsourceprinter_name

emergency_status

Emergency stop status

Get the emergency stop latch status for one printer or the entire fleet. Returns whether an emergency stop is active and whether the printer is locked from printing operations. When an e-stop is active, all print commands are blocked until ``clear_emergency_stop()`` is called with an acknowledgement note. :param printer_name: Query a specific printer, or omit for all printers. :param include_unlatched: When True, include printers that have no active latch. Defaults to False (only active latches). :returns: Latch state per printer: ``active`` (bool), ``reason``, ``source``, ``timestamp``, and whether critical interlocks prevent clearing. See also: ``emergency_stop()``, ``clear_emergency_stop()``.

輸入參數printer_nameinclude_unlatched

clear_printer_error

Clear a printer error

Clear a latched error on the PRINTER so it will accept prints again. Different from ``clear_emergency_stop``, which releases Kiln's own safety latch. This one acknowledges an error the FIRMWARE is holding — the state the machine itself reports — after which pre-flight checks pass again. Reach for it when ``printer_status`` reports ``error`` and the printer's own screen looks fine. That combination is not a Kiln bug; the firmware really is still reporting the fault, and on some machines dismissing the on-screen message clears the notification without clearing the state. Before this existed there was no way out of that from Kiln at all — only a power cycle — so one bad print locked the machine out of every later one. What it does NOT do is fix the cause. A printer that halted for a real fault will halt again the moment it retries, which is the honest outcome: this reconciles Kiln with the machine, it does not overrule the machine. Nothing is cleared while a print is running. :param printer_name: Target printer. Omit for the default printer. :returns: Whether the acknowledgement was sent, plus the printer state read back afterwards so the caller can see whether it took. See also: ``printer_status()``, ``preflight_check()``, ``emergency_stop()``.

輸入參數printer_name

clear_emergency_stop

Clear an emergency stop

Acknowledge and clear a printer's emergency stop latch. This is a safety-critical operation. The latch may be blocked from clearing if critical interlocks are still active (e.g. thermal sensor failure). Call ``emergency_status()`` first to check whether clearing is possible. :param printer_name: Printer whose latch to clear. :param acknowledgement_note: Free-text note explaining why the e-stop is being cleared (required -- cannot be empty). :param acknowledged_by: Identity of the person or system clearing the latch (default ``"operator"``). :returns: Updated latch state, or an error if critical interlocks prevent clearing. See also: ``emergency_status()``, ``emergency_stop()``.

輸入參數printer_name必填acknowledged_byacknowledgement_note必填

force_print_oversize

Allow an oversize print

Briefly override the pre-print impossibility gate for ONE printer. Kiln refuses a print that physically cannot succeed on the target printer — geometry that exceeds the build volume (the nozzle would crash) or a material whose minimum nozzle temperature exceeds the printer's hotend ceiling (it cannot melt the filament). Those are hard physical limits, not warnings, so a normal print call is blocked. It also refuses a file sliced for one nozzle size when the printer's own setting says another is fitted, and a part too big for the bed of the model the printer reports itself as when that differs from the model it was set up as; this override covers both. This is the human's "I understand — print it anyway" escape hatch, e.g. when you are deliberately sending the file to a *different* printer than the one connected. It grants a short, per-printer override that lets the NEXT otherwise-blocked print through, then expires. Safety: classified ``confirm`` (see ``data/tool_safety.json``). An autonomous agent cannot self-approve it — the confirmation layer keeps a human in the loop, exactly like ``emergency_stop``. Designing and slicing any size is never blocked; only the final print-to-hardware step is. :param printer_id: Printer model to override (e.g. ``"bambu_a1"``). Empty resolves to the active printer. :param ttl_minutes: Minutes the override stays active (default 5, max 60). :returns: Grant confirmation, or a confirmation-required challenge.

輸入參數printer_idttl_minutes

emergency_trip_input

Trip emergency stop from hardware

Trip emergency stop from an external hardware bridge. Designed for physical input devices (ESP32, PLC, wired push buttons) that call this endpoint over HTTP to trigger a software e-stop. This is different from ``emergency_stop()`` which is for agent/software- initiated stops. If ``KILN_ESTOP_INPUT_TOKEN`` is configured, the request must include a matching ``token`` or it will be rejected. :param printer_name: Printer to emergency-stop. :param input_name: Label for the input source (default ``"external_button"``). :param token: Authorization token -- required when ``KILN_ESTOP_INPUT_TOKEN`` is set. :param note: Optional free-text note describing the trigger reason. See also: ``emergency_stop()``, ``emergency_status()``.

輸入參數notetokeninput_nameprinter_name必填

pause_print

Pause the print

Pause the currently running print job. What happens next is decided partly by the printer's own firmware, and it differs a lot between machines: some lift the nozzle and park the head, others leave it resting on the part. Check ``printer_status`` before saying where the head is. While the print is paused Kiln holds the temperatures that matter: - The bed stays at its pre-pause target for the whole pause, so the part stays stuck down and can be resumed. - The nozzle is not left sitting hot over the part. If the printer lowers it by itself (a Bambu A1 sets about 90°C at once), Kiln leaves that alone. If the printer would keep it at full heat, Kiln switches it off 45 seconds into the pause, so a quick look costs nothing. - ``resume_print`` heats the nozzle back to the print's temperature and waits for it before the print continues, so a resume never pushes plastic through a cold nozzle. A temperature the person sets during the pause is the one kept. An emergency stop ends the hold. On a printer Kiln cannot set temperatures on (Prusa Link) the printer's own pause behaviour applies. Args: keep_temps: When ``True`` (default), the bed is held at its pre-pause target for the whole pause and the nozzle is not left sitting hot over the part (switched off shortly into the pause unless the printer lowers it itself); ``resume_print`` reheats it. ``False`` leaves both heaters to the printer. printer_name: Which printer to pause. Omit for the default printer. Each paused machine gets its own hold. leave_nozzle: The person will work the filament during this pause: load new filament after a runout, clear a clog. Kiln then never switches the nozzle off, and leaves it to them and the printer. The bed is still held. Use ``resume_print()`` to continu

輸入參數keep_tempsleave_nozzleprinter_name

skip_print_objects

Skip objects mid-print

Abandon one or more failed objects on a multi-object plate, mid-print. When one part on a full plate fails — spaghetti, a knocked-loose object, a detached corner — this tells the printer to stop printing just those objects and finish the rest of the plate. One bad part no longer scraps the whole run. A Kiln Pro feature. The identifier is backend-specific — pass it as a string, Kiln routes it: * **Bambu** — the ``label_id`` from ``list_plate_objects`` (e.g. ``"757"``). * **Klipper / Moonraker / Creality** — the object NAME the slicer labelled (e.g. ``"Part1"``); the file must have been sliced with object labelling. * **OctoPrint** — the zero-based ``M486`` object index (needs firmware M486 support). Discover Bambu ids first:: list_plate_objects("my_plate.gcode.3mf") # -> objects[].label_id Printer support (honest): Bambu and any Klipper/Moonraker printer can skip (Voron, RatRig, Qidi, and Klipper-based Creality and Elegoo Neptune / OrangeStorm); Marlin printers via OctoPrint or direct USB can if the firmware speaks M486. Prusa via Prusa Link can't be skipped remotely — an API limitation, not the printer (it can cancel objects from its own screen). The Elegoo SDCP protocol (e.g. Centauri Carbon) has no skip command. A Klipper printer on a non-Klipper connection just needs reconnecting as Moonraker. AGENT DISPLAY CONTRACT: skipping is IRREVERSIBLE for the objects named — confirm the exact objects with the user before calling, and only while a multi-object plate is actively printing. Skips are cumulative: an object already skipped stays skipped. Args: object_ids: Object identifiers to abandon, as strings: on Bambu the ``label_id`` from ``list_plate_objects`` (e.g. ``"757"``); on Klipper/Moonraker/Creality the object name the slicer labelled (e.g. ``"Part1"``); on OctoPrint the zero-based M486 object index

輸入參數object_ids必填plate_numberprinter_name

resume_print

Resume the print

Resume a paused print job. The printer must currently be in a paused state. Resuming will return the nozzle to its previous position and continue extruding. Kiln checks afterwards that the resume actually took, so a printer that silently ignored the command reports a failure instead of a cheerful "Print resumed." A print paused at a planned hardware stop (a pause written into the file so a nut, a magnet or a bearing can go in) is refused with ``code: "HARDWARE_NOT_CONFIRMED"`` and a ``hardware`` block saying what goes in. Tell the person, wait for them to say every piece is in and sits level with or below the top of the print, then resume with ``hardware_confirmed=true``. Never pass it on your own judgement. Args: force: Send the resume even when Kiln believes the printer is not paused. Use this when the printer's own screen disagrees with what Kiln reports — a printer can report ``RUNNING`` with perfectly fresh telemetry while standing still, and without this the wrong state word would leave you unable to recover the print. printer_name: Which printer to resume. Omit for the default printer. Pass the same name you paused with. hardware_confirmed: The person has said every piece of hardware for this stop is in and sits level with or below the top of the print. Only on their word.

輸入參數forceprinter_namehardware_confirmed

set_temperature

Set temperature

Set the target temperature for the hotend (tool) and/or heated bed. Args: tool_temp: Target hotend temperature in Celsius. Pass ``0`` to turn the heater off. Omit or pass ``null`` to leave unchanged. bed_temp: Target bed temperature in Celsius. Pass ``0`` to turn the heater off. Omit or pass ``null`` to leave unchanged. printer_name: Which printer to heat. Omit for the default printer. The safety ceiling follows the named machine; a printer with no declared model is held to the generic floor — set its model with ``set_printer_model`` (or ``add_safety_profile``) when that floor refuses a temperature. At least one of ``tool_temp`` or ``bed_temp`` must be provided. Common PLA temperatures: tool 200-210C, bed 60C. Common PETG temperatures: tool 230-250C, bed 80-85C. Common ABS temperatures: tool 240-260C, bed 100-110C. Branch on ``outcome`` — one field, three values, the same shape ``start_print`` uses for ``print_start``: - ``"confirmed"``: the printer, in a report AFTER the command, shows the effect. Reported per heater under ``tool`` and ``bed``. - ``"accepted"``: the command was sent and not refused, and the printer has not shown the effect yet. Normal on a quiet printer. Read ``printer_status()`` before building on it. - ``"failed"``: the printer's interface refused the command. ``accepted`` (the boolean) keeps its old meaning: sent, not refused. It is never proof the printer acted. ``success`` is ``False`` only for ``"failed"``.

輸入參數bed_temptool_tempprinter_name

ams_status

AMS status

Full AMS hardware dump — all trays, humidity, RFID (Bambu Lab only). For just the currently-active material, use ``get_active_material`` instead. For Kiln's software material tracker, use ``get_material``. Returns what's loaded in each AMS tray: filament type, color, remaining percentage, RFID tag, temperature ranges, and humidity. Each tray carries its unit's own ``slot`` (0-3), the printer's ``tray_id`` for it (``unit * 4 + slot`` on a chained unit, the unit id itself on an AMS HT) and Studio's ``name`` (``A1``…``D4``, ``HT-A``); each unit carries its ``name`` (``A``, ``HT-B``). ``feeding`` is the tray feeding the nozzle -- ``{tray_id, unit, slot, name, source}``, or ``None`` when nothing feeds -- and ``feeding_source`` says which field of the printer's report it came from. The raw ``tray_now`` is kept as sent: ``"254"`` is the external spool, ``"255"`` no tray. A1 / AMS Lite reports may keep ``tray_now`` at ``"255"`` while exposing loaded AMS trays and selected/target tray fields such as ``tray_pre`` or ``tray_tar``. The ``ams_exist_bits`` and ``tray_exist_bits`` fields are bitmasks showing which AMS units and trays are physically present. Use this to check filament levels before printing, verify the correct material is loaded, or select the right ``ams_mapping`` for ``start_print()``. This dump carries no fault line of its own. To follow a print, poll ``printer_status(detail="lite")``: it reports the run state and every fault code under ``faults``. A fault the printer stops for on a watched print also rides this and every other tool result as ``printer_fault`` while it stands.

無需輸入參數。

cfs_status

CFS status

Discover Creality CFS/CFS-C status through local Moonraker. This is the Creality counterpart to ``ams_status()``, but the public protocol is not equivalent to Bambu AMS. Creality documents CFS control through Creality Print and printer UI; Kiln therefore performs read-only Moonraker discovery (`/printer/objects/list`, candidate object queries, and `/printer/gcode/help`) and reports any visible CFS slots/macros. The response includes ``hardware_unverified=True`` and ``active_slot_control_supported=False`` until slot load/unload/mapping commands are validated against real Creality hardware or official API docs.

無需輸入參數。

set_speed_profile

Set print speed

Set the print speed: a preset by name, or a percentage of the sliced speed. One door for both ways a printer takes a speed. Give exactly one of: Args: profile: A preset — ``"silent"`` (50%), ``"standard"`` (100%), ``"sport"`` (124%) or ``"ludicrous"`` (166%). Bambu Lab printers only; sport and ludicrous raise the nozzle temperature to keep up with the flow. percent: The speed as a percentage of the speed the file was sliced at — the feedrate override every FDM firmware has (100 is the sliced speed; 10 to 300 is accepted). A Bambu takes only its four presets, so the nearest one is set and the answer says which (``preset``, ``percent_actual``). printer_name: Which printer. Omit for the default printer. Nothing here judges whether a speed suits THIS printer or THIS layer: Kiln's served ``set_speed_percent`` and ``set_speed_schedule`` do that and hand the checked value here. Use ``printer_status()`` to see the current speed profile in ``printer.speed_profile``. Branch on ``outcome`` — one field, three values, the same shape ``start_print`` uses for ``print_start``: - ``"confirmed"``: the printer, in a report AFTER the command, shows the effect. For a Bambu, the reported speed level moved. - ``"accepted"``: the command was sent and not refused, and the printer has not shown the effect yet. Normal on a quiet printer. Read ``printer_status()`` before building on it. - ``"failed"``: the printer's interface refused the command. ``accepted`` (the boolean) keeps its old meaning: sent, not refused. It is never proof the printer acted. ``success`` is ``False`` only for ``"failed"``.

輸入參數percentprofileprinter_name

run_speed_schedule

Run a speed schedule

Run, report or stop a layer-based speed schedule on this computer. A schedule is a list of ``{"from_layer", "to_layer", "speed_percent"}`` segments. With ``action="run"`` it starts on the printer that is printing now, replacing a schedule already running for that printer: the printer is asked which layer it is on every few seconds and each segment's speed is set once, as the print reaches it. It stops on its own when the print ends, when the printer is found running a different print, or on ``action="stop"`` (the printer stays at the last speed set). ``action="status"`` reports what has been applied so far. Only the schedule's shape is checked here. Which speeds suit this printer and which layers a speed is unsafe on is decided by Kiln's served ``set_speed_schedule``, which hands the checked schedule here. Args: schedule: The segments to run (``action="run"`` only): a list of 1 to 64 ``{"from_layer": int, "to_layer": int, "speed_percent": int}`` entries, ``speed_percent`` within 10-300. printer_name: Which printer. Omit for the default printer. action: ``"run"`` (default), ``"status"`` or ``"stop"``.

輸入參數actionscheduleprinter_name

get_speed_profile

Get print speed

Get the current speed profile (Bambu Lab printers only). Returns the active speed profile with: - ``level``: numeric level 1–4 - ``name``: profile name — ``"silent"`` (50%), ``"standard"`` (100%), ``"sport"`` (124%), or ``"ludicrous"`` (166%) - ``speed_magnitude``: actual speed multiplier percentage reported by the printer firmware Use this to check the current speed before adjusting it with ``set_speed_profile()``.

無需輸入參數。

set_printer_light

Set printer light

Control the printer's LED lights (Bambu Lab printers only). Args: node: Which light to control — ``"chamber_light"`` (main illumination) or ``"work_light"`` (nozzle area). Defaults to ``"chamber_light"``. mode: Light mode — ``"on"``, ``"off"``, or ``"flashing"``. Required: a call that arrives without it is refused rather than turned on (the same rule as ``set_fan``'s ``percent``). Use this to improve camera visibility, signal print completion (flashing), or turn lights off for overnight prints. Branch on ``outcome`` — one field, three values, the same shape ``start_print`` uses for ``print_start``: - ``"confirmed"``: the printer, in a report AFTER the command, shows the effect. For a Bambu, the light report lists that node in that mode. - ``"accepted"``: the command was sent and not refused, and the printer has not shown the effect yet. Normal on a quiet printer. Read ``printer_status()`` before building on it. - ``"failed"``: the printer's interface refused the command. ``accepted`` (the boolean) keeps its old meaning: sent, not refused. It is never proof the printer acted. ``success`` is ``False`` only for ``"failed"``.

輸入參數mode必填node

set_fan

Set fan speed

Set the speed of a printer fan. ``percent`` has no default on purpose. Measured 2026-09-18 on an A1: a call meant to turn the fan OFF reached Kiln with no ``percent`` at all (the caller's own argument name had been dropped before the request arrived), the old default of 100 ran the fan flat out, and the answer confirmed it. A setpoint the caller did not send is refused, never guessed. Supported on Bambu Lab, OctoPrint, Moonraker/Klipper printers, and Elegoo's Centauri Carbon (FDM). Prusa Link has no raw G-code endpoint, so fan control isn't available there (a known limitation of Prusa Link itself). An Elegoo machine with no part-cooling fan is refused. Args: node: Which fan to set. ``"part"`` (part-cooling / model fan, the one that cools each layer) works on every supported printer. ``"aux"`` (auxiliary / big fan) and ``"chamber"`` (chamber / exhaust fan) are Bambu-only — generic Marlin/Klipper firmware has no standard auxiliary or chamber fan Kiln can address without knowing that machine's own G-code macros. Defaults to ``"part"``. percent: Fan speed 0-100. ``0`` turns the fan off, ``100`` is full speed. Required. Use this to add cooling for bridges and overhangs (part fan), or — on Bambu — pull heat with the auxiliary fan or run the chamber/exhaust fan for materials like ABS/ASA. The Bambu chamber fan only exists on enclosed models — X1 Carbon, X1E, P1S, P2S, H2S — not on open-frame models (A1, A1 Mini, A2L, P1P), where a chamber command is a no-op. The printer's own thermal management may override a manual fan speed during a print. Branch on ``outcome`` — one field, three values, the same shape ``start_print`` uses for ``print_start``: - ``"confirmed"``: the printer, in a report AFTER the command, shows the effect. For a Bambu, that fan's reported level matches. - ``"accepted"

輸入參數nodepercent必填

wrap_gcode_as_3mf

Wrap G-code as 3MF

Wrap raw PrusaSlicer G-code in a Bambu-compatible 3MF (Bambu Lab only). Bambu printers require the proprietary BambuStudio start/end sequences (motor enable, AMS load, extrusion calibration) to function correctly. This tool takes PrusaSlicer G-code output and packages it into a 3MF that the printer will accept. Args: gcode_path: Absolute path to a PrusaSlicer ``.gcode`` file on the local filesystem. The file must have been sliced with ``--use-relative-e-distances`` and empty start/end G-code. hotend_temp: Hotend temperature in °C for the start sequence. Omitted, the temperature the G-code itself first heats to. bed_temp: Bed temperature in °C, likewise. filament_type: Filament type string — ``"PLA"``, ``"PETG"``, ``"ABS"``, etc. Omitted, the type the slicer wrote into the G-code (every Kiln slice carries the material it was weighed as). The response's ``filament_type`` is what the printer is told, in Bambu's own vocabulary. source_3mf_path: Optional path to a source 3MF to copy thumbnails and geometry from. num_filaments: Number of filaments (>1 for multi-color prints). filament_colors: List of hex color strings per filament (e.g. ``["#898989FF", "#161616FF"]``). filament_types: List of filament type strings per filament (e.g. ``["PLA", "PLA"]``). thumbnail_path: Optional path to a PNG image to embed as the 3MF thumbnail (shown on the printer's display). stl_path: Optional path to the source STL file. When provided, a thumbnail is auto-generated from the model geometry via OpenSCAD (512x512, shown on the Bambu printer screen). bed_type: The plate fitted: ``"textured_plate"``, ``"hot_plate"`` (smooth PEI), ``"cool_plate"``, ``"eng_plate"`` or ``"supertack_plate"``. Omitted or e

輸入參數bed_tempbed_typestl_pathgcode_path必填hotend_tempresume_modefilament_typenum_filamentsfilament_typesthumbnail_pathfilament_colorssource_3mf_path

get_bed_mesh

Get bed mesh

Get the bed mesh / probe data (OctoPrint and Moonraker only). Returns the probed bed leveling mesh including: - ``probed_matrix``: 2D array of Z-offset measurements across the bed - ``mesh_min`` / ``mesh_max``: bounding coordinates of the probed area - ``variance``: overall variance of the mesh (lower = flatter bed) Use this to diagnose first-layer adhesion issues. High variance or significant dips/peaks indicate a warped bed or loose leveling screws. Not supported on Bambu Lab printers — Bambu handles bed leveling internally and does not expose mesh data.

無需輸入參數。

get_filament_status

Filament sensor status

Get the filament runout sensor status (OctoPrint and Moonraker only). Returns sensor information including: - ``detected``: whether filament is currently detected by the sensor - ``sensor_enabled``: whether the runout sensor is active Use this to verify filament is loaded before starting a print on non-Bambu printers. For Bambu Lab printers, use ``ams_status()`` instead — it provides per-tray filament presence, type, color, and remaining percentage.

無需輸入參數。

get_tool_position

Get tool position

Get the current nozzle / tool-head XYZ position (Moonraker and Serial). Returns a dict with at least ``x``, ``y``, ``z`` coordinates in mm relative to the printer's home position. Some printers also report ``e`` (extruder position). Use this for: - Verifying the printer has been homed (coordinates are valid only after homing) - Calibration sequences that need to know the current position - Move planning when issuing manual jog commands Not all adapters support this — returns an error if position data is not available.

無需輸入參數。

preflight_check

Preflight check

Run pre-print safety checks to verify the printer is ready. Checks performed: - Printer is connected and operational - Printer is not currently printing - No error flags are set - Temperatures are within safe limits - (Optional) Material loaded matches expected material - (Optional) Local G-code file is valid and readable - (Optional) Remote file exists on the printer - (Optional) For a model file (STL, OBJ, 3MF, STEP, GLB), whether the part prints: this fails exactly where the print door would refuse the file, and passes wherever the door would print it. - Multi-material: what unit the printer carries (AMS, a Klipper MMU) and, with ``file_path``, whether the file's filaments are loaded. Advisory for a unit Kiln drives (the print gate decides at start); a FAILURE when a multi-filament file needs more colours than a unit Kiln does not drive has loaded — that print comes out wrong and nothing downstream stops it. Absent for a single-feed printer; a read that failed is reported as such, never as "no unit". Args: file_path: Optional path to a local print file (``.gcode``, ``.gco``, ``.g`` or ``.3mf``) to validate before upload; a model file (STL, OBJ, STEP) fails the ``file_valid`` check. If omitted, only printer-state checks are performed. expected_material: Optional material type (e.g. "PLA", "ABS", "PETG"). If provided and a material is loaded, checks for a mismatch. remote_file: Optional filename to verify exists on the printer. If provided, checks the printer's file list for a matching file. accept_paused: When ``True``, the ``printer_idle`` check accepts the ``paused`` state in addition to ``idle``. Used by ``start_print(resume_from_paused=True)`` for mid-print resume 3MFs (which start from a paused-state printer). Default ``False

輸入參數file_pathremote_fileprinter_nameaccept_pausedexpected_materialstart_door_gates_plate

send_gcode

Send G-code

Send raw G-code commands directly to the printer. Args: commands: One or more G-code commands separated by newlines or spaces. Examples: ``"G28"`` (home all axes), ``"G28\nG1 Z10 F300"`` (home then move Z up 10mm), ``"M104 S200"`` (set hotend to 200C). dry_run: When ``True``, run the full validation pipeline (auth, rate-limit, G-code safety) but do **not** actually send commands to the printer. Returns what *would* have been sent. The commands are sent sequentially in order. The printer must be connected (unless ``dry_run`` is ``True``). G-code is validated before sending. Commands that exceed temperature limits or modify firmware settings are blocked. Use ``validate_gcode`` to preview what would be allowed without actually sending. Raw G-code has no general read-back, so ``outcome`` here is ``"accepted"`` whenever the command was sent: the printer took the bytes, and whether it EXECUTED them is not reported. Observe the printer (``printer_status()``, or the machine itself) before building on a G-code send. ``"failed"`` means the transport refused it.

輸入參數dry_runcommands必填

issue_preview_token

Issue a preview token

Issue a preview-confirmation token for a file about to be printed. Call this AFTER the user has seen the print, and say WHICH door showed it — ``door`` is required and is checked against what this server itself recorded, never taken on your word: 1. ``door="stage"`` — the inline 3D stage (the MCP Apps panel that opens on a make, which the user can orbit). This is the first and best option. Accepted only when the panel actually fetched the geometry for this file (or for the design mesh it was sliced from). 2. ``door="url"`` — a hosted viewer link. Use it when this host draws no panel. Accepted only when ``show_on_stage(file_path)`` issued a ``viewer_url`` for this file that is still live (its result carries one on a host that draws no panel, while the machine is signed in). 3. ``door="png"`` — the stage's own still (``visualize_model`` with ``renderer`` ``stage`` or ``stage_paint``). The total fallback. Accepted only when such a render is on record AND the stage is unavailable for a reason the server can name AND the link door refused for a reason it recorded. A raw ``openscad`` render is inspection-only and is refused; a PNG claim on a host that draws the stage is refused and told to open the stage. The user approves → you call this tool → you pass the returned token as ``preview_token`` to ``start_print`` (or any other tool that starts a print) or ``fulfillment_order``. Without a valid token those tools refuse (unless ``KILN_SKIP_PREVIEW_GATE=1``). This is the deepest safety gate that prevents an agent from sending a print to the physical printer without the user ever seeing what's about to be printed. Tokens are single-use and expire after ``ttl_seconds`` (default 600 seconds / 10 minutes). Scoped to the specific file hash and optionally to a specific printer_id so a token for one file can't be

輸入參數doorfile_path必填printer_idttl_seconds

confirm_action

Confirm a pending action

Execute a previously requested action that requires confirmation. When ``KILN_CONFIRM_MODE`` is enabled, destructive tools (safety level ``"confirm"`` or ``"emergency"``) return a confirmation token instead of executing immediately. Pass that token here to proceed. Args: token: The confirmation token returned by the original tool call.

輸入參數token必填

fleet_status

Fleet status

Get live status of all fleet printers (state, temps, connection — current snapshot). The multi-machine view is a fleet feature. For ONE printer — which is the single-printer experience at every tier — use ``printer_status`` (``detail="lite"`` for the cheap version), ``printer_snapshot`` or ``monitor_print``; each takes a ``printer_name`` and none of them is tier-gated, so any machine you own can be inspected and stopped whatever your licence. For historical analytics (success rates, throughput), use ``fleet_analytics``. Returns a list of printer snapshots including name, backend type, connection status, operational state, and temperatures. Printers that fail to respond are reported as offline rather than raising. A printer the person marked with ``set_machine_repair`` carries a ``repair`` block (needs repair since, or repaired at and what), and ``needs_repair_printers`` lists the ones out of service: routing does not choose them, though they may read as idle. Args: by_site: Also group the same printers by the site each one is at (``update_printer_site``; printers with no site fall under ``"unassigned"``). When the plan includes it the answer adds ``sites`` (per site: ``printers``, ``count``, ``idle``, ``busy``, ``needs_repair``) and ``site_count``; otherwise the flat answer comes back with one ``note``, never a refusal. If no printers are registered yet, the current adapter (from env config) is auto-registered as "default".

輸入參數by_site

register_printer

Register a printer

Register a new printer in the fleet. Registering is free at every tier and always has been — what the fleet tier sells is running printers in PARALLEL, enforced when a print starts, not when a machine is added. So owning a second printer and using them one at a time is a supported setup on Free and Pro: the registration succeeds and the reply notes the concurrency limit. Free and Pro run 1 printer at a time. Driving several at once starts at Business; the reply says how many printers your plan includes. Args: name: Unique human-readable name (e.g. "voron-350", "bambu-x1c"). A name holding the printer's address, serial or another identifier is held before anything is saved (code ``NAME_HOLDS_IDENTIFIER``): the reply says what is in it and carries ``suggested_name``. Offer that to the person, then call again with the name they choose. printer_type: Backend type -- "octoprint", "moonraker", "bambu", "creality", "elegoo", "prusalink", "duet", or "usb". "serial" is accepted as a legacy alias for "usb". host: Base URL or IP address of the printer. For USB printers, this is the port path (e.g. "/dev/ttyUSB0", "COM3"). api_key: The printer's credential: an API key (OctoPrint, Prusa Link, a Moonraker or Creality printer with its login turned on), a Bambu Lab printer's LAN access code, or a Duet's machine password. For OctoPrint it can be left out: Kiln asks OctoPrint for a key and the reply (code ``AWAITING_APPROVAL``) carries ``approve_url``, a page where the person clicks Allow. Give them that link, then call again with the same arguments; the request stays open for ten minutes. serial: A Bambu Lab printer's serial number (``discover_printers`` reads it off the network), or an Elegoo printer's mainboard id

輸入參數host必填name必填serialapi_keypersistbaudratekeep_nameverify_sslprinter_makeprinter_type必填printer_modelcamera_stream_url另有 2 個

set_printer_model

Set a printer's model

Tell Kiln which printer model a saved printer is -- by name, or from a slicer file. Kiln checks every print against the bed it will land on and the temperatures the machine can take, and slices with the model's own profile. All three are read from the printer's model. With no model set, those checks are SKIPPED. Use this as soon as ``kiln_health`` or a log says the model is not configured. Two ways to say it -- give exactly one: * ``printer_model``: any name the catalogue recognises (``"Bambu Lab A1"``, ``"bambu_a1"``, ``"MK4"``, ``"K1 Max"``). * ``slicer_file``: a project the user saved from Bambu Studio, OrcaSlicer or PrusaSlicer (File > Save Project), or a printer settings file exported from one. It already names the printer it was set up for. Ask a new user for one instead of asking them to look up a model key. A printer that is NOT in Kiln's catalogue is recorded as the person names it, with its make (``printer_make="Prusa"``, ``printer_model="Core One L"`` is saved as ``prusa_core_one_l``) and held to Kiln's generic limits; never substitute a near catalogue model the person did not name. A slicer file sets such a printer up more fully: it states the bed, so Kiln also lays slices out on it and measures designs against it. Either way Kiln has no tuned profile for it and will not move its head. A model outside the catalogue with no make (none given, and none implied by the connection) is refused (``UNKNOWN_MODEL``, with the closest matches); ask who makes it. Such a printer's bed is recorded here too, and its first print waits for it (``PRINTER_BED_UNKNOWN``): look up the bed size its maker publishes (spec page or manual), show the person the size and the page, and when they say it is right pass ``bed_mm``, ``bed_source`` and ``bed_confirmed=True``. Never guess the size and never ask the person to know it. A catalogue printe

輸入參數bed_mmreplacebed_sourceslicer_fileprinter_makeprinter_namebed_confirmedprinter_model

recent_events

Recent events

Get recent events from the Kiln event bus. Args: limit: Maximum number of events to return (default 20, max 100). type: Filter by event type prefix (e.g. ``"print"`` matches ``print.started``, ``print.completed``; ``"job"`` matches ``job.submitted``, ``job.completed``). Omit for all events. Returns events covering job lifecycle, printer state changes, safety warnings, and more.

輸入參數typelimit

license_status

License status

Get the current plan and whether this machine's sign-in still holds it. Returns the active tier (free/pro/business/enterprise), whether it is valid, its expiration date, and how it was resolved (``oauth`` for a Kiln account sign-in, ``default`` for none). No authentication required. When the tier comes from a sign-in session (``source`` is ``"oauth"``), the answer also carries ``session_state``. If that session has lapsed, ``is_valid`` is ``false`` and ``action_required`` says how to fix it — surface that line to the user verbatim, because every hosted call will fail until they do.

無需輸入參數。

activate_license

License keys (retired)

Retired: license keys no longer unlock Kiln. Sign in instead. Kiln stopped taking license keys on 2026-11-01; a plan reaches a machine only through the Kiln account it is signed in to. This tool saves nothing and reads nothing it is sent: it answers with the sign-in steps, so an agent or an old script that still calls it learns the way in. Show the user ``error`` as written, then sign them in (``kiln_signin``). Args: key: Ignored. Kept so an older call still gets this answer.

輸入參數key必填

restart_server

Restart the Kiln server

Restart the Kiln MCP server process. Replaces the current process with a fresh instance using ``os.execve``. The exec keeps the stdio pipe, so the MCP client sees no disconnect and repeats no ``initialize`` handshake; the fresh process takes up the handshake this connection already made, so the client's next call simply works. The client keeps the tool list it cached when it connected: tools the new code adds reach it when it reconnects. The result's ``keeps_connection`` says whether the handshake was handed on. WHAT A RESTART REFRESHES depends on how this server was launched, and the result says which happened. A launcher script that exported ``KILN_SERVE_WRAPPER`` is re-entered whole, so whatever that script does before serving — syncing code, healing installs — runs again. Without it the restart re-execs ``python -m kiln serve`` in place: a fresh process over however this interpreter resolves ``kiln``, which picks up edits to those files but runs no launcher logic. (Measured 2026-08-19: an operator launcher synced two runtime clones on every start, and a restart through this tool silently skipped the sync — the served code was two revisions stale while the restart reported success.) Use after installing or updating kiln-pro plugins, changing environment variables, or modifying server code — avoids the need to fully restart the MCP client application. :param clean_env: When ``True`` (default), strips ``KILN_PRINTER_*`` environment variables from the child process if ``~/.kiln/config.yaml`` has a printer configured. This defeats the "ghost env" footgun where a stale ``KILN_PRINTER_API_KEY`` inherited from a past shell session silently shadows config.yaml edits for the lifetime of the MCP parent process. Without this, every edit to config.yaml looks like it does nothing and the printer rejects MQTT auth with

輸入參數clean_env

get_autonomy_level

Get autonomy level

Return the current autonomy tier and constraints. Shows the autonomy level (0 = confirm all, 1 = pre-screened, 2 = full trust) and any Level 1 constraints that are configured. Call this early in a session to understand how much freedom you have.

無需輸入參數。

set_autonomy_level

Set autonomy level

Set the autonomy tier (0, 1, or 2). Level 0 (Confirm All): Every confirm-level tool requires approval. Level 1 (Pre-screened): Confirm-level tools allowed if constraints pass. Level 2 (Full Trust): All tools allowed except emergency-level. Changing this updates the config file. Requires human confirmation because it affects how much control the agent has. :param level: The tier to set: ``0`` confirm all, ``1`` pre-screened, ``2`` full trust.

輸入參數level必填

check_autonomy

Check autonomy

Check whether the agent may execute a tool without human confirmation. Pass the tool name, its safety level, and optional operation context (material, time, temperatures) to get a decision. Use this before calling confirm-level tools to decide whether to proceed or ask. :param tool_name: The tool the agent wants to call, by name. :param safety_level: That tool's safety level: ``"safe"``, ``"guarded"``, ``"confirm"`` or ``"emergency"``. :param material: Material the operation would print in, when it prints. :param estimated_time_seconds: How long the operation would run, in seconds; ``0`` when unknown. :param tool_temp: Hotend temperature the operation would set, in °C; ``0`` when it sets none. :param bed_temp: Bed temperature the operation would set, in °C; ``0`` when it sets none.

輸入參數bed_tempmaterialtool_name必填tool_tempsafety_level必填estimated_time_seconds

marketplace_info

Marketplace info

Show which 3D model marketplaces are connected and available. Returns the list of connected marketplace sources and their capabilities (search, download support, etc.). Configure marketplaces via environment variables. **See also:** ``marketplace_status`` for per-credential diagnostics, or ``marketplace_diagnostics`` for live connectivity probes. **Safety note:** Community-uploaded models are unverified. Always review model dimensions and preview prints before starting. Proven, popular models with high download counts are safer choices than untested uploads.

無需輸入參數。

download_and_upload

Download and send to printer

Download model file(s) from any marketplace and upload to a printer. **Community models are unverified.** This tool downloads and uploads but does NOT start printing automatically. You must call ``start_print`` separately after reviewing the uploaded file. 3D printers are delicate hardware — misconfigured or malformed models can cause physical damage. When ``file_id`` is provided, downloads and uploads that single file. When ``model_id`` is provided without ``file_id``, downloads and uploads all printable files (.stl, .gcode, .3mf, .glb) for the model. A GLB goes to the printer as an STL beside it, never as a GLB; the upload's ``conversion`` names the original, which stays on disk. Args: file_id: File ID (from ``model_files`` results). For Thingiverse this is a numeric ID; for MyMiniFactory it's the file ID string. If omitted and ``model_id`` is given, all printable files are downloaded and uploaded. source: Which marketplace to download from — "thingiverse" (default) or "myminifactory". Cults3D does not support direct downloads. printer_name: Target printer name. Omit to use the default printer. model_id: Model/thing ID. When ``file_id`` is omitted, all printable files for this model are downloaded and uploaded. After uploading, review the model and call ``start_print`` to begin.

輸入參數sourcefile_idmodel_idprinter_name

rotate_model

Rotate model

Rotate a 3D model file (STL or 3MF) by specified angles before slicing. Useful for improving print quality — rotating a tall narrow part 45° around the Z axis can reduce toolhead-induced wobble and ringing artifacts. Args: input_path: Path to the STL or 3MF file to rotate. rotation_z: Rotation around Z axis in degrees (most common — rotates on the build plate). rotation_x: Rotation around X axis in degrees. rotation_y: Rotation around Y axis in degrees. output_path: Where to save the rotated file. Defaults to ``<input>_rotated.<ext>``. Returns dict with ``output_path`` (path to rotated file) and ``rotations_applied``. Pair with ``reslice_with_overrides`` to re-slice the rotated model with adjusted settings (e.g., stronger brim after rotation). INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience.

輸入參數input_path必填rotation_xrotation_yrotation_zoutput_path

check_orientation

Check orientation

Check if a model's orientation is stable for printing. Analyzes the height-to-base ratio and warns if the model is likely to wobble or fail mid-print. Suggests reorientation if needed. :param model_path: Path to the STL or OBJ model file. :returns: Dict with stability assessment.

輸入參數model_path必填

printer_snapshot

Printer camera snapshot

Capture a webcam snapshot from the printer. Handles TLS+JPEG camera protocol (Bambu A1/P1), MJPEG stream capture (OctoPrint/Moonraker), and RTSPS (Bambu X1) automatically. A camera the user registered for the printer (``register_printer`` with ``camera_snapshot_url`` / ``camera_stream_url``) is used instead of the printer's own; ``camera_source`` in the reply says which one answered. :param printer_name: Target printer name. Omit for the default printer. :param save_path: Optional path to save the image file. If omitted, the image is returned as a base64-encoded string.

輸入參數save_pathprinter_name

list_materials

List materials

List built-in filament material profiles (density, cost, temps). Returns Kiln's bundled material database — NOT what is physically loaded. For loaded material, use ``get_material`` (software tracker) or ``get_active_material`` (live AMS hardware query).

無需輸入參數。

set_material

Set loaded material

Record which filament material is loaded in a printer. This writes down a CLAIM, not a measurement: nothing verifies the spool, and the record keeps saying the same thing after a filament swap. Kiln stamps it ``determined_by: user_reported`` and every reader says so, so never report the recorded material back as confirmed or sensed. Args: printer_name: Target printer name. material: Material type (PLA, PETG, ABS, etc.). color: Optional filament color. spool_id: Optional ID of a tracked spool (see ``list_spools``). Linking one is what lets Kiln count that spool down as this printer prints from it. tool_index: Extruder index for multi-tool printers (default 0). On a printer with a multi-material unit, the tray's id as ``ams_status`` reports it.

輸入參數colormaterial必填spool_idtool_indexprinter_name必填

get_material

Get loaded material

Get material loaded in a printer (from Kiln's software tracker). Returns what the user/agent told Kiln is loaded via ``set_material``. For live AMS hardware reading (Bambu Lab), use ``get_active_material``. Args: printer_name: Target printer. Omit for the default printer.

輸入參數printer_name

check_material_match

Check material match

Check whether the material Kiln has on record matches what a print expects. Answers about Kiln's material RECORD, which normally holds what a person or agent typed via ``set_material`` — not a sensor reading. Three answers, and the third one matters: ``match: true`` (the record agrees), ``match: false`` (it disagrees — worth stopping for), and ``match: null`` (nothing is recorded for this printer, so this is neither a match nor a mismatch and the spool needs an eye on it). ``sensed`` says whether a machine reported the material; when it is false, the material is on record, not confirmed, and the answer should say so. Args: expected_material: The material the print file requires. printer_name: Target printer. Omit to resolve the active printer.

輸入參數printer_nameexpected_material必填

list_spools

List spools

List all tracked filament spools in inventory. ``remaining_grams`` is what Kiln believes is left on each spool, and ``remaining_determined_by`` says who set it: ``inferred`` is Kiln's own count (what the spool held, less what the prints Kiln started were sliced to use), ``observed`` is the printer's reading of a spool it can measure, ``user_reported`` is what the person said. A count misses prints started outside Kiln, so report a counted figure as Kiln's count, never as a measurement. When the person says the figure is wrong, correct it with ``add_spool(spool_id=..., remaining_grams=...)``; when they say a spool is used up, ``remove_spool``.

無需輸入參數。

add_spool

Add or correct a spool

Add a filament spool to inventory, or correct how much is left on one. To ADD a spool, give its ``material``. ``remaining_grams`` is what is left on a spool that is not new; left out, the spool is full. To CORRECT a spool already on record, pass its ``spool_id`` (from ``list_spools``) with ``remaining_grams``: the person says they have more left than Kiln shows, or less. Only the amount changes. Kiln counts a spool down as the prints it starts use it, and a count drifts, so the person's word wins. ``remaining_grams=0`` records the spool as used up and keeps it on the list; ``remove_spool`` takes it off. Args: material: Material type (PLA, PETG, ABS, etc.). Required to add. color: Filament color. brand: Manufacturer brand. weight_grams: Total spool weight in grams (default 1000). cost_usd: Cost of the spool in USD. remaining_grams: Grams left on the spool. spool_id: A spool already on record whose remaining amount to set.

輸入參數brandcolorcost_usdmaterialspool_idweight_gramsremaining_grams

remove_spool

Remove a spool

Remove a filament spool from inventory. When the person says a spool is used up, finished or gone, remove it here (``list_spools`` gives its id) so Kiln stops treating it as filament they have. If they have more or less left than Kiln shows, correct the figure with ``add_spool(spool_id=..., remaining_grams=...)`` instead. A used-up spool is not a reason to suggest buying filament: say nothing about that unless the person asks. Args: spool_id: The spool's unique identifier.

輸入參數spool_id必填

bed_level_status

Bed level status

Check bed leveling status and whether leveling is needed. Args: printer_name: Target printer. Omit for the default printer.

輸入參數printer_name

trigger_bed_level

Level the bed

Trigger a bed leveling / mesh probe on the printer. Sends the configured G-code command (G29 or BED_MESH_CALIBRATE) to the printer. Args: printer_name: Target printer. Omit for the default printer.

輸入參數printer_name

set_leveling_policy

Set leveling policy

Configure automatic bed leveling policy for a printer. Args: enabled: Enable/disable auto-leveling checks. max_prints: Trigger leveling after this many prints. max_hours: Trigger leveling after this many hours. gcode_command: G-code command to send (G29 or BED_MESH_CALIBRATE). printer_name: Target printer. Omit for the default printer.

輸入參數enabledmax_hoursmax_printsprinter_namegcode_command

webcam_stream

Control the live video relay

Control the local live-video relay for the print monitor. ONE connection to the printer's camera, re-served as an MJPEG stream on this machine so every viewer shares it. Reads an HTTP MJPEG webcam (OctoPrint, Moonraker, a camera you registered) or a Bambu A1 / P1 camera's own port-6000 feed. The reply's ``capability`` says whether this printer can be relayed and, when not, why — an X1 / P2S / H2 camera streams RTSPS, which the relay does not carry (snapshots still work). ``stream`` carries the frame's age and the measured frame rate: ``live`` is false when the picture may be frozen. Local-only: the relay reads the camera over your LAN and serves on loopback, so on the hosted server it says so instead of starting. Snapshots (``printer_snapshot``, ``monitor_print``) are unchanged. A refused start on a printer type that has a camera check carries ``check_available: true``; ``action="check"`` then looks at what that printer's likely camera addresses actually serve. Args: printer_name: Target printer. Omit for the default printer. action: One of ``"start"``, ``"stop"``, ``"status"``, or ``"check"``. ``"check"`` runs only when asked: it tries each address this printer type's camera is known to answer on, on the printer's own host, with one GET each (a printer that gives out its camera address on request is asked for it first, as a start does), and replies with ``checks`` (what each served — a live stream, a still, a WebRTC page, a web page, an error, or nothing — and where the address comes from), a ``summary`` and a ``next_step``. It registers nothing; when it finds a live stream, ``next_step`` says how to register that address as the printer's camera. Local-only, like ``"start"``. port: Local port for the stream server (default 8081).

輸入參數portactionprinter_name

list_plugins

List plugins

List all discovered plugins and their status.

無需輸入參數。

register_webhook

Register a webhook

Register a webhook endpoint to receive Kiln event notifications. Args: url: The HTTPS URL that will receive POST requests with event payloads. events: Optional list of event types to subscribe to (e.g. ["job.completed", "print.failed"]). If omitted, all events are sent. secret: Optional shared secret for HMAC-SHA256 payload signing. description: Human-readable label for this endpoint. Returns the registered endpoint ID. Use ``list_webhooks`` to see all endpoints and ``delete_webhook`` to remove one.

輸入參數url必填eventssecretdescription

list_webhooks

List webhooks

List all registered webhook endpoints. Returns endpoint details including URL, subscribed events, and delivery statistics.

無需輸入參數。

delete_webhook

Delete a webhook

Delete a registered webhook endpoint. Args: endpoint_id: The endpoint ID returned by ``register_webhook``. Once deleted, the endpoint will no longer receive event notifications.

輸入參數endpoint_id必填

await_print_completion

Wait for the print to finish

Wait for the current print to finish and return the final status. Polls the printer (or a specific queued job) until it reaches a terminal state: completed, failed, cancelled, or the timeout is exceeded. This lets agents fire-and-forget a print and pick up the result later without managing their own polling loop. A host that runs tools in the background (the MCP tasks extension) gets a task back instead of a blocked call: keep working, and the host says when the wait returns. There one call can wait as long as the plan needs, up to the whole print. Closing that app ends the wait, never the print. Args: job_id: Optional job ID from ``submit_job()``. When provided, tracks that specific job through the queue/scheduler. When omitted, monitors the printer directly for idle/error state. timeout: Maximum seconds to wait (default 7200 = 2 hours). poll_interval: Seconds between status checks (default 15). brief_id: Optional saved-goal id from ``design_session``. When the brief resolves, the terminal-outcome response gains a ``design_goal`` block with the design's duty / environment / safety notes — so the agent surfacing the print result can answer "did this match the goal?" without a separate lookup. Best-effort: missing kiln-pro silently skips. Returns a dict with ``outcome`` (completed / failed / cancelled / timeout), final printer state, elapsed time, completion percentage history, and (when ``brief_id`` resolves) a ``design_goal`` block. A print carrying a hardware plan (pauses written in for nuts, magnets or bearings) also returns early with ``outcome: "hardware_stop"`` and a ``hardware`` block: when a stop is a few minutes away, when the printer has stopped for the parts, and when it went past a stop without stopping. Tell the person what the block says, then wait again.

輸入參數job_idtimeoutbrief_idpoll_interval

compare_print_options

Compare print options

Compare local printing cost vs. outsourced manufacturing. Runs a local cost estimate and (if Craftcloud is configured) fetches a fulfillment quote, then returns a side-by-side comparison to help agents recommend the best option. Args: file_path: Path to the G-code file (for local) or model file (STL/3MF for fulfillment). If a G-code file is provided, only local estimate is returned. material: Filament material for the local estimate (PLA, PETG, …). Leave empty to use what the file was sliced for, PLA when it names nothing. When Kiln's servers answer, the local estimate also carries a ``cost_intelligence`` field; what it holds depends on the tier. fulfillment_material_id: Material ID from ``fulfillment_materials`` for the outsourced quote. If omitted, the fulfillment quote is skipped. quantity: Number of copies for fulfillment (default 1). electricity_rate: Cost per kWh in USD (default 0.12). printer_wattage: Printer power consumption in watts (default 200). shipping_country: ISO country code for fulfillment shipping. printer_id: Optional registered printer the local print is for; passed on with the file when kiln-pro is asked.

輸入參數materialquantityfile_path必填printer_idprinter_wattageelectricity_rateshipping_countryfulfillment_material_id

analyze_print_failure

Analyze a failed print

Analyze a failed print job and suggest possible causes and fixes. Examines the job record, related events (retries, errors, progress), and printer state at the time of failure to produce a diagnosis. Args: job_id: The failed job's ID from ``job_history`` or ``job_status``. Returns a structured analysis with likely causes, observed symptoms, and recommended next steps.

輸入參數job_id必填

visualize_model

Picture a model

Still pictures of any 3D file from multiple camera angles — the still door, not the 3D stage. FOR THE PERSON'S LOOK BEFORE A PRINT, OPEN THE STAGE: ``show_on_stage(file_path)`` puts a file that already exists — a mesh, or the sliced print file — on Kiln's interactive 3D stage, which the print gate asks for first (``issue_preview_token(door="stage")``). These renders are for checking a model yourself. When the user is signed in the result also carries a browser stage link (``viewer_url``), the door for a host that draws no panel. INSPECTION-ONLY UNLESS THE STAGE DREW IT: the result's ``renderer`` says which look these pixels are. ``stage`` (the stage photographed) and ``stage_paint`` (the stage's look painted) are accepted by ``issue_preview_token(door="png")`` for print sign-off; a raw ``openscad`` render is not — it has no plate and none of the stage's lighting, and a person once approved the wrong colours from one. Use it to inspect, and sign off from the stage, the viewer link, or a stage still. Universal visualization tool that works with ANY 3D file — STL, 3MF, OBJ, or SCAD. Returns PNG images from 6 angles: isometric, front, right, top, bottom, and back. **Colored 3MF support:** Multicolor 3MF files (with per-face color groups from BambuStudio, PrusaSlicer, or procedural textures) are automatically rendered with per-face colors — no slicer needed to see what the multicolor print will look like. Colorless 3MF and STL/OBJ files render in uniform color via OpenSCAD as before. Dark models get an adaptive lighter background for visibility. Each view includes a ``quality_score`` and ``dark_material`` flag. Use this to check a model from all sides — after each change, and before printing. **When to use this vs other preview tools:** - ``show_on_stage`` — the interactive 3D stage on an existing file; what the person turns over before a print - ``visualize_model`` — still renders of any file,

輸入參數colorwidthanglesheightfile_path必填

compare_renders

Compare renders

Render 2-4 models side by side in a single comparison image. General-purpose visual diff tool — compare any 3D models at the same camera angle in one image. Each model is rendered individually then stitched together with labels. **Use cases:** - Texture or decoration variants (compare 3 pattern options) - Design iterations (before vs after) - Material color comparisons - Parameter sweeps (small / medium / large) Returns a single PNG image path that can be displayed inline. Supports 2-4 models per comparison. When 4 models are provided they are arranged in a 2x2 grid; otherwise a single row. Args: paths: 2-4 file paths (STL, 3MF, OBJ, or SCAD). labels: Custom labels for each model. Defaults to A, B, C, D. angle: Camera angle for all renders. One of ``isometric``, ``front``, ``right``, ``top``, ``bottom``, ``back``. width: Per-model image width in pixels (default 800). height: Per-model image height in pixels (default 600). colors: Optional hex color per model (e.g. ``["#F72323", "#2323F7"]``).

輸入參數anglepaths必填widthcolorsheightlabels

get_feedback_loop_status

Feedback loop status

Get the feedback loop history for a generated model. Returns iteration data, whether the design was resolved, and which iteration produced the best result. Args: model_id: Model/job ID from a generation job.

輸入參數model_id必填

list_design_templates

List design templates

List every parametric part Kiln can build, with full parameters. These are ready-made, print-verified FUNCTIONAL PARTS — brackets, bins, stands, cases, hooks, jigs, clamps, plumbing and garden parts — that render locally through OpenSCAD. They are FREE and need no AI provider or API key. Whenever a user wants a functional part to their own dimensions, check here before writing OpenSCAD from scratch. Each template includes: - Every parameter with its default, unit, and description - Pre-validated OpenSCAD (prints without supports) - Category and a one-line description of the job it does Prefer ``find_design_templates(use_case)`` when you know what the user is making — it searches this library by use case and ranks matches, instead of returning all of them. Then call ``generate_from_template(template_id, {...})`` to render a printable STL.

無需輸入參數。

generate_from_template

Generate from template

Build a printable STL from a parametric part, to the user's dimensions. This is how Kiln makes a FUNCTIONAL PART without writing any OpenSCAD: pick a template, pass the dimensions the user gave you, and get a print-ready STL. It runs LOCALLY through OpenSCAD — free, no AI provider, no API key, and every template in the library is print-verified at its default, minimum, and maximum parameters. Reach for this the moment a user describes a functional part they need in specific sizes ("a bracket for a 200 mm shelf", "a bin that fits my 80 mm drawer", "a clip for an 8 mm cable"). Find the template with ``find_design_templates(use_case)``, read its parameters with ``get_design_template_info(id)`` or ``list_design_templates()``, then call this. Only PARAMETRIC PARTS work here. The design PATTERNS returned by ``find_design_templates`` with ``generatable: false`` (snap fits, living hinges, press fits) are guidance for OpenSCAD you write yourself — this tool rejects them. For AI-assisted parameter inference plus structural analysis, use ``smart_generate_from_template``. When the kiln-pro package is installed (Pro+ tier), the result MAY carry an ``intent`` block describing the geometric assertions the template parameters implied, and a sidecar ``<mesh>.intent.json`` is written next to the produced STL. Free / public installs see the result unchanged. When you pass a parameter that sizes a hole for real hardware (a screw or bolt hole, a bore, a dowel or pin hole, a magnet pocket), the result carries a ``fastener_advice`` block saying the part was built to your number and nothing sized it for a named fastener. Kiln raises that once per session across every tool that can raise it, so a later build may omit the block even though it qualifies. Read its ``agent_instruction`` before repeating any of it to the user. Args: brief_id: The saved goal's

輸入參數brief_idparameterstemplate_id必填

list_plate_objects

List plate objects

List named objects on the build plate of a Bambu .gcode.3mf file. Parses the plate metadata embedded in .gcode.3mf files exported by Bambu Studio or OrcaSlicer. Returns every object that was on the plate when the file was sliced, with its name, bounding box, area, and layer height. Works even when the 3MF contains NO mesh geometry (common for .gcode.3mf exports). Bambu Studio supports multiple plates (plate_1, plate_2, etc.). Use ``plate_number`` to select which plate to inspect. The response includes a ``plates_available`` field listing all plate numbers found in the archive. Use this to discover which parts are in a multi-object file before calling ``extract_plate_object`` to isolate one — or, if a part fails mid-print, to get its ``label_id`` for ``skip_print_objects`` so you can abandon just that object and save the rest of the plate. :param file_path: Path to the .3mf or .gcode.3mf file. :param plate_number: Which plate to inspect (1-based, default 1). :returns: Dict with ``objects`` list (each with a ``label_id`` that ``skip_print_objects`` consumes), plate metadata (bed type, filament colours, nozzle diameter, sequential print flag), and ``plates_available``.

輸入參數file_path必填plate_number

extract_plate_object

Extract a plate object

Extract a single object's G-code from a multi-object Bambu .gcode.3mf. When a .gcode.3mf contains multiple objects (e.g. a lid and a body), this tool extracts ONLY the G-code for the requested object, producing a standalone .gcode file that can be printed directly. The machine start-up (homing, levelling, heating) and end (cool-down, park) sequences are preserved. Only the per-layer toolpath sections for other objects are removed. Bambu Studio supports multiple plates (plate_1, plate_2, etc.). Use ``plate_number`` to select which plate to extract from. Object matching is case-insensitive and supports partial names: ``"cap"`` will match ``"TreatHolder - cap.stl"``. Use ``list_plate_objects`` first to see available object names. :param file_path: Path to the .gcode.3mf file. :param object_name: Name (or partial name) of the object to extract. :param output_dir: Directory for the output .gcode file. Defaults to the same directory as the input file. :param plate_number: Which plate to extract from (1-based, default 1). :returns: Dict with output path, matched object info, and line counts.

輸入參數file_path必填output_dirobject_name必填plate_number

print_plate_object

Print one plate object

Extract a single object from a multi-object .gcode.3mf and print it. This is a compound workflow tool that performs the complete pipeline in one call: 1. **Extract** the requested object's G-code (``extract_plate_object``) 2. **Upload** the extracted G-code to the printer (``upload_file``) 3. **Preflight + Start** the print (``start_print``, which runs its own preflight safety check) Bambu Studio supports multiple plates (plate_1, plate_2, etc.). Use ``plate_number`` to select which plate to extract and print from. Object matching is case-insensitive and supports partial names: ``"cap"`` matches ``"TreatHolder - cap.stl"``. Use ``list_plate_objects`` first if you want to preview what's available before committing to a print. :param file_path: Path to the .gcode.3mf file. :param object_name: Name (or partial name) of the object to print. :param use_ams: AMS mode — ``"auto"``, ``"true"``, or ``"false"``. :param ams_mapping: The tray per extruder by the printer's tray id (e.g. ``[0]`` for slot A1, ``[5]`` for B2; see ``ams_status``). :param bed_leveling: Run bed leveling before print. :param flow_cali: Run flow calibration before print. :param vibration_cali: Run vibration calibration before print. :param bed_type: Bed surface type (Bambu only): ``"auto"``, ``"textured_plate"``, ``"hot_plate"`` (smooth PEI), ``"cool_plate"``, ``"eng_plate"`` or ``"supertack_plate"``. :param plate_number: Which plate to extract from (1-based, default 1). :param printer_name: Which printer to print on. Omit for the default printer. Both steps are aimed at it, so the object is uploaded to and started on the same machine. :returns: Dict with extraction info and print start status. :param preview_token: Token from ``issue_preview_token`` proving the object was shown to the person before printing. Required beside their go-ahead: a

輸入參數use_amsbed_typefile_path必填flow_caliams_mappingobject_name必填bed_levelingplate_numberprinter_namepreview_tokenvibration_cali

resolve_model_source

Find a model's source

Identify where a model file came from. A file Kiln downloaded from a marketplace or a generator answers from the note Kiln left beside it, in any format (``came_from`` says it in a sentence). Otherwise a .3mf or .gcode.3mf answers from its embedded metadata: MakerWorld metadata and generic 3MF metadata (Title, Designer, Application, License, etc.). Returns the model title, designer, model URL (if available), slicer application name, and a list of objects on the plate. Use this when you need to trace a file back to its source — for example, to find the original STL files on MakerWorld when the .gcode.3mf only contains pre-sliced G-code without mesh geometry. :param file_path: Path to the .3mf or .gcode.3mf file. :returns: Dict with source marketplace, model URL, designer info, and plate object names.

輸入參數file_path必填

validate_openscad_code

Validate OpenSCAD code

Validate OpenSCAD code without generating geometry. Compiles the code and returns structured error/warning information with line numbers. Use this to check code before calling generate_model with OpenSCAD. :param scad_code: OpenSCAD source code to validate — the same parameter name ``compile_scad`` / ``analyze_scad_code`` / ``tweak_and_compile_scad`` take, so a session that has been compiling can validate without learning a second spelling. :param code: Alias of ``scad_code`` kept for callers that learned it. :returns: Dict with ``valid``, ``errors``, and ``warnings``.

輸入參數codescad_code

predict_print_failure

Predict print failure

Predict common 3D printing failure modes from mesh geometry. Analyzes the mesh for thin walls, long unsupported bridges, severe overhangs, top-heavy geometry, small features, and non-manifold issues. Returns a risk score (0-100) and per-failure details with fix suggestions. The thin-wall floor follows the nozzle: two lines of it, so 0.8 mm for a 0.4 mm nozzle and 1.2 mm for a 0.6. The answer says which nozzle it was judged for and where that size came from. :param file_path: Path to mesh file (.stl, .obj, .glb, or .3mf). :param min_wall_mm: Minimum printable wall thickness. Leave it out to use two lines of the nozzle. :param max_bridge_mm: Maximum unsupported bridge length (default 15). :param max_overhang_deg: Maximum overhang angle before failure (default 55). :param printer_id: The printer the part is for. Left out, the only printer Kiln knows of stands in. :param nozzle_mm: The nozzle fitted, when you know it. Left out, the nozzle on record for the printer, then the printer's own setting, then its stock size. :returns: Dict with verdict, risk score, failure list, the wall floor used and the nozzle it was judged for.

輸入參數file_path必填nozzle_mmprinter_idmin_wall_mmmax_bridge_mmmax_overhang_deg

search_design_templates

Search design templates

Search the template library by natural-language description. Fuzzy keyword matching against template IDs, descriptions, categories, and tags. Returns scored matches ranked by relevance. :param query: Natural-language search string (e.g. "phone stand", "hook"). :param max_results: Maximum number of results (default 10). :param category_filter: Optional category to limit results (e.g. "hardware"). :returns: Dict with matches list, each containing template_id, score, description, and category.

輸入參數query必填max_resultscategory_filter

design_to_gcode_pipeline

Design to G-code

End-to-end pipeline: description → template → STL → analysis → GCode. One-call pipeline that: 1. Searches templates for best match 2. Generates STL via OpenSCAD 3. Runs structural risk analysis 4. Estimates weight 5. Slices to G-code (if slicer available) :param brief_id: The saved goal's id from ``design_session``, so this make is recorded against the goal and checked against it. Empty when there is no goal. :param description: Natural-language design description. :param output_dir: Directory for output files (uses tempdir if empty). :param material: Material the slice is set for -- temperatures, melt rate and cooling -- and weighed as. :param printer_model: Printer model for slicer profile lookup. :param infill_percent: Infill percentage for weight estimation. :returns: Dict with paths to SCAD, STL, G-code files, weight, risks. :param placement: Where the part goes when the plate still holds the last print: ``[x, y]`` in mm, a named region (``"front-left"``, ``"centre"``, …) or ``"keep"``. Omitted, an occupied plate refuses at the slice step and lists the spots that would work. INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience. MAKE DOORS: `design_session`, Kiln's front door for making an object, is not installed here (signed in to Kiln it runs on Kiln's servers). On this install `compile_scad` IS the make → preview → iterate loop: make it, show the preview, iterate.

輸入參數brief_idmaterialplacementoutput_dirdescription必填printer_modelinfill_percent

merge_stl

Merge STL files

Merge multiple STL files into a single mesh (supports positional offsets). Use this when you need to position parts relative to each other. For simple concatenation without positioning, ``merge_mesh_files`` also works. Combines triangle data from multiple STL files into one output file. Optionally translates each part to a specified position before merging. :param file_paths: JSON array of STL file paths. :param output_path: Where to write the merged STL. :param positions: Optional JSON array of {"x", "y", "z"} offsets per file. :returns: Dict with output_path, total_triangles, bounding_box. INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience.

輸入參數positionsfile_paths必填output_path必填

compose_multicolor_3mf

Compose multicolor 3MF

Compose a multi-color / multi-material .3mf from multiple STL files. Creates a **single .3mf, ready to slice**, containing all parts with per-part AMS/extruder slot assignments. This is the correct way to hand a multi-color design to a slicer — it receives one file, not multiple. It is a model, not a sliced plate, so no printer starts it as it stands: slice it first. ``fits_bed`` says whether the plate fits the bed it was composed for; when it does not, the message says by how much and what to do, and does not offer it for printing. Parts whose bodies touch or overlap are one print: they become ONE object with a part per input, and where two overlap the smaller part is printed. Parts placed apart stay separate objects. Compatible with: * **BambuStudio / OrcaSlicer / Bambu A1, X1, P1 + AMS** — read ``Metadata/model_settings.config`` * **PrusaSlicer / MMU** — reads ``Metadata/Slic3r_PE_model.config`` * **Cura** and any 3MF-capable slicer Typical two-color workflow:: # 1. Export body STL (main color, e.g. grey PLA) # 2. Export accent STL (second color, same coordinate origin) # 3. Compose: result = compose_multicolor_3mf(parts=[ {"stl_path": "/tmp/body.stl", "extruder": 1, "name": "body", "color": "#AAAAAA", "material": "PLA Grey"}, {"stl_path": "/tmp/qr_pads.stl", "extruder": 2, "name": "qr_code", "color": "#111111", "material": "PLA Black"}, ]) # 4. Slice and print (or slice_model to look at the slice first): slice_and_print(result["output_path"]) Args: parts: List of part dicts. Each dict requires: * ``stl_path`` (str) — absolute path to the STL for this part * ``extruder`` (int) — 1-indexed AMS slot (1 = AMS tray 1 on Bambu); omitted, 1 Optional per-part keys: * ``name`` (str) — label shown in the slicer object

輸入參數parts必填materialprinter_idoutput_pathplate_depthplate_width

print_history

Print history

Get recent print history with success/failure tracking. Args: printer_name: Filter by printer name, or all printers if omitted. status: Filter by status (``"completed"`` or ``"failed"``). limit: Maximum records to return (default 20). The response declares its own SCOPE. These are the prints THIS machine recorded — another computer running Kiln keeps its own history — and ``scope.local.total_records`` gives the store's full matching count when ``limit`` truncated the page.

輸入參數limitstatusprinter_name

printer_stats

Printer statistics

Get aggregate statistics for a printer: total prints, success rate, average duration. Args: printer_name: Name of the printer to get stats for.

輸入參數printer_name必填

annotate_print

Annotate a print

Add notes to a completed print record (e.g., quality observations, issues). Args: job_id: The job ID of the print to annotate. notes: The annotation text to attach.

輸入參數notes必填job_id必填

export_safety_profile

Export a safety profile

Export a safety profile as a shareable JSON object. Returns the full safety limits for a printer model in a format suitable for sharing with other users. Looks up community profiles first, then falls back to bundled profiles. Args: printer_model: Printer model identifier (e.g. ``"ender3"``, ``"bambu_x1c"``).

輸入參數printer_model必填

get_material_recommendation

Get material slicer settings

Get printer-specific slicer settings for a material you have already chosen. Use AFTER selecting a material — returns hotend/bed temps, fan speed, and tips tuned to a specific printer model. For help choosing which material to use, see ``recommend_material`` or ``recommend_design_material``. Args: printer_id: Printer model identifier. material: Material name (e.g. ``"PLA"``, ``"PETG"``, ``"ABS"``, ``"TPU"``).

輸入參數material必填printer_id必填

troubleshoot_printer

Troubleshoot printer

Diagnose a printer issue by searching the known failure modes database. Describe the symptom (e.g. ``"under-extrusion"``, ``"layer shifting"``, ``"stringing"``) and get possible causes and fixes specific to your printer model. On Bambu Lab printers you can also pass ``hms_code`` — the HMS error code the printer's screen or app shows (e.g. ``"0300_1A00_0002_0001"``, in any separator or case). The response echoes the normalized code and a link to Bambu's HMS wiki page for it. With Kiln Pro the response also carries a decoded cause, fix, and severity for the code. Two things in ``symptom`` are read as exact signals rather than as words, and both narrow the answer sharply, so say them if you know them: * a fault code anywhere in the text (``"1200-8007"``, ``"12008007"``); * which step of a load/unload wizard failed (``"fails at step 5"``). Every code the call names -- in ``hms_code`` or anywhere in ``symptom``, so two codes read off ``printer_status`` fit in one call -- is read through the same reader ``printer_status`` uses and returned under ``fault_readings`` (code, namespace, reading, and the fix when Kiln has one). When the printer's playbook carries none of the codes named, the response says so in ``codes_without_a_playbook`` rather than answering the codes with word matches alone. A step number is the most useful sentence a user can offer about a load failure: the response's ``load_step_reading`` says whether that step is upstream of the melt zone, which rules a nozzle clog in or out before anyone unscrews anything. Args: printer_id: Printer model identifier. symptom: Description of the problem. Optional when ``hms_code`` is given. hms_code: Optional Bambu HMS error code to look up.

輸入參數symptomhms_codeprinter_id必填

run_quick_print

Quick print

Full print pipeline: validate + slice + safety-check + upload + print (recommended one-shot tool). Preferred over ``slice_and_print`` — adds mesh-level pre-print validation, G-code safety validation, and auto-detected bundled slicer profiles. For custom slicer parameter overrides, use ``run_reslice_and_print`` instead. The full quick-print pipeline: 1. Validate mesh (printability, manifold, walls, bridges, bed-fit) 2. Resolve slicer profile (bundled, by printer_id) 3. Slice the (possibly auto-repaired) mesh to G-code 4. Safety-validate the G-code against printer limits 5. Upload G-code to the printer 6. Run preflight checks (always — cannot be skipped) 7. Start printing Args: model_path: Path to input model (STL, 3MF, STEP, OBJ). printer_name: Registered printer name in fleet. printer_id: Printer model ID for auto-profile selection (e.g. ``"ender3"``, ``"bambu_x1c"``, ``"klipper_generic"``). profile_path: Explicit slicer profile. Overrides printer_id auto-selection. material: Filament material (e.g. ``"PLA"``). It sets the slice's temperatures, melt rate and cooling, its density weighs the print (omitted: the spool the printer reports loaded, then PLA — the slice step says which), and AMS auto-routing prefers a loaded tray whose type matches. use_ams: AMS feeding mode (Bambu): ``"auto"`` (default — detect and route to a loaded tray), ``"true"``, or ``"false"``. ams_mapping: Explicit AMS slot mapping as a JSON array string, e.g. ``"[0]"`` or ``"[0, 2]"``. Overrides auto-selection. skip_validation: Bypass the mesh-level pre-print validation step. Defaults to False — designs are pre-tested for printability before they reach the printer. Use True for already-validated inputs or pre-sliced 3MFs the validator can't introspect. pr

輸入參數use_amsmaterialplacementmodel_path必填printer_idams_mappingprinter_nameprofile_pathpreview_tokenskip_validation

run_reslice_and_print

Reslice and print

Reslice with custom slicer overrides + print (use for retries with adjusted settings). Use this when you need to tweak slicer parameters (speed, brim, infill, temps). For standard prints without overrides, use ``run_quick_print`` instead. One-shot pipeline: validate mesh → resolve profile with overrides → slice → safety check → upload to printer → start print. The overrides parameter is a JSON string of PrusaSlicer INI key-value pairs: {"brim_width": "8", "perimeter_speed": "30", "fill_density": "25%"} Common override keys: Adhesion: brim_width (mm), skirts (count) Temperature: temperature, bed_temperature (degrees C) Speed: perimeter_speed, infill_speed, first_layer_speed (mm/s) Structure: fill_density (%), fill_pattern, layer_height (mm) Support: support_material (0/1) Requires PrusaSlicer or OrcaSlicer installed locally. The printer must be idle and connected. Args: model_path: Path to input model (STL, 3MF, STEP, OBJ). printer_name: Registered printer name in fleet. printer_id: Printer model ID for auto-profile selection (e.g. ``"ender3"``, ``"bambu_x1c"``, ``"klipper_generic"``). overrides: JSON string of PrusaSlicer INI key-value pairs to override. profile_path: Explicit slicer profile. Overrides printer_id auto-selection. slicer_path: Explicit path to the slicer binary. material: Filament material (e.g. ``"PLA"``). It sets the slice's temperatures, melt rate and cooling -- a setting you also pass in ``overrides`` stays yours -- and its density weighs the print (omitted: the spool the printer reports loaded, then PLA — the slice step says which). For fully-auto raw-gcode reslices, AMS routing prefers a loaded tray of this material. (3MF plates carry their own filament map, so routing defers to the adapter there.) use_ams: Ena

輸入參數use_amsmaterialoverridesplacementmodel_path必填printer_idams_mappingslicer_pathprinter_nameprofile_pathpreview_tokenskip_validation

multi_copy_print

Print multiple copies

Print multiple copies of a model arranged on one build plate. Automatically arranges copies in a grid with spacing so they don't overlap, slices the plate as a single job, and prints. Uses PrusaSlicer's ``--duplicate`` flag when available (handles placement, collision avoidance, and travel optimization). Falls back to STL mesh duplication for OrcaSlicer or when fine control is needed. Copies that do not all fit the bed are refused, saying so, never sliced short. With ``fill=True`` (an STL, 1 to 50 copies) Kiln places as many copies as fit on the plate as it stands, up to ``copies``, beside anything already there, and never refuses because fewer fit: the result says how many it placed (``copies_placed``). The copies that did not fit are queued on the same printer (``queued_job_id``) and print as the next plate once this one is taken off and the plate is said to be clear, plate after plate until all are done; ``cancel_queued_job`` stops the rest. How many fit is answered on every tier; placing copies beside a part still on the plate is a kiln-pro feature. Requires a slicer (PrusaSlicer or OrcaSlicer) installed locally. The printer must be idle and connected. Args: model_path: Path to input model (STL, OBJ). copies: Number of copies to print (2-20; with ``fill``, at most this many, 1-50). printer_name: Registered printer name in fleet. printer_id: Printer model ID for auto-profile selection. spacing_mm: Gap between copies in mm (default 10). overrides: JSON string of slicer parameter overrides. slicer_path: Explicit path to the slicer binary. fill: Place as many copies as fit on the plate as it stands. preview_token: Token from ``issue_preview_token`` proving this model was shown to the person before printing. Required beside their go-ahead: a print is shown to its owner before it st

輸入參數fillcopies必填overridesmodel_path必填printer_idspacing_mmslicer_pathprinter_namepreview_token

run_calibrate

Run calibration

Full calibration pipeline: home + bed level + printer-specific guidance (recommended). Higher-level than ``calibrate_direct`` — orchestrates the full sequence and returns intelligence-based calibration tips. Performs physical calibration steps (homing, auto bed leveling) and returns printer-specific calibration guidance from the intelligence database. Args: printer_name: Registered printer name. printer_id: Printer model ID for calibration guidance.

輸入參數printer_idprinter_name

run_benchmark

Prepare a benchmark print

Prepare a benchmark print: validate → slice → upload → report stats. Slices a model with the printer's profile and uploads it, then reports printer stats from history. The print is NOT started automatically — benchmarks should be manually observed. Args: model_path: Path to benchmark model (STL). printer_name: Registered printer name. printer_id: Printer model ID for profile selection. profile_path: Explicit slicer profile path. skip_validation: Bypass the pre-print mesh validation step. Defaults to False — user-supplied benchmark meshes are pre-tested for printability. Set to True for known-good fixed reference benchmark models.

輸入參數model_path必填printer_idprinter_nameprofile_pathskip_validation

find_material_substitute

Find material substitute

Find substitute filament materials when your preferred material is unavailable (returns ranked list). Checks a built-in knowledge base of FDM filament compatibility and returns ranked alternatives with trade-off descriptions. For a single best match, use ``get_best_material_substitute`` instead. Args: material: The original filament material (e.g. "PLA", "PETG", "ABS"). reason: Optional filter — only return substitutions matching this reason (unavailable, cost, strength, finish_quality, heat_resistance, lead_time). min_score: Minimum compatibility score threshold (0.0–1.0).

輸入參數reasonmaterial必填min_score

get_best_material_substitute

Best material substitute

Get the single best substitute for a filament material (quick shortcut). Returns one top-ranked alternative. For a full ranked list with trade-off details and filtering, use ``find_material_substitute`` instead. Args: material: The original filament material (e.g. "PLA", "PETG").

輸入參數material必填

get_material_properties

Material properties

Get a material's public safety and printing-property profile. Returns the public thermal, chemical-safety, and process-design floor. Deeper engineering questions are answered one at a time by Kiln's servers. Args: material_id: Material key (e.g. ``"petg"``, ``"tpu"``, ``"cf_pla"``). Case-insensitive.

輸入參數material_id必填

check_printer_material_support

Check printer material support

Check if a printer supports one specific material. Returns compatibility status (``"compatible"`` or ``"needs_upgrade"``), required hardware upgrades (enclosure, hardened nozzle, dry box, etc.), and material-specific notes for the printer. **See also:** ``check_printer_material_compatibility`` for the same check with design-intelligence context and alternative suggestions. Args: printer_id: Printer model identifier (e.g. ``"bambu_a1"``, ``"ender3"``, ``"prusa_mk4"``). material_id: Material to check (e.g. ``"petg"``). Required; an empty value is refused.

輸入參數printer_id必填material_id必填

compare_material_properties

Compare materials

Compare two materials using a fixed public safety/process field set. Use this when deciding between materials for a project (e.g. PLA vs PETG for an outdoor bracket) or when switching materials for a reprint. Deeper engineering trade-offs are answered one question at a time by Kiln's servers. Args: material_a: First material (e.g. ``"pla"``). material_b: Second material (e.g. ``"petg"``).

輸入參數material_a必填material_b必填

build_material_overrides

Material slicer overrides

The slicer settings a material gets on a printer: temperatures, melt rate, cooling. Every slicing door applies these itself when it is told the material -- ``material=`` on ``slice_model``, ``slice_and_print``, ``reslice_with_overrides``, ``run_quick_print``, ``run_reslice_and_print`` and ``kiln slice`` -- so naming the material is all a slice needs. This tool shows what that will be and why, from the same resolver (:mod:`kiln.slicer_material`): a product's own figures when you name one (``"bambu_tpu_95a"``), else Kiln's settings for the material on this printer, else the middle of the material's range, never above what the printer is rated for. The melt-rate ceiling (``filament_max_volumetric_speed``) slows every feature of the print to suit the material, the outer wall and the first layer included. Its ``overrides`` can still be passed to ``reslice_with_overrides`` to pin them; a setting passed that way is the caller's, and a slice leaves it alone. Example:: build_material_overrides("tpu", "bambu_a1") # overrides: temperature 225, bed_temperature 50, max_fan_speed 50, ... Args: material_id: Material (``"petg"``, ``"tpu"``, ``"PA-CF"``) or a product (``"bambu_tpu_95a"``). printer_id: Printer model, for its own settings and limits. Omitted, the material's own.

輸入參數printer_idmaterial_id必填

reprint_with_material

Reprint with another material

Reprint a model with a different material — the slice is set for it. One-shot convenience tool: reslices the model for the new material (its temperatures, melt rate and cooling, from the same resolver every slice uses -- see ``build_material_overrides``), merges any extra overrides you provide, runs a safety check, uploads to the printer, and starts the print. The file is labelled and weighed as the new material. Use this when you want to reprint an existing model in a different material (e.g. PLA → PETG for outdoor durability, or PLA → TPU for flexibility). The tool handles all the slicer parameter changes automatically. Example: "Reprint my grip extension in PETG instead of PLA":: reprint_with_material( file_path="/path/to/grip_extension.stl", material_id="petg", printer_name="my_bambu", printer_id="bambu_a1", use_ams=True, ams_mapping="[1]", # PETG is in slot A2 (tray id 1) ) Requires PrusaSlicer or OrcaSlicer installed locally. Args: file_path: Path to the model file (STL, 3MF, STEP, OBJ). material_id: Target material (e.g. ``"petg"``, ``"tpu"``). printer_name: Registered printer name in fleet. If omitted, uses the default printer. printer_id: Printer model ID for profile selection (e.g. ``"bambu_a1"``, ``"ender3"``). extra_overrides: Optional JSON string of additional slicer overrides to merge on top of the material defaults (e.g. ``'{"fill_density": "30%"}'``). use_ams: Enable AMS filament feeding (Bambu printers). ams_mapping: JSON string of AMS slot indices (e.g. ``"[1]"``). Maps each extruder/filament to an AMS tray position. preview_token: Token from ``issue_preview_token`` proving this model was shown to the person before printing. Required beside their go-ahead: a pr

輸入參數use_amsbrief_idchosen_byfile_path必填printer_idams_mappingmaterial_id必填printer_namepreview_tokenextra_overrides

smart_reprint

Smart reprint

Smart one-shot material-switch reprint — finds the model, detects the right AMS slot, adjusts slicer settings, and prints. This is the highest-level reprinting tool. Give it a file name (or partial name) and a target material, and it handles everything: 1. **Find the model**: Searches print history for the file name, then searches common local directories for the source STL/3MF/STEP file. 2. **Check AMS**: Reads AMS tray status to find which slot has the target material loaded. Auto-selects the matching slot. 3. **Build overrides**: Generates material-specific slicer overrides (temperature, speed, retraction) for the target material. 4. **Reslice + print**: Reslices the model with new settings and starts the print with the correct AMS mapping. Example: "Reprint my grip extension in PETG":: smart_reprint( file_name="grip_extension", material_id="petg", printer_name="my_bambu", printer_id="bambu_a1", ) The tool will find ``grip_extension.stl`` on disk, detect that PETG is loaded in AMS slot 1, adjust temps/speeds for PETG, reslice, and start printing — all in one call. Saved-goal carry-forward: when the source model on disk has a ``<file>.intent.json`` sidecar tagged with a saved goal, that goal's id is auto-recovered and surfaced as ``brief_id`` in the result so downstream ``record_print_outcome`` correctly links the reprint back to the goal. Pass ``brief_id="..."`` explicitly to override the sidecar derivation (rare — useful for one-off re-attributions). Args: file_name: Full or partial file name to search for (e.g. ``"grip_extension"`` or ``"grip_extension.stl"``). Searched in print history first, then in local directories. material_id: Target material (e.g. ``"petg"``, ``"tpu"``). printer_name: Registered printer name in fleet. printer_i

輸入參數auto_amsbrief_idchosen_byfile_name必填printer_idmaterial_id必填search_dirsprinter_nameextra_overrides

multi_material_print

Multi-material print

Print multiple objects in different materials/colors on one build plate. **Only a printer Kiln drives can make this print** — today a Bambu with an AMS. At any other printer (a Klipper MMU Kiln can read but not route, or a single-feed machine) a multi-filament plate is REFUSED before slicing with code ``MULTI_MATERIAL_NOT_DRIVEN``: the objects would all come out in one filament. The refusal carries what Kiln saw on the printer (``multi_material``) and the composed file (``multi_material_3mf``), so the user can slice it in a slicer that drives their unit. A single-filament plate is never refused. Takes a JSON array of objects, each with a model file and material assignment. Builds a multi-material 3MF file with per-object filament assignments, slices it, auto-maps materials to AMS slots, and prints. This is how you print "object A in red PLA, object B in black PETG" in a single print job. Example: Print a bracket in PETG and a cover in PLA:: multi_material_print( objects_json='[ {"file_path": "/path/to/bracket.stl", "material_id": "petg"}, {"file_path": "/path/to/cover.stl", "material_id": "pla"} ]', printer_name="my_bambu", printer_id="bambu_a1", ) Each object in the JSON array supports: - ``file_path`` (required): Path to STL/OBJ/GLB mesh file. - ``material_id`` (required): Material identifier (e.g. ``"petg"``). - ``name`` (optional): Display name for the object. - ``color`` (optional): Hex color override (e.g. ``"#FF0000"``). - ``group`` (optional): Objects sharing a group index are placed coincident (for meshes that share one coordinate space, like a body and its inlay). By default every object is its own group and gets its own spot on the plate. The tool automatically: 1. Looks up each material's properties (temps, col

輸入參數auto_amsprinter_idslicer_pathobjects_json必填printer_namepreview_tokenextra_overrides

merge_multicolor_gcode

Merge multicolor G-code

Merge separately-sliced gcode files into one multi-tool gcode. Uses a batched strategy that minimises tool changes for multi-color prints. Parts with overlapping Z ranges are printed in tool order within the overlap zone, then remaining layers continue above. This is the key step between slicing individual parts and wrapping as a Bambu 3MF. The merged gcode contains T0/T1/... tool change commands that ``wrap_gcode_as_3mf`` converts to M620/M621 AMS load sequences. **Precondition:** Parts must be **XY-disjoint** (non-overlapping footprints on the build plate). The batched merge prints each tool's layers independently in the overlap zone — overlapping XY regions will cause collisions. Args: parts: JSON array of part objects. Each must have: - ``gcode_path``: Path to the sliced ``.gcode`` file. - ``tool_index``: Tool number (0, 1, ...) for AMS mapping. - ``name``: Human-readable name (e.g. ``"body_grey"``). Example:: [ {"gcode_path": "/path/body.gcode", "tool_index": 0, "name": "body"}, {"gcode_path": "/path/qr.gcode", "tool_index": 1, "name": "qr_pads"} ] output_path: Output file path. Defaults to a temp directory. Returns a dict with ``output_path``, merge phases, layer count, and estimated print time.

輸入參數parts必填output_path

multi_color_copies

Print copies in colors

Print multiple copies of the same model, each in a different AMS color. **Only a printer Kiln drives can make this print** — today a Bambu with an AMS. At any other printer the copies are REFUSED before slicing with code ``MULTI_MATERIAL_NOT_DRIVEN`` (every copy would print in one colour; the slot map below is a Bambu instruction). The refusal carries what Kiln saw on the printer (``multi_material``) and the composed plate (``multi_material_3mf``) for slicing elsewhere. Takes a single model file and produces a multi-color print where each copy uses a different AMS filament slot. Perfect for "print 4 lids in 4 different colors" workflows. **Auto-detect mode** (default): omit *copies*, *ams_slots*, and *colors* — the tool queries the AMS, finds all loaded trays matching *material*, and prints one copy per loaded tray. **Manual mode**: specify *ams_slots* (and optionally *colors*) to choose exactly which AMS trays to use and how many copies. Requires PrusaSlicer or OrcaSlicer installed locally. The printer must be idle and have an AMS with loaded filament. The emitted 3MF (``multi_color_3mf`` in the result) also opens in Bambu Studio, which keeps the per-copy colors but re-derives print settings itself — the result's ``slicer_note`` explains this; relay it to the user when handing over the file. :param model_path: Path to the model file (STL or OBJ). :param copies: Number of copies. Auto-detected from AMS if omitted. :param ams_slots: The tray each copy prints from, by the printer's own tray id (``unit * 4 + slot`` on a chained unit, the unit id on an AMS HT; ``ams_status`` lists each tray's ``tray_id``). E.g. ``[0, 1, 2, 3]`` for all 4 AMS Lite trays, ``[0, 5]`` for A1 and B2. :param colors: Hex color strings per copy for slicer preview. E.g. ``["#FF0000", "#00FF00", "#0000FF", "#FFFF00"]``. Auto-read from AMS if omitted.

輸入參數colorscopiesmaterialams_slotsmodel_path必填printer_idspacing_mmslicer_pathpreview_token

extract_file_metadata

File metadata

Extract metadata from a 3D printing file (.gcode, .3mf, .stl, .ufp). Parses file headers for estimated print time, layer count, filament usage, dimensions, slicer info, and material hints — without re-slicing. A project saved from Bambu Studio, OrcaSlicer or PrusaSlicer also gives the printer, nozzle size, layer height and material it was set up for; hand the same file to ``set_printer_model`` to set a saved printer up from it. .. note:: For multi-object .gcode.3mf files, also consider using ``list_plate_objects()`` to see individual objects on the plate. Args: file_path: Path to the print file.

輸入參數file_path必填

save_print_checkpoint

Save a print checkpoint

Save a checkpoint during an active print for accurate resume. The checkpoint is keyed by ``(printer_name, job_id)`` and read automatically by :func:`detect_print_failure` so that the resulting :class:`FailureReport` carries known-good Z / layer / temps. The resume planner uses this for accurate ``resume_z_mm`` instead of estimating from ``z_per_layer * resume_layer`` — meaningfully more accurate when the print uses variable-layer-height slicing. Args: printer_name: Name of the printer running the job. job_id: Unique job identifier. z_height: Current Z height in mm. layer_number: Current layer number (0-based). hotend_temp: Hotend temperature at checkpoint time (Celsius). bed_temp: Bed temperature at checkpoint time (Celsius). filament_used_mm: Filament consumed so far in mm. fan_speed_pct: Part-cooling fan speed (0-100); omitted, 0. flow_rate_pct: Flow-rate multiplier in percent; omitted, 100.

輸入參數job_id必填bed_tempz_heighthotend_templayer_numberprinter_name必填fan_speed_pctflow_rate_pctfilament_used_mm

plan_print_recovery

Plan a print recovery

Plan a recovery strategy from a printer + job + failure type. Convenience wrapper that synthesizes a :class:`FailureReport` from the supplied args (using the latest checkpoint for the printer/job when available) and runs it through the same planner used by ``plan_failure_recovery``. **Which recovery tool to use:** - Have a printer_name + job_id from a failed print? → ``plan_print_recovery`` (this tool) - Have a failure_id from ``detect_print_failure``? → ``plan_failure_recovery`` Args: printer_name: Name of the printer that failed. job_id: The failed job's identifier. failure_type: Type of failure (thermal_runaway, layer_shift, adhesion_failure, filament_runout, nozzle_clog, communication_loss, power_loss, blob_detected, spaghetti, stringing, warping). Defaults to ``communication_loss``. part_attached: Your word on whether the half-printed part is still stuck to the plate (true / false). Left out, a resume Kiln would build is held back and the plan says so. try_untested_resume: Opt this printer in to a resume Kiln has not yet seen work on its model; Kiln learns from how it goes.

輸入參數job_id必填failure_typeprinter_name必填part_attachedtry_untested_resume

firmware_resume_print

Resume a print in firmware

Execute firmware-level print resume for OctoPrint+Marlin printers. After a power loss or failure, this tool positions the printer at the last known checkpoint and prepares it to resume printing. Uses Marlin M413 power-loss recovery protocol: homes X/Y (never Z), re-heats bed then hotend, sets Z position from checkpoint, primes the nozzle, and restores fan/flow settings. A Kiln Pro feature. Without it, the printer's own power-loss recovery can continue a print run from its own memory card; a print OctoPrint streamed over USB cannot be continued by the printer itself. The printer will be positioned and ready after this call. Use start_print with a re-sliced file (starting at the target layer) or let the printer resume from its own recovery buffer. Only works with OctoPrint printers running Marlin firmware. Moonraker/Klipper printers should use Klipper's SAVE_VARIABLE system instead (not yet supported). Args: printer_name: Name of the printer to resume on. job_id: The failed job's identifier (for checkpoint lookup). z_height_mm: Z height to resume from (from checkpoint). hotend_temp_c: Hotend temperature to restore. bed_temp_c: Bed temperature to restore. file_name: Original file name (for logging/tracking). layer_number: Layer number to resume from (informational). fan_speed_pct: Fan speed to restore (0-100). flow_rate_pct: Flow rate multiplier to restore (default 100). prime_length_mm: Filament to extrude for nozzle priming (mm). z_clearance_mm: How far above the part to raise the nozzle (mm).

輸入參數job_id必填file_name必填bed_temp_c必填z_height_mm必填layer_numberprinter_name必填fan_speed_pctflow_rate_pcthotend_temp_c必填z_clearance_mmprime_length_mm

check_printer_health

Check printer health

Run a comprehensive health check on a printer. Monitors hotend/bed temperature stability, print progress, and detects anomalies like temperature drift or unexpected shutdowns. Args: printer_name: Name of the printer to check.

輸入參數printer_name必填

start_printer_health_monitoring

Start health monitoring

Start continuous background health monitoring for a printer. Runs periodic checks covering connectivity, temperature stability, print job health (layer progress stalls, error codes), and active error detection. Alerts are generated when anomalies are found. Kiln keeps a live watch on as many machines at once as your plan runs — one on Free and Pro. Checking a printer yourself is not a watch and is never limited: ``printer_status``, ``monitor_print`` and ``printer_snapshot`` answer for any machine at any tier, and so does stopping one. :param printer_name: Printer to monitor. :param interval_seconds: Seconds between health checks (default 30). See also: ``stop_printer_health_monitoring()``, ``check_printer_health()``, ``printer_status()``.

輸入參數printer_name必填interval_seconds

stop_printer_health_monitoring

Stop health monitoring

Stop background health monitoring for a printer. Cancels the periodic health-check loop started by ``start_printer_health_monitoring()``. Active alerts are cleared. Monitoring can be restarted at any time by calling ``start_printer_health_monitoring()`` again. :param printer_name: Printer to stop monitoring.

輸入參數printer_name必填

analyze_print_snapshot

Analyze a snapshot

Analyze a webcam snapshot for print monitoring quality. Checks image brightness, variance, resolution, and format to determine if the snapshot is usable for print monitoring. Args: file_path: Path to the snapshot image file.

輸入參數file_path必填

get_fulfillment_quote_cached

Cached manufacturing quote

Read back the newest quote ``fulfillment_quote`` cached for a file. Quotes are kept for a while after they are fetched, so a decision made a few minutes later needs no second provider call. An expired quote is not returned; fetch a fresh one with ``fulfillment_quote``. Args: file_path: Path to the design file the quote was fetched for. provider: Provider name as it appears in a ``fulfillment_quote`` result (e.g. ``"craftcloud"``), used to find the cached quote. material: Material id the quote was fetched for (from ``fulfillment_materials``).

輸入參數materialproviderfile_path必填

list_snapshots

List snapshots

List persisted snapshots from the database. Returns metadata for snapshots captured during print monitoring, timelapses, or manual captures. Use this to review print history visually or correlate snapshots with print outcomes. Args: printer_name: Filter by printer name. job_id: Filter by job or timelapse ID. phase: Filter by capture phase as the monitor records it: ``"first_layers"``, ``"mid_print"``, ``"final_layers"`` or ``"unknown"``. limit: Maximum records to return (default 20).

輸入參數limitphasejob_idprinter_name

printer_trend_analysis

Printer trends

Analyze local print history trends for a printer. Uses only data already stored in the local database — nothing leaves the machine. Returns health score, failure rate trends, duration trends, recurring failure modes, and material reliability. Args: printer_name: Printer to analyze. lookback_days: How far back to look (default 30 days).

輸入參數printer_name必填lookback_days

check_ambient_conditions

Check ambient conditions

Check if the printer's chamber temperature is safe for a material. Reads the current chamber temperature from the connected printer and checks it against material-specific thermal limits. Warns about conditions like: - Chamber too hot for PLA (softening risk) - Chamber too cold for ABS/ASA (warping risk) - Thermal runaway (exceeds printer safety profile max) - Cool-down advisory after a high-temp print All checks are local — no data leaves the machine. Args: material: Filament material type (e.g. "PLA", "ABS", "PETG"). If not provided, only checks against printer max.

輸入參數material

decorate_surface

Decorate a surface

Put any image, text, or pattern onto a 3D model surface. For repeating patterns (wood grain, camo, honeycomb) that tile across the entire surface, use ``apply_geometric_texture`` or ``apply_procedural_texture`` instead. This tool is for one-off content placement (logos, text, images). Takes a model and content (image file, text string, SVG) and returns a new STL with the content embossed or debossed onto the surface. Automatically detects the best face for placement and scales content to fit. Single-color coin-relief style — no multi-material needed. **Content types** (auto-detected from *content* string): - **Image file** (PNG/JPG/SVG): ``"/path/to/photo.jpg"`` - **Text**: ``"text:KILN"`` or ``"text:Hello World"`` **Image styles** for raster images: - "auto" — a logo/wordmark/line-art image routes to "stencil" (crisp traced strokes); a photo is sculpted and Kiln picks the look from the photo and the part, saying why in relief.chosen_because - "coin" — a sunk relief, the subject rising to the rim plane - "cameo" — the same relief raised on the face (emboss) - "etched" — edges first, for a small part - "sketch" — engraved contour lines, one layer deep (was "portrait") - "medallion" — a coin with a rim ring; "photo" and "composite" mean "coin" - "stencil" (alias "logo") — the mark's ink is traced into vector strokes and carved directly: crisp edges, no background tile, correct orientation. The right choice for brand logos. **Examples**:: decorate_surface(model_path="coaster.stl", content="photo.jpg", mode="deboss", depth_mm=1.5, image_style="coin") decorate_surface(model_path="keychain.stl", content="text:KILN", face="top", depth_mm=0.5) Requires OpenSCAD installed locally for compilation. :param model_path: Path to the base model (STL or OBJ). :param content: What to p

輸入參數facemodescalesvg_idcontent必填depth_mmmaterialplacementsvg_layermodel_path必填image_styleoffset_x_mm另有 4 個

analyze_model_geometry

Analyze geometry for adaptive slicing

Detect geometric regions in a 3D model that affect slicing. Analyzes model geometry to identify overhangs, bridges, thin walls, top/bottom surfaces, fine details, and curved surfaces. Each region gets optimized slicing parameters in the adaptive plan. Args: model_path: Path to an STL or 3MF file for analysis. model_stats: Pre-computed geometry statistics dict (from slicer preview or external tool). Keys include ``height_mm``, ``overhangs``, ``bridges``, ``thin_walls``, etc. Provide either ``model_path`` or ``model_stats`` (or both — ``model_stats`` takes precedence).

輸入參數model_pathmodel_stats

get_material_slicing_profile

Get material slicing profile

Get material-specific slicing constraints for adaptive slicing. Returns layer height limits, bridge/overhang parameters, fan speeds, and other material-tuned values used by the adaptive slicer. Args: material: Material name — PLA, PETG, ABS, TPU, ASA, Nylon, PC, PVA, or HIPS. nozzle_diameter_mm: Nozzle diameter in mm (affects layer height limits). Leave unset for the only printer Kiln knows of, else 0.4; the reply's ``nozzle`` says which.

輸入參數material必填nozzle_diameter_mm

generate_adaptive_slicing_plan

Plan adaptive layer heights

Generate a per-layer adaptive slicing plan. Creates a layer-by-layer plan with variable heights, speeds, and cooling based on detected geometry regions and material constraints. Args: regions: List of region dicts (as ``analyze_model_geometry`` returns them): ``region_type`` (one of fine_detail, standard, bulk, overhang, bridge, top_surface, bottom_surface, thin_wall, curved_surface, support_contact), ``z_start_mm``, ``z_end_mm`` and ``area_pct``. material: Material name (PLA, PETG, ABS, etc.). model_height_mm: Total model height in mm. model_name: Optional model name for record keeping. printer: Optional printer identifier. nozzle_diameter_mm: Nozzle diameter in mm. Leave unset for the nozzle Kiln has for ``printer`` (or the only printer it knows of), else 0.4; the reply's ``nozzle`` says which. mode: Adaptive strategy — "balanced" (default), "quality_first", "speed_first", or "material_optimized".

輸入參數modeprinterregions必填material必填model_namemodel_height_mm必填nozzle_diameter_mm

export_adaptive_slicer_config

Export adaptive slicer settings

Export an adaptive slicing plan as slicer-compatible configuration. Converts a plan to the target slicer's format — PrusaSlicer and OrcaSlicer use variable layer height data, Cura uses adaptive layers plugin format. Args: plan_data: Plan dict from ``generate_adaptive_slicing_plan``. slicer: Target slicer — "prusaslicer", "orcaslicer", "cura", or "generic".

輸入參數slicerplan_data必填

estimate_adaptive_time_savings

Estimate adaptive slicing savings

Compare adaptive plan time savings vs uniform layer height. Shows layer count reduction, estimated time savings, and percentage improvement. Args: plan_data: Plan dict from ``generate_adaptive_slicing_plan``. uniform_height_mm: Reference uniform layer height for comparison (default 0.2mm).

輸入參數plan_data必填uniform_height_mm

quick_adaptive_plan

Quick adaptive slicing plan

All-in-one adaptive slicing: analyze geometry + generate plan. Convenience tool that combines geometry analysis and plan generation in a single call. Ideal when you have basic model info and want a quick adaptive plan without multiple tool calls. Args: material: Material name (PLA, PETG, ABS, etc.). model_height_mm: Total model height in mm. model_name: Optional model name. nozzle_diameter_mm: Nozzle diameter in mm. Leave unset for the nozzle Kiln has for ``printer`` (or the only printer it knows of), else 0.4; the reply's ``nozzle`` says which. mode: Adaptive strategy — "balanced", "quality_first", "speed_first", or "material_optimized". printer: Optional printer identifier. regions: Optional list of region dicts. If omitted, a default STANDARD region spanning the full height is used.

輸入參數modeprinterregionsmaterial必填model_namemodel_height_mm必填nozzle_diameter_mm

list_supported_materials

List adaptive slicing materials

List all materials with adaptive slicing profiles. Returns material names with their key slicing constraints (layer height limits, bridge parameters, overhang angles).

無需輸入參數。

get_adaptive_plan_summary

Summarize adaptive slicing plan

Generate a human-readable summary of an adaptive slicing plan. Args: plan_data: Plan dict from ``generate_adaptive_slicing_plan`` or ``quick_adaptive_plan``. Returns a structured summary with key metrics and region breakdown.

輸入參數plan_data必填

ams_filament_drying

Start or stop AMS drying

Start or stop an AMS 2 Pro / AMS HT active dry cycle. Bambu printers with an AMS 2 Pro or AMS HT dry filament in place. This controls that dryer. To START (``mode=1``): set ``temp_c`` (drying temperature), ``duration_min`` (> 0), and ``cooling_temp_c`` -- which must be >= 45, or the printer silently ignores the command. A start is checked against the unit's own ceiling (AMS 2 Pro 65 C, AMS HT 85 C) before it is sent; when Kiln cannot run that check, nothing is sent and the answer says why. To STOP (``mode=0``): only ``ams_id`` is needed, and a stop is always sent. Only Bambu printers with an AMS 2 Pro / AMS HT support this; other printers and plain AMS / AMS Lite units return an error. :param ams_id: AMS unit index (0-based). :param mode: 1 to start drying, 0 to stop. :param duration_min: Dry-cycle length in minutes (> 0 to start). :param temp_c: Drying temperature in C (required to start). A value above the unit's own drying ceiling is refused, never lowered; the refusal names the ceiling. :param cooling_temp_c: Cooldown temperature in C (>= 45 to start). :param humidity: Target relative humidity in percent, when the unit supports a humidity target. :param rotate_tray: Whether the unit turns the spool during the cycle (``True``/``False``); leave unset to keep the unit's own setting. :param printer_name: Target printer. Omit for the default printer. :returns: Dict with the dispatched command and a status message.

輸入參數mode必填ams_id必填temp_chumidityrotate_trayduration_minprinter_namecooling_temp_c

create_assembly

Start an assembly description

Create a new empty assembly. Returns the assembly state as a JSON-serialisable dict that must be passed back to subsequent assembly tools. Args: name: Human-readable name for the assembly.

輸入參數name必填

add_assembly_part

Add a part to an assembly

Add a part to an existing assembly. Parses the assembly from its JSON representation, appends the new part, and returns the updated assembly state. Args: assembly_json: JSON string of the current assembly state (as returned by create_assembly or a previous tool call). part_id: Unique identifier for this part within the assembly. file_path: Path to the STL/OBJ mesh file for the part. position_x: X position offset in mm (default 0.0). position_y: Y position offset in mm (default 0.0). position_z: Z position offset in mm (default 0.0). material: Filament material for the part (default ``"PLA"``). role: Structural role of the part (default ``"structural"``).

輸入參數rolepart_id必填materialfile_path必填position_xposition_yposition_zassembly_json必填

add_assembly_interface

Add an assembly joint

Add a mating interface between two parts in an assembly. Defines how two parts connect (joint type and clearance), which is used during validation and clearance checking. For screw/anchor-based joints, ``fastener`` may provide an explicit hardware spec so downstream manuals and BOM tools do not have to guess from clearance alone. Args: assembly_json: JSON string of the current assembly state. part_a_id: ID of the first part in the interface. part_b_id: ID of the second part in the interface. joint_type: Type of joint (default ``"clearance_fit"``). clearance_mm: Clearance gap in mm (default 0.2). For ``"interference_fit"`` pass a NEGATIVE value (the part is intentionally larger than its socket); interference geometry is the entire point. magnet_polarity_aligned: Only meaningful when ``joint_type == "magnetic"``. ``True`` declares the designer has confirmed which poles face each other in each magnet pocket; ``None`` means unknown. Downstream tooling refuses to ship a hand-wavy "make sure they pull together" instruction when polarity is unknown. fastener: Optional FastenerSpec as a dict or JSON object string. Supported keys include ``size``, ``family``, ``length_mm``, ``length_range_mm``, ``head_type``, ``drive_type``, ``surface_type``, ``quantity_per_interface``, and ``notes``.

輸入參數fastenerpart_a_id必填part_b_id必填joint_typeclearance_mmassembly_json必填magnet_polarity_aligned

validate_assembly

Validate assembly

Validate an assembly for correctness and printability. Runs clearance checks and joint validations on the assembly, returning the validated assembly state with results populated. Args: assembly_json: JSON string of the current assembly state. printer_id: Optional printer model id (e.g. ``"bambu_a1"``). With it, each joint that drives a screw into a printed part gains a ``screw_hole`` block (compensated hole diameter, thread engagement, install-torque ceiling, lead-in chamfer) tuned for that machine where Kiln has data, else a generic starting point. Omit it for the plain validation.

輸入參數printer_idassembly_json必填

check_assembly_clearances

Check assembly clearances

Check clearances between all mating parts in an assembly. Returns a list of clearance check results indicating whether each interface meets its clearance requirements. Args: assembly_json: JSON string of the current assembly state. default_clearance_mm: Default clearance gap in mm to use when an interface does not specify one (default 0.2).

輸入參數assembly_json必填default_clearance_mm

compose_assembly_parts

Compose assembly into one file

Compose all assembly parts into a single output STL file. Merges the individual part meshes according to their positions and writes the combined model to ``output_path``. Args: assembly_json: JSON string of the current assembly state. output_path: File path where the composed STL will be written. INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience.

輸入參數output_path必填assembly_json必填

get_joint_recommendation

Recommend joint clearance

Get recommended clearance settings for a joint type and material pairing. Returns clearance recommendations based on the joint type and the materials of the two mating parts. When ``printer_id`` is supplied AND kiln-pro is installed, the response narrows the clearance range by the user's calibration tier (HIGH halves it, MEDIUM shaves ~10%, LOW and UNKNOWN leave it unchanged) and attaches a ``calibration_used`` block documenting the source. Args: joint_type: Type of joint (e.g. ``"clearance_fit"``, ``"press_fit"``, ``"snap_fit"``). material_a: Material of the first part (default ``"PLA"``). material_b: Material of the second part (default ``"PLA"``). printer_id: Optional printer identifier (e.g. ``"bambu_a1"``). For a joint whose parts MOVE, omitting it resolves the user's active printer rather than answering generically — pass it only to ask about a machine that is not the one they are set up on. For every other joint type, omitting it keeps the historic flat-range behaviour. mating: Optional shape hint for joints whose parts MOVE against each other (``"clearance_fit"``, ``"loose"``): ``"pin_in_bore"`` for a shaft or pin turning in a hole, ``"slot"`` for a tongue sliding in a groove, ``"planar_face"`` for two flat faces sliding, or ``"gear_flank"`` for meshing teeth. Omitted, the round-joint case is assumed, the reading that errs loose rather than tight. Ignored for joints that do not move.

輸入參數matingjoint_type必填material_amaterial_bprinter_id

kiln_signin

Start Kiln sign-in

Start a Kiln sign-in via OAuth. Returns a URL the user can open in their browser to sign in with Google / Apple / GitHub. Relay the ``verification_uri`` to the user and then call ``kiln_signin_poll(device_code)`` every few seconds until the status is no longer ``"pending"``. Response fields (all strings unless noted): * ``verification_uri`` — URL to open in the browser; the ``user_code`` is already embedded as a query param so the user typically doesn't have to type anything. * ``user_code`` — the short human-readable code (``KLN-ABCD-EFGH``); show it only as a fallback in case the verification URL didn't pre-fill it. * ``device_code`` — secret; pass to ``kiln_signin_poll``, never show to the user. * ``interval`` (int) — seconds to wait between polls (default 2). * ``expires_in`` (int) — seconds the code is valid for (900 = 15 minutes). A free Kiln account adds a cloud design library with share links plus the free monthly allowance of Kiln's hosted tools. Free tier — no license key required; this is the very first call an unauthenticated user makes.

無需輸入參數。

kiln_signin_poll

Finish Kiln sign-in

Check whether a sign-in started by ``kiln_signin`` is done. Call this repeatedly (every ``interval`` seconds) with the ``device_code`` that ``kiln_signin`` returned. Each call is a single HTTP round-trip (it does NOT block), so the agent stays responsive and the user sees progress. Returns ``{"status": "pending" | "success" | "denied" | "expired", ...}``. * ``pending`` — user hasn't finished in the browser yet; wait ``interval`` seconds and call again. * ``success`` — tokens have been written to ``~/.kiln/auth_tokens.json`` (mode 0600); the response also echoes ``email`` and ``tier``. Every other Kiln tool picks up the new session automatically. * ``denied`` — user cancelled in the browser. * ``expired`` — the device_code timed out (15 min window); call ``kiln_signin`` again for a fresh code. Free tier — no license key required. :param device_code: The ``device_code`` that ``kiln_signin`` returned for this sign-in.

輸入參數device_code必填

cache_model

Cache a model

Add a 3D model file to the local cache for reuse across jobs. Copies the file into ``~/.kiln/model_cache/`` and stores metadata (source, prompt, tags, dimensions) in the database. Duplicate files are detected automatically by SHA-256 hash. Args: file_path: Path to the model file on disk. source: Origin — ``"thingiverse"``, ``"myminifactory"``, ``"meshy"``, ``"openscad"``, ``"upload"``, etc. source_id: Marketplace thing ID or generation job ID. prompt: For generated models, the text prompt used. tags: Comma-separated tags (e.g. ``"benchy,calibration,test"``). dimensions: JSON object with bounding box in mm, e.g. ``'{"x": 60, "y": 31, "z": 48}'``. metadata: Optional JSON object with extra data.

輸入參數tagspromptsource必填metadatafile_path必填source_iddimensions

search_cached_models

Search cached models

Search the local model cache by name, source, tags, or prompt text. Args: query: Free-text search against file name, prompt, and tags. source: Filter by source (e.g. ``"thingiverse"``). tags: Comma-separated tags to filter by. limit: Maximum results (default 20). The response declares its ``scope``: this cache is local to this machine, so the count is what THIS install has cached, not everything the user has ever downloaded or generated.

輸入參數tagslimitquerysource

get_cached_model

Get cached model

Return details for a specific cached model. Args: cache_id: The unique cache ID of the model.

輸入參數cache_id必填

list_cached_models

List cached models

List all models in the local cache, newest first. Args: limit: Maximum results (default 50). offset: Number of entries to skip for pagination. The response declares its ``scope``: this cache is local to this machine, so the count is what THIS install has cached, not everything the user has ever downloaded or generated. It is also a page — ``limit``/``offset`` bound it further.

輸入參數limitoffset

delete_cached_model

Delete cached model

Remove a model from the local cache (file and metadata). Args: cache_id: The unique cache ID of the model to delete.

輸入參數cache_id必填

cache_design

Cache a design

Cache a 3D design file for faster access and version tracking. Args: file_path: Path to the design file to cache. label: Human-readable label for the cached design. material: Intended material for this design.

輸入參數labelmaterialfile_path必填

list_cached_designs

List cached designs

List cached designs, optionally filtered by material. Args: material: Filter by material (e.g. "PLA", "PETG"). limit: Maximum number of results. Most recently used designs come first. The response declares its ``scope``: which store was read. The cache is local-only at every tier (regenerable files, no cloud copy), so a complete local read is the whole cache.

輸入參數limitmaterial

get_cached_design

Get cached design

Retrieve a cached design by ID. Args: design_id: The cached design's identifier.

輸入參數design_id必填

cloud_sync_status

Cloud sync status

Get the current cloud sync status.

無需輸入參數。

cloud_sync_now

Sync to the cloud now

Trigger an immediate cloud sync cycle.

無需輸入參數。

cloud_sync_configure

Configure cloud sync

Configure and start cloud sync. Args: cloud_url: Base URL of the cloud sync endpoint. api_key: API key for authentication. interval: Sync interval in seconds (default 60).

輸入參數api_key必填intervalcloud_url必填

auto_color_by_height

Color by height

Split a 3D model into horizontal color zones by Z-height. Divides the model's height into N equal bands. Faces that cross a band edge are cut exactly at it, so the line where two colors meet is the straight horizontal line the bands name — never a sawtooth of whole faces, on any tessellation. The cut faces are capped at the band planes, so each zone of a closed model is itself a closed solid ready to slice. Produces separate STL files per zone and (if available) a multicolor 3MF ready for AMS/MMU printers. Zero cloud dependencies — pure geometry. Says whether its colours are on the printer, as ``colour_availability`` (absent when Kiln cannot see what is loaded). Relay its ``say`` as written and add nothing about filament: never suggest buying filament unless the person asks for one or says yes to the offer in ``say``. On a yes, call ``find_closest_filaments`` with these colours and the print's material. :param input_path: Path to a binary STL file. :param num_colors: Number of color zones (default 4). :param color_palette: List of hex colors (e.g. ``["#FF0000", "#00FF00"]``). Defaults to white/red/black/grey. :param material: Optional material the part will be printed in (e.g. ``"PETG"``). A spool on record in a clearly different material is then not named as one to load. :param printer_id: Optional supported printer model id. Names the bed the composed 3MF is placed on, so a model sitting off the plate is centred on the machine's real bed rather than an assumed 256mm one. :returns: Dict with zone STL paths, hex colors, face counts (boundary faces are cut and capped, so counts can excee

輸入參數materialinput_path必填num_colorsprinter_idcolor_palette

auto_color_by_region

Color by region

Split a 3D model into color zones by geometric region. Supports multiple assignment methods: - ``"z_height"``: horizontal bands by Z-height (default) — faces crossing a band edge are cut exactly at it and the cuts are capped, so the color boundary is a straight line on any tessellation and each zone of a closed model is itself a closed solid ready to slice - ``"normal"``: group by face normal direction (top / bottom / sides) - ``"random"``: random face assignment for artistic prints The 3MF takes whichever form actually prints: z_height bands become one closed solid per color; normal/random colorings follow the surface, so the mesh stays ONE watertight object with the colors painted per triangle — slicers that support color import (BambuStudio, OrcaSlicer) offer to map each color to a filament on open. Zero cloud dependencies — pure geometry. Says whether its colours are on the printer, as ``colour_availability`` (absent when Kiln cannot see what is loaded). Relay its ``say`` as written and add nothing about filament: never suggest buying filament unless the person asks for one or says yes to the offer in ``say``. On a yes, call ``find_closest_filaments`` with these colours and the print's material. :param input_path: Path to a binary STL file. :param num_colors: Number of color zones (default 4). :param method: Assignment method — ``"z_height"``, ``"normal"``, or ``"random"``. :param color_palette: List of hex colors. Defaults to white/red/black/grey. :param material: Optional material the part will be printed in (e.g. ``"PETG"``). A spool on record in a

輸入參數methodmaterialinput_path必填num_colorsprinter_idcolor_palette

paint_decoration_faces

Paint decoration faces

Paint exactly the faces a decoration carve created (Pro-free). A deboss/emboss records which output triangles it created — recess floors and side-walls — in a face-provenance sidecar beside the decorated mesh. This tool paints THOSE faces and nothing else, so a debossed logo with a closed outline (any mark with enclosed regions) colors only its carved strokes: the untouched surface island inside the outline stays the body color, where crease-angle segmentation would have "filled the logo in". Use after any decoration door (``decorate_surface``, ``apply_decoration``, ``apply_decoration_preset``, ``smart_decorate``, ``batch_decorate``…) — they all record the sidecar. For meshes with no sidecar (older files, hand-made carves), fall back to ``segment_mesh_regions`` + ``paint_mesh_regions``. Writes a painted 3MF (one watertight object, per-triangle colors) via the same composer ``paint_mesh_regions`` uses, so the output slices identically. A successful paint is also written back into the carve's face record (color, target, output file) so the design's provenance says "carved, then painted" — ``paint_recorded`` in the result reports whether that write-back landed. Says whether its colours are on the printer, as ``colour_availability`` (absent when Kiln cannot see what is loaded). Relay its ``say`` as written and add nothing about filament: never suggest buying filament unless the person asks for one or says yes to the offer in ``say``. On a yes, call ``find_closest_filaments`` with these colours and the print's material. :param model_path: The decorated mesh (STL/OBJ/3MF) whose ``<mesh>.decoration_faces.j

輸入參數colortargetmaterialbase_colormodel_path必填printer_idoutput_pathstep_colors

tax_estimate

Estimate order tax

Preview the complete price breakdown — including tax — before placing an order. Terms §7 contract: "Preview the tax for any order with the ``tax_estimate`` tool before placing it. We display the full fee + tax breakdown before charging. No hidden fees." This tool fulfills that contract by returning the same line items the order will commit to at charge time. Per Terms §7 tax is computed on the orchestration fee ONLY — never on the manufacturer's quoted total. The manufacturer is responsible for any taxes on their own charges. Two calling shapes are supported: 1. **Canonical preview** (recommended): pass ``manufacturer_quote_usd`` and the tool returns the full breakdown — ``manufacturer_quote``, ``orchestration_fee``, ``tax_on_fee``, ``total`` — so the agent can show the user the exact line items that match the eventual charge. This is the shape Terms §7 commits to. 2. **Tax-only legacy** (compatibility): pass ``fee_amount`` with no ``manufacturer_quote_usd`` and the tool returns the older ``{tax: {...}}`` shape, useful for callers that already know the fee and only want the tax line. Args: fee_amount: Legacy — the platform fee amount (from the quote's ``kiln_fee``). Used only when ``manufacturer_quote_usd`` is omitted. jurisdiction: Where the buyer is located (e.g. ``"US-CA"``, ``"DE"``, ``"AU"``). Use ``tax_jurisdictions`` to see all supported codes. When empty in canonical-preview mode, no tax is applied (preview shows manuf + fee only). business_tax_id: If the buyer is a business, their tax ID

輸入參數currencyfee_amountuser_emailjurisdictionbusiness_tax_idmanufacturer_quote_usd

tax_jurisdictions

List tax regions

List all 22 supported regions so the agent can match the user's location. Returns jurisdiction codes, tax types, and rates for the US (8 states), EU (7 countries), UK, Canada (4 provinces), Australia, and Japan. Pass the matching code to ``fulfillment_order`` or ``tax_estimate`` to include tax in the price breakdown.

無需輸入參數。

tax_jurisdiction_lookup

Look up a tax region

Look up tax details for a specific region (rate, type, B2B exemptions). Args: code: Jurisdiction code (e.g. "US-CA", "DE", "GB", "AU"). Use ``tax_jurisdictions`` to browse all codes.

輸入參數code必填

donate_info

Donation info

Get crypto wallet addresses to tip/donate to the Kiln project. Kiln is free, open-source software. This tool returns wallet addresses (with ENS/SNS domains) where users can send tips in SOL, ETH, USDC, or other tokens to support development. No payment is required -- Kiln is fully functional without donating.

無需輸入參數。

consumer_onboarding

Onboarding without a printer

Get the guided onboarding workflow for users without a 3D printer. Returns a step-by-step guide covering model discovery/generation, material recommendations, pricing, ordering, and delivery tracking. Perfect for first-time users who want to manufacture a custom part.

無需輸入參數。

validate_shipping_address

Validate shipping address

Validate and normalize a shipping address for fulfillment orders. Args: street: Street address (e.g. "123 Main St"). city: City name. country: ISO 3166-1 alpha-2 country code (e.g. "US", "GB", "DE"). state: State/province (recommended for US addresses). postal_code: ZIP/postal code (validated per country format). Checks required fields, validates postal codes per country (US ZIP, Canadian postal, UK postcode), and returns warnings for missing optional fields. Use the ``normalized`` address in the response when placing fulfillment orders.

輸入參數city必填statestreet必填country必填postal_code

suggest_material_for_order

Suggest material for an order

Suggest a material when ordering a print from a fulfillment provider. Use this when routing a print job to a fulfillment provider and need to pick the right material + technology for the order. **Which material tool to use:** - Ordering a print from a service? → ``suggest_material_for_order`` (this tool) - Designing a part and need engineering specs? → ``recommend_design_material`` - Quick intent-based pick for your own printer? → ``recommend_material`` Args: use_case: What the part is for. Options: decorative, functional, mechanical, prototype, miniature, jewelry, enclosure, wearable, outdoor, food_safe. budget: Price preference: "budget", "mid", or "premium". Empty = any. need_weather_resistant: Only recommend weather-resistant materials. need_food_safe: Only recommend food-safe materials. need_high_detail: Prefer high-detail materials (SLA/MJF). need_high_strength: Prefer high-strength materials (SLS/MJF). Returns ranked material recommendations with technology, reasoning, price tier, and which fulfillment provider to use.

輸入參數budgetuse_case必填need_food_safeneed_high_detailneed_high_strengthneed_weather_resistant

estimate_price

Estimate order price

Get an instant price estimate before requesting a full quote. Args: technology: Manufacturing technology: FDM, SLA, SLS, MJF, or DMLS. volume_cm3: Part volume in cubic centimeters (if known). dimensions_x_mm: Bounding box X dimension in mm (alternative to volume). dimensions_y_mm: Bounding box Y dimension in mm. dimensions_z_mm: Bounding box Z dimension in mm. quantity: Number of copies (default 1). Returns a low/high price range based on typical per-cm3 pricing for the technology. For exact pricing, use ``fulfillment_quote`` with a real model file. Either ``volume_cm3`` or all three dimension parameters must be provided.

輸入參數quantitytechnology必填volume_cm3dimensions_x_mmdimensions_y_mmdimensions_z_mm

estimate_timeline

Estimate order timeline

Estimate order-to-delivery timeline with per-stage breakdown. Args: technology: Manufacturing technology (FDM, SLA, SLS, MJF, DMLS). shipping_days: Known shipping days from a quote (optional). quantity: Number of copies (larger quantities add production time). country: Destination country code for shipping estimate fallback. Returns a stage-by-stage timeline (order confirmation, production, quality check, packaging, shipping) with estimated days per stage and a total delivery date.

輸入參數countryquantitytechnology必填shipping_days

supported_shipping_countries

List shipping countries

List all countries supported for fulfillment shipping. Returns ISO country codes and full names for all 23+ countries where Kiln fulfillment providers can ship manufactured parts.

無需輸入參數。

store_credential

Store a credential

Encrypt and store a credential (API key, webhook secret, etc.). The value is encrypted at rest using PBKDF2 + XOR stream encryption. Only metadata is returned — the plaintext is never exposed. Args: credential_type: Type of credential (api_key, webhook_secret, stripe_key, marketplace_token, printer_password). value: The plaintext secret to store. label: Human-readable description.

輸入參數labelvalue必填credential_type必填

list_credentials

List stored credentials

List all stored credentials (metadata only, no plaintext).

無需輸入參數。

retrieve_credential

Reveal a stored credential

Decrypt and return a stored credential. Args: credential_id: The credential's unique identifier.

輸入參數credential_id必填

save_decoration

Save a decoration

Save a proven decoration to the library for reuse on future models. Captures the content file (heightmap, SVG, image), settings (depth, mode, material), and processing pipeline from the ``.kiln_recipe.json`` sidecar so the exact same decoration can be applied to new models with ``apply_decoration``. :param name: Human-readable name (e.g. "Ash Portrait"). :param model_path: Path to the model that was just decorated. :param content_type: Content type — ``photo``, ``svg``, ``qr``, ``text``, or ``auto`` (detect from file extension). :param source_path: Path to the original input file (photo, SVG). :param content_data: For QR: the data string. For text: the text. :param depth_mm: Decoration depth in mm (0 = auto from recipe). :param mode: ``emboss`` or ``deboss``. Omitted, the recipe sidecar's mode is used when it has one, else ``emboss``. :param image_style: Image processing style (coin, portrait, etc.). Omitted, the recipe sidecar's style is used when it has one, else ``auto``. :param material: Material used (e.g. PLA, PETG). Omitted, the recipe sidecar's material is used when it has one, else PLA. :param tags: Comma-separated tags for filtering. :returns: Dict with saved decoration details and library path.

輸入參數modename必填tagsdepth_mmmaterialmodel_path必填image_stylesource_pathcontent_datacontent_type

list_decorations

List decorations

List all saved decorations in the library. Browse the decoration library to find reusable decorations. Filter by content type, category, or tag. :param content_type: Filter by type — ``photo``, ``svg``, ``qr``, ``text``, ``procedural_texture``, ``ai_texture`` (empty = show all). :param category: Filter by category — ``surface`` (photo/svg/qr/text) or ``texture`` (procedural/AI textures). Empty = show all. :param tag: Filter by tag (empty = show all). :returns: Dict with decoration count and list. This is the decoration LIBRARY: keyed by name, and it ADAPTS — each recorded success stores proven settings for THAT material, so applying picks the depth and mode your prints proved for whatever you are printing in now. It keeps no version history. Kiln's other kind of saved decoration is a decoration PRESET (kiln-pro; what the web's /decorations pages show): keyed by an id because it has versions, branches and signed releases, and applied at the exact settings its version recorded rather than adapting to the material. Listed by ``list_decoration_presets``, applied by ``apply_decoration_preset``. The library adapts, the preset remembers — if what you want isn't here, look there. The response declares its own SCOPE. The library is local-only at every tier — the web's /decorations pages are the decoration PRESET store above, not a cloud copy of this one — so a complete local read here is the whole library, and ``scope`` says exactly that.

輸入參數tagcategorycontent_type

apply_decoration

Apply a saved decoration

Apply a saved decoration to a new model — proven settings, one call. Loads a previously saved decoration and applies it to the target model using the exact settings that worked before. Automatically resolves depth, mode, and image style from the proven recipe. This is the magic tool — decorations that took many iterations to perfect can be replayed on any model in one call. :param name: Decoration name or slug. :param model_path: Path to the target model (STL or OBJ). :param material: Override material (empty = use proven or detect from printer). :param face: Which face to decorate: ``auto`` (largest flat face), ``top``, ``bottom``, ``front``, ``back``, ``left``, ``right``, or ``wall`` (wrapped round an upright round wall). :param printer_id: Registered printer name (as ``printer_status`` lists it) whose loaded spool decides the material when ``material`` is empty. Omit to use the decoration's proven material. :returns: Dict with decorated model path and settings used. INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience.

輸入參數facename必填materialmodel_path必填printer_id

decoration_info

Decoration details

Get full details about a saved decoration. Shows the decoration's proven settings, content paths, tags, processing pipeline, and library location. :param name: Decoration name or slug. :returns: Dict with full decoration details and file paths.

輸入參數name必填

decoration_quota_status

Decoration allowance

Check your decoration quota — how many decorations you've used this month. A free account has a monthly decoration allowance (the reply says how many are left); Pro has no monthly limit. Returns used count, limit, remaining, tier, and current month.

無需輸入參數。

record_decoration_success

Record a decoration success

Record a successful print with a saved decoration (Kiln Pro). After a decoration prints well, call this with the settings that worked. ``apply_decoration`` then replays them on that material. :param name: Decoration name or slug. :param material: Material used (e.g. ``"PLA"``, ``"PETG"``). :param depth_mm: Depth in mm that printed well. :param mode: ``"emboss"`` or ``"deboss"``. :param image_style: Image style that worked (e.g. ``"coin"``). :param source_job_id: The print's job id when known: the same print reported twice (here and through ``record_print_outcome``) counts once. :returns: Dict with the updated decoration.

輸入參數modename必填depth_mm必填material必填image_stylesource_job_id

iterate_decoration

New decoration version

Create a new version of a saved decoration, archiving the current one (Kiln Pro). Use this when tuning a decoration -- a new depth, mode, style or content file -- and the previous version stays available for ``rollback_decoration``. :param name: Decoration name or slug. :param content_path: New content file (empty = keep current). :param depth_mm: New depth in mm (0 = keep current). :param mode: New mode, ``emboss`` or ``deboss`` (empty = keep current). :param image_style: New image style (empty = keep current). :param notes: Free-text notes for this iteration. :returns: Dict with the new version and what changed.

輸入參數modename必填notesdepth_mmimage_stylecontent_path

decoration_history

Decoration history

Get every version of a saved decoration (Kiln Pro). Each version with when it was made, what changed, the materials it has printed well on and its print count. :param name: Decoration name or slug. :returns: Dict with the version history and the current version.

輸入參數name必填

rollback_decoration

Roll back a decoration

Restore an earlier version of a saved decoration (Kiln Pro). The current version is archived and the earlier one comes back as a NEW version number, so history is never rewritten. :param name: Decoration name or slug. :param version: Version number to restore. :returns: Dict with the restored decoration.

輸入參數name必填version必填

analyze_structural_risks

Analyze structural risks

Analyze an STL mesh for structural weak points. Goes beyond printability to find **structural** risks: - **thin_neck**: narrow cross-sections that will snap under load - **stress_concentration**: abrupt section changes that focus stress - **cantilever**: unsupported overhanging geometry - **sharp_corner**: sharp inside (concave) corners, where cracks start; outside edges never count - **insufficient_base**: topple risk from height-to-base ratio - **weak_layer_adhesion**: overhangs in structurally critical areas Returns risk locations as (x, y, z) coordinates in mm so agents can reason about *where* problems are, not just *that* they exist. A file smaller than anything a printer makes (a scene exported in metres) is answered with ``units_question`` and no risk: the counts are ``None`` until its size is settled. :param file_path: Path to the STL file. :param min_cross_section_mm2: Minimum safe cross-section area. Leave unset for Kiln's own threshold. :param sharp_angle_threshold_deg: How far the surface must turn inward across an edge, in degrees, for an inside corner to count as sharp. Leave unset for Kiln's own threshold, the same for every caller. :returns: Dict with ``risks`` list, each containing location, severity, and description.

輸入參數file_path必填min_cross_section_mm2sharp_angle_threshold_deg

recommend_design_reinforcements

Recommend reinforcements

Recommend specific reinforcements for an STL mesh. Analyzes geometry to find structural risks, then generates actionable recommendations with **specific locations** and what each one does for the part: - **gusset**: triangular support at cantilever bases - **fillet**: smooth transitions at stress concentrations - **thicken_wall**: add material at thin necks - **add_base**: widen the base for stability - **reorient**: change print orientation for layer strength Each recommendation includes the coordinates where the reinforcement should be applied and which Kiln tool to use (e.g., ``add_mesh_fillet()``). A file smaller than anything a printer makes is answered with ``units_question`` and no recommendation. :param file_path: Path to the STL file. :param min_cross_section_mm2: Minimum safe cross-section area. Leave unset for Kiln's own threshold. :returns: Dict with ``reinforcements`` list.

輸入參數file_path必填min_cross_section_mm2

assess_load_bearing

Assess load bearing

Analyze load-bearing characteristics of a mesh from its geometry. Infers structural behavior by analyzing surface normals, shape type, and cross-section distribution: - **primary_load_axis**: which direction the part resists force - **load_surfaces**: which surfaces bear load (with area fractions) - **weak_axis**: the most vulnerable direction for failure - **recommended_print_orientation**: how to orient for maximum strength - **layer_direction_concern**: how FDM layers affect structural integrity This is the difference between "PLA is good for prototypes" (lookup) and "this bracket should be printed on its side because the load path crosses layer boundaries" (geometric reasoning). :param file_path: Path to the STL file. :returns: Dict with load analysis.

輸入參數file_path必填

design_improvement_plan

Design improvement plan

Generate a complete structural improvement plan for a design. The **full design reasoning pipeline** — combines risk analysis, reinforcement recommendations, and load analysis into one actionable report. Its ``summary`` names the risks found, the worst first, and the first thing to do; the overall structural score (0-100, A-F grade) stays in the report for comparing versions of the part. This is the tool that makes Kiln a **design advisor**, not just a geometry validator. It answers: "This bracket needs a gusset at the load point" — not just "the part has thin walls." The plan includes: 1. **Risks**: all structural weak points with locations and severity 2. **Reinforcements**: specific fixes and what each does for the part 3. **Load analysis**: how the part handles forces, best print orientation 4. **Summary**: the risks named, and a score for comparing versions :param file_path: Path to the STL file. :param min_cross_section_mm2: Minimum safe cross-section area. Leave unset for Kiln's own threshold. :param sharp_angle_threshold_deg: How far the surface must turn inward across an edge, in degrees, for an inside corner to count as sharp. Leave unset for Kiln's own threshold, the same for every caller. :returns: Complete improvement plan as dict.

輸入參數file_path必填min_cross_section_mm2sharp_angle_threshold_deg

apply_design_reinforcements

Apply reinforcements

Analyze a part for structural risks, then auto-apply fixes. This is the **one-step design hardening tool** — it runs the full structural analysis pipeline, then applies every applicable fix: - **Thin necks** → thickened walls (+material at narrow sections) - **Sharp inside corners** → rounded, so the load spreads (outside edges are left as they are) - **Insufficient base** → a base plate wide enough that the part no longer reads as a tipping risk Each fix is kept only if the part it makes carries no more structural risk than the part before it; one that would is left out and listed in ``skipped`` with what it would have added. Cantilevers are listed in ``skipped`` with where to add a rib (``locations_mm``): Kiln knows where an overhang is, not which wall carries it, so it does not place one. Thickening and edge rounding are done on the part's CAD file, so pass its STEP file when there is one (or a mesh Kiln converted from one that still sits beside it). When every fix applied was a CAD one the result carries ``step_path``, the reinforced part as CAD. On a mesh with no CAD file, edge rounding is skipped with the reason. Edge rounding is sized for the printer: name it (or the nozzle, layer height and material) and each rounded edge keeps one nozzle width of flat beside it. Each rounded entry's ``edges`` lists what was finished, what stayed sharp and why, and ``cautions`` for edges that will print badly; ``print_aware`` sums it up. Choosing the finish edge by edge for the printer and material is a Kiln Pro feature. ``summary`` says which structural risks the part had and which remain; ``before_score`` / ``after_score`` compare the two

輸入參數fastenermaterialfile_path必填nozzle_mmprinter_idoutput_pathbase_height_mmlayer_height_mmwall_thicken_mmfillet_radius_mm

infer_print_settings

Infer print settings

Infer optimal slicer settings from structural analysis. Bridges the gap between **design analysis** and **print success**. Analyzes the mesh for structural risks, then recommends concrete slicer parameters (perimeters, infill, supports, brim, layer height) tuned to compensate for the design's weaknesses. **Examples of what it catches:** - Thin neck detected → increase perimeters to 4+ - Cantilever overhangs → enable tree supports - High center of gravity → add brim for bed adhesion - Stress concentrations → switch to gyroid infill at 50%+ - Sharp corners → fine layer height for detail Material-specific: defaults vary by PLA/PETG/ABS/Nylon/TPU/ASA/PC. :param file_path: Path to the STL file. :param material: Filament type (PLA, PETG, ABS, Nylon, TPU, ASA, PC). :returns: Dict with perimeters, infill, supports, brim, layer height, orientation, special notes, and confidence level.

輸入參數materialfile_path必填

design_advisor

Design method advisor

Ask which generation method to use for a design idea (triage tool — call FIRST). Analyzes the design prompt and recommends: - Which generation approach to use (template, OpenSCAD, or AI) - Which template matches (if any) - Material recommendations - Key constraints to consider - Estimated complexity :param prompt: Text description of the desired object. :param printer_model: Optional printer model for constraints. :param material: Optional material the user has already named ("for ABS") — tunes the constraint analysis to it. :returns: Dict with recommendations.

輸入參數prompt必填materialprinter_model

arrange_parts_on_plate

Arrange parts on a plate

Pack multiple STL files onto a virtual build plate. Uses greedy bottom-left bin-packing (largest parts first) to efficiently arrange parts with configurable spacing. Reports which parts fit, which overflow, and plate utilization. Supports printing multiple copies of parts via the copies parameter. :param file_paths: JSON array of file paths, e.g. ``["/tmp/a.stl", "/tmp/b.stl"]``. :param plate_width_mm: Build plate width in mm (default 256). :param plate_depth_mm: Build plate depth in mm (default 256). :param spacing_mm: Minimum gap between parts in mm (default 5). :param copies: Optional JSON dict of filename->count, e.g. ``{"part.stl": 3}``. :param printer_id: Optional supported printer model id, or the name of a printer set up in Kiln. When provided, printer intelligence supplies the plate size. Keep passing it downstream — a later ``compose_multicolor_3mf`` without it judges the layout against a 256mm default plate. :returns: Dict with arranged_parts, overflow_parts, plate_utilization, summary.

輸入參數copiesfile_paths必填printer_idspacing_mmplate_depth_mmplate_width_mm

auto_arrange_parts_on_plate

Auto-arrange parts on a plate

Calculate non-overlapping XY positions for multiple parts on a print plate. Use this **before** :func:`compose_multicolor_3mf` when you have multiple separate objects (e.g., two coasters) to print in one job. Parts that share the same ``group`` index are treated as a multi-color unit and placed at the *same* XY position (they overlap intentionally). Returns a list of positioned part specs ready to pass directly to ``compose_multicolor_3mf`` — pass the SAME ``printer_id`` to that call: the composer re-centres a group it judges off ITS plate (256mm by default), so composing a layout packed for a different bed without the printer undoes this placement. Arrangement strategy (free tier): simple left-to-right row layout. For maximum plate density (2D bin-packing), use kiln-pro. Example -- two coasters, each with a body + QR layer:: positioned = auto_arrange_parts_on_plate(part_specs=[ {"stl_path": "/tmp/c1_body.stl", "extruder": 1, "group": 0, "material": "PLA Grey"}, {"stl_path": "/tmp/c1_qr.stl", "extruder": 2, "group": 0, "material": "PLA Black"}, {"stl_path": "/tmp/c2_body.stl", "extruder": 1, "group": 1, "material": "PLA Grey"}, {"stl_path": "/tmp/c2_qr.stl", "extruder": 2, "group": 1, "material": "PLA Black"}, ], plate_width=256, plate_depth=256, gap_mm=5) # -> each part now has "x", "y" set; pass to compose_multicolor_3mf Args: part_specs: List of dicts, each with: * ``stl_path`` (str) -- absolute path to the STL * ``extruder`` (int) -- 1-indexed AMS slot * ``group`` (int, optional) -- parts sharing a group get the same XY position (multi-color unit). Default: each part is i

輸入參數gap_mmpart_specs必填printer_idplate_depthplate_width

optimize_template_params

Optimize template parameters

Find the structurally strongest version of a parametric template. Sweeps each template parameter across its [min, max] range at evenly spaced sample points, generates every combination via OpenSCAD, runs structural analysis on each variant, and returns the configuration with the highest structural score. Use this when you want to **automatically** find optimal dimensions for a functional part -- e.g. "what wall thickness and bracket height give the strongest shelf bracket?" :param template_id: Template ID from the design template library. :param samples_per_param: Sample points per parameter (default 3). :param max_variants: Maximum total variants to test (default 27). :param constraints: JSON string of constraints, e.g. ``{"max_width_mm": 100, "max_height_mm": 50}``. :param output_dir: Directory for generated STLs (temp dir if empty). :returns: Dict with best_params, best_score, best_grade, best_stl_path, variants_tested, all_scores, and summary. INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience. MAKE DOORS: `design_session`, Kiln's front door for making an object, is not installed here (signed in to Kiln it runs on Kiln's servers). On this install `compile_scad` IS the make → preview → iterate loop: make it, show the preview, iterate.

輸入參數output_dirconstraintstemplate_id必填max_variantssamples_per_param

solve_template_constraints

Solve template constraints

Solve parametric constraints to find valid template parameters. Given a template and constraints (min/max/equals/ratio), iteratively adjusts parameters to satisfy all constraints while staying within the template's declared parameter ranges. :param template_id: Template identifier (e.g., "shelf_bracket"). :param constraints: JSON object mapping param names to constraint dicts. Example: ``{"width": {"min": 20, "max": 50}, "height": {"equals": 30}}`` Supported keys: min, max, equals, ratio (e.g. ``{"ratio": ["width", 0.5]}``). :returns: Dict with solved_params, satisfied/violated constraints, plus ``dof`` (how many parameters no constraint pinned), ``free`` (one sentence per unpinned parameter and the value it was left at) and ``defaults_applied``. Tell the person what was left free rather than silently accepting a default: ``min``/``max`` bound a parameter without choosing it.

輸入參數constraints必填template_id必填

iterate_design

Iterate a generated design

Automated design iteration: generate -> validate -> improve -> regenerate. Runs a closed loop that generates a model, validates it for printability issues, and if issues are found, improves the prompt and regenerates. Stops when the model passes validation or max_iterations is reached. Returns the best result. :param prompt: Text description or OpenSCAD code. :param provider: Generation provider (default ``"openscad"``). :param max_iterations: Maximum improvement attempts (1-5). :param material: Optional material for design intelligence. :param printer_model: Optional printer model for constraints. :param brief_id: The saved goal's id from ``design_session``, so the best iteration is recorded against the goal and checked against it, including against any picture kept on the goal (``reference_check``). Empty when there is no goal. :returns: Dict with the best result and iteration history. INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience. MAKE DOORS: `design_session`, Kiln's front door for making an object, is not installed here (signed in to Kiln it runs on Kiln's servers). On this install `compile_scad` IS the make → preview → iterate loop: make it, show the preview, iterate.

輸入參數prompt必填brief_idmaterialproviderprinter_modelmax_iterations

optimize_print_orientation

Optimize print orientation

Auto-rotate a mesh to minimize overhangs and maximize bed contact. Tests multiple candidate orientations and picks the one with the fewest overhangs and the most bed contact. Re-orients the mesh and places it flat on the build plate (z_min = 0). ``printability_score`` / ``printability_grade`` are the chosen orientation's score from ``analyze_printability`` itself, judged for ``material`` and ``printer_id`` — pass the same ones you gave ``analyze_printability`` and the two numbers match. :param file_path: Path to the STL file. :param output_path: Output path. Defaults to overwriting the input. :param material: Material the score is judged for (default ``"pla"``). :param printer_id: Optional printer the score is judged for. :returns: Dict with rotation angles, overhang stats, the printability score and grade, and new dimensions. INLINE 3D STAGE: on success this tool opens Kiln's interactive 3D stage — an inline viewer panel the user can orbit, zoom, and turn over — in hosts that render MCP Apps panels (Kiln's hosted connection attaches a browser stage link for hosts that don't). Oversized meshes are decimated automatically for the stage; the PNG preview is the floor, not the whole experience.

輸入參數materialfile_path必填printer_idoutput_path

check_print_readiness

Check print readiness

Single-call print readiness check with optional auto-repair. Checks the mesh is sound (parseable, manifold, no floating regions, no degenerate triangles, fits the build plate) and reads ``analyze_printability``'s verdict, which knows a short ceiling bridges. ``can_print`` is true only when the mesh is sound and Kiln's verdict lets the part print, the same verdict the print pipeline refuses on. ``verdict`` is ``ready_to_print``, ``printable_with_supports``, ``check_before_printing`` (the verdict asks for a check; it still prints, with a warning), ``wont_print`` (sound, but it won't print as it is) or ``needs_fixes`` (a mesh fault, named in ``issues``). ``validate_and_prepare`` runs the full pre-print pipeline. With ``auto_fix=True``, automatically repairs degenerate triangles, closes holes, and removes floating regions. :param file_path: Path to mesh file. :param auto_fix: Attempt automatic repairs (default False). :param output_path: Where to write the fixed file. :param bed_x_mm: Build plate X dimension (default 256). :param bed_y_mm: Build plate Y dimension (default 256). :param bed_z_mm: Build plate Z dimension (default 256). :param printer_id: Optional supported printer model id, or the name of a printer set up in Kiln. When provided, printer intelligence supplies the build volume. :param material: Material the supports verdict and the ``printability_score`` are judged for (default ``"pla"``) — ``analyze_printability``'s own, so the two agree. :returns: Dict with can_print verdict, issues, and actions taken.

輸入參數auto_fixbed_x_mmbed_y_mmbed_z_mmmaterialfile_path必填printer_idoutput_path

estimate_support_material

Estimate support material

Estimate support material needed for a mesh. Analyzes overhang triangles and projects them to the build plate to estimate the volume and weight of support material required. :param file_path: Path to a mesh (.stl, .obj, .glb, .3mf) or a CAD file (.step, .stp), which is converted automatically. :returns: Dict with support volume (mm³), weight (g), and overhang stats.

輸入參數file_path必填

rebuild_design

Rebuild a saved design

Re-execute the full build pipeline from a saved design recipe. Two modes, chosen by what the recipe carries — the result names which one ran: - **Parametric** (the recipe has OpenSCAD source): the geometry is RE-DERIVED. The recipe's numeric parameters are applied to the source and recompiled, so wall thicknesses and fastener holes come out exactly as designed. To resize a parametric design, change the parameter — with ``update_scad_parameter`` on the source, or on the recipe's parameters — and rebuild. Never scale the mesh instead: it scales every feature with the body, so a 3mm wall becomes 3.6mm and a 3.4mm M3 clearance hole becomes 4.08mm — no longer the fit it was dimensioned for. - **Mesh** (no source): the recorded part meshes are re-sliced exactly as they are. A geometry change needs a mesh edit first (``rescale_model``, ``thicken_mesh_walls``, ...), then a rebuild. Every parameter is itemized as applied, absent from the source, or skipped with a reason — an edit this tool cannot honor is reported, never silently dropped. The artifact is a print-ready 3MF where a Bambu printer is registered and the merged G-code otherwise (send that with ``upload_file``); ``wrapped`` says which one you got. When the render pipeline is available this also returns an inline preview of the rebuilt design; display that image to the user rather than summarizing it. The rebuild itself never depends on it. Example: rebuild_design("prints/bracket/") :param recipe_path: The design directory, or the recipe file. :param brief_id: Optional saved-goal id. When supplied it is recorded on the recipe before the re

輸入參數brief_idrecipe_path必填

analyze_design_requirements

Analyze design requirements

Analyze a functional requirement and return technical recommendations. This is the internal-lookup tool that resolves a natural-language requirement into material recommendations, applicable design patterns, dimensional constraints, print orientation rules, and expert guidance notes. For the user-facing flow — capturing what a user is making at the duty / environment / materials / safety layer and producing a saved goal that drives generation, the audit, and the post-print review — call ``design_session(verb="start", idea="...")`` first. That tool internally calls this one for technical lookups; agents calling ``analyze_design_requirements`` directly should treat it as a pre-design analysis pass, not the user-facing entry point. Examples: "shelf bracket that holds 10 lbs of books" "outdoor planter that holds water" "phone mount for car dashboard, survives summer heat" "snap-fit enclosure for a Raspberry Pi" "flexible phone case that absorbs drops" "cookie cutter, food safe" "decorative vase, looks premium" Args: requirements: Natural language description of what the object needs to do — functional needs, environment, loads, etc. material: Optional material override (e.g. "petg"). If not provided, the system recommends the best material.

輸入參數materialrequirements必填

build_generation_prompt

Build a generation prompt

Build a design-aware generation prompt for original 3D creation. This is the best pre-generation tool for original designs. It takes a natural-language idea and appends manufacturing constraints, printer-fit limits, and material guidance so text-to-3D backends receive a prompt grounded in real printability constraints. When provider is specified, the prompt length is optimized for that backend. Use provider="openscad" for maximum constraint injection (100K chars), "meshy" for lean prompts (600 chars), or omit for the default limit. Args: requirements: Natural language description of the desired part. material: Optional material override (e.g. "petg"). printer_model: Optional printer model ID (e.g. "bambu_a1"). provider: Optional generation provider (e.g. "openscad", "meshy", "gemini"). Controls prompt length budget.

輸入參數materialproviderrequirements必填printer_model

audit_original_design

Audit an original design

Run a ruthless audit of an original design before printing. Combines design briefing, prompt enhancement, mesh validation, printability scoring, orientation analysis, advanced diagnostics, and regeneration feedback into a single report. Use this after generating or modeling a new part to answer: "Is this genuinely ready to print, and if not, what exact changes should the agent make next?" Args: file_path: Path to STL or OBJ file. requirements: Functional requirements the design must satisfy. material: Optional material constraint (e.g. "petg"). printer_model: Optional printer model ID (e.g. "bambu_a1"). build_volume_x: Build volume X in mm. Pass all three of X, Y and Z to override the printer's build volume; any one left out means all three are ignored. build_volume_y: Build volume Y in mm. Pass all three of X, Y and Z to override the printer's build volume; any one left out means all three are ignored. build_volume_z: Build volume Z in mm. Pass all three of X, Y and Z to override the printer's build volume; any one left out means all three are ignored. nozzle_diameter: Nozzle diameter in mm. Leave unset for the nozzle Kiln has for ``printer_model``, else the stock size; the report says which it used. layer_height: Layer height in mm. max_overhang_angle: Supportless overhang threshold in degrees.

輸入參數materialfile_path必填layer_heightrequirements必填printer_modelbuild_volume_xbuild_volume_ybuild_volume_znozzle_diametermax_overhang_angle

get_material_design_profile

Get material design profile

Compatibility lookup for a material's public design floor. Returns the same public safety and process fields as ``get_material_properties``. For deeper engineering guidance, ask one specific question with ``answer_material_question``. Args: material: Material ID (for example ``"pla"`` or ``"petg"``).

輸入參數material必填

list_design_materials

List design materials

List public material identifiers and safety/process summaries. The list is sourced only from public Kiln data and does not include optional engineering enrichment.

無需輸入參數。

recommend_design_material

Recommend a design material

Recommend material for engineering/functional parts (strength, heat, environment). Analyzes functional requirements and recommends the optimal material considering mechanical needs, environmental exposure, printer capabilities, and ease of printing. Returns the top recommendation with reasoning, warnings, and alternatives. **Which material tool to use:** - Designing a part and need engineering specs? → ``recommend_design_material`` (this tool) - Quick intent-based pick for your own printer? → ``recommend_material`` - Ordering a print from a service? → ``suggest_material_for_order`` Args: requirements: What the object needs to do (e.g. "hold 5 kg of books on an outdoor shelf"). printer_has_enclosure: Whether the printer has an enclosed build chamber (needed for ABS, ASA, Nylon, PC). printer_has_direct_drive: Whether the printer has a direct drive extruder (needed for TPU). max_hotend_temp_c: Maximum hotend temperature in Celsius.

輸入參數requirements必填max_hotend_temp_cprinter_has_enclosureprinter_has_direct_drive

estimate_structural_load

Estimate structural load

Estimate safe structural load for a cantilevered section. The figure is Kiln Pro's, worked out for this one part -- strength, sag and the arm's own weight, for any length of arm and size of section; below Pro the answer says the load was not checked. A part whose arm cannot hold its own weight gets no figure: ``load_checked`` is false and ``message`` says why. When the figure cannot be had (offline, signed out, no answer) the answer says why and that the part is unchecked. Args: material: Material ID (e.g. "petg", "nylon", "polycarbonate"). cross_section_mm2: Effective load-bearing cross section in mm^2. cantilever_length_mm: Cantilever length in mm. load_across_layers: True when the load pulls the layer interfaces apart (load along the build/Z direction — the WEAK direction for FDM, so the figure is lower). False when the load acts within the layer planes (e.g. a bracket printed lying flat — the strong direction). If unsure, leave True: it is the conservative default.

輸入參數material必填cross_section_mm2必填load_across_layerscantilever_length_mm必填

check_material_environment

Check material for an environment

Check whether a material is compatible with an environment, and optionally whether it meets the rules the part must meet. Args: material: Material ID from the design knowledge base. environment: Natural language environment description. requirements: Optional rules to check the material against before printing: any of ``food_safe``, ``reach``, ``rohs``, ``flame_retardant``, ``uv``. The answer comes back under ``rule_checks``: the material's warnings always, and a meets / does-not-meet verdict with its reason where the plan includes it; when the check cannot be made, ``rule_checks.checked`` is false and no requirement is called met.

輸入參數material必填environment必填requirements

get_design_template_info

Get design template info

Look up one design template by id — parametric part or pattern. Resolves an id from EITHER library and says which it came from, so a caller never has to know in advance: * a PARAMETRIC PART (``generatable: true``) comes back with its full parameter list — names, defaults, and units — which is what you need to fill in the user's own dimensions and call ``generate_from_template``. * a DESIGN PATTERN (``generatable: false``) comes back with its use cases, material compatibility, and print orientation. Patterns are guidance for OpenSCAD you write yourself; ``generate_from_template`` does not accept them. Args: template: Template identifier, from either library — e.g. "shelf_bracket" (part) or "snap_fit_cantilever" (pattern). Use ``find_design_templates`` to search.

輸入參數template必填

list_design_templates_catalog

Browse design templates

Browse the whole design-template library, both kinds. Returns every PARAMETRIC PART Kiln can render on its own — brackets, bins, stands, cases, hooks, jigs, clamps, plumbing and garden parts — followed by the DESIGN PATTERNS that are guidance rather than geometry. Every entry carries a ``generatable`` flag and the call to make next. The parametric parts are FREE and need no AI provider: they compile locally through OpenSCAD. Reach for one whenever a user wants a functional part to their own dimensions, and offer it before writing OpenSCAD from scratch — it is faster and every part in the library is print-verified. Use ``find_design_templates(use_case)`` to search rather than reading the whole catalog.

無需輸入參數。

find_design_templates

Find design templates

Find a ready-made parametric part for what the user is making. CALL THIS FIRST whenever a user asks for a FUNCTIONAL PART to their own dimensions — a bracket that holds a shelf, a bin that fits a drawer, a clip for an 8 mm cable, a case for a board, an adapter between two hose sizes. Kiln ships a library of print-verified parametric parts; offering one is faster and more reliable than writing OpenSCAD from scratch, it is FREE, and it needs no AI provider or API key. Do not wait to be asked whether a template exists — search, and if something fits, offer it. Ranked best match first, across both libraries: * ``generatable: true`` — a PARAMETRIC PART. The result carries its parameters, so you can fill in the user's dimensions and call ``generate_from_template(template_id, {...})`` to render a printable STL. * ``generatable: false`` — a DESIGN PATTERN (snap fit, living hinge, press fit). Guidance for OpenSCAD you write yourself; ``generate_from_template`` does not accept it. No match is a normal answer, not a failure — fall back to writing OpenSCAD and compiling with ``compile_scad``. Args: use_case: What the user is making, in their words — e.g. "shelf bracket", "storage bin", "cable clip", "enclosure", "gear train", "hose adapter".

輸入參數use_case必填

match_design_requirements

Match design requirements

Identify which functional requirements apply to a design task. Scans natural language for requirement triggers (load bearing, watertight, outdoor, food safe, heat resistant, flexible, impact resistant, precision, aesthetic) and returns matched constraint sets with rules and guidance. Use this to understand WHAT constraints apply before getting the full design brief. Args: description: What the object needs to do (e.g. "outdoor hook that holds a heavy hanging planter").

輸入參數description必填

版本歷史

3
  1. v1.5.1最新Nov 4, 2026
  2. v1.5.0Oct 21, 2026
  3. v1.4.1Sep 16, 2026

評分

已滿足適用檢查項的 100%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分