关于 MCP 3D Printer Server
MCP 3D Printer Server 是一个 MCP 服务,可将 AI 客户端连接到 OctoPrint、Klipper、Bambu Lab、Prusa、Duet、Repetier-Server 和 Creality 等多种 3D 打印机。它支持查看状态、管理打印任务、编辑 STL 模型及切片。
主要功能
- 01支持七种打印机后端,通过 PRINTER_TYPE 选择
- 02查看打印机状态、上传文件、启动与取消任务
- 03STL 模型缩放、旋转、平移与底座扩展
- 04切片与 G-code 峰值温度检查
- 05打印与加热前需人工确认的安全闸门
- 06可选 Blender MCP 桥接
适用场景
- 01查询 Bambu 或 Prusa 打印机的打印进度
- 02调整 STL 模型尺寸后切片并发送打印
- 03通过 Klipper 的 Moonraker 上传 G-code 并稍后启动
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露打印机状态、文件、上传、启动、取消、温度、STL 编辑及切片等工具与资源,并可通过 Blender MCP 服务转交模型。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP 3D Printer Server
感谢 FULU Foundation、Louis Rossmann 和 OrcaSlicer-bambulab 贡献者。 感谢你们捍卫消费者所有权、开源开发者、维修权利,以及那些不应因封闭软件而让正常运行的硬件变得更糟的设备所有者。
此服务将 FULU OrcaSlicer-bambulab 分支作为 Bambu Lab 项目的首选切片器。请参阅 FULU 指南,了解设置方法和当前状态。
一个 MCP 服务,可将 Claude、Codex 和其他 MCP 客户端连接到运行 OctoPrint、Klipper(Moonraker)、Duet、Repetier-Server、Bambu Lab、PrusaLink 或 Prusa Connect,以及 Creality 的 3D 打印机。你的 Agent 可以检查状态、上传并开始任务、取消打印、编辑 STL 网格、运行切片器,并通过可选的 Blender MCP 桥接将模型交给 Blender。
浏览文档网站,查看可搜索的设置指南、各打印机对应的凭据、切片说明和完整工具参考。文档由此 README 和 docs 文件夹生成。
只在 Bambu Lab 打印机上打印? bambu-printer-mcp 是本项目的 Bambu 专用分支,提供更多 Bambu 功能,包括 AMS 库存与匹配、相机快照、X2D 支持和 Claude Desktop 扩展。
在贡献者的帮助下构建。感谢所有分享修复方案、认真撰写错误报告并进行真实打印机测试的人!
与你的 Agent 一起设置
告诉你的 Agent 你使用的打印机系统(OctoPrint、Klipper、Bambu Lab、Prusa 等)及其地址(如果你知道),然后复制并粘贴以下内容:
Install mcp-3d-printer-server in the agent/harness I'm using now.
Read https://github.com/DMontgomery40/mcp-3D-printer-server/blob/main/docs/SETUP.md
for the current setup instructions and supported printer backends.
Detect my OS and harness, then use its native MCP configuration or installer.
Preserve my existing servers and settings. Prefer the published npm package
(npx -y mcp-3d-printer-server, stdio); use Node.js 24 if a runtime is needed.
Ask which printer system I use and set PRINTER_TYPE to match. Never guess it.
Then ask only for the values that backend needs:
- octoprint: PRINTER_HOST, PRINTER_PORT if not 80, API_KEY
- klipper (Moonraker): PRINTER_HOST, PRINTER_PORT (usually 7125),
API_KEY if Moonraker requires authentication
- duet: PRINTER_HOST, PRINTER_PORT if not 80
- repetier: PRINTER_HOST, PRINTER_PORT (usually 3344), API_KEY
- bambu: PRINTER_HOST, BAMBU_SERIAL, BAMBU_TOKEN (the LAN access code),
and BAMBU_MODEL
- prusa: PRINTER_HOST (PrusaLink address or connect.prusa3d.com), API_KEY
- creality: PRINTER_HOST, PRINTER_PORT if not 80, API_KEY (bearer token)
For Bambu Lab, confirm the exact printer model with me; never guess it, and
explain any LAN Only Mode or Developer Mode setting I need to enable.
Keep keys, tokens, and access codes in local/private configuration; do not
repeat them in chat.
Bambu Lab has the most hardware testing. The other backends use each
system's HTTP API and rely on community reports, so tell me plainly if a
backend does not respond as the guide describes.
Offer these optional extras, and set them up only if I choose them:
- Blender MCP for model edits: uvx mcp-for-blender (formerly blender-mcp,
which now installs it as a compatibility wrapper). Its Blender addon must be
installed, enabled, and connected inside Blender.
- A slicer for slice_stl: look for an installed PrusaSlicer, OrcaSlicer,
FULU OrcaSlicer-bambulab, Bambu Studio, or CuraEngine before suggesting
an install.
Configure executables in the server environment. Do not enable
MCP_ALLOW_EXECUTABLE_ARG. Leave print confirmation on: do not set
PRINT_REQUIRE_CONFIRMATION=0 or BAMBU_REQUIRE_CONFIRMATION=0 unless I ask
for a headless setup.
Verify that the MCP initializes, lists its tools, and reads printer status.
Do not start a print or change printer settings, including temperatures, as
a setup test. Tell me what worked and whether I need to restart or reload
the harness.
设置参考 · 打印机后端 · 切片指南 · Blender MCP
可以向你的 Agent 提出什么要求
直接说出你想要的结果,而不是操作步骤。当前模型可以规划并调用多个工具:搜索网页、读取照片、查找精确尺寸、编辑模型、切片和打印。如果遇到重要选择,例如使用哪台打印机或哪种耗材,或者是否开始打印,请预期它会提出一两个问题。
此服务提供打印机、切片和网格工具。网页搜索、照片读取和 Blender 编辑由你的 Agent 及其其他连接提供,例如 Blender MCP 服务。你的 Agent 能读取哪些信息取决于打印机系统;请参阅打印机后端。
从任何内容开始
- “这是 MakerWorld 上的一个手机壳。把它改成适配我的 iPhone 17 Pro Max,然后打印出来。”
你的 Agent 会读取 Apple 的尺寸图纸,在 Blender 中根据新摄像头和按键的位置调整手机壳,检查适配情况,导出经过验证的 STL,为你的打印机切片,并在开始打印前征求你的确认。查看完整操作示例。 - “可以打印一个替换件吗?” (附上一张断裂柜门卡扣的照片)
它会询问一两个影响适配效果的尺寸,建模零件,然后用你选择的打印机打印出来。 - “把这个支架放大 20%,并加厚底座。”
它会缩放 STL、加长底座,并在切片前报告新的尺寸。
查看任意打印机的状态
- “Bambu 的打印进度到哪儿了?”
它会请求最新状态报告,并告诉你打印进度、当前层数和剩余时间。 - “Prusa 打印完了吗?”
它会通过 PrusaLink 读取打印机状态,并报告打印机状态和任务进度。 - “OctoPrint 打印机的热床和喷嘴温度是多少?”
它会读取 OctoPrint 的打印机状态,包括当前温度和目标温度。 - “第一层粘不住。取消打印。”
它会通过该打印机的后端发送取消命令,然后检查打印机状态。
切片并打印
- “用 PETG 打印这个。” (附带一个 STL)
它会使用你设置的 PETG 耗材配置进行切片,并检查任务的最高温度。随后,服务会在开始打印前请你确认。 - “在 Bambu 上打印我昨晚切片的支架。”
它会将热板上的模型、喷嘴、热床类型、材料和温度与打印机的实时状态进行核对,然后在上传并开始任务前请你确认。 - “把 benchy.gcode 发送到 Klipper 打印机,但先不要开始打印。”
它会通过 Moonraker 上传文件,供你稍后开始打印。
从这里开始
从这里开始
| 我想…… | 接下来阅读 |
|---|---|
| 将此 MCP 连接到我的 Agent | 复制设置请求 |
| 查看我的 Agent 可以用它做什么 | 可以向你的 Agent 提出哪些请求 |
| 查找我的打印机凭据 | 打印机后端设置 |
| 手动配置、使用 Docker 配置或通过 HTTP 配置 | 安装和配置参考 |
| 从我的 Agent 进行切片或排查切片问题 | 切片指南 |
| 为 Bambu Lab 打印机使用开源切片 | FULU 指南 |
| 在 Blender 中建模或调整零件 | Blender 指南 和 Blender 工具 |
| 查看版本变更或贡献者名单 | 更新日志、版本发布和贡献者 |
最新动态
## 新增内容请参阅更新日志,了解各版本的变更。下一版本将把打印安全门控机制扩展到所有打印机后端:每次开始打印和发送正向加热指令时,都需要人工确认;服务器还会根据硬件和材料上限检查确切的 G-code。此外,该版本还新增了兼容 Bambu 的命令行切片功能(使用解析后的机器预设和模板注册表)、用于从 Blender 导出经验证 STL 的 blender_mcp_export_stl,以及本文档站点。1.2.9 版本修复了 Bambu FTPS 上传时出现“Premature close”的问题(#22),新增标准 Blender MCP 发现、转发和经验证的 STL 编辑功能,要求原始打印启动时提供 Bambu 打印机型号,并隔离每个服务的临时文件。此外,#20 和 #21 规定,按调用指定可执行文件(例如切片器路径或桥接命令)必须显式选择启用。
目录
目录
说明
说明
mcp-3d-printer-server 是一个用于 3D 打印机的模型上下文协议服务。它为 Agent 提供打印机控制功能(状态、文件、上传、开始、取消和温度)、STL 网格工具、切片自动化、Bambu Lab 项目打印,以及可选的 Blender MCP 服务桥接。一个 PRINTER_TYPE 用于选择默认后端,每个打印机工具都支持按调用指定 type 和 host,因此一个服务可以连接多台打印机。
| 后端 | PRINTER_TYPE | 测试证据 |
|---|---|---|
| Bambu Lab | bambu | 测试最充分,包括维护者使用与仅支持 Bambu 的分支相同的硬件进行测试 |
| OctoPrint | octoprint | 社区报告 |
| Klipper(Moonraker) | klipper | 社区报告,包括通过 Moonraker 连接 Creality K1 Max |
| PrusaLink 和 Prusa Connect | prusa | 社区报告 |
| Duet | duet | 已实现;尚无硬件测试报告 |
| Repetier-Server | repetier | 已实现;尚无硬件测试报告 |
| Creality | creality | 已实现;尚无硬件测试报告 |
各后端读取和发送的内容有所不同。确切的 API 调用、凭据和相关报告,请参阅打印机后端设置。
资源使用说明。 STL 工具会将整个网格加载到内存中。较大或较复杂的文件(超过约 10 MB)可能会占用大量内存。请参阅一般限制与注意事项。
FULU 与开源打印
## FULU 与开源打印FULU OrcaSlicer-bambulab 是 Bambu Lab 项目的一级切片器目标(SLICER_TYPE=orcaslicer-bambulab;别名包括 fulu-orca 和 orca-studio),也是在设置 PRINTER_TYPE=bambu 且未配置切片器时的默认切片器。slice_stl 和 print_3mf 的自动切片使用其项目命令行,而 check_fulu_orca_setup 会检查安装情况和运行时负载。
可选的 FULU BambuNetwork bridge 是独立的运行时。fulu_bambu_network_rpc 可以探测它并发送受限的 RPC 调用,但服务不会自行将打印从本地 MQTT 和 FTPS 路径切换到 BambuNetwork 或云端。
查看 FULU 指南,了解平台运行时设置、桥接探测,以及当前 macOS 和 Windows 测试状态。
功能
功能
- 支持七种打印机后端,通过
PRINTER_TYPE选择:OctoPrint、Klipper(Moonraker)、Duet、Repetier-Server、Bambu Lab、PrusaLink 或 Prusa Connect,以及 Creality - 每次调用都可传入
type、host、port和api_key参数,以便操作多台打印机 - 获取打印机状态、列出文件、从内联内容或本地路径上传 G-code、启动已存储的文件、取消作业,以及设置热床或喷嘴温度
- STL 工具:检查尺寸、缩放、旋转、平移、延伸底座、合并顶点、居中、放平、变换模型的一个部分,以及渲染多角度 SVG 预览
- 所有后端均设有打印和加热安全关卡:检查精确的 G-code,确认每个加热器目标温度不超过硬件和材料上限,检查打印机状态,并通过 MCP elicitation 由人工确认。关闭加热器和取消操作不受关卡限制
- 通过 PrusaSlicer、Slic3r、OrcaSlicer、CuraEngine、FULU OrcaSlicer-bambulab 或 Bambu Studio 命令行进行切片,并检查 G-code 峰值温度;支持通过单次调用完成处理和打印
- 兼容 Bambu 的命令行切片:从切片器安装中解析出精确的模型和喷嘴机器预设,支持耗材槽位和颜色、摆放选项,以及本地模板注册表
- Bambu Lab 项目打印:检查项目板块与最新打印机报告是否相符后,通过 FTPS 上传已切片的
.3mf,并通过 MQTT 使用板块的 G-code 路径、MD5、AMS 映射和校准标志启动打印;使用 FULU OrcaSlicer-bambulab 或 Bambu Studio 自动切片未切片的项目 - 打印操作必须指定 Bambu 打印机型号;缺少时会通过 MCP elicitation 询问
- 检查 FULU OrcaSlicer-bambulab 设置并诊断 BambuNetwork bridge RPC,但拒绝原始打印方法
- 可选的 Blender MCP 桥接:发现标准 Blender MCP 服务的工具、转发调用、将指定场景对象导出为经过验证的 STL,并运行经过验证的 STL 编辑
- 切片器、桥接和 Blender 可执行文件均来自服务配置,除非你明确启用按调用选择器
- 用于打印机状态、文件和文件详情的 MCP 资源
- 传输方式:stdio(默认)和 streamable HTTP;另提供 Docker 镜像
可用工具
可用工具
STL 操作工具
STL 操作工具
所有 STL 工具都会将完整网格加载到内存中。修改模型的工具会在服务的临时目录中写入新文件,文件名由输入文件名加上 _scaled 等后缀构成,并返回其路径;不会修改输入文件。
get_stl_info
检查 STL 文件但不做修改。返回边界框、尺寸、中心点、顶点数和面数。
{
"stl_path": "/path/to/model.stl"
}
scale_stl
使用 scale_factor 对模型进行等比缩放,或使用 scale_x、scale_y 和 scale_z 分轴缩放。只要提供了任一轴的值,未指定的轴就保持为 1.0。
{
"stl_path": "/path/to/model.stl",
"scale_factor": 1.2
}
{
"stl_path": "/path/to/model.stl",
"scale_x": 1.2,
"scale_y": 1.0,
"scale_z": 1.5
}
rotate_stl
按角度绕 X、Y 和 Z 轴旋转模型。省略的轴默认为 0。
{
"stl_path": "/path/to/model.stl",
"rotate_x": 0,
"rotate_y": 0,
"rotate_z": 90
}
translate_stl
沿 X、Y 和 Z 轴移动模型,单位为毫米。省略的轴默认为 0。
{
"stl_path": "/path/to/model.stl",
"translate_x": 10,
"translate_y": 5,
"translate_z": 0
}
extend_stl_base
在模型下方添加实体几何体,以抬高并加宽底座。extension_inches 的单位为英寸,并会转换为毫米(每英寸 25.4 mm)。
{
"stl_path": "/path/to/model.stl",
"extension_inches": 0.25
}
merge_vertices
合并距离小于 tolerance 的顶点(单位为毫米,默认值为 0.01)。这可以填补细小间隙,并略微简化网格。
{
"stl_path": "/path/to/model.stl",
"tolerance": 0.01
}
center_model
移动模型,使其包围盒的中心位于原点 (0, 0, 0)。
{
"stl_path": "/path/to/model.stl"
}
lay_flat
找到模型最大的平面,并旋转模型,使该平面贴合 XY 平面(Z = 0)。最适用于具有明显主导平面的模型。
{
"stl_path": "/path/to/model.stl"
}
modify_stl_section
对模型的一个部分进行缩放、旋转或平移:包围盒的 top、bottom 或 center 三分之一,或一个 custom 盒体。根据 transformation_type,value_x、value_y 和 value_z 分别表示缩放因子、角度或毫米数。
{
"stl_path": "/path/to/model.stl",
"section": "top",
"transformation_type": "scale",
"value_x": 1.5,
"value_y": 1.5,
"value_z": 1.5
}
custom 部分需要提供全部六个边界:
{
"stl_path": "/path/to/model.stl",
"section": "custom",
"transformation_type": "rotate",
"value_x": 0,
"value_y": 0,
"value_z": 45,
"custom_min_x": -10,
"custom_min_y": 0,
"custom_min_z": -10,
"custom_max_x": 10,
"custom_max_y": 20,
"custom_max_z": 10
}
generate_stl_visualization
渲染包含模型正面、侧面、顶部和等轴测视图的 SVG。width 和 height 用于设置每个视图的像素尺寸(默认值为 300)。
{
"stl_path": "/path/to/model.stl",
"width": 400,
"height": 400
}
该 SVG 为简化示意图,并非照片级真实渲染。
打印机控制工具
打印机控制工具
每个打印机工具都接受 host、port、type 和 api_key;Bambu 打印机还会使用 bambu_serial 和 bambu_token。省略的值将回退为 PRINTER_HOST、PRINTER_PORT、PRINTER_TYPE、API_KEY、BAMBU_SERIAL 和 BAMBU_TOKEN。请将密钥保存在服务配置中,而不要在调用时传入。
每次调用的具体行为取决于后端;有关准确的 API 路由,请参阅打印机后端设置。
在所有后端上,每次开始打印和发出正向加热命令时,都会经过安全检查:服务会检查即将启动的确切 G-code,将每个加热器目标温度与硬件和材料上限进行比较,检查打印机是否就绪,并要求人工通过 MCP elicitation 确认。关闭加热器(temperature: 0)和 cancel_print 不受此检查限制。
get_printer_status
读取打印机当前状态。响应为后端自身的状态数据:Bambu 会返回温度、作业状态、进度、层数、剩余时间和 AMS 数据;OctoPrint 会返回打印机状态和温度;Klipper 只会返回 Moonraker 主机状态。
{
"type": "klipper",
"host": "192.168.1.50",
"port": "7125"
}
list_printer_files
列出存储在打印机或其主机软件上的文件。在 Bambu 打印机上,会列出 cache/、timelapse/ 和 logs/ 目录。
{
"type": "octoprint",
"host": "192.168.1.100"
}
upload_gcode
将 G-code 上传到打印机,并可选择启动打印。对于本地文件,请传入 gcode_path;也可以传入包含内容(或本地路径)的 gcode。filename 默认为 gcode_path 的基本文件名;打印时,请使用纯文件名,以确保启动的文件正是已上传的文件。
{
"type": "klipper",
"host": "192.168.1.50",
"port": "7125",
"gcode_path": "/path/to/benchy.gcode",
"print": true,
"material": "PETG"
}
- 不传入
print时,文件只会上传,不会检查或启动。 - 传入
print: true时,会先检查实际上传的字节(所有S和R加热器目标温度、工具切换,以及硬件和材料上限),再检查打印机状态,并由人工确认后启动任务。 - 打印需要声明材料:文件中的切片器元数据(
; filament_type = PLA),或material参数;两者不能相互矛盾。 - 在 Bambu 打印机上,文件会通过 FTPS 上传到
cache/,打印还需要指定型号(bambu_model或BAMBU_MODEL)。上传后自动打印仅支持.gcode;.3mf项目请使用print_3mf。
start_print
启动已存储在打印机上的 G-code 文件。服务端会下载该文件,检查文件和打印机状态,请求人工确认,然后启动一个具有唯一名称且已检查的副本。此功能适用于 Bambu Lab、OctoPrint、Klipper(Moonraker)和 Duet。Repetier、Prusa 和 Creality 不支持,因为其适配器没有经过验证的下载路径;请改用 upload_gcode 并传入 print: true。
{
"type": "octoprint",
"host": "192.168.1.100",
"filename": "benchy.gcode",
"material": "PLA"
}
如果文件没有 filament_type 元数据,请传入 material。在 Bambu 打印机上,还需要指定型号,且仅支持 .gcode 文件;对于纯文件名,会在 cache/ 中查找。
cancel_print
取消当前打印任务。取消操作不受任何限制,等待启动的已检查打印任务也会一并取消。没有暂停或恢复工具;取消后无法恢复。
{
"type": "prusa",
"host": "192.168.1.120"
}
set_printer_temperature
设置打印机组件的目标温度。使用 bed 或 extruder;Bambu 还接受 nozzle、tool 和 tool0。OctoPrint 的喷嘴目标温度会发送到 tool0。
{
"type": "klipper",
"host": "192.168.1.50",
"port": "7125",
"component": "extruder",
"temperature": 215,
"material": "PLA"
}
temperature必须是大于或等于 0 的有限数值。0会关闭加热器,且不受任何限制。- 连接前会检查大于 0 的目标温度是否超过独立的硬件上限或材料上限;打印机还必须处于就绪状态,并需经人工确认。
- 喷嘴目标温度大于 0 时必须指定
material(例如 PLA、PETG 或 ABS),即使线轴没有 RFID 也必须指定。 - 在 Bambu 打印机上,加热温度大于 0 时还需要指定
bambu_model(或BAMBU_MODEL);喷嘴加热还需要指定nozzle_diameter(0.2、0.4、0.6 或 0.8;默认使用NOZZLE_DIAMETER或 0.4)。两者都会与打印机实时状态进行核对。
Bambu 专用工具
Bambu 专用工具
这些工具适用于 PRINTER_TYPE=bambu(或 type: "bambu")。请按照 Bambu Lab 设置中的说明,设置 LAN Only Mode、序列号、访问码和型号。
print_3mf
通过 FTPS 将切片后的 .3mf 项目上传到 Bambu 打印机,并通过 MQTT project_file 命令启动打印。该命令包含打印板的 G-code 路径、其 MD5、AMS 映射和校准标志。必须提供 bambu_model(或 BAMBU_MODEL);否则,如果客户端支持 MCP 信息征询,服务端会通过该功能询问,否则返回错误。型号错误可能导致热床撞上喷嘴。
上传前,服务端会检查所选打印板的私有副本(型号、喷嘴、热床类型、材料和所有加热器目标温度)。它会将这些信息与各型号的硬件限制、材料温度上限,以及打印机最新的 MQTT 报告进行核对。报告包含打印机型号、序列号、喷嘴、状态、错误和已装入的耗材。随后由人工确认,并在发送命令前再次检查报告。
{
"three_mf_path": "/path/to/bracket.gcode.3mf",
"bambu_model": "p1s",
"bed_type": "textured_plate",
"use_ams": true,
"ams_mapping": { "Generic PLA": 0 },
"bed_leveling": true,
"flow_calibration": true,
"vibration_calibration": true,
"layer_inspect": true,
"timelapse": false
}
- 如果项目没有打印板 G-code,服务端会尝试使用 FULU OrcaSlicer-bambulab 或 Bambu Studio 自动切片。如果切片失败,或所选打印板仍没有 G-code,服务端会报错停止,绝不会上传原始项目。
ams_mapping是一个对象,其值为 AMS 槽位编号。如果省略,则使用 3MF 中嵌入的映射;如果完全没有映射,则不使用 AMS 进行打印。use_ams: false会关闭 AMS。- 发送命令后,服务端会监视最新报告,最长等待 15 秒(
BAMBU_DISPATCH_CHECK_MS),并返回dispatch: "started"或"unconfirmed"。如果固件拒绝该命令(在固件版本 01.08.05 及更高版本中,未启用 Developer Mode 时会出现 HMS 0500-0500-0001-0007),调用会失败并说明原因;已检查的文件仍保留在打印机存储中。 nozzle_type(stainless_steel、hardened_steel、tungsten_carbide、brass)用于在必须自动切片项目时设置已安装的喷嘴。作业的喷嘴类型必须与打印机报告一致。bed_type可设为textured_plate、cool_plate、engineering_plate或hot_plate(默认使用BED_TYPE,否则为textured_plate)。它必须与打印板的热床元数据一致;因此,为其他打印板切片的文件,或缺少热床元数据的文件,只有在bed_type匹配后才会被接受。nozzle_diameter接受 0.2、0.4、0.6 或 0.8(默认使用NOZZLE_DIAMETER,否则为 0.4)。- 未指定时,校准标志默认开启(延时摄影默认关闭)。
- 接受
layer_height、nozzle_temperature、bed_temperature和support_enabled,但不会应用这些设置:它们已写入切片文件。请在切片器中更改。 - 成功响应表示命令已发送,并不表示打印已顺利启动。之后请检查打印机状态。
check_fulu_orca_setup
检查 FULU OrcaSlicer-bambulab 安装:可执行文件、平台运行时载荷、安装和验证命令,以及可选的 BambuNetwork 桥接握手。路径默认为服务端环境中的路径;请参阅检查安装设置。
{
"platform": "darwin",
"run_bridge_probe": true
}
bridge_command,以及在设置 run_bridge_probe: true 时使用的 slicer_path、plugin_dir 或 runtime_dir,都需要 MCP_ALLOW_EXECUTABLE_ARG=1。
fulu_bambu_network_rpc
调用一个 FULU BambuNetwork 桥接方法进行诊断。默认允许 bridge.handshake、bridge.runtime_info 和 net.get_user_print_info 等只读方法。Agent 和会话设置方法需要设置 allow_mutating_method: true。原始打印方法(例如 net.start_print)、打印机消息(net.send_message)、文件传输和未知方法都会被拒绝,因为这些操作会绕过打印安全门;请使用 print_3mf 进行打印。bambu_model 仅供参考。请参阅 桥接 RPC。
{
"method": "bridge.handshake"
}
桥接命令来自 FULU_BAMBU_BRIDGE_COMMAND;每次调用单独指定 bridge_command 需要设置 MCP_ALLOW_EXECUTABLE_ARG=1。
切片工具
切片工具
有关切片器类型、配置文件和故障排除,请参阅切片指南。最可预测的方式是在切片器的图形界面中自行切片文件,然后上传结果。
#### slice_stl使用已配置的切片器对 STL 或 3MF 进行切片,并返回输出路径:PrusaSlicer、Slic3r、通用 OrcaSlicer 和 CuraEngine 会输出 G-code;Bambu 兼容路径会输出切片后的 .3mf。
Bambu 兼容路径适用于 Bambu Studio、FULU OrcaSlicer-bambulab,以及调用时传入 bambu_model 的 OrcaSlicer:
- 机器预设始终取自
bambu_model(如果缺少,则会询问;也可使用BAMBU_MODEL)和nozzle_diameter(默认使用NOZZLE_DIAMETER,否则为 0.4)。所选切片器安装中必须存在完全匹配的<model> <diameter> nozzle预设。切片器运行前,会解析其inherits和include链。 slicer_profile(或SLICER_PROFILE)仅作为工艺配置文件。传入machine;process列表将被拒绝,并会显示相关说明。- 如果安装的切片器有对应预设,切片支持
p1s、p1p、p2s、x1c、x1e、a1、a1mini、h2d、h2s和h2c。打印仍只支持BAMBU_MODEL中的七种型号。 - 输出必须包含非空的
Metadata/plate_<n>.gcode。发生故障时,操作会停止,并显示切片器的退出代码或信号、输出末尾内容以及切片相关建议。
{
"stl_path": "/path/to/phone-case.stl",
"slicer_type": "bambustudio",
"bambu_model": "p1s",
"nozzle_diameter": "0.4",
"bed_type": "textured_plate",
"load_filaments": "/path/to/filaments/tpu-95a-hf.json",
"arrange": true,
"orient": false
}
Bambu 兼容路径的选项:
| 参数 | 功能 |
|---|---|
bed_type | 构建板:textured_plate、cool_plate、engineering_plate 或 hot_plate(默认使用 BED_TYPE,否则为 textured_plate) |
nozzle_type | 已安装的喷嘴:stainless_steel、hardened_steel、tungsten_carbide 或 brass(默认使用 BAMBU_NOZZLE_TYPE,否则使用预设的原装喷嘴)。打印时必须与打印机报告的喷嘴类型一致 |
load_filaments | 按料槽顺序排列的耗材配置文件 JSON 路径,以 ; 分隔。一个配置文件应用于所有料槽;否则,每个料槽分别指定一个。filament_profile 是别名 |
load_filament_ids | 以逗号分隔的耗材 ID,用于将耗材映射到对象,例如 1,2,3,1 |
filament_colours | 每个耗材槽指定一个 #RRGGBB 颜色,以 ; 分隔。默认使用输入 3MF 的颜色,其次使用各配置文件中的颜色 |
template_3mf_path、template_name、template_dir | 重用 3MF 或配置文件中的切片器设置作为工艺配置文件(默认值:BAMBU_TEMPLATE_3MF_PATH、BAMBU_TEMPLATE_DIR)。显式指定的 slicer_profile 优先 |
uptodate、min_save、skip_modified_gcodes | 将 3MF 预设更新为已安装切片器的版本、写入较小的 3MF,或忽略输入 3MF 中嵌入的自定义 G-code |
orient、arrange、ensure_on_bed、repetitions、clone_objects、skip_objects、slice_plate | 放置选项:自动调整朝向、自动排列(默认排列 STL 输入;设为 false 可保留 3MF 布局)、将悬空模型降至构建板上、复制份数(OrcaSlicer 使用 --clone-objects 复制 STL)、已加载模型的总副本数、要跳过的对象,以及要切片的构建板(0 = 全部) |
scale、rotate、rotate_x、rotate_y | 切片前进行变换(统一缩放;旋转角度以度为单位)。对于 OrcaSlicer 的 STL 输入,服务会按照 Orca 的顺序对网格副本应用这些变换,以避免 CLI 崩溃;请参阅 OrcaSlicer CLI 限制 |
enable_timelapse、allow_mix_temp | 插入延时摄影停靠移动;允许在同一构建板上使用所需温度不同的耗材 |
通用切片器使用各自的配置文件格式:PrusaSlicer 和 Slic3r 加载一个导出的配置文件;通用 OrcaSlicer 使用 machine.json;process.json,后面可选接 |filament.json。slicer_type、slicer_profile 和 filament_profile 的备用值分别为 SLICER_TYPE、SLICER_PROFILE 和 FILAMENT_PROFILE。切片器可执行文件由 SLICER_PATH 指定;要在单次调用中使用 slicer_path,需设置 MCP_ALLOW_EXECUTABLE_ARG=1。请参阅切片指南。
slice_with_template
使用本地模板注册目录中的命名模板切片 STL 或 3MF。模板提供工艺设置;机器预设仍由 bambu_model 和 nozzle_diameter 提供。它接受与 slice_stl 相同的参数,调用中显式指定的 slicer_profile 会覆盖模板。
{
"stl_path": "/path/to/bracket.stl",
"template_name": "p1s-petg-strong",
"bambu_model": "p1s"
}
list_templates
列出模板注册目录、BAMBU_TEMPLATE_DIR(默认为 ~/Sync/bambu/templates)或 template_dir 中保存的切片模板(.3mf、.json、.config)。
{}
save_template
将本地 .3mf、.json 或 .config 文件复制到模板注册目录。template_name 默认为不带扩展名的源文件名。
{
"source_path": "/path/to/p1s-petg-strong.3mf",
"template_name": "p1s-petg-strong"
}
get_slice_settings
读取 3MF、提取后的 project_settings.config 或配置文件 JSON 中的切片设置,而不执行切片:层高、填充、壁厚、支撑、裙边、热床、打印机和耗材。传入 source_path,或传入 template_name 以读取已保存的模板。
{
"template_name": "p1s-petg-strong"
}
confirm_temperatures
报告 G-code 文件中的所有加热器目标温度:S 和 R 形式、指定工具的目标温度、RepRapFirmware G10/M568,以及 Klipper SET_HEATER_TEMPERATURE。只有当预期的 extruder_temp 或 bed_temp 等于文件中的最高目标温度时,才会匹配;结果会返回该最高温度 peak。此工具为只读;打印工具会执行各自的安全检查。
{
"gcode_path": "/path/to/model.gcode",
"extruder_temp": 240,
"bed_temp": 80
}
process_and_print_stl
为 STL 添加底座、切片,并通过与 upload_gcode 和 print_3mf 相同的打印检查流程进行打印,包括人工确认。如果传入 extruder_temp 或 bed_temp,每个值都必须等于切片任务的最高目标温度(所有工具的 S 和 R 形式);如果不匹配,会在上传任何内容之前停止。如果切片后的 G-code 没有 filament_type 元数据,请传入 material。在使用 Bambu 兼容切片器的 Bambu 打印机上,切片后的 .3mf 会经过 print_3mf 检查,并且必须提供打印机型号。
{
"stl_path": "/path/to/model.stl",
"extension_inches": 0.1,
"extruder_temp": 210,
"bed_temp": 60,
"material": "PLA",
"type": "octoprint",
"host": "192.168.1.100"
}
如果想在切片文件提交打印确认之前先检查文件,请分别使用 slice_stl、confirm_temperatures 和 upload_gcode。
高级工具
高级工具
Blender MCP
通过 BLENDER_MCP_COMMAND(例如,uvx 的完整路径)和 BLENDER_MCP_ARGS(例如 ["mcp-for-blender"])连接标准 stdio Blender MCP 服务。mcp-for-blender 项目此前以 blender-mcp 名称发布,该名称仍可作为兼容包装器使用。在 Blender 中安装并启用其插件,然后启动插件连接。Blender 和此服务必须能够读取相同的本地文件。即使未配置 Blender,打印机工具也能正常工作。Agent 工作期间请保持 Blender 打开:该插件不会在后台模式下运行。有关设置、单位以及从头到尾为新手机改造手机壳的完整示例,请参阅 Blender 指南。
blender_mcp_status
检查 Blender MCP 配置。设置 connect: true 后,它会启动已配置的服务、完成初始化,并按名称和摘要列出其工具。传入 tool_names 可获取即将调用的工具的完整输入架构(include_schemas: true 会返回所有架构,内容较多)。连接成功并不能证明 Blender 内部的插件正在运行;请通过 blender_mcp_call 调用 get_scene_info 进行检查。
{
"connect": true,
"tool_names": ["execute_blender_code"]
}
blender_mcp_call
调用 Blender MCP 服务所公布的工具(例如 get_scene_info 或 execute_blender_code),并传入与其已发现架构相符的参数。此工具会返回完整的 MCP 结果,包括图像和错误。调用可能会更改当前活动的 Blender 场景,且绝不会自动重试。远程工具要求提供 user_prompt 时,请保留用户自己的原话。
{
"tool_name": "get_scene_info",
"arguments": { "user_prompt": "Inspect the scene before preparing a print." }
}
将实时 Blender 场景中的命名对象导出为新的 STL 文件,以便进行切片。在通过 blender_mcp_call 建模或编辑后使用此工具;Blender MCP 自带的 export_scene 只能导出 GLB 或 FBX,不能导出 STL。导出时会应用修改器并写入世界空间几何体,不会更改场景、选择状态或模式。
{
"object_names": ["PhoneCase"],
"output_path": "/path/to/phone-case.stl",
"user_prompt": "Make it fit my iPhone 17 Pro Max."
}
- 结果会报告
output_verified: true、三角形数量,以及从写入文件测得的bounding_box.dimensions。切片前,请将这些尺寸与预期值进行比较。 - STL 文件不包含单位信息,切片软件会将其按毫米读取。导入 STL 时数值保持不变,因此默认的
scale: 1是正确的。如果模型以米为单位,则结果会警告其尺寸小于 1 个单位;请使用scale: 1000重新导出。 output_path必须是新路径,且其父目录必须存在;绝不会覆盖任何文件。如果 Blender 出错、回执不匹配或文件无效,则不会发布任何文件。
blender_mcp_edit_model
将 STL 导入 Blender,按顺序应用编辑并导出新的 STL。支持的操作为 decimate:<ratio>(大于 0 且不超过 1)、remesh:<voxel size>(以 STL 单位计的正数)以及 boolean_union:<STL path>。其他操作请使用 blender_mcp_call。
{
"stl_path": "/path/to/model.stl",
"output_path": "/path/to/model-edited.stl",
"operations": ["decimate:0.5"],
"user_prompt": "Reduce the triangle count for printing.",
"execute": false
}
- 默认情况下(
execute: false),工具会验证请求并返回计划和生成的 Python 代码,不会启动 Blender。设置execute: true可应用计划,并复用预览中的output_path。 - 如果省略
output_path,则会在输入文件旁生成唯一的model-edited-<id>.stl。绝不会覆盖现有的输入或输出文件。 - 编辑要求处于 Object Mode,会保留现有场景对象和选择状态,并且只有在确认导出回执匹配且网格是有效、有限的三角网格后,才会发布新的 STL。最大 256 MiB 的二进制 STL 会分块验证;ASCII STL 最大为 4 MiB。
- 请求设有连接、发现和调用超时(
BLENDER_MCP_TIMEOUT_MS,默认值为 120000),文件验证也包含在超时范围内。中断的编辑不会重放;重试前请先检查 Blender,因为编辑可能已经开始。 - 有效的 STL 不代表一定适合打印。切片前请检查结果。
未配置标准命令时,仍支持旧版 BLENDER_MCP_BRIDGE_COMMAND shell 命令。此类命令会从 stdin 接收 JSON(modelPath、operations、source 和 stlPath),并通过 MCP_BLENDER_PAYLOAD 接收相同的 JSON;其结果会报告 output_verified: false。单次调用的 bridge_command 需要设置 MCP_ALLOW_EXECUTABLE_ARG=1。
可用资源
可用资源
资源遵循 MCP 资源协议。它们使用已配置的 PRINTER_TYPE 和凭据;主机部分用于选择打印机地址。
printer://{host}/status:打印机当前状态,由get_printer_status返回printer://{host}/files:打印机文件列表,由list_printer_files返回printer://{host}/file/{filename}:单个文件的详细信息。对于 Bambu 打印机,此项仅报告文件是否存在。
例如,printer://192.168.1.100/status 会读取该地址处打印机的状态。
打印机限制
## 打印机限制- 不同后端提供的状态信息详尽程度不一。 Bambu 状态包含进度、层数和剩余时间。OctoPrint 状态来自
/api/printer(状态和温度,不包含打印任务进度)。Klipper 状态来自 Moonraker 的/printer/info,该接口报告主机状态,但不包含打印任务进度或温度。Duet、Repetier 和 Creality 的响应尚未在硬件上验证。 - 可以取消,但不能暂停。 没有暂停或恢复工具。
cancel_print会停止打印任务。 - 大多数后端使用普通 HTTP。 OctoPrint、Klipper、Duet、Repetier 和 Creality 适配器通过
http://连接。Prusa 适配器在连接 Prusa Connect、https://主机或端口 443 时使用 HTTPS。 - Moonraker 身份验证可选;Duet 不支持密码。 对于要求身份验证的 Moonraker 主机,请设置
API_KEY。只有在 Moonraker 信任 MCP 主机时,才将其留空。目前无法连接受密码保护的 Duet。 - 命令已发送不代表打印已完成。 成功响应表示打印机或其主机已接受请求。离开前,请检查状态以及打印机本身。
- Bambu 打印需要切片后的项目文件和正确的机型。
print_3mf需要一个包含Metadata/plate_<n>.gcode的.3mf文件,会将其上传到cache/,并开始打印第 1 块打印板。打印时无法更改层高和温度等打印设置。start_print仅处理普通.gcode文件。 - Bambu AMS 映射较为简单。
ams_mapping值会排序并补齐至五项;实际行为仍取决于固件、已装入的耗材以及项目元数据。如需了解 AMS 耗材库存和颜色匹配,请参阅 bambu-printer-mcp。 - Bambu 温度通过 G-code 设置。 目标温度会通过 MQTT 以
M104或M140指令发送,因此是否生效取决于打印机的固件和当前状态。 - Bambu 网络连接假设局域网可信。 MQTT 和 FTPS 使用打印机的自签名证书。文件上传使用 TLS 1.2 和会话重用;问题 #22 中提到的 X1C 固件确认仍未完成。
- 安全检查读取文件和报告,不检查实体打印机。 声明的材料无法证明实际装入了什么线轴,而已完成任务报告也无法证明打印床上没有物品,因此需要由人工确认。对于 Klipper,会检查指定加热器的宏参数,但无法检查存储在打印机上的宏正文。在 Duet/RepRapFirmware 上,选择工具(
T0)会将其加热到打印机中已存储的温度;会触发加热的M568和M144仅激活命令会被拒绝,但普通的工具切换会被允许,因为所有固件都使用该命令。本安全门禁通过模拟的打印机传输和环回 HTTP API 进行测试;此外,还在一台真实的 Bambu P1S 上运行了一次,确认请求到达了固件的命令检查环节。本版本尚未在其他打印机系统的真实硬件上进行测试。 - 远程启动打印需要下载路径。 对于已存储在打印机上的文件,Bambu Lab、OctoPrint、Klipper 和 Duet 支持使用
start_print启动打印。Repetier、Prusa 和 Creality 不支持;请改为上传本地 G-code 并设置print: true。
一般限制和注意事项
一般限制和注意事项
内存使用
- STL 工具会将整个网格作为 Three.js 几何体加载到内存中。超过约 10 MB 的文件可能会占用数百 MB 内存。
- 连续对大型文件执行多项操作,可能会导致垃圾回收周期之间的内存不断累积。
- 没有内置的内存上限。在资源受限的系统上,请避免同时处理多个大型文件。
lay_flat会寻找最大的平面;用于有机形状或圆润模型时,结果可能难以预测。extend_stl_base会在模型下方添加新几何体。复杂或非平面的底面可能会导致连接处出现间隙或相交,因此请检查结果。- 使用较大的容差调用
merge_vertices可能会改变模型形状。对于大多数模型,默认值 0.01 mm 是安全的。 modify_stl_section最适合处理简单几何体。非流形网格(孔洞、重叠面、内部几何体)在进行任何变换时都可能产生意外结果;请先在切片器或网格工具中修复。
可视化限制
generate_stl_visualization生成的是简化示意图,并非真实的 3D 渲染;非常精细的模型可能会丢失细节。
性能注意事项
- 切片可能需要几秒到几分钟,具体取决于模型和 CPU。切片器运行超过
SLICER_TIMEOUT_MS后会超时(默认 10 分钟)。 - 大型上传所需时间取决于网络和打印机的存储速度。
- Bambu MQTT 连接会重复使用。如果打印机重启或网络中断,下次调用时会重新连接。
MCP 安全说明
MCP 安全说明
提示注入是使用工具的 Agent 面临的一个未解决问题。下载模型的描述、压缩包中的 README、3MF 元数据或网页都可能包含针对 Agent 的指令。可采取的实际缓解措施:
- 将工具输出和下载的文件视为不可信输入。
- 将打印机密钥和访问码保存在服务配置中,并遵循打印机软件所允许的最低权限原则。
- 关闭每次调用时的可执行文件选择器。切片器、桥接程序和 Blender 命令均来自服务配置,除非设置了
MCP_ALLOW_EXECUTABLE_ARG=1。 - 保持打印确认开启。每次开始打印以及发送正向加热命令前,服务都会通过 MCP elicitation 请求人工确认,并拒绝无法发起确认请求的客户端。无头配置可通过设置
PRINT_REQUIRE_CONFIRMATION=0(所有打印机)或BAMBU_REQUIRE_CONFIRMATION=0(仅限 Bambu)选择退出;完成作业后的首次打印仍会要求确认。 - 加热器温度上限仅来自服务配置(
PRINTER_MAX_NOZZLE_TEMP、PRINTER_MAX_BED_TEMP、PRINTER_MAX_CHAMBER_TEMP或 Bambu 的单型号限制)。工具参数和 G-code 均无法提高这些上限。 - 在可信网络上运行流式 HTTP 传输。它默认绑定到
127.0.0.1,且没有内置身份验证。 - 正确设置
BAMBU_MODEL,切勿用相似型号替代。
致谢
致谢
感谢 FULU Foundation、Louis Rossmann 和 OrcaSlicer-bambulab 社区,感谢他们推动用户选择权、维修权和互操作工具的发展。
Bambu Lab 支持基于社区的协议研究成果,包括 OpenBambuAPI。仅支持 Bambu 的分支 bambu-printer-mcp 与本项目共享了 Blender MCP 集成和 FTPS 修复。
本项目收录于 Glama MCP 服务目录。请参见 CONTRIBUTORS.md,了解哪些人的代码、报告和打印机测试为本项目的发展做出了贡献。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
