bambu-printer-mcp 1.0.5 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +485 -26
- package/dist/bambu-network-bridge.d.ts +63 -0
- package/dist/bambu-network-bridge.js +393 -0
- package/dist/index.js +562 -23
- package/dist/printers/bambu.js +6 -8
- package/dist/stl/stl-manipulator.d.ts +8 -4
- package/dist/stl/stl-manipulator.js +119 -30
- package/package.json +1 -1
- package/src/bambu-network-bridge.ts +526 -0
- package/src/index.ts +671 -26
- package/src/printers/bambu.ts +6 -8
- package/src/stl/stl-manipulator.ts +143 -33
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# bambu-printer-mcp
|
|
2
2
|
|
|
3
|
+
> **Thank you, [FULU Foundation](https://github.com/FULU-Foundation/OrcaSlicer-bambulab) and [Louis Rossmann](https://www.youtube.com/watch?v=1jhRqgHxEP8).** This project stands with printer owners, repair rights, and open-source developers who should be able to build interoperable tools without being bullied out of serving their communities. FULU's OrcaSlicer-bambulab fork is a first-class slicer target here.
|
|
4
|
+
|
|
3
5
|
[](https://www.npmjs.com/package/bambu-printer-mcp)
|
|
4
6
|
[](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)
|
|
5
7
|
[](https://www.typescriptlang.org/)
|
|
@@ -26,6 +28,7 @@ This is a stripped-down, Bambu-only fork of [mcp-3D-printer-server](https://gith
|
|
|
26
28
|
- [Configuration](#configuration)
|
|
27
29
|
- [Environment variables reference](#environment-variables-reference)
|
|
28
30
|
- [Usage](#usage)
|
|
31
|
+
- [FULU OrcaSlicer-bambulab Support](#fulu-orcaslicer-bambulab-support)
|
|
29
32
|
- [Enabling Developer Mode (Required)](#enabling-developer-mode-required)
|
|
30
33
|
- [Finding Your Bambu Printer's Serial Number and Access Token](#finding-your-bambu-printers-serial-number-and-access-token)
|
|
31
34
|
- [AMS (Automatic Material System) Setup](#ams-automatic-material-system-setup)
|
|
@@ -38,6 +41,7 @@ This is a stripped-down, Bambu-only fork of [mcp-3D-printer-server](https://gith
|
|
|
38
41
|
- [Advanced Tools](#advanced-tools)
|
|
39
42
|
- [Available Resources](#available-resources)
|
|
40
43
|
- [Example Commands for Claude](#example-commands-for-claude)
|
|
44
|
+
- [Troubleshooting and Tester Reports](#troubleshooting-and-tester-reports)
|
|
41
45
|
- [Bambu Lab Printer Limitations](#bambu-lab-printer-limitations)
|
|
42
46
|
- [General Limitations and Considerations](#general-limitations-and-considerations)
|
|
43
47
|
- [Memory usage](#memory-usage)
|
|
@@ -51,7 +55,9 @@ This is a stripped-down, Bambu-only fork of [mcp-3D-printer-server](https://gith
|
|
|
51
55
|
|
|
52
56
|
## Description
|
|
53
57
|
|
|
54
|
-
`bambu-printer-mcp` is a Model Context Protocol server that gives Claude (or any MCP client)
|
|
58
|
+
`bambu-printer-mcp` is a Model Context Protocol server that gives Claude (or any MCP client) control over Bambu Lab 3D printers. It handles the full local workflow: manipulate an STL, auto-slice it with BambuStudio or FULU OrcaSlicer-bambulab if needed, upload the resulting 3MF over FTPS, and start the print via an MQTT `project_file` command -- all without leaving your conversation.
|
|
59
|
+
|
|
60
|
+
It also has an optional FULU BambuNetwork bridge path. When pointed at the OrcaSlicer-bambulab Linux host or macOS/WSL wrapper, the MCP can call FULU's restored BambuNetwork methods directly, including cloud/remote printing through `print_3mf_bambu_network`.
|
|
55
61
|
|
|
56
62
|
**What this is not.** This package intentionally supports only Bambu Lab printers. It does not include adapters for OctoPrint, Klipper (Moonraker), Duet, Repetier, Prusa Connect, or Creality Cloud. If you need multi-printer support, use the parent project [mcp-3D-printer-server](https://github.com/DMontgomery40/mcp-3D-printer-server) instead.
|
|
57
63
|
|
|
@@ -66,13 +72,14 @@ This is a stripped-down, Bambu-only fork of [mcp-3D-printer-server](https://gith
|
|
|
66
72
|
- Get detailed printer status: temperatures (nozzle, bed, chamber), print progress, current layer, time remaining, and live AMS slot data
|
|
67
73
|
- List, upload, and manage files on the printer's SD card via FTPS
|
|
68
74
|
- Upload and print `.3mf` files with full plate selection and calibration flag control
|
|
69
|
-
- Automatic slicing: pass an unsliced 3MF to `print_3mf` and the server will slice it with BambuStudio CLI
|
|
75
|
+
- Automatic slicing: pass an unsliced 3MF to `print_3mf` and the server will slice it with BambuStudio CLI, OrcaSlicer, or FULU OrcaSlicer-bambulab before uploading
|
|
70
76
|
- Parse AMS mapping from the 3MF's embedded slicer config (`Metadata/project_settings.config`) and send it correctly formatted per the OpenBambuAPI spec
|
|
71
77
|
- Cancel in-progress print jobs via MQTT
|
|
72
78
|
- Set nozzle and bed temperature via G-code dispatch over MQTT
|
|
73
79
|
- Start G-code files already stored on the printer
|
|
74
80
|
- STL manipulation: scale, rotate, extend base, merge vertices, center at origin, lay flat, and inspect model info
|
|
75
|
-
- Slice STL or 3MF files using BambuStudio, OrcaSlicer, PrusaSlicer, Cura, or Slic3r
|
|
81
|
+
- Slice STL or 3MF files using BambuStudio, FULU OrcaSlicer-bambulab, OrcaSlicer, PrusaSlicer, Cura, or Slic3r
|
|
82
|
+
- Optional FULU BambuNetwork bridge support for restored BambuNetwork login/status/raw calls and cloud or LAN 3MF print starts
|
|
76
83
|
- Optional Blender MCP bridge for advanced mesh operations
|
|
77
84
|
- Dual transport: stdio (default, for Claude Desktop / Claude Code) and Streamable HTTP
|
|
78
85
|
|
|
@@ -84,6 +91,8 @@ This is a stripped-down, Bambu-only fork of [mcp-3D-printer-server](https://gith
|
|
|
84
91
|
|
|
85
92
|
- Node.js 18 or higher
|
|
86
93
|
- npm
|
|
94
|
+
- **A Bambu-compatible slicer** *(optional -- only needed for slicing)*. Required by `slice_stl` and `print_3mf` auto-slice when a 3MF has no embedded G-code. Use [FULU OrcaSlicer-bambulab](https://github.com/FULU-Foundation/OrcaSlicer-bambulab) with `SLICER_TYPE=orcaslicer-bambulab`, or use [BambuStudio](https://bambulab.com/en/download/studio) with `SLICER_TYPE=bambustudio`. Not needed if you only print pre-sliced 3MF files.
|
|
95
|
+
- **FULU BambuNetwork runtime** *(optional -- only needed for restored cloud/BambuNetwork printing)*. Install FULU OrcaSlicer-bambulab, then point `BAMBU_NETWORK_BRIDGE_COMMAND` at its bridge host or platform wrapper. See [FULU OrcaSlicer-bambulab Support](#fulu-orcaslicer-bambulab-support).
|
|
87
96
|
|
|
88
97
|
### Run without installing (npx)
|
|
89
98
|
|
|
@@ -133,11 +142,19 @@ BED_TYPE=textured_plate # Bed plate type: textured_plate, cool_plate,
|
|
|
133
142
|
NOZZLE_DIAMETER=0.4 # Nozzle diameter in mm (default: 0.4)
|
|
134
143
|
|
|
135
144
|
# --- Slicer configuration (required for slice_stl and print_3mf auto-slice) ---
|
|
136
|
-
SLICER_TYPE=
|
|
137
|
-
|
|
138
|
-
|
|
145
|
+
SLICER_TYPE=orcaslicer-bambulab # Options: bambustudio, orcaslicer, orcaslicer-bambulab,
|
|
146
|
+
# prusaslicer, cura, slic3r. Aliases: fulu-orca, orca-studio.
|
|
147
|
+
SLICER_PATH=/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer
|
|
148
|
+
# Adjust for your OS and install path. BambuStudio also works.
|
|
139
149
|
SLICER_PROFILE= # Optional: path to a slicer profile/config file
|
|
140
150
|
|
|
151
|
+
# --- FULU BambuNetwork bridge (optional; restores cloud/BambuNetwork printing) ---
|
|
152
|
+
BAMBU_DEV_ID=01P00A123456789 # BambuNetwork device id; often the same as serial
|
|
153
|
+
BAMBU_NETWORK_BRIDGE_COMMAND= # Full shell command for pjarczak_bambu_linux_host or wrapper
|
|
154
|
+
BAMBU_NETWORK_CONFIG_DIR= # Optional; defaults to ~/.config/bambu-printer-mcp/bambu-network
|
|
155
|
+
BAMBU_NETWORK_COUNTRY_CODE=US # BambuNetwork region/country code
|
|
156
|
+
BAMBU_NETWORK_USER_INFO= # Optional raw user_info JSON if you need net.change_user
|
|
157
|
+
|
|
141
158
|
# --- Temporary file directory ---
|
|
142
159
|
TEMP_DIR=/tmp/bambu-mcp-temp # Directory for intermediate files. Created automatically if absent.
|
|
143
160
|
|
|
@@ -165,10 +182,16 @@ BLENDER_MCP_BRIDGE_COMMAND= # Shell command to invoke your Blender MCP bri
|
|
|
165
182
|
| `BAMBU_TOKEN` | | Yes | LAN access token |
|
|
166
183
|
| `BAMBU_MODEL` | | **Yes** | Printer model: `p1s`, `p1p`, `x1c`, `x1e`, `a1`, `a1mini`, `h2d`. **Required for safe operation** -- determines the correct G-code generation. If omitted and the MCP client supports elicitation, the server will ask you interactively. |
|
|
167
184
|
| `BED_TYPE` | `textured_plate` | No | Bed plate type: `textured_plate`, `cool_plate`, `engineering_plate`, `hot_plate` |
|
|
168
|
-
| `NOZZLE_DIAMETER` | `0.4` | No | Nozzle diameter in mm. Used to select the correct
|
|
169
|
-
| `SLICER_TYPE` | `bambustudio` | No | Slicer to use for slicing operations |
|
|
170
|
-
| `SLICER_PATH` |
|
|
185
|
+
| `NOZZLE_DIAMETER` | `0.4` | No | Nozzle diameter in mm. Used to select the correct Bambu-compatible machine preset. |
|
|
186
|
+
| `SLICER_TYPE` | `bambustudio` | No | Slicer to use for slicing operations: `bambustudio`, `orcaslicer`, `orcaslicer-bambulab`, `prusaslicer`, `cura`, or `slic3r`. Aliases such as `fulu-orca` and `orca-studio` are accepted. |
|
|
187
|
+
| `SLICER_PATH` | Platform default for the selected slicer | No | Full path to the slicer executable, or a command name on `PATH` such as `OrcaSlicer` |
|
|
171
188
|
| `SLICER_PROFILE` | | No | Path to a slicer profile or config file |
|
|
189
|
+
| `BAMBU_DEV_ID` | `BAMBU_SERIAL` | No | BambuNetwork device id used by `print_3mf_bambu_network`; often the same value as the printer serial. |
|
|
190
|
+
| `BAMBU_NETWORK_BRIDGE_COMMAND` | | No | Full shell command that starts FULU's `pjarczak_bambu_linux_host`, `pjarczak-bambu-linux-host-wrapper`, or WSL wrapper. Required for BambuNetwork tools. |
|
|
191
|
+
| `FULU_BAMBU_NETWORK_BRIDGE_COMMAND` | | No | Alternate env name accepted for the same bridge command. |
|
|
192
|
+
| `BAMBU_NETWORK_CONFIG_DIR` | `~/.config/bambu-printer-mcp/bambu-network` | No | Config/log directory passed to FULU `net.create_agent` and `net.set_config_dir`. |
|
|
193
|
+
| `BAMBU_NETWORK_COUNTRY_CODE` | `US` | No | Country code passed to the FULU BambuNetwork agent. |
|
|
194
|
+
| `BAMBU_NETWORK_USER_INFO` | | No | Optional raw `user_info` JSON string passed to FULU `net.change_user`. Usually you can reuse the login/config state from OrcaSlicer-bambulab instead. |
|
|
172
195
|
| `TEMP_DIR` | `./temp` | No | Directory for intermediate files |
|
|
173
196
|
| `MCP_TRANSPORT` | `stdio` | No | Transport mode: `stdio` or `streamable-http` |
|
|
174
197
|
| `MCP_HTTP_HOST` | `127.0.0.1` | No | HTTP bind address (HTTP transport only) |
|
|
@@ -196,8 +219,8 @@ Add this server to your MCP client's config (Claude Desktop, Claude Code, Cursor
|
|
|
196
219
|
"BAMBU_SERIAL": "01P00A123456789",
|
|
197
220
|
"BAMBU_TOKEN": "your_access_token",
|
|
198
221
|
"BAMBU_MODEL": "p1s",
|
|
199
|
-
"SLICER_TYPE": "
|
|
200
|
-
"SLICER_PATH": "/Applications/
|
|
222
|
+
"SLICER_TYPE": "orcaslicer-bambulab",
|
|
223
|
+
"SLICER_PATH": "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer"
|
|
201
224
|
}
|
|
202
225
|
}
|
|
203
226
|
}
|
|
@@ -230,6 +253,275 @@ This applies to all MCP servers, not just this one.
|
|
|
230
253
|
|
|
231
254
|
---
|
|
232
255
|
|
|
256
|
+
## FULU OrcaSlicer-bambulab Support
|
|
257
|
+
|
|
258
|
+
FULU's [OrcaSlicer-bambulab](https://github.com/FULU-Foundation/OrcaSlicer-bambulab) restores full BambuNetwork support for Bambu Lab printers. This MCP now supports it in two separate ways:
|
|
259
|
+
|
|
260
|
+
1. **Slicer/exporter mode.** Set `SLICER_TYPE=orcaslicer-bambulab` to slice STL or 3MF inputs with FULU's fork. The aliases `fulu-orca`, `orca-studio`, and `orca-bambulab` are also accepted.
|
|
261
|
+
2. **BambuNetwork bridge mode.** Set `BAMBU_NETWORK_BRIDGE_COMMAND` to FULU's Linux host or platform wrapper. Then use `bambu_network_bridge_status`, `bambu_network_call`, or `print_3mf_bambu_network` to go through FULU's restored BambuNetwork path.
|
|
262
|
+
|
|
263
|
+
These modes are intentionally separate. The default `print_3mf` path remains transparent local MQTT/FTPS. The BambuNetwork path is opt-in, because it uses FULU's restored network library and runtime instead of the MCP's direct LAN implementation.
|
|
264
|
+
|
|
265
|
+
### Current status, honestly
|
|
266
|
+
|
|
267
|
+
This is an MCP server that people can clone, configure, and run. The repo now contains the FULU bridge client, tool schemas, behavior tests, built `dist/` output, and macOS setup documentation. It is not being presented as magic or as a finished bypass for every Bambu firmware. The point of this release is to make the FULU path available from MCP, keep the old local Bambu flow intact, and collect real printer reports quickly.
|
|
268
|
+
|
|
269
|
+
As of 2026-05-13, the validation matrix is:
|
|
270
|
+
|
|
271
|
+
| Surface | Status | Notes |
|
|
272
|
+
|---|---|---|
|
|
273
|
+
| Source checkout | Working | `git clone`, `npm install`, `npm run build`, and `npm test` are the intended maintainer/dev path. |
|
|
274
|
+
| MCP stdio transport | Working | Covered by behavior tests: initialize, list tools, success call, structured failure. |
|
|
275
|
+
| MCP Streamable HTTP transport | Working | Covered by behavior tests, including origin rejection. |
|
|
276
|
+
| FULU slicer aliasing | Working | `orcaslicer-bambulab`, `fulu-orca`, `orca-studio`, and `orca-bambulab` normalize to the Bambu-compatible Orca CLI flow. |
|
|
277
|
+
| BambuStudio CLI fallback | Working | The existing `bambustudio` slicer path still works and remains the conservative fallback for slicing. |
|
|
278
|
+
| FULU bridge protocol | Working in tests | The MCP speaks FULU's framed JSON protocol, creates an agent, retries ABI detection, and handles non-zero print return codes as failures. |
|
|
279
|
+
| macOS bridge launch | Partially working | On Apple Silicon, the FULU runtime can verify and the x86_64 Lima bridge can handshake from this MCP. Real print start still needs iteration. |
|
|
280
|
+
| macOS print start | Not proven | Test bench result: FULU LAN print reached the bridge but returned `send msg failed`; direct MQTT/FTPS upload reached the printer but the printer reported HMS `0500050000010007` (`MQTT Command verification failed`). |
|
|
281
|
+
| Linux print start | Needs testers | This should be the cleanest FULU runtime because the Linux host and `.so` files run natively, but it needs real printer confirmations. |
|
|
282
|
+
| Windows print start | Needs testers | WSL 2 support follows FULU's runtime model, but we need Windows testers with real printers before calling it proven. |
|
|
283
|
+
|
|
284
|
+
The older local fallback is still here: `SLICER_TYPE=bambustudio` or `SLICER_TYPE=orcaslicer-bambulab` uses a slicer CLI to produce a Bambu 3MF, then the MCP uses the direct Bambu LAN path (`print_3mf`) with FTPS upload and MQTT status/control. That path remains useful for printers and firmware that still accept third-party local project commands, and it is covered by the repo behavior tests. The new `connection_mode: "bambu_network"` path is the FULU bridge path.
|
|
285
|
+
|
|
286
|
+
Important wording detail: when `print_3mf` returns success, it means the file was uploaded and the MQTT `project_file` command was sent. On newer locked-down firmware, the printer can still reject that command after receipt. Check `get_printer_status` for `gcode_state`, HMS messages, and actual motion before declaring that a print started.
|
|
287
|
+
|
|
288
|
+
### Clone-and-run checklist
|
|
289
|
+
|
|
290
|
+
For a source checkout, use the same shape on every OS:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
git clone https://github.com/DMontgomery40/bambu-printer-mcp.git
|
|
294
|
+
cd bambu-printer-mcp
|
|
295
|
+
npm install
|
|
296
|
+
npm run build
|
|
297
|
+
npm test
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Then choose one of the two print paths:
|
|
301
|
+
|
|
302
|
+
| Path | Use when | Key env/tool settings |
|
|
303
|
+
|---|---|---|
|
|
304
|
+
| Direct local Bambu path | You are on the same LAN and your firmware still accepts third-party MQTT `project_file` commands. | `PRINTER_HOST`, `BAMBU_SERIAL`, `BAMBU_TOKEN`, `BAMBU_MODEL`, then call `print_3mf`. |
|
|
305
|
+
| FULU BambuNetwork path | You want to test restored BambuNetwork behavior through FULU's runtime. | `BAMBU_NETWORK_BRIDGE_COMMAND`, `BAMBU_DEV_ID`, `BAMBU_MODEL`, then call `print_3mf_bambu_network` or `print_3mf` with `connection_mode: "bambu_network"`. |
|
|
306
|
+
|
|
307
|
+
Minimum local direct `.env`:
|
|
308
|
+
|
|
309
|
+
```env
|
|
310
|
+
PRINTER_HOST=192.168.1.100
|
|
311
|
+
BAMBU_SERIAL=01P00A123456789
|
|
312
|
+
BAMBU_TOKEN=your_lan_access_code
|
|
313
|
+
BAMBU_MODEL=p1s
|
|
314
|
+
SLICER_TYPE=bambustudio
|
|
315
|
+
SLICER_PATH=/Applications/BambuStudio.app/Contents/MacOS/BambuStudio
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Minimum FULU bridge `.env`:
|
|
319
|
+
|
|
320
|
+
```env
|
|
321
|
+
BAMBU_MODEL=p1s
|
|
322
|
+
BAMBU_DEV_ID=01P00A123456789
|
|
323
|
+
BAMBU_NETWORK_COUNTRY_CODE=US
|
|
324
|
+
BAMBU_NETWORK_BRIDGE_COMMAND=/path/to/pjarczak_bambu_linux_host_or_platform_wrapper
|
|
325
|
+
SLICER_TYPE=orcaslicer-bambulab
|
|
326
|
+
SLICER_PATH=/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Do not paste access codes, serial numbers, cloud tokens, or account JSON into public issues. Redact them and keep only the last few characters if you need to distinguish devices.
|
|
330
|
+
|
|
331
|
+
### Slicer/exporter mode
|
|
332
|
+
|
|
333
|
+
```env
|
|
334
|
+
SLICER_TYPE=orcaslicer-bambulab
|
|
335
|
+
SLICER_PATH=/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
For Bambu-family slicing, `orcaslicer`, `orcaslicer-bambulab`, and `bambustudio` all use the Bambu-compatible CLI flow: `--slice`, `--export-3mf`, `--load-settings`, `--allow-newer-file`, and the AMS/object/plate flags exposed by `slice_stl`. That produces a sliced 3MF with embedded `Metadata/plate_<n>.gcode`, which either local `print_3mf` or bridge `print_3mf_bambu_network` can use.
|
|
339
|
+
|
|
340
|
+
### BambuNetwork bridge mode
|
|
341
|
+
|
|
342
|
+
FULU's bridge host speaks a small binary-framed JSON protocol over stdin/stdout. This MCP implements that protocol directly and initializes the same agent shape FULU uses:
|
|
343
|
+
|
|
344
|
+
- `bridge.handshake`
|
|
345
|
+
- `net.create_agent`
|
|
346
|
+
- `net.set_config_dir`
|
|
347
|
+
- `net.init_log`
|
|
348
|
+
- `net.set_country_code`
|
|
349
|
+
- `net.start`
|
|
350
|
+
- `net.connect_server`
|
|
351
|
+
|
|
352
|
+
The high-level print tool builds FULU-style `PrintParams` and calls one of these bridge methods:
|
|
353
|
+
|
|
354
|
+
| MCP `bambu_network_method` | FULU method | Typical use |
|
|
355
|
+
|---|---|---|
|
|
356
|
+
| `start_print` | `net.start_print` | Cloud/BambuNetwork print. This is the default when `connection_type` is `cloud`. |
|
|
357
|
+
| `start_local_print` | `net.start_local_print` | Local LAN print through FULU without record upload. This is the default when `connection_type` is `lan`. |
|
|
358
|
+
| `start_local_print_with_record` | `net.start_local_print_with_record` | Local LAN print plus BambuNetwork task record behavior, matching Orca's preferred LAN path when possible. |
|
|
359
|
+
| `start_send_gcode_to_sdcard` | `net.start_send_gcode_to_sdcard` | Send sliced G-code/3MF content to SD card through the bridge. Useful for probing runtime behavior. |
|
|
360
|
+
| `start_sdcard_print` | `net.start_sdcard_print` | Start an already-present SD card job through the bridge. |
|
|
361
|
+
|
|
362
|
+
Use this probe first:
|
|
363
|
+
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"connect": true
|
|
367
|
+
}
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
with the `bambu_network_bridge_status` tool. The response includes runtime hints, missing macOS files, the resolved config directory, and the suggested macOS wrapper command when it can infer one.
|
|
371
|
+
|
|
372
|
+
Healthy bridge status should show:
|
|
373
|
+
|
|
374
|
+
```json
|
|
375
|
+
{
|
|
376
|
+
"configured": true,
|
|
377
|
+
"connected": true,
|
|
378
|
+
"agentReady": true,
|
|
379
|
+
"handshake": {
|
|
380
|
+
"network_loaded": true,
|
|
381
|
+
"source_loaded": true,
|
|
382
|
+
"network_actual_abi_version": "02.05.02.58"
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
The exact ABI version can change with FULU's bundled BambuNetwork library. This MCP reads `network_actual_abi_version` from `bridge.handshake` and retries with `PJARCZAK_EXPECTED_BAMBU_NETWORK_VERSION` automatically when the bridge reports an expected-version mismatch. You should not need to set that variable manually unless you are debugging the bridge itself.
|
|
388
|
+
|
|
389
|
+
### macOS runtime
|
|
390
|
+
|
|
391
|
+
FULU's upstream README currently says "macOS: Work in progress." For this MCP, macOS is wired up enough to install, verify, launch, and probe the FULU bridge runtime when FULU's macOS bridge payload is installed and you point the MCP at the wrapper. Real print-start behavior still needs more Mac tester feedback.
|
|
392
|
+
|
|
393
|
+
FULU's macOS runtime uses Lima under:
|
|
394
|
+
|
|
395
|
+
```text
|
|
396
|
+
~/Library/Application Support/OrcaSlicer/macos-bridge/
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
The runtime directory should contain files such as `pjarczak_bambu_linux_host`, `libbambu_networking.so`, `libBambuSource.so`, `ca-certificates.crt`, and `slicer_base64.cer`. The plugin/resource directory should contain `pjarczak-bambu-linux-host-wrapper`, `install_runtime_macos.sh`, and `verify_runtime_macos.sh`.
|
|
400
|
+
|
|
401
|
+
After installing FULU OrcaSlicer-bambulab, run the bridge status probe. If it finds the wrapper and runtime, it will return a command like this:
|
|
402
|
+
|
|
403
|
+
```bash
|
|
404
|
+
export BAMBU_NETWORK_BRIDGE_COMMAND="PJARCZAK_BAMBU_PLUGIN_DIR='$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime' '$HOME/Library/Application Support/OrcaSlicer/plugins/pjarczak-bambu-linux-host-wrapper' '$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host'"
|
|
405
|
+
export BAMBU_NETWORK_COUNTRY_CODE=US
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
If the probe reports missing runtime files, launch FULU OrcaSlicer-bambulab once and let it install its macOS bridge runtime. If your package exposes the scripts directly, the install/verify flow is:
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
"$HOME/Library/Application Support/OrcaSlicer/plugins/install_runtime_macos.sh" -PluginDir "$HOME/Library/Application Support/OrcaSlicer/plugins"
|
|
412
|
+
"$HOME/Library/Application Support/OrcaSlicer/plugins/verify_runtime_macos.sh" -PluginDir "$HOME/Library/Application Support/OrcaSlicer/plugins"
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
On newer Lima releases, FULU's installed script may need the modern template URL form. If runtime install fails with `template ".yaml" not found`, start the named Lima instance once with:
|
|
416
|
+
|
|
417
|
+
```bash
|
|
418
|
+
limactl start --name=orcaslicer-bambu-network --tty=false --mount-writable --vm-type=vz --network=vzNAT --rosetta template://default
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
On Apple Silicon, if the default Lima/Rosetta runtime starts but the bridge host crashes with architecture or `Bus error` failures, use an x86_64 Lima instance and point the same wrapper at it:
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
export BAMBU_NETWORK_BRIDGE_COMMAND="PJARCZAK_MAC_LIMA_INSTANCE=orcaslicer-bambu-network-x86 PJARCZAK_BAMBU_PLUGIN_DIR='$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime' '$HOME/Library/Application Support/OrcaSlicer/plugins/pjarczak-bambu-linux-host-wrapper' '$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host'"
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
The app name and resource path can differ by build, so trust `bambu_network_bridge_status` over hard-coded examples.
|
|
428
|
+
|
|
429
|
+
macOS troubleshooting notes:
|
|
430
|
+
|
|
431
|
+
| Symptom | Meaning | Next step |
|
|
432
|
+
|---|---|---|
|
|
433
|
+
| `configured: false` | `BAMBU_NETWORK_BRIDGE_COMMAND` is empty. | Run `bambu_network_bridge_status` without `connect`, copy the suggested command if present, or set it manually. |
|
|
434
|
+
| Missing wrapper files | FULU's plugin files were not installed where the MCP expects. | Launch FULU OrcaSlicer-bambulab once, then run `verify_runtime_macos.sh`. |
|
|
435
|
+
| Missing runtime `.so` files | The Linux bridge payload did not install into `macos-bridge/runtime`. | Run `install_runtime_macos.sh`, then `verify_runtime_macos.sh`. |
|
|
436
|
+
| `template ".yaml" not found` | Lima's template syntax changed. | Use the `template://default` command shown above. |
|
|
437
|
+
| `Bus error` or architecture crash | Rosetta/arm64 guest/runtime mismatch. | Try the x86_64 Lima instance command shown above. |
|
|
438
|
+
| `send msg failed` during print | The FULU bridge ran, but the printer/network layer rejected the print start. | Report platform, printer model, firmware, method used, and redacted bridge output. |
|
|
439
|
+
|
|
440
|
+
### Linux runtime
|
|
441
|
+
|
|
442
|
+
On Linux, point the bridge command at FULU's host binary with access to the bundled Bambu network shared libraries:
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
export BAMBU_NETWORK_BRIDGE_COMMAND="/path/to/pjarczak_bambu_linux_host"
|
|
446
|
+
export PJARCZAK_BAMBU_PLUGIN_DIR="/path/to/fulu-orca-plugin-or-runtime"
|
|
447
|
+
export BAMBU_NETWORK_COUNTRY_CODE=US
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
Linux testers: please report whether `bambu_network_bridge_status` can create an agent, whether `print_3mf_bambu_network` returns `value: 0`, and whether the printer actually transitions out of `IDLE`. Include distro, CPU architecture, printer model, firmware version, and whether the job was `cloud` or `lan`.
|
|
451
|
+
|
|
452
|
+
### Windows runtime
|
|
453
|
+
|
|
454
|
+
Windows support follows FULU's WSL 2 requirement. Enable WSL 2 as FULU documents, restart Windows, then use a `wsl ...` command that starts FULU's bridge host from the Linux environment:
|
|
455
|
+
|
|
456
|
+
```powershell
|
|
457
|
+
setx BAMBU_NETWORK_BRIDGE_COMMAND "wsl -- /path/to/pjarczak_bambu_linux_host"
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
If your FULU build includes `pjarczak_wsl_run_host.sh`, prefer that wrapper because it prepares the expected WSL runtime layout.
|
|
461
|
+
|
|
462
|
+
Windows testers needed. The useful report is:
|
|
463
|
+
|
|
464
|
+
- Windows version and CPU architecture.
|
|
465
|
+
- WSL distro name and WSL version.
|
|
466
|
+
- Whether FULU OrcaSlicer-bambulab itself can print through BambuNetwork.
|
|
467
|
+
- Output from `bambu_network_bridge_status` with secrets redacted.
|
|
468
|
+
- Which print method was used: `start_print`, `start_local_print`, or `start_local_print_with_record`.
|
|
469
|
+
- Printer model, firmware, LAN-only/developer-mode state, and whether the printer moved beyond `IDLE`.
|
|
470
|
+
|
|
471
|
+
### Printing through BambuNetwork
|
|
472
|
+
|
|
473
|
+
Cloud/restored internet print:
|
|
474
|
+
|
|
475
|
+
```json
|
|
476
|
+
{
|
|
477
|
+
"three_mf_path": "/Users/you/Downloads/bracket.3mf",
|
|
478
|
+
"bambu_model": "p1s",
|
|
479
|
+
"connection_type": "cloud",
|
|
480
|
+
"dev_id": "01P00A123456789"
|
|
481
|
+
}
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
LAN/local print through the FULU bridge:
|
|
485
|
+
|
|
486
|
+
```json
|
|
487
|
+
{
|
|
488
|
+
"three_mf_path": "/Users/you/Downloads/bracket.3mf",
|
|
489
|
+
"bambu_model": "p1s",
|
|
490
|
+
"connection_type": "lan",
|
|
491
|
+
"dev_id": "01P00A123456789",
|
|
492
|
+
"dev_ip": "192.168.1.100",
|
|
493
|
+
"bambu_token": "your_access_token"
|
|
494
|
+
}
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
You can also route the existing `print_3mf` tool through FULU by passing:
|
|
498
|
+
|
|
499
|
+
```json
|
|
500
|
+
{
|
|
501
|
+
"three_mf_path": "/Users/you/Downloads/bracket.3mf",
|
|
502
|
+
"bambu_model": "p1s",
|
|
503
|
+
"connection_mode": "bambu_network",
|
|
504
|
+
"connection_type": "cloud",
|
|
505
|
+
"dev_id": "01P00A123456789"
|
|
506
|
+
}
|
|
507
|
+
```
|
|
508
|
+
|
|
509
|
+
Force a specific FULU method while testing:
|
|
510
|
+
|
|
511
|
+
```json
|
|
512
|
+
{
|
|
513
|
+
"three_mf_path": "/Users/you/Downloads/bracket.3mf",
|
|
514
|
+
"bambu_model": "p1s",
|
|
515
|
+
"connection_type": "lan",
|
|
516
|
+
"bambu_network_method": "start_local_print_with_record",
|
|
517
|
+
"dev_id": "01P00A123456789",
|
|
518
|
+
"dev_ip": "192.168.1.100",
|
|
519
|
+
"bambu_token": "your_access_token"
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
233
525
|
## Enabling Developer Mode (Required)
|
|
234
526
|
|
|
235
527
|
This MCP server communicates directly with your printer over your local network using MQTT and FTPS. For this to work, **Developer Mode** must be enabled on the printer. Without it, the printer will reject third-party LAN connections even if you have the correct access code.
|
|
@@ -336,7 +628,7 @@ The AMS has 4 slots per unit, numbered 0 through 3. If you have multiple AMS uni
|
|
|
336
628
|
|
|
337
629
|
### Automatic AMS mapping from the 3MF
|
|
338
630
|
|
|
339
|
-
When you slice a model in Bambu Studio, the slicer embeds AMS mapping information inside the 3MF file at `Metadata/project_settings.config`. The `print_3mf` tool reads this file automatically and extracts the correct mapping. In most cases, you do not need to specify `ams_mapping` manually -- the tool handles it.
|
|
631
|
+
When you slice a model in Bambu Studio or OrcaSlicer, the slicer embeds AMS mapping information inside the 3MF file at `Metadata/project_settings.config`. The `print_3mf` tool reads this file automatically and extracts the correct mapping. In most cases, you do not need to specify `ams_mapping` manually -- the tool handles it.
|
|
340
632
|
|
|
341
633
|
### Manual AMS mapping
|
|
342
634
|
|
|
@@ -658,15 +950,17 @@ Set the target temperature for the bed or nozzle. Dispatches an M140 (bed) or M1
|
|
|
658
950
|
|
|
659
951
|
#### print_3mf
|
|
660
952
|
|
|
661
|
-
The primary tool for
|
|
953
|
+
The primary tool for the direct local Bambu path. This tool handles the complete workflow:
|
|
662
954
|
|
|
663
955
|
1. Checks whether the 3MF contains embedded G-code (`Metadata/plate_<n>.gcode` entries).
|
|
664
956
|
2. If no G-code is found, automatically slices the file using the configured slicer before proceeding.
|
|
665
957
|
3. Parses the sliced 3MF to extract the correct plate file and compute its MD5 hash.
|
|
666
|
-
4. Also parses `Metadata/project_settings.config` to read AMS mapping embedded by Bambu Studio.
|
|
958
|
+
4. Also parses `Metadata/project_settings.config` to read AMS mapping embedded by Bambu Studio or OrcaSlicer.
|
|
667
959
|
5. Uploads the 3MF to the printer's `cache/` directory via FTPS using `basic-ftp` directly (avoiding the bambu-js double-path bug).
|
|
668
960
|
6. Sends a `project_file` MQTT command with the plate path, MD5, AMS mapping (formatted as a 5-element array per the OpenBambuAPI spec), and calibration flags.
|
|
669
961
|
|
|
962
|
+
This path uses BambuStudio/Orca/FULU as a slicer CLI only. It does not use FULU's BambuNetwork runtime unless you explicitly set `connection_mode: "bambu_network"`.
|
|
963
|
+
|
|
670
964
|
```json
|
|
671
965
|
{
|
|
672
966
|
"three_mf_path": "/Users/yourname/Downloads/bracket.3mf",
|
|
@@ -675,6 +969,9 @@ The primary tool for starting a Bambu print. This tool handles the complete work
|
|
|
675
969
|
"host": "192.168.1.100",
|
|
676
970
|
"bambu_serial": "01P00A123456789",
|
|
677
971
|
"bambu_token": "your_access_token",
|
|
972
|
+
"slicer_type": "orcaslicer-bambulab",
|
|
973
|
+
"slicer_path": "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer",
|
|
974
|
+
"plate_index": 0,
|
|
678
975
|
"bed_leveling": true,
|
|
679
976
|
"flow_calibration": true,
|
|
680
977
|
"vibration_calibration": true,
|
|
@@ -688,8 +985,116 @@ The primary tool for starting a Bambu print. This tool handles the complete work
|
|
|
688
985
|
|
|
689
986
|
`bed_type` defaults to `textured_plate` if omitted. AMS mapping from the 3MF's slicer config is used automatically when present; the `ams_mapping` argument overrides it. Setting `use_ams: false` disables AMS entirely regardless of other mapping values.
|
|
690
987
|
|
|
988
|
+
`slicer_type`, `slicer_path`, and `slicer_profile` only matter when `print_3mf` receives an unsliced 3MF and needs to auto-slice it. Use `orcaslicer-bambulab` for FULU's fork, `orcaslicer` for upstream OrcaSlicer, or `bambustudio` for BambuStudio. `plate_index` is zero-based and selects which embedded `Metadata/plate_<n>.gcode` file to print.
|
|
989
|
+
|
|
691
990
|
Layer height, nozzle temperature, and other slicer parameters cannot be overridden via this tool -- they are baked into the 3MF's G-code at slice time. Apply those settings in your slicer before generating the 3MF.
|
|
692
991
|
|
|
992
|
+
On firmware that enforces Bambu's newer command verification, this direct path can upload the 3MF and still be rejected when the printer receives the MQTT `project_file` command. In that case, `get_printer_status` may show HMS `0500050000010007`, which BambuStudio's own HMS table describes as `MQTT Command verification failed`. That is the exact situation the FULU bridge path is meant to keep iterating on.
|
|
993
|
+
|
|
994
|
+
To use FULU's restored BambuNetwork path from the same tool, pass `connection_mode: "bambu_network"`. In that mode, local `BAMBU_SERIAL`/`BAMBU_TOKEN` are not required for cloud print starts, but `dev_id` is required.
|
|
995
|
+
|
|
996
|
+
```json
|
|
997
|
+
{
|
|
998
|
+
"three_mf_path": "/Users/yourname/Downloads/bracket.3mf",
|
|
999
|
+
"bambu_model": "p1s",
|
|
1000
|
+
"connection_mode": "bambu_network",
|
|
1001
|
+
"connection_type": "cloud",
|
|
1002
|
+
"dev_id": "01P00A123456789"
|
|
1003
|
+
}
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
#### print_3mf_bambu_network
|
|
1007
|
+
|
|
1008
|
+
Start a 3MF print through FULU OrcaSlicer-bambulab's restored BambuNetwork runtime. This tool builds FULU-compatible `PrintParams`, converts `plate_index` from MCP zero-based to FULU one-based indexing, preserves slicer auto-slice behavior for unsliced 3MFs, and sends the job through the bridge.
|
|
1009
|
+
|
|
1010
|
+
```json
|
|
1011
|
+
{
|
|
1012
|
+
"three_mf_path": "/Users/yourname/Downloads/bracket.3mf",
|
|
1013
|
+
"bambu_model": "p1s",
|
|
1014
|
+
"connection_type": "cloud",
|
|
1015
|
+
"dev_id": "01P00A123456789",
|
|
1016
|
+
"bed_type": "textured_plate",
|
|
1017
|
+
"plate_index": 0,
|
|
1018
|
+
"use_ams": true,
|
|
1019
|
+
"ams_mapping": [0, 1]
|
|
1020
|
+
}
|
|
1021
|
+
```
|
|
1022
|
+
|
|
1023
|
+
The tool treats any non-zero numeric return from FULU's print method as a failure, even if the bridge response itself says `ok: true`. This matters because the bridge can successfully load and call the network library while the library returns a BambuNetwork print error such as `-4030`.
|
|
1024
|
+
|
|
1025
|
+
When debugging, start with the defaults:
|
|
1026
|
+
|
|
1027
|
+
- `connection_type: "cloud"` uses `start_print`.
|
|
1028
|
+
- `connection_type: "lan"` uses `start_local_print`.
|
|
1029
|
+
- Add `bambu_network_method: "start_local_print_with_record"` to mimic Orca's richer LAN path.
|
|
1030
|
+
|
|
1031
|
+
For LAN/local bridge printing, include `dev_ip` and the printer access code:
|
|
1032
|
+
|
|
1033
|
+
```json
|
|
1034
|
+
{
|
|
1035
|
+
"three_mf_path": "/Users/yourname/Downloads/bracket.3mf",
|
|
1036
|
+
"bambu_model": "p1s",
|
|
1037
|
+
"connection_type": "lan",
|
|
1038
|
+
"dev_id": "01P00A123456789",
|
|
1039
|
+
"dev_ip": "192.168.1.100",
|
|
1040
|
+
"bambu_token": "your_access_token"
|
|
1041
|
+
}
|
|
1042
|
+
```
|
|
1043
|
+
|
|
1044
|
+
#### bambu_network_bridge_status
|
|
1045
|
+
|
|
1046
|
+
Inspect the configured FULU bridge command and runtime. Pass `connect: true` to start the bridge, run `bridge.handshake`, create a BambuNetwork agent, and return the handshake plus macOS runtime hints.
|
|
1047
|
+
|
|
1048
|
+
```json
|
|
1049
|
+
{
|
|
1050
|
+
"connect": true,
|
|
1051
|
+
"country_code": "US"
|
|
1052
|
+
}
|
|
1053
|
+
```
|
|
1054
|
+
|
|
1055
|
+
Use this before every print debugging session. Useful fields:
|
|
1056
|
+
|
|
1057
|
+
| Field | What it means |
|
|
1058
|
+
|---|---|
|
|
1059
|
+
| `configured` | Whether `BAMBU_NETWORK_BRIDGE_COMMAND` or an equivalent env var is set. |
|
|
1060
|
+
| `connected` | Whether the bridge process started and agent initialization completed for this probe. |
|
|
1061
|
+
| `agentReady` | Whether the MCP has an initialized BambuNetwork agent handle. |
|
|
1062
|
+
| `handshake.network_loaded` | Whether FULU's BambuNetwork library loaded. |
|
|
1063
|
+
| `handshake.source_loaded` | Whether FULU's BambuSource library loaded. |
|
|
1064
|
+
| `handshake.network_actual_abi_version` | The ABI version reported by the loaded network library. The MCP can auto-retry with this value. |
|
|
1065
|
+
| `runtime.macosMissingRuntimeFiles` | Missing macOS runtime files under `~/Library/Application Support/OrcaSlicer/macos-bridge/runtime`. |
|
|
1066
|
+
| `runtime.macosMissingPluginFiles` | Missing macOS wrapper/install/verify files under the FULU plugin directory. |
|
|
1067
|
+
|
|
1068
|
+
#### bambu_network_call
|
|
1069
|
+
|
|
1070
|
+
Call a raw FULU bridge method. By default the tool initializes an agent and injects its `agent` id into the payload. Set `with_agent: false` for methods such as `bridge.handshake`.
|
|
1071
|
+
|
|
1072
|
+
```json
|
|
1073
|
+
{
|
|
1074
|
+
"method": "net.is_user_login",
|
|
1075
|
+
"payload": {}
|
|
1076
|
+
}
|
|
1077
|
+
```
|
|
1078
|
+
|
|
1079
|
+
Examples:
|
|
1080
|
+
|
|
1081
|
+
```json
|
|
1082
|
+
{
|
|
1083
|
+
"method": "bridge.handshake",
|
|
1084
|
+
"payload": {},
|
|
1085
|
+
"with_agent": false
|
|
1086
|
+
}
|
|
1087
|
+
```
|
|
1088
|
+
|
|
1089
|
+
```json
|
|
1090
|
+
{
|
|
1091
|
+
"method": "net.get_user_selected_machine",
|
|
1092
|
+
"payload": {}
|
|
1093
|
+
}
|
|
1094
|
+
```
|
|
1095
|
+
|
|
1096
|
+
Raw bridge calls are for diagnostics and compatibility testing. Do not paste account `user_info` JSON or access tokens into issue reports.
|
|
1097
|
+
|
|
693
1098
|
</details>
|
|
694
1099
|
|
|
695
1100
|
<details>
|
|
@@ -699,30 +1104,31 @@ Layer height, nozzle temperature, and other slicer parameters cannot be overridd
|
|
|
699
1104
|
|
|
700
1105
|
#### slice_stl
|
|
701
1106
|
|
|
702
|
-
Slice an STL or 3MF file using an external slicer and return the path to the output file. The output is a sliced 3MF
|
|
1107
|
+
Slice an STL or 3MF file using an external slicer and return the path to the output file. The output is a sliced 3MF for Bambu-compatible slicers (`bambustudio`, `orcaslicer`, `orcaslicer-bambulab`) or a G-code file for PrusaSlicer, Cura, and Slic3r.
|
|
703
1108
|
|
|
704
1109
|
```json
|
|
705
1110
|
{
|
|
706
1111
|
"stl_path": "/path/to/model.stl",
|
|
707
|
-
"
|
|
708
|
-
"
|
|
1112
|
+
"bambu_model": "p1s",
|
|
1113
|
+
"slicer_type": "orcaslicer-bambulab",
|
|
1114
|
+
"slicer_path": "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer",
|
|
709
1115
|
"slicer_profile": "/path/to/profile.ini"
|
|
710
1116
|
}
|
|
711
1117
|
```
|
|
712
1118
|
|
|
713
|
-
`slicer_type` options: `bambustudio`, `orcaslicer`, `prusaslicer`, `cura`, `slic3r`. When omitted, the value from the `SLICER_TYPE` environment variable is used (default: `bambustudio`).
|
|
1119
|
+
`slicer_type` options: `bambustudio`, `orcaslicer`, `orcaslicer-bambulab`, `prusaslicer`, `cura`, `slic3r`. Aliases such as `fulu-orca`, `orca-studio`, and `orca-bambulab` are accepted. When omitted, the value from the `SLICER_TYPE` environment variable is used (default: `bambustudio`).
|
|
714
1120
|
|
|
715
1121
|
`slicer_path` and `slicer_profile` fall back to the `SLICER_PATH` and `SLICER_PROFILE` environment variables when omitted.
|
|
716
1122
|
|
|
717
|
-
For printing on a Bambu printer, the recommended workflow is: slice with `bambustudio` to get a sliced 3MF, then pass that output path to `print_3mf`.
|
|
1123
|
+
For printing on a Bambu printer, the recommended workflow is: slice with `orcaslicer-bambulab`, `orcaslicer`, or `bambustudio` to get a sliced 3MF, then pass that output path to `print_3mf`.
|
|
718
1124
|
|
|
719
|
-
####
|
|
1125
|
+
#### Bambu-compatible Slicer Options
|
|
720
1126
|
|
|
721
|
-
When `slicer_type` is `bambustudio`
|
|
1127
|
+
When `slicer_type` is `bambustudio`, `orcaslicer`, or `orcaslicer-bambulab`, these additional parameters are available on `slice_stl`:
|
|
722
1128
|
|
|
723
1129
|
| Parameter | Type | Description |
|
|
724
1130
|
|-----------|------|-------------|
|
|
725
|
-
| `uptodate` | boolean | Update 3MF configs to latest
|
|
1131
|
+
| `uptodate` | boolean | Update 3MF configs to latest Bambu-compatible presets |
|
|
726
1132
|
| `repetitions` | number | Number of copies to print |
|
|
727
1133
|
| `orient` | boolean | Auto-orient model for optimal printability |
|
|
728
1134
|
| `arrange` | boolean | Auto-arrange objects on the build plate |
|
|
@@ -832,7 +1238,9 @@ After connecting the MCP server in Claude Desktop or Claude Code, you can ask Cl
|
|
|
832
1238
|
- "Upload bracket.3mf to the printer and start printing with AMS slots 0 and 1."
|
|
833
1239
|
- "Print my_model.3mf with bed leveling enabled and vibration calibration off."
|
|
834
1240
|
- "Upload this 3MF without printing it yet."
|
|
835
|
-
- "Slice model.stl with
|
|
1241
|
+
- "Slice model.stl with FULU OrcaSlicer-bambulab and then print the result."
|
|
1242
|
+
- "Probe the FULU BambuNetwork bridge and tell me whether the macOS runtime is ready."
|
|
1243
|
+
- "Print bracket.3mf through FULU BambuNetwork cloud printing on my P1S."
|
|
836
1244
|
|
|
837
1245
|
### STL manipulation
|
|
838
1246
|
|
|
@@ -848,11 +1256,60 @@ After connecting the MCP server in Claude Desktop or Claude Code, you can ask Cl
|
|
|
848
1256
|
### Combined workflows
|
|
849
1257
|
|
|
850
1258
|
- "Rotate model.stl 45 degrees around Z, extend the base by 2mm, then print it on my Bambu P1S."
|
|
851
|
-
- "Take this unsliced 3MF, slice it with
|
|
1259
|
+
- "Take this unsliced 3MF, slice it with OrcaSlicer-bambulab, and print the result."
|
|
852
1260
|
- "Scale this part to 80% of its size, lay it flat, and start a print."
|
|
853
1261
|
|
|
854
1262
|
---
|
|
855
1263
|
|
|
1264
|
+
## Troubleshooting and Tester Reports
|
|
1265
|
+
|
|
1266
|
+
The fastest way to improve this is to keep reports concrete. A print command that was merely published is not the same thing as a printer starting motion. Always check the printer status after a print attempt.
|
|
1267
|
+
|
|
1268
|
+
### Quick diagnosis flow
|
|
1269
|
+
|
|
1270
|
+
1. Run `get_printer_status` first. Confirm the printer is connected, idle, has an SD card/storage available, and reports the expected model.
|
|
1271
|
+
2. If using a source checkout, run `npm run build` and `npm test` so local TypeScript or behavior-test failures are separated from printer/runtime failures.
|
|
1272
|
+
3. If using direct local printing, call `print_3mf`, then immediately call `get_printer_status` again. Look for `gcode_state`, `subtask_name`, `mc_percent`, and `hms`.
|
|
1273
|
+
4. If using FULU, call `bambu_network_bridge_status` with `connect: true` before printing. Confirm `network_loaded`, `source_loaded`, and `agentReady`.
|
|
1274
|
+
5. Try the default FULU method for your connection type. If LAN fails, retry with `bambu_network_method: "start_local_print_with_record"` and include the return code in your report.
|
|
1275
|
+
6. Report whether the printer actually left `IDLE`. A returned value of `0` is useful, but printer motion/status is the proof.
|
|
1276
|
+
|
|
1277
|
+
### Common symptoms
|
|
1278
|
+
|
|
1279
|
+
| Symptom | Likely layer | What to check |
|
|
1280
|
+
|---|---|---|
|
|
1281
|
+
| `BAMBU_MODEL is required` | Safety gate | Set `BAMBU_MODEL` or pass `bambu_model`. The server intentionally refuses to guess printer model for print operations. |
|
|
1282
|
+
| Slicer CLI cannot find a Bambu profile | Slicer setup | Use BambuStudio or Orca/FULU with installed printer profiles, or set `BAMBU_SLICER_PROFILE_DIRS` for custom profile locations. |
|
|
1283
|
+
| `3MF does not contain Metadata/plate_<n>.gcode` | Unsliced file | Let `print_3mf` auto-slice with a configured slicer, or export a sliced 3MF from BambuStudio/Orca/FULU first. |
|
|
1284
|
+
| FTPS upload fails | Local LAN file path/auth | Confirm Developer Mode/LAN access code, printer IP, port `990`, and SD card/storage state. |
|
|
1285
|
+
| Direct path says command sent but printer stays `IDLE` | Printer rejected MQTT command | Check `hms`; `0500050000010007` means `MQTT Command verification failed`. Try the FULU bridge path and report firmware/model details. |
|
|
1286
|
+
| `bambu_network_bridge_status` cannot start | Bridge command/runtime | Check `BAMBU_NETWORK_BRIDGE_COMMAND`, wrapper path, runtime files, and Lima/WSL setup. |
|
|
1287
|
+
| FULU print returns `-4030` or `send msg failed` | BambuNetwork runtime/printer acceptance | Bridge reached the library, but the print start failed. Report method, platform, firmware, connection type, and redacted bridge status. |
|
|
1288
|
+
| Bridge loads only after ABI retry | Expected with some FULU builds | The MCP auto-detects `network_actual_abi_version`; include it in reports but do not manually set it unless debugging. |
|
|
1289
|
+
|
|
1290
|
+
### Minimal useful report
|
|
1291
|
+
|
|
1292
|
+
Please include:
|
|
1293
|
+
|
|
1294
|
+
- OS and architecture: for example `macOS 15 Apple Silicon`, `Ubuntu x86_64`, or `Windows 11 + WSL 2`.
|
|
1295
|
+
- Install source: npm package version, git commit SHA, or local branch.
|
|
1296
|
+
- Printer model and firmware version.
|
|
1297
|
+
- Slicer used: `bambustudio`, `orcaslicer`, or `orcaslicer-bambulab`.
|
|
1298
|
+
- Print path used: direct `print_3mf`, `print_3mf` with `connection_mode: "bambu_network"`, or `print_3mf_bambu_network`.
|
|
1299
|
+
- FULU method if applicable: `start_print`, `start_local_print`, `start_local_print_with_record`, `start_send_gcode_to_sdcard`, or `start_sdcard_print`.
|
|
1300
|
+
- Redacted `bambu_network_bridge_status` output when using FULU.
|
|
1301
|
+
- Return payload from the failed tool call with access codes, serial numbers, tokens, cloud account data, and local usernames redacted.
|
|
1302
|
+
- `get_printer_status` after the attempt, especially `gcode_state` and `hms`.
|
|
1303
|
+
|
|
1304
|
+
Please do not include:
|
|
1305
|
+
|
|
1306
|
+
- Full printer serial number.
|
|
1307
|
+
- LAN access code.
|
|
1308
|
+
- Bambu account token or raw `user_info` JSON.
|
|
1309
|
+
- Public IPs, VPN hostnames, or home-network details that are not needed for debugging.
|
|
1310
|
+
|
|
1311
|
+
---
|
|
1312
|
+
|
|
856
1313
|
## Bambu Lab Printer Limitations
|
|
857
1314
|
|
|
858
1315
|
Understanding these constraints will help you avoid frustrating errors and set appropriate expectations.
|
|
@@ -867,10 +1324,12 @@ Understanding these constraints will help you avoid frustrating errors and set a
|
|
|
867
1324
|
|
|
868
1325
|
5. **Real-time status has latency.** `get_printer_status` sends a `push_all` MQTT request and waits up to 1.5 seconds for a response before reading cached state. If the printer is not responding quickly (busy, sleeping, or transitioning states), you may see slightly stale data. There is no persistent event subscription in this server -- each status call is a fresh request.
|
|
869
1326
|
|
|
870
|
-
6. **LAN
|
|
1327
|
+
6. **Direct MCP printing is LAN-only; FULU bridge printing is opt-in.** The default MQTT/FTPS tools require the printer to be on the same local network as the machine running this server with Developer Mode enabled. Remote/cloud printing requires the optional FULU BambuNetwork bridge and `print_3mf_bambu_network`.
|
|
871
1328
|
|
|
872
1329
|
7. **Self-signed TLS certificate.** The printer's FTPS server uses a self-signed certificate. The `basic-ftp` client is configured with `rejectUnauthorized: false` to accept it. This is standard for local network Bambu connections but assumes a trusted local network environment.
|
|
873
1330
|
|
|
1331
|
+
8. **Newer firmware can reject third-party project commands after upload.** A successful FTPS upload and MQTT publish does not guarantee the printer accepted the job. On the macOS test bench, the printer returned HMS `0500050000010007`, which BambuStudio describes as `MQTT Command verification failed`. This README calls that out because pretending the job started would waste everyone's time.
|
|
1332
|
+
|
|
874
1333
|
---
|
|
875
1334
|
|
|
876
1335
|
## General Limitations and Considerations
|
|
@@ -893,7 +1352,7 @@ STL manipulation tools load the entire mesh into memory as Three.js geometry. Fo
|
|
|
893
1352
|
|
|
894
1353
|
### Performance considerations
|
|
895
1354
|
|
|
896
|
-
- Slicing with BambuStudio CLI can take 30 seconds to several minutes depending on model complexity, layer height, and your system's CPU. The `slice_stl` call is synchronous and will block until the slicer process completes.
|
|
1355
|
+
- Slicing with BambuStudio or OrcaSlicer CLI can take 30 seconds to several minutes depending on model complexity, layer height, and your system's CPU. The `slice_stl` call is synchronous and will block until the slicer process completes.
|
|
897
1356
|
- FTPS uploads for large 3MF files (multi-plate prints, high-detail models) may take 15 to 60 seconds depending on your local network speed.
|
|
898
1357
|
- MQTT connections are pooled by `host + serial` key. The first call to any printer tool in a session establishes the MQTT connection; subsequent calls reuse it. If the connection drops (printer power cycled, network interruption), the next call will reconnect automatically.
|
|
899
1358
|
|