Community程式設計與開發github.com

martinsgmx/3d-auto-fabrik

協調 mcp-cura 和 mcp-moonraker MCP 伺服器,讓 AI 代理能將 3D 模型從網格檔案一路處理到受監督的 Klipper/Moonraker 列印:網格檢查與修復、CuraEngine 設定檔解析與切片、G-code 安全驗證、傳輸到印表機、開始列印、即時監控、暫停/恢復/取消以及工作佇列管理——全程在伺服器的風險與核准閘門之後。當使用者提及切片、3D 列印、STL/3MF 切片、CuraEngine、Klipper 或 Moonraker 時使用此技能——即使他們從未提及這些 MCP 伺服器名稱——以及每當使用者要求準備、驗證、發送或監督列印工作時。請勿將其用於一般 CAD 創作或編輯 Klipper...

3d-auto-fabrik 是什麼?

此技能充當 `mcp-cura` 和 `mcp-moonraker` 這兩個 MCP 伺服器之間的「智慧編排者」。它將 3D 網格檔案從切片階段一路引導至在 Klipper/Moonraker 印表機上安全列印。這兩個伺服器刻意保持獨立以避免風險;此技能是確保資料在兩者之間安全傳遞的唯一橋樑。其核心價值在於強制執行嚴格的安全協定:在準備高風險動作(例如開始列印、取消或修改設定)之前,必須先取得明確的使用者核准。它會引導代理完成結構化的工作流程,包括網格匯入、檢查與修復、CuraEngine 設定檔解析、G-code 生成與安全驗證、檔案傳輸以及即時列印監控。最終目標是將生成式 AI 代理的便利性與工業級 3D 列印所要求的謹慎控制結合起來,並將任何可能造成物理損壞的風險降至最低。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/martinsgmx/agent-skill-3d-auto-fabrik/tree/HEAD/skills/3d-auto-fabrik

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

3d-auto-fabrik 是做什麼的?

mcp-cura(網格 → 切片 → G-code)與 mcp-moonraker (印表機狀態 → 列印)的編排器。這兩個伺服器刻意互不知曉: mcp-cura 從不接觸印表機,而 mcp-moonraker 從不進行切片。 此技能即是銜接兩者的膠水。檔案僅能透過明確、需經核准的交接程序在兩者之間移動。

不可協商的規則——在接觸硬體前請先閱讀

這些規則的存在是因為 3D 印表機是一個加熱器、一個馬達和一個尖銳噴嘴的結合體。 這種摩擦正是其設計的重點。

  1. 切勿代表使用者確認已準備好的高風險動作。 moonraker_print_start、moonraker_print_cancel、moonraker_run_macro、 cura_artifact_export、moonraker_file_delete 和相關工具會先傳回一個核准提示。 你的工作是清楚且誠實地呈現該提示,然後等待。只有在使用者明確核准(在聊天中,或透過在頻外執行 mcp-moonraker approve <id> / mcp-cura approve <id>)之後, 你才能呼叫對應的 *_confirm_action 工具。切勿發明、重複使用或改寫核准 ID 或確認短語。
  2. 切勿為了「幫忙」而跳過驗證。 在任何列印前必須執行 cura_gcode_verify; 在任何印表機操作前必須執行 moonraker_verify_connection; 在任何傳輸後必須執行 moonraker_files_list + moonraker_file_metadata。
  3. moonraker_emergency_stop 是唯一無需閘門控制的槓桿。 僅在「當下」發生物理上的錯誤狀況時使用(冒煙、異音、噴嘴刮擦零件、軸碰撞)。 對於非緊急情況的「停止加熱」,請使用 moonraker_turn_off_heaters——此操作可逆且無需閘門控制。
  4. 遵守本地安全政策。 溫度上限、唯讀模式、allow_raw_gcode、allow_host_admin 是由使用者特意設定的。 如果某個工具拒絕執行,請轉達該拒絕訊息及其原因。請勿重新表述呼叫、啟用該標誌,或尋找另一個執行相同功能的工具。
  5. 有疑問時,停下並提問。 暫停的印表機浪費一點電;錯誤的列印浪費數小時和線材;繞過閘門可能導致房屋燒毀。 使用者隨時都可聯繫——請提問。

