Community编程与开发github.com

3D自动Fabrik

编排 mcp-cura 和 mcp-moonraker MCP 服务器,使智能体能够将 3D 模型从网格文件带至受监督的 Klipper/Moonraker 打印:网格检查与修复、CuraEngine 配置文件解析与切片、G 代码安全验证、传输至打印机、打印启动、实时监控、暂停/恢复/取消及作业队列管理——始终位于服务器的风险与审批门之后。当用户提及切片、3D 打印、STL/3MF 切片、CuraEngine、Klipper 或 Moonraker 时——即使他们从未提及这些 MCP 服务器——以及当用户要求准备、验证、发送或监督打印作业时,使用本技能。请勿用于通用 CAD 创作或编辑 Klipper...

3D自动Fabrik 是什么?

本技能专为智能体(如 Claude Code、Cursor、Codex 等)设计,作为 **mcp-cura**(负责网格处理、切片与 G 代码生成)和 **mcp-moonraker**(负责打印机状态管理与打印执行)这两个 MCP 服务器的编排器。其核心价值在于强制实施严格的安全审批流程,确保在接触实际硬件(3D 打印机)前,所有高风险操作(如启动打印、取消作业、执行宏)都必须获得用户的明确确认。它定义了一条从模型导入、网格检查与修复、配置文件解析与验证、切片、G 代码安全检查、传输到打印机,再到最终打印、实时监控及作业后处理的完整管道。该技能适用于任何涉及 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自动Fabrik 是做什么的?

编排器用于 mcp-cura(网格 → 切片 → G 代码)和 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 就绪、忙还是 已关闭?
  3. cura_policy_info 和 moonraker_policy_info——了解活动限制 (温度上限、审批模式、只读开关),然后再计划变更操作。
  4. moonraker_server_info——确认 Klipper 处于 ready 状态,而不是 shutdown 或正忙于另一个作业。
  5. 与用户确定计划:哪台打印机、哪种耗材、哪个 喷嘴、哪种质量、哪个文件、多少份、在热床上的位置。 不要猜测。

如果某个服务器缺失或无法连接,请说明情况并引导用户查看 references/troubleshooting.md。不要编辑配置文件、安装软件包或运行任何 --force 操作来使检查通过。

管道

逐步进行。在每个阶段后简要报告,并在需要门控时暂停等待用户。

阶段 0——规划。 用一段话总结作业(文件、打印机、 耗材、喷嘴、配置文件、份数、放置位置)。获得批准。

阶段 1——导入。 使用在已配置的导入根目录(默认为 ~/Downloads、~/Documents、~/Desktop、 ~/models)下的绝对路径调用 cura_artifact_import——或者对于不在根目录内的文件,使用 base64 data 参数。根目录限制的是文件系统路径;data 路径是服务器自身支持的、用于客户端提供字节的通道,并非绕过方式,也不需要更改策略。如果路径导入被拒绝,则通过 data 重新导入相同的字节(内容寻址会返回相同的工件 ID),而不是将作业降级为“我帮不上忙”。记录返回的 artifact_id——后续每一步都需要引用它。

阶段 2——检查与修复。 执行 cura_mesh_inspect(以毫米为单位的边界、 三角形数量、水密性、体积、退化三角形)。然后,根据需要:

  • 方向/放置/缩放 → 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 代码审查。 对切片返回的 G 代码工件:

  • cura_gcode_inspect——预估时间、耗材、层数、Z 范围、最高 温度、可疑命令。
  • cura_gcode_verify——危险命令、温度 vs 本地策略、 缺少加热器关闭/步进电机停用/元数据。
  • 如果缺少某些内容,cura_gcode_prepare 会创建一个新的工件,其中包含 一个安全的关闭序列(或完整的结束序列)。当你使用它时,请将 新的工件 ID 传递下去——原始内容保持不变。

然后向用户显示摘要——时间、耗材、最高温度、 验证结果——并在阶段 6 之前获得明确确认。这是 最后一个成本低廉的中止机会。

阶段 6——传输至打印机。 G 代码工件必须存在于打印机的 gcodes 根目录中。MCP 服务器不提供上传工具;支持 的路径是:

  • cura_artifact_export 导出到一个打印机可读取的导出根目录(打印机监视的挂载 共享/USB),或者
  • 用户自行将文件复制到那里(Web 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 代码的操作。说明情况并停止。

相关技能