local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Allows Claude to connect with Bambu Lab 3D printers to get printer status, manage files, upload G-code files, and monitor printing through their MQTT and FTP interfaces. Compatible with X1C, P1S, P1P, A1, and other Bambu Lab printers.
Allows Claude to connect with Creality/Ender 3D printers through the Creality Cloud management system to control and monitor Ender series, CR series, and other Creality printers with network capabilities.
Allows Claude to interact with OctoPrint-managed 3D printers to get printer status, list and upload files, start/cancel print jobs, and set temperatures through OctoPrint's REST API.
MCP 3D打印服务器
- **Bambu
.3mf
打印:**新增专为 Bambu Lab 打印机设计的print_3mf
工具。该工具会上传.3mf
文件,并根据 OpenBambuAPI 规范通过 MQTT 直接发送打印命令。 - **直接 MQTT 通信(Bambu):**重构 Bambu 命令处理(
print_3mf
、cancelJob
)以使用直接 MQTT(TLS 端口 8883),而不是仅仅依赖bambu-js
执行命令。 - **
.3mf
文件解析:**实现了一个解析器(src/3mf_parser.ts
)来读取.3mf
文件中的元数据和 Bambu 特定的切片器设置(来自project_settings.config
)。 - **Bambu 预设资源:**如果设置了
BAMBU_STUDIO_CONFIG_PATH
,则增加了对将 Bambu Studio 预设文件(machine
、filament
、process
)读取为 MCP 资源(例如,preset://bambu/process/MyPreset
)的支持。 - **OrcaSlicer 集成:**增加了通过其命令行界面为
slice_stl
工具使用 OrcaSlicer 的支持。 - **新的 STL 操作工具:**添加了
merge_vertices
、center_model
和lay_flat
工具,用于使用three.js
进行基本模型准备。 - **配置更新:**添加了用于预设加载的
BAMBU_STUDIO_CONFIG_PATH
环境变量。 - **FTP 使用说明:**在文档中承认,Bambu 的文件操作当前通过
bambu-js
使用可能不安全的 FTP。 - **实现功能奇偶校验:**将 OctoPrint、Klipper、Duet、Repetier、Prusa Connect 和 Creality Cloud 的功能(状态详细信息、文件操作、尽可能直接打印、预设处理)提升到 Bambu 实施所计划的稳健性级别。
- **实现完整的 Bambu MQTT 状态:**重构 Bambu 的
getStatus
以订阅 MQTT 报告并保持实时状态。 - **实现强大的 AMS 映射:**替换占位符逻辑;正确解析并使用来自
.3mf
切片器配置或用户覆盖的 AMS 映射来执行 MQTT 打印命令。 - **实施
.3mf
打印覆盖:**向print_3mf
工具添加逻辑以处理用户提供的覆盖(例如,校准标志)以及可能通过 MQTT/G 代码实现的常见切片机设置(如果可行)。 - **计算 MD5 哈希:**添加逻辑以计算并包含 MQTT 打印命令中的
.3mf
文件的 MD5 哈希(可选但协议推荐)。 - **重构 Bambu File Ops:**如果可能/稳定,研究用直接 MQTT 方法替换
bambu-js
FTP 操作(getFiles
、uploadFile
),或者为bambu-js
提供 FTPS 支持。 - **添加预设发现逻辑:**改进预设资源列表(当前根据潜在文件名列出,如果存在则可以解析索引文件)。
- **扩展
.3mf
支持:**在适用的情况下为其他打印机类型添加.3mf
打印支持。 - **错误处理和报告:**增强 MQTT 错误处理和打印进度/完成的报告。
- **测试:**对所有新的 Bambu 功能进行彻底的运行时测试。
目录
描述
这是一个允许 MCP 用户连接这些 3D 打印机的 API 端点的服务器:
- OctoPrint
- 克利珀(《太空城》)
- 二重唱
- 雷佩蒂尔
- Bambu实验室
- Prusa Connect
- Creality/Ender
该服务器是一个模型上下文协议 (MCP) 服务器,用于将 Claude 与 3D 打印机管理系统连接起来。它允许 MCP 通过各种打印机管理系统(例如 OctoPrint、Klipper(通过 Moonraker)、Duet、Repetier 和 Bambu Labs 打印机)的 API 与 3D 打印机进行交互。
资源使用注意事项:此 MCP 服务器包含高级 3D 模型处理功能,处理大型 STL 文件时可能会占用大量内存。有关内存使用情况和性能的重要信息,请参阅“限制和注意事项”部分。
特征
- 获取打印机状态(温度、打印进度等)
- 列出打印机上的文件
- 将 G 代码文件上传到打印机
- 启动、取消和监控打印作业
- 设置打印机温度
- 高级 STL 文件操作:
- 延长底座以获得更好的附着力
- 均匀缩放模型或沿特定轴缩放模型
- 围绕任意轴旋转模型
- 平移(移动)模型
- 修改 STL 文件的特定部分(顶部、底部、中心或自定义)
- 具有详细模型信息的全面 STL 分析
- 生成 STL 文件的多角度 SVG 可视化
- 长时间操作的实时进度报告
- 通过详细诊断进行错误处理
- 切片 STL 文件以生成 G 代码
- 确认 G 代码文件中的温度设置
- 从 STL 修改到打印的完整端到端工作流程
- 直接在 Bambu Lab 打印机上打印
.3mf
文件(通过 MQTT 命令) - 将 Bambu Studio 预设文件(打印机、灯丝、工艺)读取为资源
安装
先决条件
- Node.js 18 或更高版本
- npm 或 yarn
从 npm 安装
从源安装
使用 Docker 运行
您还可以使用 Docker 和 Docker Compose 在容器化环境中运行服务器。
- 确保已安装 Docker 和 Docker Compose。
- 将
.env.example
复制到.env
并配置您的设置。 - 构建并运行容器:Copy
在 Docker 中使用切片器
请注意,默认的 Docker 设置无法直接使用主机上安装的切片器。由于主机和容器之间的操作系统和库存在差异,将切片器可执行文件直接从主机挂载到容器中是不可靠的。
推荐的方法是在 Docker 镜像中 安装你首选的切片器。这使得容器能够自给自足。
为此,您需要修改Dockerfile
。以下是如何添加 PrusaSlicer 或 OrcaSlicer 的概念示例(具体命令可能因切片器、其依赖项和当前 Alpine 软件包而异):
修改Dockerfile
后,重建镜像( docker-compose build
)。您还需要确保.env
文件或docker-compose.yml
中的SLICER_PATH
环境变量指向容器内的正确路径(例如, /usr/local/bin/orcaslicer
)。并将SLICER_TYPE
设置为orcaslicer
。
抱歉,没有包含某个特定的切片器,但考虑到切片器种类繁多(PrusaSlicer、OrcaSlicer、Cura 等),以及可用的配置,预装一个切片器会给许多用户带来不必要的镜像臃肿。如果某个切片器的需求变得非常普遍,我肯定会考虑在未来的版本中添加对它的官方支持。
配置
在运行服务器或设置环境变量的目录中创建一个.env
文件:
与 Claude Desktop 一起使用
- 编辑您的 Claude Desktop 配置文件:
- 对于 Bambu Labs 打印机:
- 重启Claude桌面
- 通过 Claude 连接到您的打印机
支持的打印机管理系统
OctoPrint
OctoPrint 是一款流行的 3D 打印机 Web 界面。它提供了用于控制打印机的 REST API。
- 默认端口:80(http)或 443(https)
- 身份验证:需要 API 密钥
Klipper(来自 Moonraker)
Klipper 是与 Moonraker API 服务器配合使用的 3D 打印机固件。
- 默认端口:7125
- 身份验证:取决于你的 Moonraker 配置
二重唱
Duet 是一款用于 3D 打印机的控制板,具有自己的 Web 界面(DuetWebControl)。
- 默认端口:80(http)或 443(https)
- 身份验证:取决于您的 Duet 配置
雷佩蒂尔
Repetier-Server是一款3D打印机的主机软件。
- 默认端口:3344
- 身份验证:需要 API 密钥
Bambu实验室
Bambu Lab 打印机使用 MQTT 进行状态和控制,使用 FTP 进行文件操作。
- 身份验证:需要序列号和访问令牌(设置
BAMBU_SERIAL
和BAMBU_TOKEN
) - 要求:打印机必须在同一网络上或启用云连接
- 兼容:X1C、P1S、P1P、A1 和其他 Bambu Lab 打印机
查找 Bambu 打印机的序列号和访问令牌
要连接到 Bambu Lab 打印机,您需要两样东西:
- 打印机序列号:
- 查看打印机背面或底部的标签,上面有序列号(通常以“01P”或“01A”开头,后跟数字/字母)
- 或者,打开 Bambu Studio,连接到您的打印机,转到设备 > 设备管理,然后查看打印机的信息
- 访问令牌:
- 访问令牌是直接连接到打印机所需的安全代码
- 对于 P1 系列打印机:转到触摸屏,选择“设置”>“网络”>“LAN 模式”,您将看到访问代码
- 对于 X1 系列打印机:转到触摸屏,选择“设置”>“网络”>“LAN 模式”,然后启用 LAN 模式以查看访问代码
- 对于 A1 Mini:使用 Bambu Handy 应用程序连接到打印机,然后转到设置 > 网络 > LAN 模式
注意:如果您的打印机不在同一个本地网络上或者您找不到访问令牌,则可能需要将打印机的固件更新到最新版本以启用 LAN 模式。
Bambu 通信说明 (MQTT & FTP)
- **MQTT:**此服务器使用基于社区发现(例如, OpenBambuAPI )的本地 MQTT 协议(端口 8883,TLS)来发送诸如开始打印和取消作业之类的命令。
- **FTP:**文件列表和上传目前依赖于打印机上运行的 FTP 服务器(通过
bambu-js
库助手)。注意:由于当前库的限制,此 FTP 连接可能不安全(纯 FTP) 。使用时请注意网络安全。
Prusa Connect
Prusa Connect 是 Prusa 自己的基于云的打印机管理解决方案。
- 默认端口:80(http)或 443(https)
- 身份验证:需要 API 密钥
- 兼容:Prusa MK4、Prusa Mini、Prusa XL 和其他带有 Prusa Connect 的 Prusa 打印机
设置 Prusa Connect
- 确保您的 Prusa 打印机已更新至最新固件
- 将打印机连接到 Wi-Fi 网络
- 创建 Prusa Connect 帐户并注册您的打印机
- 从 Prusa Connect Web 界面的“设置”>“API 访问”下生成 API 密钥
创想云
Creality Cloud 是 Creality 针对其打印机的管理系统。
- 默认端口:80(http)或 443(https)
- 身份验证:需要 Bearer 令牌
- 兼容:Ender系列、CR系列以及其他具有网络功能的Creality打印机
设置Creality Cloud
- 在您的移动设备上安装 Creality Cloud 应用程序
- 创建帐户并添加您的打印机
- 为您的打印机启用本地网络访问
- 在 Creality Cloud 应用的“设置”>“开发者选项”下生成令牌
可用工具
STL操作工具
内存使用警告:以下 STL 操作工具会将整个 3D 模型加载到内存中。对于大型或复杂的 STL 文件(>10MB),这些操作可能会消耗大量内存。在 MCP 环境中使用这些工具时,请注意内存限制。
获取stl信息
获取有关 STL 文件的详细信息,包括尺寸、顶点数和边界框。
扩展_stl_base
将 STL 文件的基础扩展指定的量。
scale_stl
均匀缩放 STL 模型或沿特定轴缩放。
或者对于非均匀缩放:
旋转_stl
围绕特定轴(以度为单位)旋转 STL 模型。
翻译_stl
沿特定轴(以毫米为单位)移动 STL 模型。
合并顶点
合并小于指定公差的顶点。有助于缩小小间隙并略微简化网格。
中心模型
平移模型,使其边界框的中心位于世界原点 (0,0,0)。
平放
尝试找出模型最大的平面(即尚未正对上方或下方的平面),并旋转模型,使该面在 XY 平面(Z=0)上朝下。这有助于确定打印模型的方向。
修改_stl_部分
对 STL 文件的选定部分应用特定转换。这允许对模型的特定部分进行详细修改。
对于自定义部分边界:
生成_stl_可视化
从多个角度(正面、侧面、顶部和等距视图)生成 STL 文件的 SVG 可视化。
切片_stl
切片 STL 文件以生成 G 代码。
确认温度
确认 G 代码文件中的温度设置。
处理和打印_stl
处理 STL 文件(扩展基础)、对其进行切片、确认温度并开始打印。
**注意:**自动定位以实现最佳打印(最小化支撑等)是一项复杂的任务,通常由切片器 GUI(如 OrcaSlicer 或 PrusaSlicer)处理,并且未在此服务器中实现。
打印机控制工具
获取打印机状态
获取 3D 打印机的当前状态。
对于 Bambu 打印机,目前这仅确认 MQTT 连接。
列出打印机文件
列出打印机上可用的文件。
对于 Bambu 打印机,通过 FTP 列出gcodes
目录中的文件。
上传代码
将 G 代码文件上传到打印机。
对于 Bambu 打印机,通过 FTP 上传到gcodes
目录。无法自动开始打印。
开始打印
开始打印打印机上已有的文件。
**不推荐用于 Bambu 打印机。**请使用print_3mf
打印 Bambu .3mf
文件。
取消打印
取消当前打印作业。
对于 Bambu 打印机,通过 MQTT 发送stop_print
命令。
设置打印机温度
设置打印机组件的温度。
不支持通过直接 MQTT 命令使用 Bambu 打印机。
Bambu 专用工具
打印_3mf
通过 FTP 将.3mf
文件上传到 Bambu 打印机,并通过 MQTT 命令启动打印作业。允许覆盖部分打印参数,例如 AMS 映射。
**注意:**打印机的 MQTT 命令不支持通过此工具覆盖切片器设置(例如层高或温度)。请在生成.3mf
文件之前应用这些更改。
可用资源
打印机资源
printer://{host}/status
- 3D 打印机的当前状态(目前仅限于 Bambu)printer://{host}/files
- 3D 打印机上可用文件的列表(Bambu 的 FTP)printer://{host}/file/{filename}
- 特定 G 代码文件的内容(仅检查 Bambu 是否存在)
Bambu 预设资源
如果BAMBU_STUDIO_CONFIG_PATH
环境变量设置为您的 Bambu Studio 用户设置目录,您可以读取已保存的预设。
preset://bambu/machine/{preset_name}
- 读取机器预设文件(例如,Bambu Lab P1S 0.4 nozzle.json
)preset://bambu/filament/{preset_name}
- 读取灯丝预设文件(例如,Generic PLA.json
)preset://bambu/process/{preset_name}
- 读取工艺预设文件(例如,0.20mm Standard @BBL P1S.json
)
使用示例: “读取我的 Bambu 工艺预设的内容,名为‘0.16mm Optimal @BBL P1S’”(Claude 将使用preset://bambu/process/0.16mm Optimal @BBL P1S
调用 ReadResource )
Claude 的示例命令
以下是连接 MCP 服务器后可以向 Claude 发出的一些示例命令:
打印机控制
- “我的 3D 打印机目前状态如何?”
- “显示我的打印机上的文件列表。”
- “将此 G 代码上传到我的打印机:[G 代码内容]”
- “开始打印名为‘benchy.gcode’的文件。”
- “取消当前打印作业。”
- “将挤出机温度设置为 200°C。”
- “将床温设置为 60°C。”
STL 操作和打印
- “获取此 STL 文件并将底座延长 2 英寸,然后发送到切片机并在我的打印机中排队。”
- “将 model.stl 的底部延长 1.5 英寸。”
- “将此 STL 文件均匀缩放 150%。”
- “将 model.stl 的宽度缩放至原来的两倍,但高度保持不变。”
- “将此模型绕 Z 轴旋转 90 度。”
- “将此 STL 模型向上移动 5 毫米,以在下方形成间隙。”
- “你能只修改这个模型的顶部,使其增大 20% 吗?”
- “分析这个 STL 文件并告诉我它的尺寸和细节。”
- “生成此 STL 文件的可视化效果,以便我可以看到它的样子。”
- “从不同角度创建我的模型的 SVG 可视化。”
- “在不改变该模型高度的情况下,将其底座加宽。”
- “使用 PrusaSlicer 对修改后的 STL 文件进行切片。”
- “确认 G 代码中的挤出机温度为 200°C,床面温度为 60°C。”
- “处理这个 STL 文件,将底座加长 2 英寸,切片,然后开始打印,但首先确认温度。”
- “在 Bambu 打印机上打印
~/Downloads/my_model.3mf
。” - “使用 AMS 插槽 0 和 2 将
~/Desktop/calibration_cube.3mf
上传到 Bambu 打印机,然后关闭床面调平。” - “取消我的 Bambu P1S 上的打印作业。”
- “我的 Bambu 灯丝预设‘通用 PETG’中的设置是什么?”
- “向我展示我的 Bambu 流程预设。”
Bambu Lab 打印机的局限性
由于 Bambu Lab 打印机 API 的性质,存在一些限制:
- 开始打印:开始打印需要 3MF 项目文件路径、gcode 文件名、打印名称和 MD5 哈希值。此服务器中的简化 API 尚未完全支持此功能。
- 温度控制:Bambu API 不提供直接设置温度的方法。这需要自定义 G 代码命令。
- 文件管理:必须将文件上传到打印机上的“gcodes”目录。
- **FTP 安全性:**文件操作当前使用打印机的 FTP 服务器,该服务器可能不安全(普通 FTP)。
- **参数覆盖:**只有 MQTT
project_file
命令支持的参数可以通过print_3mf
工具覆盖(例如 AMS 使用情况、校准标志)。切片机的设置(例如层高或温度)无法在打印时通过此命令更改。 - **状态更新:**通过 MQTT 进行完整的实时状态监控需要进一步实施。
限制和注意事项
内存使用情况
- 大型 STL 文件:处理大型或复杂的 STL 文件会消耗大量内存。在操作过程中,整个 STL 几何体都会加载到内存中。
- 多个操作:如果垃圾收集跟不上,按顺序运行多个 STL 操作(尤其是在大文件上)可能会导致内存累积。
- MCP 环境:由于本程序以 MCP 服务器形式运行,请注意 Claude 的 MCP 环境存在内存限制。对大型 STL 文件进行复杂操作可能会导致内存不足的问题。
STL 操作限制
- 截面修改:特定截面的修改功能最适合用于较简单的几何体。复杂或非流形网格可能会产生意外结果。
- 底部延伸:底部延伸算法的工作原理是在模型底部添加新的几何体。对于底部复杂的模型,结果可能并不完美。
- 错误处理:虽然我们添加了强大的错误处理功能,但复杂 STL 文件中的一些边缘情况仍然可能导致问题。
可视化限制
- SVG 表示:SVG 可视化是一种简化的示意图,而不是真正的 3D 渲染。
- 复杂模型:对于非常复杂的模型,可视化可能无法准确地表示所有细节。
性能考虑
- 切片操作:外部切片器进程可能占用大量 CPU 资源,并且对于复杂模型可能需要花费相当长的时间。
- 进度报告:对于大型文件,进度更新可能会在某些处理阶段出现停滞。
测试建议
- 从较小的 STL 文件(<10MB)开始测试功能
- 处理大文件时监控内存使用情况
- 在尝试修改复杂几何体之前,先测试简单几何体的修改
- 对于较大的操作,请考虑在具有至少 4GB 可用 RAM 的系统上运行
徽章
徽章 | 描述 |
---|---|
npm 上软件包的当前版本 | |
该项目采用 GPL-2.0 许可 | |
该项目使用 TypeScript 4.9+ 编写 | |
该项目正在积极维护 | |
我们欢迎通过 Pull 请求做出贡献 | |
需要 Node.js 18.0.0 或更高版本 | |
npm 每月下载次数 | |
该项目已收到的 GitHub 星标数量 |
执照
GPL-2.0
You must be authenticated.
Tools
通过 MCP 服务器实现与 3D 打印机管理系统的交互,支持 STL 文件操作、切片以及 OctoPrint、Klipper、Duet 等打印机的控制。