bambu打印机mcp
](https://www.npmjs.com/package/bambu-printer-mcp)   ](https://nodejs.org/en/download/) ](https://github.com/DMontgomery40/bambu-printer-mcp) ](https://www.npmjs.com/package/bambu-printer-mcp)
一个专注于Bambu实验室的MCP服务器,用于控制Bambu打印机、操纵STL文件,以及从Claude Desktop、Claude Code或任何兼容MCP的客户端管理端到端的3MF打印工作流。
这是一个精简的,班布唯一的叉子 mcp-3D打印机服务器。所有OctoPrint、Klipper、Duet、Repetier、Prusa Connect和Creality Cloud支持均已删除。剩下的就是Bambu实验室硬件的集中、精益实施。
本地切换说明:请参阅 远程部署.md 对于此克隆中使用的自定义H2D/H2S补丁、每台打印机MCP拆分和远程部署计划。
______________________________________________________________________
bambu打印机mcp有什么新功能
这个分叉在上游之外增加了大量的打印机控制工具 mcp-3D-printer-server。下面列出的所有内容都是此套餐独有的。
v1.1.0-AMS自动匹配、相机快照、暂停/恢复、跳过对象
- RFID自动匹配AMS (
auto_match_ams上print_3mf)--根据实时AMS库存解决切片3MF长丝要求。处理相同SKU不同颜色的细丝。试运行resolve_3mf_ams_slots. - 结构化AMS库存 (
get_printer_filaments)--每个托盘显示名称、配置文件分辨率层(exact-model-nozzle/model/generic/unresolved),匹配置信度,以及推荐的自动切片灯丝摘要。 - AMS设置时间重试 --当AMS数据在空闲打印机的第一次MQTT推送中未到达时,会透明地重试。
- 相机快照 (
camera_snapshot)--来自室内摄像机的JPEG。TCP-on-6000用于A1/P1S/P1P,RTSP通过ffmpeg用于X1/P2S/H2系列。 - 暂停/恢复 (
pause_print,resume_print)--与现有cancel_print. - 跳过对象 (
skip_objects)--在运行多对象打印时跳过特定对象IDlist_3mf_plate_objects. - HMS诊断 (
printer://{host}/hmsMCP资源)--只读错误摘要,自动重试。 - 公用设施控制 —
set_print_speed(无声/标准/运动/滑稽),clear_hms_errors,reread_ams_rfid,set_airduct_mode(H2/P2的冷却/加热)。 - H2/H2D安全打印路径 --正确
project_file格式与ams_mapping2并行阵列,处理H2固件怪癖。 - BambuStudio CLI自动展开 (
BAMBU_CLI_FLATTEN=true)--解决上游配置文件继承错误。 - 印花衣领魅力 (
print_collar_charm)--采用固定托盘策略的专用双色包装。
v1.1.1-AMS干燥器控制(当前)
- AMS干燥机启动/停止 (
set_ams_drying)--发送print.ams_controlMQTT命令。适用于加热式AMS装置(AMS Pro/AMS-HT)。行动:start或stop,目标为AMS指数0-3。 - 相同SKU不同颜色固定
auto_match_ams. - AMS和HMS为空闲打印机设置重试时间。
- 验证脚本(
scripts/validate-printer.mjs)用于实时打印机测试。
完整更新日志位于 更改日志.md.
Click to expand Table of Contents
目录
- 先决条件 - 无需安装即可运行(npx) - - 从源代码安装
- 环境变量引用
- 这个叉子能修好什么 - 已验证的打印程序(H2S,仅局域网,无客户端证书)
- STL操作工具 - 打印机控制工具 - 切片工具 - 高级工具
______________________________________________________________________
描述
bambu-printer-mcp 是一个模型上下文协议服务器,它使Claude(或任何MCP客户端)能够直接控制Bambu Lab 3D打印机。经过验证的端到端路径为: 在Bambu Studio中切片,导出 .gcode.3mf,把路交给 print_3mf --服务器从3MF中读取切片器的元数据,构建正确的AMS映射,通过FTPS上传,并通过MQTT开始打印 project_file 命令。看 docs/SLICING.md 了解完整的配方,以及为什么不建议在加工过程中切片。
这不是什么。 此软件包有意仅支持Bambu Lab打印机。它不包括OctoPrint、Klipper(月球耙)、Duet、Repetier、Prusa Connect或Creality Cloud的适配器。如果需要多打印机支持,请使用父项目 mcp-3D打印机服务器 相反。
为什么要单独包装? 父项目在一个二进制文件中包含所有打印机适配器。当只使用Bambu硬件时,这种宽度会增加不必要的重量。这个叉子将项目剥离到Bambu核心,以实现更小、更快的安装。这两个软件包共享相同的协议修复和安全功能。
资源使用说明。 STL操作将整个网格几何体加载到内存中。对于大型或复杂的STL文件(大于10MB),这些操作可能会占用大量内存。看 一般限制和注意事项 了解详情。
______________________________________________________________________
特性
- 获取详细的打印机状态:温度(喷嘴、床、腔室)、打印进度、当前图层、剩余时间和实时AMS插槽数据
- 使用已解析的Bambu/Orca细丝轮廓路径查询实时AMS库存
get_printer_filaments。包括每个托盘的显示名称,匹配置信度(high/medium/low/none),分辨率层(exact-model-nozzle/model/generic/unresolved),并总结了推荐的自动切片长丝。当AMS数据尚未到达时自动重试(在空闲打印机的第一次MQTT推送中很常见)。 - 通过FTPS列出、上传和删除打印机SD卡上的文件
- 从室内摄像机拍摄JPEG快照。支持A1、A1 mini、P1S、P1P(TCP-on-6000)和X1、X1C、X1E、P2S、H2、H2S、H2D、H2C、H2D Pro(通过ffmpeg的RTSP)。RTSP路径需要PATH中的ffmpeg。
- 上传并打印预切片
.gcode.3mf带有全版选择和校准标志控制的文件(推荐路径——请参阅 docs/SLICING.md) - 从3MF的嵌入式切片器元数据中解析AMS映射(
Metadata/plate_.json+gcode灯丝头),并按照OpenBambuAPI规范正确格式化,使用正确的H2S/H2D发送ams_mapping2并行阵列格式 - 通过RFID自动匹配AMS插槽 (
auto_match_ams旗子垂下print_3mf).需要解决的问题tray_info_idx根据切片的3MF与实时AMS库存进行比较。通过匹配处理相同SKU不同颜色的细丝(tray_info_idx, tray_color)并跟踪已占用的时隙。试运行resolve_3mf_ams_slots在打印之前。 - 通过MQTT取消、暂停和恢复正在进行的打印作业
- 在运行多对象打印时跳过特定对象
skip_objects(使用list_3mf_plate_objects首先查找对象ID) - 设置打印速度模式(
silent/standard/sport/ludicrous)清除HMS/打印错误,触发AMS RFID重新读取,并控制H2/P2风道模式(cooling/heating)通过MQTT - 启动/停止AMS长丝干燥 (
set_ams_drying)在加热的AMS装置(AMS Pro/AMS-HT)上。发送print.ams_controlMQTT命令。 - 通过MQTT上的G代码调度设置喷嘴和床温
- 通过MQTT设置风扇速度(零件、辅助、腔室)和腔室灯模式(开/关/闪烁)
- 将HMS(健康管理系统)诊断作为MCP资源阅读,网址为
printer://{host}/hms--打印机的只读错误摘要,自动重试 - 启动已存储在打印机上的G代码文件
- 衣领魅力印花包装 (
print_collar_charm)--专门的双色工作流程,具有固定托盘策略,适用于内部(黑色,AMS 1插槽1)和外部(白色,AMS 2插槽1)魅力部件 - STL操作:缩放、旋转、扩展基础、合并顶点、以原点为中心、平铺和检查模型信息
- 使用BambuStudio、OrcaSlicer、PrusaSlicer、Cura或Slic3r对STL或3MF文件进行切片
- 通过以下方式从保存的3MF模板或提取的配置文件中检查切片器设置
get_slice_settings - 通过以下方式从本地注册表枚举已保存的切片模板
list_templates - 通过以下方式将模板保存到本地注册表中
save_template - 通过以下方式直接从命名模板中切片
slice_with_template - 对于简单的单一材料切片,当没有明确的切片器配置文件或
load_filaments提供超控 - 模板驱动切片可以重用已保存的3MF工艺设置,同时仍然可以通过MQTT选择实时打印机耗材
- 可选Blender MCP桥接器,用于高级网格操作
- 双传输:stdio(默认,用于克劳德桌面/Claude代码)和流式HTTP
______________________________________________________________________
安装
先决条件
- Node.js 18或更高版本
- npm
- 斑马工作室 *(可选——仅切片时需要)* -- 从bambulab.com下载.要求
slice_stl和print_3mf自动切片(当3MF没有嵌入gcode时)。如果您只打印预切的3MF文件,则不需要。默认路径:/Applications/BambuStudio.app/Contents/MacOS/BambuStudio(macOS);集SLICER_PATH如果安装在其他地方。
无需安装即可运行(npx)
最快的开始方式。无需全局安装:
npx @rowbotik/bambu-printer-mcp内联或通过 .env 工作目录中的文件(请参见 配置).
从npm全局安装
npm install -g @rowbotik/bambu-printer-mcp安装后 bambu-printer-mcp 命令在PATH中可用。
从源代码安装
git clone https://github.com/rowbotik/bambu-printer-mcp.git
cd bambu-printer-mcp
npm install
npm run build
npm linknpm link 使 bambu-printer-mcp 二进制文件全局可用,无需发布到npm。
______________________________________________________________________
配置
创建一个 .env 运行服务器的目录中的文件,或直接在MCP客户端配置中传递环境变量。所有打印机连接变量也可以作为每次调用的工具参数传递,这在处理多台打印机时非常有用。
# --- Bambu printer connection (required for all printer tools) ---
PRINTER_HOST=192.168.1.100 # IP address of your Bambu printer on the local network
BAMBU_SERIAL=01P00A123456789 # Printer serial number (see Finding Your Serial Number below)
BAMBU_TOKEN=your_access_token # LAN access token from printer touchscreen
# Compatible aliases also accepted:
# BAMBU_PRINTER_HOST / BAMBU_PRINTER_SERIAL / BAMBU_PRINTER_ACCESS_TOKEN
# --- Printer model (CRITICAL for safe operation) ---
BAMBU_MODEL=p1s # Your printer model: p1s, p1p, x1c, x1e, a1, a1mini, h2d, h2s
# Alias also accepted: BAMBU_PRINTER_MODEL
BED_TYPE=textured_plate # Bed plate type: textured_plate, cool_plate, engineering_plate, hot_plate, supertack_plate
NOZZLE_DIAMETER=0.4 # Nozzle diameter in mm (default: 0.4)
# --- Slicer configuration (required for slice_stl and print_3mf auto-slice) ---
SLICER_TYPE=bambustudio # Options: bambustudio, prusaslicer, orcaslicer, cura, slic3r
SLICER_PATH=/Applications/BambuStudio.app/Contents/MacOS/BambuStudio
# Default on macOS. Adjust for your OS and install path.
# Alias also accepted: BAMBU_STUDIO_PATH
SLICER_PROFILE= # Optional: path to a slicer profile/config file
# --- Temporary file directory ---
TEMP_DIR=/tmp/bambu-mcp-temp # Directory for intermediate files. Created automatically if absent.
# --- MCP transport ---
MCP_TRANSPORT=stdio # Options: stdio (default), streamable-http
# --- Streamable HTTP transport (only used when MCP_TRANSPORT=streamable-http) ---
MCP_HTTP_HOST=127.0.0.1
MCP_HTTP_PORT=3000
MCP_HTTP_PATH=/mcp
MCP_HTTP_STATEFUL=true
MCP_HTTP_JSON_RESPONSE=true
MCP_HTTP_ALLOWED_ORIGINS=http://localhost
# --- Optional Blender MCP bridge ---
BLENDER_MCP_BRIDGE_COMMAND= # Shell command to invoke your Blender MCP bridge executable环境变量引用
| 变量 | 默认值 | 必填 | 说明 |
|---|---|---|---|
PRINTER_HOST | localhost | 是 | Bambu打印机的IP地址。别名: BAMBU_PRINTER_HOST |
BAMBU_SERIAL | 是 | 打印机序列号。别名: BAMBU_PRINTER_SERIAL | |
BAMBU_TOKEN | 是 | LAN访问令牌。别名: BAMBU_PRINTER_ACCESS_TOKEN | |
BAMBU_MODEL | 是 | 打印机型号: p1s, p1p, x1c, x1e, a1, a1mini, h2d, h2s. 安全操作所需 --确定正确的G码生成。别名: BAMBU_PRINTER_MODEL。如果省略,并且MCP客户端支持启发,服务器将以交互方式询问您。 | |
BED_TYPE | textured_plate | 否 | 床板类型: textured_plate, cool_plate, engineering_plate, hot_plate, supertack_plate |
NOZZLE_DIAMETER | 0.4 | 否 | 喷嘴直径(mm)。用于选择正确的BambuStudio机器预设。 |
SLICER_TYPE | bambustudio | 否 | 切片器用于切片操作 |
SLICER_PATH | BambuStudio macOS路径 | 否 | 切片器可执行文件的完整路径。别名: BAMBU_STUDIO_PATH |
SLICER_PROFILE | 否 | 切片器配置文件或配置文件的路径 | |
TEMP_DIR | ./temp | 否 | 中间文件目录 |
MCP_TRANSPORT | stdio | 否 | 运输方式: stdio 或 streamable-http |
MCP_HTTP_HOST | 127.0.0.1 | 否 | HTTP绑定地址(仅限HTTP传输) |
MCP_HTTP_PORT | 3000 | 否 | HTTP端口(仅限HTTP传输) |
MCP_HTTP_PATH | /mcp | 否 | HTTP端点路径(仅限HTTP传输) |
MCP_HTTP_STATEFUL | true | 否 | 启用有状态HTTP会话 |
MCP_HTTP_JSON_RESPONSE | true | 否 | 返回结构化JSON以及文本响应 |
MCP_HTTP_ALLOWED_ORIGINS | 否 | 逗号分隔的允许CORS源列表 | |
BLENDER_MCP_BRIDGE_COMMAND | 否 | 调用Blender MCP桥的命令 | |
BAMBU_PROFILES_ROOT | 源自 SLICER_PATH | 否 | 覆盖BambuStudio的路径 Resources/profiles CLI平铺器使用的目录。适用于非标准安装或开发环境。 |
SuperTack可以传递给预切片打印作业,但BambuStudio CLI切片目前在以下方面失败很快 supertack_plate 因为接受的CLI床标识符未被验证。在确认之前,使用预切的3MF进行SuperTack。
______________________________________________________________________
用法
将此服务器添加到MCP客户端的配置中(Claude Desktop、Claude Code、Cursor、Codex CLI或任何与MCP兼容的客户端)。配置格式在任何地方都是一样的—— mcpServers 使用命令和env变量输入:
{
"mcpServers": {
"bambu-printer": {
"command": "npx",
"args": ["-y", "@rowbotik/bambu-printer-mcp"],
"env": {
"PRINTER_HOST": "192.168.1.100",
"BAMBU_SERIAL": "01P00A123456789",
"BAMBU_TOKEN": "your_access_token",
"BAMBU_MODEL": "p1s",
"SLICER_TYPE": "bambustudio",
"SLICER_PATH": "/Applications/BambuStudio.app/Contents/MacOS/BambuStudio"
}
}
}
}此配置的位置取决于您的客户端:
| 客户端 | 配置位置 |
|---|---|
| 克劳德桌面(macOS) | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 克劳德桌面(Windows) | %APPDATA%\Claude\claude_desktop_config.json |
| 克劳德代码(项目) | .mcp.json 在项目根中 |
| 克劳德代码(全球) | ~/.claude/settings.json |
| 光标偏好中的光标 | MCP设置 |
| Codex CLI | 根据Codex文档配置MCP |
编辑配置后重新启动客户端。
推荐:与codemode mcp一起使用
对于任何具有大型工具表面的MCP服务器,将其包裹在后面 编码模式mcp 大大减少了令牌的使用。codemode允许代理针对双工具接口编写代码,而不是将每个工具定义都暴露给模型(每轮可能消耗数万个令牌)(search() 和 execute()),只按需加载所需的工具。
Anthropic和Cloudflare独立证明了这种模式可以将MCP代币成本降低高达98%:
- 使用MCP执行代码 (人类学)
- 代码模式:为代理提供1000个令牌中的整个API (Cloudflare)
这适用于所有MCP服务器,而不仅仅是这台。
______________________________________________________________________
启用开发人员模式(必需)
此MCP服务器使用MQTT和FTPS通过本地网络直接与您的打印机通信。为了使其工作, 开发者模式 必须在打印机上启用。没有它,即使您有正确的访问代码,打印机也会拒绝第三方局域网连接。
在H2D/H2系列固件上,打印机可以流式传输 push_status 数据永远不会回答遗留问题 get_version 旧库使用的握手。此分叉将实时状态流视为权威的,在考虑连接可用之前不需要额外的ACK。
开发人员模式适用于以下固件版本和更高版本:
| 系列 | 最低固件 |
|---|---|
| P1系列(P1P、P1S) | 01.08.02.00 |
| X1系列(X1C、X1E) | 01.08.03.00 |
| A1系列(A1、A1 Mini) | 01.05.00.00 |
| H2D | 01.01.00.01 |
如果您的固件比这些版本旧,请在继续之前通过Bambu Studio或Bambu Handy应用程序进行更新。
步骤1:导航到网络设置
在打印机的触摸屏上,转到 设置,然后选择 网络 (WLAN)页面。您应该看到您的WiFi网络名称、IP地址和仅局域网模式切换。
步骤2:启用仅局域网模式
切换 仅局域网模式 到 开这启用了此服务器所需的直接本地网络通信协议(端口8883上的MQTT和端口990上的FTPS)。
重要提示: 启用仅局域网模式会断开打印机与Bambu Lab云服务的连接。当此模式处于活动状态时,Bambu Handy移动应用程序将停止工作。Bambu Studio和OrcaSlicer仍然可以通过局域网连接。
步骤3:启用开发人员模式
一旦局域网模式开启 开发者模式 选项出现在相同的设置菜单中。快捷开关 开这允许第三方客户端(如此MCP服务器)通过MQTT进行身份验证和发送命令。
步骤4:记下访问代码
这 访问代码 网络设置屏幕上显示的是您的LAN访问令牌。您将需要此值 BAMBU_TOKEN 环境变量。
点击访问代码旁边的圆形箭头图标可以刷新访问代码。如果刷新它,使用旧代码的任何现有连接都将被断开,您需要用新代码更新配置。
______________________________________________________________________
查找Bambu打印机的序列号和访问令牌
通过本地网络直接连接到Bambu Lab打印机需要两个值:打印机的序列号及其LAN访问令牌(上述开发人员模式设置的访问代码)。
序列号
序列号印在打印机背面或底部的标签上。它通常遵循以下格式之一:
- P1系列:以
01P - X1系列:从
01X - A1系列:开始
01A
您还可以在打印机的触摸屏上找到它。导航到 设置 并选择 设备信息 页面:
这 打印机 行显示您的序列号。在Bambu Studio中,您还可以在打印机信息面板的“设备”>“设备管理”下找到它。
局域网接入令牌
访问令牌是 访问代码 显示在打印机的网络设置屏幕上。它与您的Bambu Cloud帐户密码是分开的。如果你遵循 开发人员模式设置 上面,你已经有了这个值。
P1系列(P1P、P1S):
- 在打印机触摸屏上,转到设置。
- 选择网络/WLAN页面。
- 访问代码显示在屏幕底部。
X1系列(X1C、X1E):
- 在打印机触摸屏上,转到设置。
- 选择网络。
- 启用仅局域网模式和开发人员模式(如果尚未启用)。
- 访问代码显示在此屏幕上。
A1和A1 Mini:
- 打开手机上的Bambu Handy应用程序。
- 连接到打印机。
- 导航到“设置”>“网络”。
- 访问代码显示在此处。
您的打印机还必须登录到Bambu Cloud帐户才能使用LAN模式。您可以在云/帐户设置屏幕上验证这一点:
故障排除: 如果“仅局域网模式”或“开发人员模式”选项不可见,则打印机固件可能已过时。请通过Bambu Studio或Bambu Handy应用程序更新到最新固件版本,然后重试。
______________________________________________________________________
AMS(自动材料系统)设置
Bambu AMS是一种多卷轴进纸器,可让您将不同的细丝分配给多色或多材料打印的不同部分。本节解释了AMS槽映射如何与此MCP服务器配合使用。
AMS插槽如何工作
AMS每个单元有4个插槽,编号为0到3。如果您有多个链接在一起的AMS单元,则第二个单元的插槽为4到7,以此类推。当您在Bambu Studio或OrcaSlicer中切片模型时,打印中的每种颜色/材质都会分配给特定的AMS插槽。
3MF的自动AMS映射
在Bambu Studio中切片模型时,切片器将AMS映射信息嵌入3MF文件中 Metadata/project_settings.configThe print_3mf 该工具会自动读取此文件并提取正确的映射。在大多数情况下,您不需要指定 ams_mapping 手动操作——工具会处理它。
手动AMS映射
如果需要覆盖嵌入映射(例如,在切片后交换了细丝位置),请传递 ams_mapping 阵列到 print_3mf:
{
"three_mf_path": "/path/to/model.3mf",
"ams_mapping": [0, 2],
"use_ams": true
}阵列中的每个元素都对应于打印文件中使用的灯丝槽,按照它们在切片器中出现的顺序排列。该值是当前加载灯丝的物理AMS插槽号(从0开始)。在上述示例中,打印中的第一根灯丝使用AMS槽0,第二根灯丝使用AMS槽2。
服务器将此阵列填充到打印机MQTT协议所需的5个元素中。一 ams_mapping 的 [0, 2] 成为 [0, 2, -1, -1, -1] 在电线上,在哪里 -1 表示未使用的位置。
单一材料打印
对于单一材质打印(最常见的情况),默认映射为 [-1, -1, -1, -1, 0],其告诉打印机从AMS插槽0拉出灯丝。如果您的灯丝位于不同的插槽中,请指定它:
{
"three_mf_path": "/path/to/model.3mf",
"ams_mapping": [2]
}这告诉打印机使用AMS插槽2用于打印中的单丝。
无AMS打印
如果您使用的是直接进料阀芯支架(未连接AMS)或希望完全绕过AMS,请设置 use_ams 到 false:
{
"three_mf_path": "/path/to/model.3mf",
"use_ams": false
}通过RFID自动匹配AMS
对于声明长丝类型的预切片3MF auto_match_ams 旗子垂下 print_3mf (或独立 resolve_3mf_ams_slots 干运行工具)根据您的实时AMS库存自动解析所需的细丝。匹配器的工作原理如下:
- 读取必填项
tray_info_idx3MF的值Metadata/slice_info.config和Metadata/plate_.json - 从打印机的MQTT状态推送中读取实时AMS托盘
- 比赛开始
(tray_info_idx, tray_color)--因此,同一SKU但颜色不同的两根细丝(例如,两个黑色和白色的GFG02 PETG HF卷轴)会分解到不同的插槽 - 轨道已占用插槽,因此两个要求不能合并到同一物理位置
- 当3MF没有颜色数据或只装载了该SKU的一个托盘时,回退到仅匹配SKU
如果解析失败,则返回结构化 missing 按要求报告原因:
no_loaded_match--未加载该SKU的AMS托盘color_mismatch--SKU匹配,但加载的颜色不同exhausted--所有匹配的托盘都已被其他要求占用no_sku--3MF没有声明tray_info_idx对于这种灯丝
试运行 resolve_3mf_ams_slots 在打印之前预览比赛,而无需上传或启动作业。
AMS结算时间处理
来自空闲打印机的第一次MQTT状态推送通常很稀疏(仅限型号/模块信息)——AMS插槽数据在第二次推送时到达。当第一个响应中不存在预期数据时,服务器的细丝清单和HMS处理程序都会在1.5秒的稳定窗口后重试。这对呼叫者是透明的。
检查AMS状态
使用 get_printer_filaments 对于解析后的丰富视图(配置文件路径、显示名称、匹配置信度)或 get_printer_status 对于来自打印机的原始AMS数据:
"What filaments are loaded in my AMS right now?"______________________________________________________________________
Bambu通信说明(MQTT和FTP)
Bambu实验室打印机不使用传统的REST API。相反,它们公开了此服务器直接使用的两个本地协议:
MQTT(端口8883,TLS): 所有打印机命令和状态报告都通过在打印机本身上运行的MQTT代理传递。代理需要您的序列号作为客户端ID,您的访问令牌作为密码。启动打印、取消作业和分派G代码行等命令都是MQTT向设备主题发布的。通过订阅打印机的报告主题并请求 push_all 刷新。该实施基于社区逆向工程,记录在 OpenBambuAPI 项目。
FTPS(端口990,隐式TLS): 文件操作(上传和目录列表)使用FTPS。打印机的SD卡可以作为文件系统访问,其目录包括 cache/ (对于3MF和G代码打印文件), timelapse/,以及 logs/。身份验证使用用户名 bblp 以及您的访问令牌作为密码。
这个叉子能修好什么
此包和父项目(mcp-3D-printer-server)包括对底层中两个协议级问题的修复 bambu-js 图书馆。
Bug 1:bambu js中的FTP双路径错误。
这 bambu-js 图书馆 sendFile 该方法存在路径构造错误。它召唤 ensureDir 将工作目录更改为目标目录(例如。, /cache),然后拨打电话 uploadFrom 其中完整的相对路径包括目录前缀(例如。, cache/file.3mf).结果是文件落在打印机上的错误路径上(例如。, /cache/cache/file.3mf 而不是 /cache/file.3mf),随后的打印命令失败,因为它引用了预期路径中不存在的文件。
这个叉子绕过 bambu-js 适用于所有上传和使用 basic-ftp 直接。上传功能(ftpUpload)连接到打印机,解析绝对远程路径,使用以下命令更改到正确的目录 ensureDir,然后仅使用basename进行上传——完全避免了双路径构造。
// From src/printers/bambu.ts
private async ftpUpload(host, token, localPath, remotePath): Promise {
const client = new FTPClient(15_000);
await client.access({ host, port: 990, user: "bblp", password: token,
secure: "implicit", secureOptions: { rejectUnauthorized: false } });
const absoluteRemote = remotePath.startsWith("/") ? remotePath : `/${remotePath}`;
const remoteDir = path.posix.dirname(absoluteRemote);
await client.ensureDir(remoteDir);
// basename only -- no double-path
await client.uploadFrom(localPath, path.posix.basename(absoluteRemote));
client.close();
}错误2:project_file MQTT命令中的AMS映射格式。
这 bambu-js 库的项目文件命令硬编码 use_ams: true 并且不支持 ams_mapping 现场。如果没有修复。, [0, 2]),这与OpenBambuAPI规范不匹配。
根据OpenBambuAPI规范,P1/A1/X1系列打印机使用5元件 ams_mapping 位置数组 i 是项目灯丝指数,值是AMS槽馈送该灯丝。例如,来自AMS插槽0的单丝打印发送 [0, -1, -1, -1, -1].
这把叉子把 project_file 命令直接通过 bambu-node (绕过 bambu-js 完全用于打印启动),并以目标固件期望的格式构建映射:
// P1/A1/X1-series: 5-element project lookup table
ams_mapping = [0, -1, -1, -1, -1];
// H2S/H2D: project-length lookup table + parallel ams_mapping2
ams_mapping = [-1, 1, -1, -1];
ams_mapping2 = [
{ ams_id: 255, slot_id: 255 },
{ ams_id: 0, slot_id: 1 },
{ ams_id: 255, slot_id: 255 },
{ ams_id: 255, slot_id: 255 }
];命令有效载荷还包括OpenBambuAPI规范要求的所有字段: param (3MF内的内部gcode路径), url (SD卡路径), md5 (根据板的嵌入式gcode计算)和所有校准标志。
已验证的打印程序(H2S,仅局域网,无客户端证书)
这是在仅局域网模式下成功启动H2S运行电流(2025年1月后)固件打印的序列。这里记录了它,因为几种常见的方法在这个固件上失败了,而这个分叉的传输使它变得可靠。
结果: 打印开始于 RUNNING 状态,打印机接受MQTT project_file 命令,不需要客户端证书。身份验证很简单 bblp +通过TLS的局域网访问代码 rejectUnauthorized: false.
什么不适用于股票bambu-cli:
bambu-cli print start和bambu-cli files upload两者都失败了522 SSL connection failed: session reuse required.Bambu的FTPS服务器要求在控制和数据通道之间重用TLS会话,而Bambu-cli中的Go FTPS客户端无法正确协商。bambu-cli print start --no-upload仍然打开FTPS会话(以统计远程文件)并点击相同的522。
什么有效——两步上传+MQTT调度:
- 上传
.gcode.3mf通过卷曲 (curl的OpenSSL后端正确协商FTPS会话重用):
curl -k --ftp-pasv --ssl-reqd \
-u "bblp:" \
-T /path/to/file.gcode.3mf \
"ftps://
:990/.gcode.3mf"保持 ` 简单ASCII,以结尾 .gcode.3mf文件位于FTP根目录,对应于 /data/` 在打印机的SD卡上。
- 发送
project_fileMQTT上的命令 到device//request:
import mqtt from "mqtt";
const payload = {
print: {
sequence_id: "0",
command: "project_file",
param: "Metadata/plate_1.gcode", // path inside the 3MF
subtask_name: ".gcode.3mf",
file: ".gcode.3mf",
url: "ftp:///.gcode.3mf", // three slashes, FTP root
md5: "",
project_id: "0", profile_id: "0", task_id: "0", subtask_id: "0",
timelapse: false,
bed_type: "auto",
bed_leveling: true, bed_levelling: true,
flow_cali: true, vibration_cali: true, layer_inspect: true,
use_ams: true,
ams_mapping: [0, -1, -1, -1, -1]
}
};
const client = mqtt.connect(`mqtts://
:8883`, {
username: "bblp",
password: "",
rejectUnauthorized: false,
});
client.on("connect", () => {
client.publish(`device//request`, JSON.stringify(payload));
});笔记:
url必须ftp:///(三个斜线)--需要空主机组件;打印机拒绝ftp://作为“不支持的打印文件路径或名称”。param使用3MF内的内部板路径(Metadata/plate_1.gcode对于板1),不是文件系统路径。md5: ""被接受;填充它是可选的。- 在配备AMS的H2打印机上,
use_ams: false如果切片文件声明了细丝,则不会抑制映射查找。工作H2路径是发送use_ams: true加上有效的映射。对于H2,映射长度必须与项目级灯丝声明长度匹配,填充位置必须匹配plate_.json.filament_ids.更喜欢ams_slots在工具层,让服务器扩展它。如果没有为具有声明细丝的H2预切片作业提供映射,则服务器在发送前会失败;传递明确ams_slots,生ams_mapping,或auto_match_ams: true. - 不需要客户端X.509证书。早期的假设是,2025年1月后的固件要求所有型号都使用mTLS,但这并不适用于局域网模式下的H2S——通过TLS的用户/密码就足够了。
- MCP服务器的
ftpUpload助手(基本ftpsecure: "implicit"以及短暂的空闲超时)在本地执行等效的上传,并且是使用服务器本身时的首选路径;curl形式相当于手动调试。
______________________________________________________________________
可用工具
Click to expand STL Manipulation Tools
STL操作工具
所有STL工具都将完整的网格几何体加载到内存中。对于大于10 MB的文件,请监控内存使用情况,并优先在较小的文件上进行测试。
get_sl_info
检查STL文件而不进行修改。返回边界框尺寸、面数、顶点数和模型中心。
{
"stl_path": "/path/to/model.stl"
}scale_tl
沿各个轴缩放STL模型。省略任何轴以保持不变(默认为1.0)。
{
"stl_path": "/path/to/model.stl",
"scale_x": 1.5,
"scale_y": 1.5,
"scale_z": 1.0
}为了实现均匀缩放,请将所有三个轴设置为相同的值:
{
"stl_path": "/path/to/model.stl",
"scale_x": 2.0,
"scale_y": 2.0,
"scale_z": 2.0
}rotate_stl
围绕一个或多个轴旋转STL模型。角度以度为单位。省略的轴默认为0。
{
"stl_path": "/path/to/model.stl",
"angle_x": 0,
"angle_y": 0,
"angle_z": 90
}extend_stl-base
在模型下方添加实心几何图形以增加其基准高度。可用于改善占地面积小或不稳定的模型上的床层附着力。
{
"stl_path": "/path/to/model.stl",
"extension_height": 3.0
}extension_height 单位为毫米。
合并_权限
合并比指定公差更近的顶点。这可以缩小网格中的小间隙,并略微减小文件大小。作为切片前的清理步骤很有用。
{
"stl_path": "/path/to/model.stl",
"tolerance": 0.01
}tolerance 单位为毫米,如果省略,默认为0.01。
中心模型
平移模型,使其边界框的中心位于世界原点(0,0,0)。在应用转换或导出以在另一个工具中使用之前很有用。
{
"stl_path": "/path/to/model.stl"
}lay_flat
确定模型上最大的平面,并旋转模型,使面在XY平面上向下(Z=0)。这是切片前的一个常见准备步骤,以尽量减少对支撑的需求。
{
"stl_path": "/path/to/model.stl"
}注意:这在具有明显主导平面的模型上效果最佳。有机或圆形形状的结果可能无法预测。
Click to expand Printer Control Tools
打印机控制工具
所有打印机工具都接受可选 host, bambu_serial,以及 bambu_token 论据。如果省略,值将回退到环境变量 PRINTER_HOST, BAMBU_SERIAL,以及 BAMBU_TOKEN。当使用多台打印机时,显式传递它们非常有用。
服务器还接受别名变量 BAMBU_PRINTER_HOST, BAMBU_PRINTER_SERIAL,以及 BAMBU_PRINTER_ACCESS_TOKEN,加 BAMBU_PRINTER_MODEL 和 BAMBU_STUDIO_PATH.
get_inter_status
检索当前打印机状态,包括温度、打印进度、层数、剩余时间和AMS插槽数据。内部发送a push_all MQTT命令,用于在读取缓存状态之前强制生成新的状态报告。
{
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}返回一个包含以下字段的结构化对象 status (gcode_state字符串), temperatures.nozzle, temperatures.bed, temperatures.chamber, print.progress, print.currentLayer, print.totalLayers, print.timeRemaining,以及 ams (来自打印机的原始AMS数据)。
get_inter_filaments
阅读实时AMS库存,并将每个装载的托盘解析到Bambu Studio 灯丝配置文件JSON路径 bambu_model 众所周知。结果包括 摘要、每个插槽的显示标签、配置文件匹配置信度和推荐值 load_filaments 简单的单材料CLI切片的价值。
{
"bambu_model": "h2d",
"nozzle_diameter": "0.4",
"host": "192.168.1.100",
"bambu_serial": "094...",
"bambu_token": "your_access_token"
}高信号字段:
summary.loaded_slots,summary.resolved_profile_slots,
summary.unresolved_loaded_slots, summary.empty_slots
trays[].display_name,trays[].tray_color,trays[].remain_percenttrays[].resolved_profile_pathtrays[].profile_resolution:exact-model-nozzle,model,generic,或
unresolved
trays[].match_confidence:high,medium,low,或nonerecommended.load_filaments:MCP将使用的配置文件路径
当没有提供明确的灯丝覆盖时自动切片
list_pinter_files
列出打印机SD卡上存储的文件。扫描 cache/, timelapse/,以及 logs/ 目录,并返回一个平面列表和一个目录分组细分。
{
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}照相机_快照
从打印机的室内摄像头捕获单个JPEG帧。只读。
两条传输线已连接,由 bambu_model:
- TCP-on-6000 为了 A1、A1迷你型、P1S、P1P.本地协议 OpenBambuAPI/video.md:端口6000上的TLS,80字节的身份验证数据包(
bblp+访问令牌),重复16字节帧头+JPEG有效载荷。 - 实时流协议 为了 X1、X1碳纤维、X1E、P2S 和 H2、H2S、H2D、H2C、H2D-Pro.使用以下命令将壳发送到ffmpeg
rtsps://bblp:@:322/streaming/live/1 -frames:v 1OpenBambuAPI中没有记录H2系列video.md但其固件使用与X1相同的RTSP端点(针对H2S实时验证,2026-04-27)。
需要PATH中的ffmpeg 对于RTSP路径。安装时使用 brew install ffmpeg 在macOS上。用覆盖二进制位置 ffmpeg_path 如果工具存在于其他地方。TCP-on-6000路径使用本机节点TLS,不需要ffmpeg。
{
"save_path": "/tmp/snap.jpg",
"timeout_ms": 8000,
"bambu_model": "h2s",
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}退货 { status, format: "image/jpeg", sizeBytes, base64, savedTo?, transport }. transport 是 "tcp-6000" 或 "rtsps-322" 因此呼叫者可以知道哪条路径产生了帧。通过 save_path 也将字节写入磁盘;否则,只返回base64有效载荷。
delete_pinter_file
通过FTPS从打印机的SD卡中删除单个文件。 破坏性的。 需要 confirm: true --没有它,呼叫将返回 status: "skipped" 并且不与打印机接触。路径遍历段(..)被拒绝。仅限于以下文件 cache/, timelapse/,以及 logs/ 可以删除。
{
"filename": "old_print.gcode.3mf",
"confirm": true,
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}裸文件名默认为 cache/。要定位其他目录,请传递相对路径:
{ "filename": "timelapse/2026-04-26_12-00.mp4", "confirm": true }
{ "filename": "logs/printer.log", "confirm": true }G代码
将字符串中的G代码内容直接写入打印机 cache/ 目录。内容被写入临时文件,并通过FTPS上传。
{
"filename": "calibration.gcode",
"gcode": "G28\nM104 S210\nG1 X100 Y100 Z10 F3000\n",
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}上传文件
将本地文件(G代码或3MF)上传到打印机。如果 print 是 true 该文件是 .gcode 文件, start_print_job 上传成功后自动调用。对于 .3mf 文件,上传正常完成,但您必须使用 print_3mf 启动打印(处理印版选择和元数据)。
{
"file_path": "/Users/yourname/Downloads/part.3mf",
"filename": "part.3mf",
"print": false,
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}start_print_job
开始打印 .gcode 打印机SD卡上已有的文件。请勿将其用于 .3mf 文件--使用 print_3mf 相反,它处理 project_file 带有正确元数据的MQTT命令。
{
"filename": "cache/calibration.gcode",
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}如果 filename 不包括目录前缀,由服务器前缀 cache/ 自动。
cancel_print
取消当前正在运行的打印作业。发送 UpdateState MQTT命令 state: "stop".不可恢复--使用 pause_print 如果你想继续。
{
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}pause_print
暂停当前正在运行的打印作业。发送 UpdateState MQTT命令 state: "pause".可通过以下方式恢复 resume_print.
{
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}resume_print
恢复暂停的打印作业。发送 UpdateState MQTT命令 state: "resume".
{
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}clear_hms_errors
清除打印机上的HMS或打印错误状态。发送班布的 clean_print_error MQTT命令。
{
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}set_print_speed
设置活动打印速度模式。接受 mode 值是 silent, standard, sport, ludicrous,或其数字等价物 1, 2, 3,以及 4.
{
"mode": "sport",
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}set_airduct_mode
将H2/P2风管模式设置为 cooling 或 heating。这仅适用于受支持的打印机。
{
"mode": "cooling",
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}重读\_ ams_rfid
触发一个AMS插槽的Bambu AMS RFID重新读取。这可以移动AMS灯丝;仅在打印机空闲且未加载时使用它。
{
"ams_id": 0,
"slot_id": 1,
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}设定温度
设置床或喷嘴的目标温度。通过MQTT发送M140(床)或M104(喷嘴)G代码命令。有效范围为0至300摄氏度。接受的值 component 是 bed, nozzle, extruder, tool,以及 tool0.
{
"component": "nozzle",
"temperature": 220,
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}设置风扇速度
将打印机风扇速度设置为0到100%。接受 fan 值是 part, auxiliary, chamber, 1, 2,以及 3.
{
"fan": "chamber",
"speed": 40,
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}set_light
设置打印机灯节点模式。Bambu通用固件报告腔室灯为 chamber_light;有效模式包括 on, off,以及 flashing.
{
"light": "chamber_light",
"mode": "on",
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}skip_objects
在运行多对象打印时跳过特定对象ID。使用 list_3mf_plate_objects 首先在切片的3MF上找到ID。
{
"object_ids": [6495, 6496],
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}set_ams_drying
在加热的AMS装置(AMS Pro/AMS-HT)上启动或停止AMS长丝干燥循环。这 action 参数接受 start 或 stopThe ams_id 必须是0到3之间的整数。
{
"action": "start",
"ams_id": 0,
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token"
}停止干燥:
{
"action": "stop",
"ams_id": 0
}打印3mf
启动Bambu打印的主要工具。 推荐输入:预切片 .gcode.3mf 从Bambu工作室导出 --看 docs/SLICING.md。此工具处理完整的工作流程:
- 检查3MF是否包含嵌入式G代码(
Metadata/plate_.gcode条目)。 - 如果没有找到G代码,则尝试通过配置的切片器自动切片。这种回退在实践中是不可靠的(过时的配置文件、剩余的多细丝声明)——更喜欢在Bambu Studio中进行预切片。
- 解析切片的3MF以提取正确的印版文件并计算其MD5哈希值。
- 还解析
Metadata/project_settings.config读取Bambu Studio嵌入的AMS映射。 - 将3MF上传到打印机
cache/通过FTPS使用目录basic-ftp直接(避免bambu-js双路径错误)。 - 为目标打印机系列发送正确的MQTT打印命令。对于H2S/H2D,这意味着
project_file项目长度ams_mapping,平行ams_mapping2以及H2兼容的校准标志。
{
"three_mf_path": "/Users/yourname/Downloads/bracket.3mf",
"bambu_model": "p1s",
"bed_type": "textured_plate",
"host": "192.168.1.100",
"bambu_serial": "01P00A123456789",
"bambu_token": "your_access_token",
"bed_leveling": true,
"flow_calibration": true,
"vibration_calibration": true,
"timelapse": false,
"use_ams": true,
"ams_mapping": [0, 1]
}bambu_model 是 必需的 --它确保切片器为正确的打印机生成G代码。使用错误的模型可能会导致床撞到喷嘴上。如果 bambu_model 工具调用中未提供,以及 BAMBU_MODEL 如果未在环境中设置,服务器将通过MCP引导交互式地询问您(如果您的客户端支持),或返回一个明确的错误。
bed_type 默认为 textured_plate 如果省略。 ams_slots 是首选的超控输入; ams_mapping 仍然是原始的逃生舱。在配备AMS的H2打印机上, use_ams: false 如果切片文件声明了细丝,则不会抑制映射查找。如果没有为具有声明细丝的H2预切片作业提供映射,则服务器在发送前会失败;传递明确 ams_slots,生 ams_mapping,或 auto_match_ams: true.
集 auto_match_ams: true 以匹配切片的3MF tray_info_idx 根据实时AMS库存值并使用匹配 ams_slots匹配器加入 (tray_info_idx, tray_color) 并且跟踪已经占用的插槽,因此具有相同SKU但颜色不同的两根细丝的打印(例如黑色和白色的两根GFG02 PETG HF)可以正确解析。只有当3MF的灯丝没有颜色设置或只装载了该SKU的一个托盘时,才会退回SKU。返回结构化 missing 报告(reason: "no_loaded_match" | "color_mismatch" | "exhausted" | "no_sku")当灯丝无法解析时。当你提供时被忽略 ams_slots 或 ams_mapping 明确地。
层高度、喷嘴温度和其他切片器参数不能通过此工具覆盖——它们在切片时被烘焙成3MF的G代码。在生成3MF之前,在切片器中应用这些设置。
resolve_3mf_ams_slots
在不上传或开始打印的情况下,对AMS匹配进行模拟运行。该工具读取 Metadata/plate_.json 和 Metadata/slice_info.config,然后比较所需 tray_info_idx 与带电AMS托盘相比的值。
{
"three_mf_path": "/Users/yourname/Downloads/bracket.gcode.3mf",
"bambu_model": "h2d",
"host": "192.168.1.100",
"bambu_serial": "094...",
"bambu_token": "your_access_token"
}list_3mf_plate_objects
列出切片3MF板上的对象ID。以前用这个 skip_objects 因此,您传递真实的Bambu对象ID,而不是猜测显示顺序。
{
"three_mf_path": "/Users/yourname/Downloads/bracket.gcode.3mf",
"plate_index": 0
}print_collar_charm
高级包装,用于准备由两部分组成的狗项圈魅力工作流程。这个工具是专门设计的:它需要一个准备好的两部分魅力项目,并应用一个固定的托盘策略。
- 较小的内部物体->黑色->AMS 1插槽1
- 较大的外部物体->白色->AMS 2插槽1
该工具将:
- 解决本地问题
.3mf或template_name. - 如果3MF仍然是一个未切片的项目,则自动切片。
- 检查
Metadata/plate_1.json以识别较小的内部和较大的外部。 - 在打印机上预装所需的AMS托盘。
- 通过现有的H2保险箱发送打印
print3mf路径使用ams_slots.
{
"template_name": "collars/letter_charm_a",
"bambu_model": "h2d",
"host": "192.168.1.100",
"bambu_serial": "03W09C123456789",
"bambu_token": "your_access_token",
"bed_leveling": true,
"flow_calibration": true,
"vibration_calibration": true,
"timelapse": false
}你也可以通过 source_path 直接代替 template_name.
此包装器当前假定:
- 输入是一个准备好的两部分魅力
.3mf,而不是需要生成颜色区域的裸STL - 所选板恰好有2个对象
- 所选板恰好有2个使用过的灯丝位置
- 较小的对象是内部插入/字母,较大的对象是外部主体
如果项目与这些假设不符,该工具会很快失败,出现结构化错误,而不是猜测。角色到颜色和颜色到托盘的映射在代码中是隔离的,因此下一个版本可以向客户要求的颜色发展,而无需更换整个包装器。
Click to expand Slicing Tools
切片工具
注: 经过验证的工作流程是在Bambu Studio(GUI)中切片并提供结果.gcode.3mf到print_3mf以下是CLI驱动的切片工具(slice_stl,slice_with_template)但对轮廓漂移敏感,不是生产打印的推荐路径。看 docs/SLICING.md.
list_templates
列出本地注册表目录中保存的模板。您可以用以下命令覆盖注册表根 BAMBU_TEMPLATE_DIR.
{}每个结果都包括模板 name,绝对 path、源类型和注册表中的相对路径。然后你可以通过 template_name 到 get_slice_settings, slice_stl,或 print_3mf 而不是一条生路。
保存模板
复制本地 3mf, json,或 .config 将文件放入模板注册表,并在可重用的模板名称下注册。
{
"source_path": "/path/to/sliced_project.3mf",
"template_name": "collars/p1p_petg_default"
}这将在模板注册表目录下创建目标,并使其立即可用于 list_templates, get_slice_settings, slice_with_template, slice_stl,以及 print_3mf.
get_slice_settings
在不切片任何内容的情况下,检查保存的3MF模板或提取的JSON/config配置文件中嵌入的切片器设置。
{
"template_name": "h2s_template"
}这将返回高信号设置的简洁摘要,如打印机预设、默认打印配置、灯丝配置、层高、填充密度、壳数、支撑模式和床类型。它接受 source_path 或 template_name对于3MF输入,它还将提取的设置blob写入临时路径,以便可以直接重用结果。
slice_with_template
使用本地注册表中的命名模板对STL或3MF进行切片。这是一个更高级的包装器 slice_stl 用于基于模板的工作流。
{
"stl_path": "/path/to/model.stl",
"template_name": "collars/p1p_petg_default",
"bambu_model": "p1p"
}这使用命名模板作为切片配置文件源,并且仍然支持实时打印机耗材选择,除非您明确覆盖 load_filaments模板设置在切片时应用,稍后应用 print_3mf 该步骤根据新切片的输出计算H2安全AMS映射。
slice_str
使用外部切片器对STL或3MF文件进行切片,并返回输出文件的路径。输出是一个3MF的切片(适用于BambuStudio和OrcaSlicer)或一个G代码文件(适用于PrusaSlicer、Cura、Slic3r)。
{
"stl_path": "/path/to/model.stl",
"slicer_type": "bambustudio",
"slicer_path": "/Applications/BambuStudio.app/Contents/MacOS/BambuStudio",
"slicer_profile": "/path/to/profile.ini"
}slicer_type 选项: bambustudio, orcaslicer, prusaslicer, cura, slic3r当省略时 SLICER_TYPE 使用环境变量(默认值: bambustudio).
slicer_path 和 slicer_profile 回落到 SLICER_PATH 和 SLICER_PROFILE 省略时的环境变量。
您可以提供 template_3mf_path 或 template_name 当你想从保存的模板中切片时。 template_name 通过为服务器配置的本地模板注册表目录解析。
对于在Bambu打印机上打印,建议的工作流程是:切片 bambustudio 要获得切片3MF,请将该输出路径传递给 print_3mf.
BambuStudio切片器选项
当 slicer_type 是 bambustudio (默认),这些附加参数可在 slice_stl:
| 参数 | 类型 | 说明 |
|---|---|---|
uptodate | boolean | 将3MF配置更新为最新的BambuStudio预设 |
repetitions | number | 要打印的份数 |
orient | boolean | 最佳印刷适性的自动定向模型 |
arrange | boolean | 自动排列构建板上的对象 |
ensure_on_bed | boolean | 将浮动模型抬到床上 |
clone_objects | string | 每个对象的克隆计数,逗号分隔(例如。 "1,3,1,10") |
skip_objects | string | 要跳过的对象索引,逗号分隔(例如。 "3,5,10") |
load_filaments | string | 灯丝配置文件路径,分号分隔 |
load_filament_ids | string | 细丝到对象映射,逗号分隔 |
enable_timelapse | boolean | 启用延时感知切片 |
allow_mix_temp | boolean | 允许在一个板上混合温度丝 |
scale | number | 统一比例因子 |
rotate | number | Z轴旋转度 |
rotate_x | number | X轴旋转度 |
rotate_y | number | Y轴旋转度 |
min_save | boolean | 产生更小的输出3MF(更快的上传) |
skip_modified_gcodes | boolean | 忽略3MF中过时的自定义gcode |
slice_plate | number | 要切割哪个板(0=所有板,默认值:0) |
示例:自动定向切片和3份副本
{
"stl_path": "/path/to/model.stl",
"bambu_model": "p1s",
"orient": true,
"arrange": true,
"repetitions": 3
}智能默认值(print_3mf自动切片)
当 print_3mf 检测到未点击的3MF并自动对其进行切片,这些默认值将自动应用:
uptodate: true--防止下载的3MF中出现过时的配置错误ensure_on_bed: true--安全网,将漂浮模型吊到床上min_save: true--输出更小,可更快地通过FTP上传到打印机skip_modified_gcodes: true--从其他用户的配置文件中删除自定义gcode
打印下载的模型时,这些默认值可以保证您的安全。通话时 slice_stl 直接来说,你可以完全控制每一面旗帜。
Click to expand Advanced Tools
高级工具
搅拌机_mcp_edit_model
将一组命名编辑操作(重网格、布尔值、抽取等)发送到Blender MCP桥命令,以进行超出内置STL工具支持的高级网格工作。
当 execute 是 false (默认设置),该工具返回将在不运行任何东西的情况下发送的有效载荷,这对于预览将要分派的内容非常有用。
当 execute 是 true,服务器调用配置的桥接命令,并将有效载荷作为JSON编码的环境变量(MCP_BLENDER_PAYLOAD).桥接命令必须通过以下方式设置 BLENDER_MCP_BRIDGE_COMMAND 环境变量或以内联方式传递 bridge_command.
{
"stl_path": "/path/to/model.stl",
"operations": ["remesh", "decimate:0.5", "boolean_union:/path/to/other.stl"],
"execute": false
}{
"stl_path": "/path/to/model.stl",
"operations": ["remesh"],
"bridge_command": "/usr/local/bin/blender-mcp-bridge",
"execute": true
}______________________________________________________________________
可用资源
资源遵循MCP资源协议,可以通过调用读取 ReadResource 带有URI。服务器还通过以下方式列出它们 ListResources.
打印机资源
printer://{host}/status--当前打印机状态。相当于打电话get_printer_status。返回一个包含温度、进度、图层、AMS和原始状态数据的JSON对象。
printer://{host}/files--打印机SD卡的文件列表。相当于打电话list_printer_files。返回按目录分组的文件。
printer://{host}/hms--HMS和来自最新状态有效载荷的错误诊断。返回连接状态、打印机状态、显式HMS有效载荷(如果存在)以及浅层原始字段,其名称表示错误、故障、警告或HMS数据。
例子: 要读取默认打印机的状态,请使用URI printer://192.168.1.100/status。主机段必须与配置的打印机IP匹配;服务器使用 PRINTER_HOST 如果使用默认URI模板。
______________________________________________________________________
Claude的命令示例
在Claude Desktop或Claude Code中连接MCP服务器后,您可以要求Claude在对话中直接执行这些操作。
打印机状态和控制
- “我的Bambu打印机的当前状态如何?”
- “现在床的温度是多少?”
- “显示打印机SD卡上的文件。”
- “取消当前打印作业。”
- “将喷嘴温度设置为220度。”
- “把床调到65度。”
- “打开室内灯。”
- “将室内风扇设置为40%。”
- “列出此切片3MF中的对象ID。”
- “跳过当前打印上的对象6495。”
- “在AMS 0上启动AMS干燥循环。”
- “停止在AMS 1上干燥。”
- “在不打印的情况下,将此3MF的AMS插槽与我装载的灯丝相匹配。”
- “自动匹配AMS插槽并打印此3MF。”
- “用相机拍下打印床的照片。”
- “显示打印机上的HMS错误代码。”
- “打印机处于什么速度模式?”
- “将风道设置为冷却模式。”
打印3MF文件
- “在Bambu打印机上的~/Downloads/bracket.3mf处打印文件。”
- “将括号.3mf上传到打印机,并使用AMS插槽0和1开始打印。”
- “打印my_model.3mf,启用床层调平,关闭振动校准。”
- “上传此3MF而不打印。”
- “使用BambuStudio对model.stl进行切片,然后打印结果。”
STL操作
- “这个STL文件的尺寸是多少?”
- “将model.stl缩放到当前大小的两倍。”
- “缩放此模型,使其宽度为原来的150%,但高度保持不变。”
- “将此STL围绕Z轴旋转90度。”
- “将这个模型的底座延长3毫米,这样它就能更好地粘在床上。”
- “将此模型置于原点。”
- “调整此模型的方向,使其最大的平面位于底部。”
- “合并此STL中任何几乎重复的顶点以将其清理干净。”
组合工作流
- 将model.stl绕Z旋转45度,将底座延伸2mm,然后将其打印在我的Bambu P1S上
- “取这个未切片的3MF,用BambuStudio切片,然后打印结果。”
- 将此部分缩放到其大小的80%,将其平铺,然后开始打印
______________________________________________________________________
Bambu实验室打印机限制
了解这些约束将帮助您避免令人沮丧的错误,并设定适当的期望。
- 打印3MF需要打印3MF。 这
print_3mf工具需要一个切片3MF,其中至少包含一个Metadata/plate_.gcode进入。如果你传递了一个未切片的3MF(从CAD工具导出的未切片的),服务器将尝试使用配置的切片器自动切片——但这种回退很脆弱,建议的工作流程是在Bambu Studio中预切片并传递结果.gcode.3mf。参见 docs/SLICING.md 对于整个过程。
- 层高度、温度和切片器设置已烘焙。 这
project_fileMQTT命令告诉打印机要运行哪个板。它不支持在打印时覆盖层高、温度目标、填充百分比或其他切片参数。在生成3MF之前,必须在切片器中设置这些参数。
- G代码和3MF作业使用不同的命令路径。
start_print_job发送aGCodeFileCommand通过MQTT传输,仅适用于存储在cache/目录。.3mf文件必须通过print_3mf,发送project_file命令,包括板选择、MD5验证和AMS映射。将这些混淆会导致打印机忽略命令或显示错误。
- 温度命令取决于打印机状态。
set_temperature通过MQTT发送M104或M140 G代码。打印机是否接受这些命令取决于其当前的固件版本和操作状态。某些打印机状态(如打开AMS管理的空闲屏幕)可能会忽略或排队命令。
- 实时状态有延迟。
get_printer_status发送apush_allMQTT请求,并在读取缓存状态之前等待长达1.5秒的响应。如果打印机没有快速响应(忙碌、睡眠或转换状态),您可能会看到稍微过时的数据。此服务器中没有持久事件订阅——每个状态调用都是一个新的请求。
- 需要LAN模式。 所有操作都要求打印机与运行此服务器的机器位于同一本地网络上。不支持仅云或远程访问设置。如果您的打印机仅通过Bambu Cloud连接,并且禁用了LAN模式,则连接将失败。
- 自签名TLS证书。 打印机的FTPS服务器使用自签名证书。这
basic-ftp客户端配置了rejectUnauthorized: false接受它。这是本地网络Bambu连接的标准,但假设本地网络环境是可信的。
______________________________________________________________________
一般限制和注意事项
内存使用
STL操作工具将整个网格作为Three.js几何体加载到内存中。对于大文件:
- 超过10 MB的文件在处理过程中可能会消耗数百MB的RAM。
- 在大文件上顺序运行多个操作可能会导致内存在垃圾回收周期之间累积。
- 如果遇到内存不足错误,请尝试拆分大型操作或使用较小/简化的网格。
- 服务器没有内置内存上限。在受约束的系统上,设置
TEMP_DIR使用快速本地路径,避免同时处理多个大文件。
STL操作限制
lay_flat通过分析曲面法线来识别最大的平面。它在具有清晰平面的机械零件上工作可靠,在没有单一主导面的有机或弯曲模型上工作不太可靠。extend_stl_base在模型下方添加一个新的长方体。对于具有复杂或非平面底面的模型,结果可能包括连接处的间隙或交叉点。打印前检查修改后的STL。merge_vertices使用距离容差来标识接近重复的顶点。将公差设置得太高可能会改变模型几何形状。默认值0.01毫米对大多数型号来说是安全的。- 非流形网格(具有孔、重叠面或内部几何体的网格)可能会对任何变换操作产生不可预测的结果。在处理有问题的文件之前,请使用网格修复工具(Meshmixer、PrusaSlicer的修复功能或Bambu Studio的修复选项)。
性能考虑
- 使用BambuStudio CLI进行切片可能需要30秒到几分钟,具体取决于模型复杂性、层高和系统的CPU。这
slice_stl调用是同步的,将一直阻塞,直到切片器进程完成。 - 大型3MF文件(多版打印、高细节模型)的FTPS上传可能需要15到60秒,具体取决于您的本地网络速度。
- MQTT连接由
host + serial钥匙。会话中对任何打印机工具的第一次调用都会建立MQTT连接;后续呼叫会重复使用它。如果连接中断(打印机断电、网络中断),下一个呼叫将自动重新连接。
______________________________________________________________________
许可证
GPL-2.0。看 许可证 全文。
这个项目是 mcp-3D打印机服务器 大卫·蒙哥马利,也是GPL-2.0。
致谢
一些打印机命令界面和工作流优先级由以下内容通知 班巴迪,AGPL-3.0 Bambu Lab打印机管理项目。此项目不提供Bambuddy代码。