預飛檢查——每次接觸硬體的會話

  1. mcp-cura doctor 和 mcp-moonraker doctor(本機、唯讀診斷)。
  2. moonraker_verify_connection——已連線?延遲如何?Klipper 狀態為 ready、busy 或 shut down?
  3. cura_policy_info 和 moonraker_policy_info——在計畫任何變更前,了解當前啟用的限制(溫度上限、核准模式、唯讀開關)。
  4. moonraker_server_info——確認 Klipper 狀態是 ready,而非 shutdown 或忙於其他工作。
  5. 與使用者確定計畫:哪台印表機、哪種線材、哪個噴嘴、哪種品質、哪個檔案、多少份數、在熱床上的位置。 請勿猜測。

如果某個伺服器缺失或無法連線,請說明情況,並引導使用者查閱 references/troubleshooting.md。 請勿為了讓檢查通過而編輯設定檔、安裝套件或使用 --force 執行任何操作。

工作流程

逐步進行。每個階段結束後簡短回報,並在需要閘門控制時暫停等待使用者確認。

階段 0 —— 計畫。 用一段話總結該工作(檔案、印表機、線材、噴嘴、設定檔、份數、擺放位置)。獲得使用者首肯後再繼續。

階段 1 —— 匯入。 使用 cura_artifact_import,路徑為已設定匯入根目錄下的絕對路徑(預設為 ~/Downloads、~/Documents、~/Desktop、~/models)——若非位於根目錄下,則使用 base64 data 參數。 根目錄限制了「檔案系統路徑」;data 路徑是伺服器自身用於接收用戶端提供位元組資料的支援通道,並非繞過手段,也無需變更政策。 如果路徑匯入被拒絕,請改用 data 重新匯入相同的位元組資料(內容定址會傳回相同的工件 ID),而不是將任務降級為「我無法協助」。 記錄回傳的 artifact_id——後續每個步驟都會參考它。

階段 2 —— 檢查與修復。 執行 cura_mesh_inspect(邊界尺寸 (mm)、三角面數、水密性、體積、退化三角面)。然後,根據需要:

  • 方向 / 擺放 / 縮放 → cura_mesh_transform (縮放 → 旋轉 → 平移,然後 center_on_bed)
  • 非封閉或粗糙表面 → 使用 voxel_size 參數執行 cura_mesh_remesh,或 使用 cura_mesh_offset 來膨脹/收縮封閉網格
  • 多個零件一起列印 → cura_mesh_merge(三角湯)或 cura_mesh_boolean(真正的聯集/差集——基於體素)
  • 三角面過多 → 設定 target_triangles 目標執行 cura_mesh_decimate

每次修復後再次檢查,並引用結果的數值。中等風險的網格操作受政策閘門控制但無需核准;話雖如此,還是要向使用者展示變更了什麼。

階段 3 —— 解析並驗證設定檔。 使用 cura_profile_list 尋找設定定義和品質設定檔,然後執行 cura_profile_resolve (定義 + 品質 + 線材 + 變體 + 用途)。閱讀警告訊息:Cura 無法評估的表達式、嚴重的溫度違規。 接著執行 cura_profile_verify——在切片之前,錯誤必須為零。 如果非零,請修正設定檔(或選擇另一個)並說明原因。切勿在驗證未通過的情況下進行切片。

階段 4 —— 切片。 cura_slice(model_artifact_ids=[…], definition, quality, material, variant, intent, overrides?, name, wait=true, wait_timeout_secs)。 遵守 max_concurrent_jobs(預設為 2)。使用 cura_slice_status 輪詢; 短時間工作可使用 cura_slice_wait;僅對佇列中/執行中的工作使用 cura_slice_cancel。 如果切片失敗,cura_slice_status 會攜帶引擎日誌尾部——請引用實際的錯誤訊息。

階段 5 —— G-code 審查。 針對切片回傳的 G-code 工件:

  • cura_gcode_inspect——預估時間、線材用量、層數、Z 軸範圍、最高溫度、可疑指令。
  • cura_gcode_verify——危險指令、溫度 vs. 本地政策、缺少加熱器關閉 / 步進馬達停用 / 中繼資料。
  • 如果有缺少的項目,cura_gcode_prepare 會建立一個「新」工件,其中包含安全關閉序列(或完整的結束序列)。 當你使用它時,請將「新」工件的 ID 繼續往後傳遞——原始工件保持不變。

然後向「使用者展示摘要」——時間、線材、最高溫度、驗證結果——並在進入階段 6 之前獲得明確確認。 這是中止列印的最後一個低成本機會。

階段 6 —— 傳輸到印表機。 G-code 工件必須存在於印表機的 gcodes 根目錄中。 MCP 伺服器並未暴露上傳工具;支援的路徑如下:

  • cura_artifact_export 將工件匯出到印表機可以讀取的匯出根目錄(印表機監控的掛載共享/USB),或者
  • 使用者自行將檔案複製到該處(透過網頁 UI、SCP、共享),或者
  • 如果——且只有在——使用者明確要求時,才使用 Moonraker HTTP 上傳端點作為一次性的操作,並清楚地記錄在案。

在觸碰印表機之前,請確認檔案已送達: moonraker_files_list(根目錄 gcodes)和 moonraker_file_metadata—— 預估時間和線材用量應與 Cura 輸出相符。

階段 7 —— 列印。 在執行 moonraker_print_start 之前:

  • moonraker_printer_status 顯示 Klipper 已就緒且空閒,而非關閉或忙碌;moonraker_temperatures 顯示合理的環境讀數。
  • 熱床已清空、正確的列印板、正確的線材已載入、門已關閉——請詢問使用者;你無法看到這些。
  • 使用者確認確切的檔案名稱。moonraker_print_start 會準備一個高風險動作;轉達核准提示並等待核准,然後使用該短語和 acknowledge=true 參數執行 moonraker_confirm_action。

在列印期間:輪詢 moonraker_printer_status 和 moonraker_temperatures; 當某些情況看起來不對勁時,使用 moonraker_camera_snapshot 進行目視檢查; 當指令失敗時使用 moonraker_gcode_history。 如需暫停列印進行檢查,請使用 moonraker_print_pause → 檢查 → moonraker_print_resume。 如需中止,請使用 moonraker_print_cancel(高風險,需雙重確認)——僅在使用者要求時。 列印結束後,moonraker_print_history 會記錄結果。

列印後。 加熱器應已關閉(結束序列會執行此操作——透過 moonraker_temperatures 驗證)。 提醒使用者清空列印板。如果使用者想要清除工件,請列出它們(cura_artifact_list)並在獲得明確確認後才刪除——cura_artifact_delete 屬於高風險操作。

核准一覽

核准模式(in_band、out_of_band、both)是在各伺服器的 [approval] 區段中設定的。 在每種模式下,一個已準備的動作 = 一個 approval_id = 一個具有短 TTL(預設 120 秒)的單次使用確認短語。 從 prepare 呼叫中儲存的工具和參數才是實際執行的內容;提供給 *_confirm_action 的參數僅供裝飾用。 *_pending_approvals 會重新列出等待中的項目;moonraker_cancel_approval / mcp-cura deny <id> 會在動作執行前使其失效。 完整協定:references/safety-approvals.md

快速參考——更多資訊的閱讀位置

安裝及平台相關的 MCP/技能註冊資訊位於儲存庫文件(docs/platforms.md)中,而非此技能文件內——當使用者詢問設定時,請載入那些文件。

何時不應使用此技能

手動起草或修復 CAD/STL 幾何圖形(應使用建模工具)、編輯 printer.cfg 或 Klipper 包含檔案(主機管理和設定寫入預設為關閉——且應保持關閉)、或任何涉及主機重啟、韌體重啟或使用者未明確啟用的原始 G-code 操作。遇到這些情況,請說明並停止。

相關技能