mcp-3d-printer-server 1.2.2 → 1.2.5
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 +236 -26
- package/dist/fulu-orca.d.ts +20 -0
- package/dist/fulu-orca.js +453 -0
- package/dist/http-server.d.ts +1 -15
- package/dist/http-server.js +6 -266
- package/dist/index.js +572 -72
- package/dist/printers/prusa.d.ts +3 -0
- package/dist/printers/prusa.js +33 -1
- package/dist/sse-server.d.ts +1 -19
- package/dist/sse-server.js +6 -316
- package/dist/stl/stl-manipulator.d.ts +11 -2
- package/dist/stl/stl-manipulator.js +162 -26
- package/package.json +32 -4
- package/src/fulu-orca.ts +602 -0
- package/src/http-server.ts +4 -323
- package/src/index.ts +642 -72
- package/src/printers/prusa.ts +38 -1
- package/src/sse-server.ts +4 -404
- package/src/stl/stl-manipulator.ts +217 -29
- package/src/test/Tape+Card+55mm+Ring.stl +0 -0
package/README.md
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
|
|
2
|
+
## Thank You To FULU And Louis Rossmann
|
|
3
|
+
|
|
4
|
+
Thank you to the [FULU Foundation](https://github.com/FULU-Foundation/OrcaSlicer-bambulab) and [Louis Rossmann](https://www.youtube.com/@rossmanngroup) for standing up for consumer ownership, open source developers, repair rights, and users who should not have working hardware made worse by locked-down software. This MCP server treats the FULU OrcaSlicer-bambulab fork as a first-class Bambu project slicer target.
|
|
2
5
|
|
|
3
6
|
# MCP 3D Printer Server
|
|
4
7
|
|
|
@@ -20,6 +23,7 @@
|
|
|
20
23
|
<summary><strong>✨ What's New / Significant Updates (as of last session)</strong></summary>
|
|
21
24
|
|
|
22
25
|
- **Dual Local Transports:** Added explicit `stdio` and `streamable-http` runtime modes with environment-based transport selection.
|
|
26
|
+
- **FULU OrcaSlicer-bambulab Support:** Added `orcaslicer-bambulab` / `fulu_orca` slicer support for Bambu project 3MF export, and made it the default Bambu slicer target when no slicer is configured.
|
|
23
27
|
- **Bambu Reliability Pass:** Fixed Bambu argument wiring bugs, added FTP-backed file operations, improved status refresh behavior, and implemented practical command paths for `startJob`, `setTemperature`, and `print_3mf`.
|
|
24
28
|
- **Blender Bridge Tooling:** Added `blender_mcp_edit_model` with optional execution mode for model-edit collaboration workflows.
|
|
25
29
|
- **Transport Behavior Tests:** Added real behavior tests for both transports (`initialize`, `tools/list`, success + failing `tools/call`, origin rejection).
|
|
@@ -128,6 +132,8 @@ This server is a Model Context Protocol (MCP) server for connecting Claude with
|
|
|
128
132
|
- Confirm temperature settings in G-code files
|
|
129
133
|
- Complete end-to-end workflow from STL modification to printing
|
|
130
134
|
- Print `.3mf` files directly on Bambu Lab printers (via MQTT command)
|
|
135
|
+
- Slice Bambu projects with FULU OrcaSlicer-bambulab (`SLICER_TYPE=orcaslicer-bambulab`) and auto-slice unsliced 3MF files before Bambu printing when a project slicer is configured
|
|
136
|
+
- Inspect and probe the FULU BambuNetwork runtime (`check_fulu_orca_setup`) and call safe-by-default FULU bridge RPC methods for diagnostics and development (`fulu_bambu_network_rpc`)
|
|
131
137
|
- Read Bambu Studio preset files (printer, filament, process) as resources
|
|
132
138
|
|
|
133
139
|
## Installation
|
|
@@ -169,12 +175,12 @@ Please note that the default Docker setup **cannot directly use a slicer install
|
|
|
169
175
|
|
|
170
176
|
The recommended approach is to **install your preferred slicer *inside* the Docker image**. This makes the container self-sufficient.
|
|
171
177
|
|
|
172
|
-
To do this, you will need to modify the `Dockerfile`. Here's a conceptual example of how you might add PrusaSlicer or OrcaSlicer (specific commands may vary depending on the slicer, its dependencies, and current Alpine packages):
|
|
178
|
+
To do this, you will need to modify the `Dockerfile`. Here's a conceptual example of how you might add PrusaSlicer, OrcaSlicer, or the FULU OrcaSlicer-bambulab build (specific commands may vary depending on the slicer, its dependencies, and current Alpine packages):
|
|
173
179
|
|
|
174
180
|
```dockerfile
|
|
175
181
|
# ... other Dockerfile commands ...
|
|
176
182
|
|
|
177
|
-
# Example: Install PrusaSlicer or OrcaSlicer (adjust command as needed)
|
|
183
|
+
# Example: Install PrusaSlicer, OrcaSlicer, or FULU OrcaSlicer-bambulab (adjust command as needed)
|
|
178
184
|
# Check Alpine package repositories first (e.g., apk add prusaslicer or apk add orcaslicer)
|
|
179
185
|
# If not available, download and install manually (e.g., AppImage):
|
|
180
186
|
# RUN apk add --no-cache fuse # FUSE might be needed for AppImages
|
|
@@ -188,7 +194,7 @@ ENV SLICER_PATH=/usr/local/bin/orcaslicer
|
|
|
188
194
|
# ... rest of Dockerfile ...
|
|
189
195
|
```
|
|
190
196
|
|
|
191
|
-
After modifying the `Dockerfile`, rebuild your image (`docker-compose build`). You'll also need to ensure the `SLICER_PATH` environment variable in your `.env` file or `docker-compose.yml` points to the correct path *inside the container* (e.g., `/usr/local/bin/orcaslicer`).
|
|
197
|
+
After modifying the `Dockerfile`, rebuild your image (`docker-compose build`). You'll also need to ensure the `SLICER_PATH` environment variable in your `.env` file or `docker-compose.yml` points to the correct path *inside the container* (e.g., `/usr/local/bin/orcaslicer`). For the FULU Bambu-enabled fork, set `SLICER_TYPE=orcaslicer-bambulab`.
|
|
192
198
|
|
|
193
199
|
Apologies for not including a specific slicer out-of-the-box, but given the wide variety of slicers (PrusaSlicer, OrcaSlicer, Cura, etc.) and configurations available, pre-installing one would unnecessarily bloat the image for many users. If a particular slicer becomes a very common request, I can certainly look into adding official support for it in a future version.
|
|
194
200
|
|
|
@@ -216,10 +222,23 @@ BED_TYPE=textured_plate # Bed plate: textured_plate, cool_plate, engine
|
|
|
216
222
|
NOZZLE_DIAMETER=0.4 # Nozzle diameter in mm (default: 0.4)
|
|
217
223
|
|
|
218
224
|
# Slicer configuration (for slice_stl tool)
|
|
219
|
-
|
|
225
|
+
# For Bambu projects, the default is orcaslicer-bambulab unless SLICER_TYPE is set.
|
|
226
|
+
SLICER_TYPE=orcaslicer-bambulab # Options: prusaslicer, cura, slic3r, orcaslicer, orcaslicer-bambulab, bambustudio
|
|
220
227
|
SLICER_PATH=/path/to/slicer/executable
|
|
221
228
|
SLICER_PROFILE=/path/to/slicer/profile
|
|
222
229
|
|
|
230
|
+
# Optional aliases for FULU OrcaSlicer-bambulab when SLICER_PATH is not set
|
|
231
|
+
FULU_ORCA_PATH=/path/to/FULU/OrcaSlicer
|
|
232
|
+
ORCASLICER_BAMBULAB_PATH=/path/to/FULU/OrcaSlicer
|
|
233
|
+
FULU_ORCA_PLUGIN_DIR=/path/to/FULU/OrcaSlicer.app/Contents/MacOS
|
|
234
|
+
ORCASLICER_BAMBULAB_PLUGIN_DIR=/path/to/FULU/OrcaSlicer.app/Contents/MacOS
|
|
235
|
+
|
|
236
|
+
# Optional FULU BambuNetwork bridge runtime
|
|
237
|
+
# macOS default runtime dir:
|
|
238
|
+
# /Users/you/Library/Application Support/OrcaSlicer/macos-bridge/runtime
|
|
239
|
+
PJARCZAK_MAC_RUNTIME_DIR=
|
|
240
|
+
FULU_BAMBU_BRIDGE_COMMAND=
|
|
241
|
+
|
|
223
242
|
# Optional: Path to Bambu Studio user config dir (for loading presets)
|
|
224
243
|
# Example macOS: /Users/your_user/Library/Application Support/BambuStudio/user/YOUR_USER_ID
|
|
225
244
|
# Example Windows: C:\Users\your_user\AppData\Roaming\BambuStudio\user\YOUR_USER_ID
|
|
@@ -241,7 +260,7 @@ BLENDER_MCP_BRIDGE_COMMAND=
|
|
|
241
260
|
|
|
242
261
|
## Usage
|
|
243
262
|
|
|
244
|
-
Add this server to your MCP client's config (Claude Desktop, Claude Code, Cursor, Codex
|
|
263
|
+
Add this server to your MCP client's config (Claude Desktop, Claude Code, Cursor, Codex, or any MCP-compatible client). Most JSON-based clients use an `mcpServers` entry with the command and env vars:
|
|
245
264
|
|
|
246
265
|
```json
|
|
247
266
|
{
|
|
@@ -255,8 +274,9 @@ Add this server to your MCP client's config (Claude Desktop, Claude Code, Cursor
|
|
|
255
274
|
"BAMBU_SERIAL": "your_printer_serial",
|
|
256
275
|
"BAMBU_TOKEN": "your_access_token",
|
|
257
276
|
"BAMBU_MODEL": "p1s",
|
|
258
|
-
"SLICER_TYPE": "
|
|
259
|
-
"SLICER_PATH": "/
|
|
277
|
+
"SLICER_TYPE": "orcaslicer-bambulab",
|
|
278
|
+
"SLICER_PATH": "/path/to/FULU/OrcaSlicer",
|
|
279
|
+
"FULU_ORCA_PLUGIN_DIR": "/Applications/OrcaSlicer.app/Contents/MacOS"
|
|
260
280
|
}
|
|
261
281
|
}
|
|
262
282
|
}
|
|
@@ -265,18 +285,162 @@ Add this server to your MCP client's config (Claude Desktop, Claude Code, Cursor
|
|
|
265
285
|
|
|
266
286
|
For non-Bambu printers, replace the Bambu-specific env vars with `API_KEY` and the appropriate `PRINTER_TYPE` (see [Supported Printer Management Systems](#supported-printer-management-systems)).
|
|
267
287
|
|
|
268
|
-
|
|
288
|
+
### FULU OrcaSlicer-bambulab
|
|
289
|
+
|
|
290
|
+
Use [`FULU-Foundation/OrcaSlicer-bambulab`](https://github.com/FULU-Foundation/OrcaSlicer-bambulab) as the first-class Bambu project slicer by setting:
|
|
291
|
+
|
|
292
|
+
```env
|
|
293
|
+
PRINTER_TYPE=bambu
|
|
294
|
+
SLICER_TYPE=orcaslicer-bambulab
|
|
295
|
+
SLICER_PATH=/path/to/FULU/OrcaSlicer
|
|
296
|
+
FULU_ORCA_PLUGIN_DIR=/path/to/FULU/runtime/payload
|
|
297
|
+
BAMBU_MODEL=p1s
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
Accepted aliases include `fulu_orca`, `fulu-orca`, `orca-studio`, and `orca_bambulab`. For Bambu printers, this is the default slicer family when `SLICER_TYPE` is not set.
|
|
301
|
+
|
|
302
|
+
What the integration does:
|
|
303
|
+
|
|
304
|
+
- `slice_stl` uses the FULU/Orca project CLI shape (`--slice 0 --export-3mf`) to produce a sliced Bambu-compatible 3MF.
|
|
305
|
+
- `print_3mf` can auto-slice an unsliced 3MF through FULU OrcaSlicer-bambulab, then upload and start the sliced project through this server's Bambu print path.
|
|
306
|
+
- `check_fulu_orca_setup` verifies the FULU executable, platform runtime payload, setup commands, and optional BambuNetwork bridge handshake.
|
|
307
|
+
- `fulu_bambu_network_rpc` can call the FULU bridge protocol for diagnostics and development. Read-only methods are allowed by default; mutating methods require `allow_mutating_method=true`; FULU print methods still require `bambu_model`.
|
|
308
|
+
|
|
309
|
+
What stays deliberately explicit:
|
|
310
|
+
|
|
311
|
+
- This MCP server's existing Bambu print path is local MQTT plus FTPS and still needs `BAMBU_SERIAL`, `BAMBU_TOKEN`, and `PRINTER_HOST`.
|
|
312
|
+
- FULU's BambuNetwork bridge is a separate runtime. The MCP can inspect it, probe it, and issue guarded bridge RPC calls, but it will not silently switch a print from local LAN control to cloud/BambuNetwork control.
|
|
313
|
+
- `BAMBU_MODEL` remains mandatory for Bambu print operations because wrong machine presets can produce dangerous G-code.
|
|
314
|
+
|
|
315
|
+
#### Current Bench Test Status
|
|
316
|
+
|
|
317
|
+
This integration has been tested against the current FULU macOS release artifacts and a local Benchy smoke test. The MCP-side bug found during that bench was real: Bambu-family project slicers must use Orca/Bambu preset JSON with `--load-settings`, not the invalid `--load-machine` flag. That is fixed here.
|
|
318
|
+
|
|
319
|
+
The old Bambu Studio fallback still works. Set:
|
|
320
|
+
|
|
321
|
+
```env
|
|
322
|
+
SLICER_TYPE=bambustudio
|
|
323
|
+
SLICER_PATH=/Applications/BambuStudio.app/Contents/MacOS/BambuStudio
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
With that fallback, the same Benchy 3MF sliced successfully through Bambu Studio's CLI into a Bambu-compatible project 3MF. This is the known-good path while FULU platform packaging settles.
|
|
327
|
+
|
|
328
|
+
macOS is not proven green yet. On this Mac, the FULU arm64 and x86_64 macOS release bundles hit the same CLI slice problem during Benchy testing: one path crashed with `SIGSEGV` inside OrcaSlicer CLI processing, and repeated attempts left uninterruptible macOS `UE` processes that ignored `SIGKILL`. The MCP now avoids pretending that is solved. `check_fulu_orca_setup` can inspect the bundle and bridge payload, but macOS users should treat FULU CLI slicing as active feedback territory until FULU ships a stable macOS CLI/runtime combination.
|
|
329
|
+
|
|
330
|
+
We need Windows testers. The WSL 2 setup path, payload checks, and bridge command shape are represented in this MCP, but the full Windows path still needs real reports from people who can validate `install_runtime.ps1`, `verify_runtime.ps1`, bridge probing, CLI slicing, and a known-safe print workflow on their own machine.
|
|
331
|
+
|
|
332
|
+
We will keep iterating with user and contributor feedback. Please report the OS, CPU architecture, FULU release asset name, `check_fulu_orca_setup` result, slicer command stderr, and whether the Bambu Studio fallback works on the same model.
|
|
333
|
+
|
|
334
|
+
#### FULU Runtime Setup By Platform
|
|
335
|
+
|
|
336
|
+
The FULU README currently says macOS is work in progress, but the source tree already ships macOS Lima runtime scripts and Windows WSL runtime scripts. This MCP knows those file layouts and returns the exact commands through `check_fulu_orca_setup`.
|
|
337
|
+
|
|
338
|
+
Windows:
|
|
269
339
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
340
|
+
```bat
|
|
341
|
+
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
|
|
342
|
+
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Restart Windows, then run the FULU package scripts from the directory that contains `install_runtime.ps1`:
|
|
346
|
+
|
|
347
|
+
```powershell
|
|
348
|
+
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\install_runtime.ps1 -PackageDir . -PluginDir .
|
|
349
|
+
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\verify_runtime.ps1 -PackageDir . -PluginDir .
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
Linux:
|
|
353
|
+
|
|
354
|
+
Install the FULU OrcaSlicer-bambulab build normally, set `SLICER_TYPE=orcaslicer-bambulab`, and point `SLICER_PATH` at the executable. If you want bridge-level diagnostics, set `FULU_BAMBU_BRIDGE_COMMAND` to the packaged `pjarczak_bambu_linux_host`.
|
|
355
|
+
|
|
356
|
+
macOS:
|
|
278
357
|
|
|
279
|
-
|
|
358
|
+
Set the app payload directory, then run the scripts that FULU copies into the app bundle:
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
export FULU_ORCA_PLUGIN_DIR="/Applications/OrcaSlicer.app/Contents/MacOS"
|
|
362
|
+
bash "$FULU_ORCA_PLUGIN_DIR/install_runtime_macos.sh" -PackageDir "$FULU_ORCA_PLUGIN_DIR" -PluginDir "$FULU_ORCA_PLUGIN_DIR"
|
|
363
|
+
bash "$FULU_ORCA_PLUGIN_DIR/verify_runtime_macos.sh" -PackageDir "$FULU_ORCA_PLUGIN_DIR" -PluginDir "$FULU_ORCA_PLUGIN_DIR"
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
The default installed runtime is:
|
|
367
|
+
|
|
368
|
+
```text
|
|
369
|
+
~/Library/Application Support/OrcaSlicer/macos-bridge/runtime
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
The bridge command shape is:
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper" "$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host"
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
If your app is named `Orca Studio.app` or lives somewhere else, pass its real `Contents/MacOS` path as `plugin_dir` or `FULU_ORCA_PLUGIN_DIR`.
|
|
379
|
+
|
|
380
|
+
#### Check The Setup Through MCP
|
|
381
|
+
|
|
382
|
+
Ask your MCP client to call `check_fulu_orca_setup`, or call it from an agent with arguments like:
|
|
383
|
+
|
|
384
|
+
```json
|
|
385
|
+
{
|
|
386
|
+
"platform": "darwin",
|
|
387
|
+
"slicer_path": "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer",
|
|
388
|
+
"plugin_dir": "/Applications/OrcaSlicer.app/Contents/MacOS",
|
|
389
|
+
"run_bridge_probe": true,
|
|
390
|
+
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
|
|
391
|
+
}
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
The result reports missing payload files, install/verify commands, the MCP env values to use, and bridge handshake/capability/runtime info when probing is enabled.
|
|
395
|
+
|
|
396
|
+
#### FULU Bridge RPC
|
|
397
|
+
|
|
398
|
+
`fulu_bambu_network_rpc` speaks the FULU bridge frame protocol from the MCP side. The protocol is little-endian binary frames with JSON bodies, using methods such as `bridge.handshake`, `bridge.capabilities`, `bridge.runtime_info`, and `net.get_user_print_info`.
|
|
399
|
+
|
|
400
|
+
Safe diagnostic example:
|
|
401
|
+
|
|
402
|
+
```json
|
|
403
|
+
{
|
|
404
|
+
"method": "bridge.runtime_info",
|
|
405
|
+
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
|
|
406
|
+
}
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
Mutating methods are intentionally gated:
|
|
410
|
+
|
|
411
|
+
```json
|
|
412
|
+
{
|
|
413
|
+
"method": "net.start_print",
|
|
414
|
+
"allow_mutating_method": true,
|
|
415
|
+
"bambu_model": "p1s",
|
|
416
|
+
"payload": {
|
|
417
|
+
"client_job_id": 1,
|
|
418
|
+
"params": {
|
|
419
|
+
"dev_id": "YOUR_PRINTER_ID"
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
That second example is intentionally incomplete because real BambuNetwork print calls need the full FULU/Bambu print parameter payload. The important part is that the MCP exposes the bridge without pretending a cloud print can be safely inferred from a local filename.
|
|
426
|
+
|
|
427
|
+
Where this config lives depends on your client and OS:
|
|
428
|
+
|
|
429
|
+
| Client / scope | macOS / Linux location | Windows location |
|
|
430
|
+
|----------------|------------------------|------------------|
|
|
431
|
+
| Claude Desktop (macOS / Windows) | `~/Library/Application Support/Claude/claude_desktop_config.json` | `%APPDATA%\Claude\claude_desktop_config.json` |
|
|
432
|
+
| Claude Desktop (Linux) | Not officially supported for local MCP yet; Claude Desktop docs still list Linux support as coming soon. | N/A |
|
|
433
|
+
| Claude Code (project-shared MCP) | `.mcp.json` in the project root | `.mcp.json` in the project root |
|
|
434
|
+
| Claude Code (user/local MCP) | `~/.claude.json` | `%USERPROFILE%\.claude.json` |
|
|
435
|
+
| Claude Code settings (not MCP server definitions) | `~/.claude/settings.json` | `%USERPROFILE%\.claude\settings.json` |
|
|
436
|
+
| Cursor (project) | `.cursor/mcp.json` in the project root | `.cursor\mcp.json` in the project root |
|
|
437
|
+
| Cursor (global) | `~/.cursor/mcp.json` | `%USERPROFILE%\.cursor\mcp.json` |
|
|
438
|
+
| Codex (user; CLI, IDE extension, app) | `~/.codex/config.toml` | `%USERPROFILE%\.codex\config.toml` |
|
|
439
|
+
| Codex (project, trusted projects only) | `.codex/config.toml` in the project root | `.codex\config.toml` in the project root |
|
|
440
|
+
|
|
441
|
+
Codex uses TOML instead of the JSON shape above. You can manage MCP servers with `codex mcp`, or edit `config.toml` directly with a `[mcp_servers.<name>]` entry.
|
|
442
|
+
|
|
443
|
+
Restart your client after editing the config. For Codex, run `/mcp` or `codex mcp list` to confirm the server loaded.
|
|
280
444
|
|
|
281
445
|
### Recommended: use with codemode-mcp
|
|
282
446
|
|
|
@@ -357,6 +521,8 @@ Prusa Connect is Prusa's own cloud-based solution for managing their printers.
|
|
|
357
521
|
- Authentication: API key required
|
|
358
522
|
- Compatible with: Prusa MK4, Prusa Mini, Prusa XL, and other Prusa printers with Prusa Connect
|
|
359
523
|
|
|
524
|
+
For Prusa Connect cloud, use `connect.prusa3d.com` with `PRINTER_PORT=443`, or include the scheme directly with `PRINTER_HOST=https://connect.prusa3d.com`. The server normalizes both forms to HTTPS. Local PrusaLink hosts continue to use HTTP unless you provide an `https://` host or port `443`.
|
|
525
|
+
|
|
360
526
|
#### Setting up Prusa Connect
|
|
361
527
|
|
|
362
528
|
1. Make sure your Prusa printer is updated to the latest firmware
|
|
@@ -541,12 +707,15 @@ Slice an STL file to generate G-code.
|
|
|
541
707
|
```json
|
|
542
708
|
{
|
|
543
709
|
"stl_path": "/path/to/file.stl",
|
|
544
|
-
"slicer_type": "
|
|
545
|
-
"slicer_path": "/path/to/
|
|
546
|
-
"slicer_profile": "/path/to/
|
|
710
|
+
"slicer_type": "orcaslicer",
|
|
711
|
+
"slicer_path": "/path/to/orcaslicer",
|
|
712
|
+
"slicer_profile": "/path/to/machine.json;/path/to/process.json",
|
|
713
|
+
"filament_profile": "/path/to/flat-nylon-filament.json"
|
|
547
714
|
}
|
|
548
715
|
```
|
|
549
716
|
|
|
717
|
+
For OrcaSlicer, the server uses `--slice 0 --outputdir` and returns the renamed `plate_1.gcode` output. Load filament separately with `filament_profile` (`--load-filaments`) or encode it in `slicer_profile` after a pipe, for example `/path/to/process.json|/path/to/filament.json`.
|
|
718
|
+
|
|
550
719
|
#### confirm_temperatures
|
|
551
720
|
|
|
552
721
|
Confirm temperature settings in a G-code file.
|
|
@@ -614,7 +783,7 @@ For Bambu printers, lists files in the `gcodes` directory via FTP.
|
|
|
614
783
|
|
|
615
784
|
#### upload_gcode
|
|
616
785
|
|
|
617
|
-
Upload a G-code file to the printer.
|
|
786
|
+
Upload G-code content or a local G-code file path to the printer.
|
|
618
787
|
|
|
619
788
|
```json
|
|
620
789
|
{
|
|
@@ -627,6 +796,18 @@ Upload a G-code file to the printer.
|
|
|
627
796
|
}
|
|
628
797
|
```
|
|
629
798
|
|
|
799
|
+
For larger files, pass a local path instead. If `filename` is omitted, the printer filename defaults to the basename of `gcode_path`.
|
|
800
|
+
|
|
801
|
+
```json
|
|
802
|
+
{
|
|
803
|
+
"host": "192.168.1.100",
|
|
804
|
+
"type": "klipper",
|
|
805
|
+
"api_key": "YOUR_API_KEY",
|
|
806
|
+
"gcode_path": "/path/to/my_print.gcode",
|
|
807
|
+
"print": true
|
|
808
|
+
}
|
|
809
|
+
```
|
|
810
|
+
|
|
630
811
|
For Bambu printers, uploads to the `gcodes` directory via FTP. Cannot start print automatically.
|
|
631
812
|
|
|
632
813
|
#### start_print
|
|
@@ -672,7 +853,7 @@ Set the temperature of a printer component.
|
|
|
672
853
|
}
|
|
673
854
|
```
|
|
674
855
|
|
|
675
|
-
|
|
856
|
+
For Bambu printers, this dispatches firmware G-code temperature commands (`M104` for nozzle, `M140` for bed) over MQTT.
|
|
676
857
|
|
|
677
858
|
</details>
|
|
678
859
|
|
|
@@ -681,9 +862,34 @@ Set the temperature of a printer component.
|
|
|
681
862
|
|
|
682
863
|
### Bambu-Specific Tools
|
|
683
864
|
|
|
865
|
+
#### check_fulu_orca_setup
|
|
866
|
+
|
|
867
|
+
Inspects the FULU OrcaSlicer-bambulab executable, platform runtime payload, setup commands, and optional BambuNetwork bridge probe.
|
|
868
|
+
|
|
869
|
+
```json
|
|
870
|
+
{
|
|
871
|
+
"platform": "darwin",
|
|
872
|
+
"slicer_path": "/Applications/OrcaSlicer.app/Contents/MacOS/OrcaSlicer",
|
|
873
|
+
"plugin_dir": "/Applications/OrcaSlicer.app/Contents/MacOS",
|
|
874
|
+
"run_bridge_probe": true,
|
|
875
|
+
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
|
|
876
|
+
}
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
#### fulu_bambu_network_rpc
|
|
880
|
+
|
|
881
|
+
Calls one FULU BambuNetwork bridge JSON RPC method. Read-only methods such as `bridge.handshake`, `bridge.runtime_info`, and `net.get_user_print_info` are allowed by default. Methods that can mutate account, printer, cloud, or print state require `allow_mutating_method=true`; FULU print methods also require `bambu_model`.
|
|
882
|
+
|
|
883
|
+
```json
|
|
884
|
+
{
|
|
885
|
+
"method": "bridge.handshake",
|
|
886
|
+
"bridge_command": "\"/Applications/OrcaSlicer.app/Contents/MacOS/pjarczak-bambu-linux-host-wrapper\" \"$HOME/Library/Application Support/OrcaSlicer/macos-bridge/runtime/pjarczak_bambu_linux_host\""
|
|
887
|
+
}
|
|
888
|
+
```
|
|
889
|
+
|
|
684
890
|
#### print_3mf
|
|
685
891
|
|
|
686
|
-
Uploads a `.3mf` file to a Bambu printer via FTP and initiates the print job via an MQTT command. Allows overriding some print parameters like AMS mapping.
|
|
892
|
+
Uploads a sliced `.3mf` file to a Bambu printer via FTP and initiates the print job via an MQTT command. If the 3MF has no embedded plate G-code and a project slicer is configured, the server can auto-slice it first with FULU OrcaSlicer-bambulab or Bambu Studio. Allows overriding some print parameters like AMS mapping.
|
|
687
893
|
|
|
688
894
|
**`bambu_model` is required** -- it ensures the slicer generates G-code for the correct printer. Using the wrong model can cause the bed to crash into the nozzle and damage the printer. If not provided in the tool call and `BAMBU_MODEL` is not set in the environment, the server will ask interactively via MCP elicitation (if supported by your client) or return a clear error.
|
|
689
895
|
|
|
@@ -695,6 +901,8 @@ Uploads a `.3mf` file to a Bambu printer via FTP and initiates the print job via
|
|
|
695
901
|
"host": "your_bambu_ip",
|
|
696
902
|
"bambu_serial": "YOUR_SERIAL",
|
|
697
903
|
"bambu_token": "YOUR_TOKEN",
|
|
904
|
+
"slicer_type": "orcaslicer-bambulab",
|
|
905
|
+
"slicer_path": "/path/to/FULU/OrcaSlicer",
|
|
698
906
|
"use_ams": true,
|
|
699
907
|
"ams_mapping": [0, 1, 2, 3],
|
|
700
908
|
"bed_leveling": true,
|
|
@@ -776,18 +984,20 @@ Here are some example commands you can give to Claude after connecting the MCP s
|
|
|
776
984
|
|
|
777
985
|
Due to the nature of the Bambu Lab printer API, there are some limitations:
|
|
778
986
|
|
|
779
|
-
1. **Printable 3MF requirement:** `print_3mf`
|
|
987
|
+
1. **Printable 3MF requirement:** `print_3mf` ultimately needs a sliced 3MF that includes at least one `Metadata/plate_<n>.gcode` entry so the server can compute MD5 and start the job correctly. Unsliced 3MF files can be auto-sliced first when `SLICER_TYPE=orcaslicer-bambulab` or `SLICER_TYPE=bambustudio` is configured.
|
|
780
988
|
|
|
781
|
-
2. **AMS behavior caveat:**
|
|
989
|
+
2. **AMS behavior caveat:** AMS mapping is passed through the MQTT project-file command, but real behavior still depends on printer firmware, loaded filament, and the sliced project's metadata.
|
|
782
990
|
|
|
783
991
|
3. **Temperature control path:** Temperature updates are implemented through G-code command dispatch (`M104`/`M140`) over MQTT, so effective behavior still depends on printer firmware acceptance and current printer state.
|
|
784
992
|
|
|
785
|
-
4. **File transfer channel:**
|
|
993
|
+
4. **File transfer channel:** Uploads use Bambu's FTPS path (port 990) directly through `basic-ftp` with implicit TLS. Some read/list operations still use `bambu-js` helpers.
|
|
786
994
|
|
|
787
995
|
5. **Direct start path scope:** `startJob` currently targets `.gcode` files on printer storage; `.3mf` jobs should be initiated through `print_3mf` so metadata and plate selection are handled.
|
|
788
996
|
|
|
789
997
|
6. **Status consistency:** Status reads force a `pushall` refresh when possible, but complete real-time, event-stream status semantics across all Bambu models still need deeper hardening.
|
|
790
998
|
|
|
999
|
+
7. **FULU BambuNetwork bridge scope:** The FULU bridge exposes BambuNetwork functionality through its own runtime and RPC protocol. This MCP can inspect/probe that runtime and issue guarded bridge RPC calls, but local `print_3mf` still uses the server's explicit local MQTT/FTPS path unless a future change maps a complete FULU cloud-print payload safely.
|
|
1000
|
+
|
|
791
1001
|
## Limitations and Considerations
|
|
792
1002
|
|
|
793
1003
|
### Memory Usage
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type FuluOrcaSetupOptions = {
|
|
2
|
+
slicerPath?: string;
|
|
3
|
+
pluginDir?: string;
|
|
4
|
+
runtimeDir?: string;
|
|
5
|
+
platform?: string;
|
|
6
|
+
bridgeCommand?: string;
|
|
7
|
+
runBridgeProbe?: boolean;
|
|
8
|
+
probeTimeoutMs?: number;
|
|
9
|
+
};
|
|
10
|
+
export type FuluBridgeRpcOptions = {
|
|
11
|
+
bridgeCommand?: string;
|
|
12
|
+
method: string;
|
|
13
|
+
payload?: Record<string, unknown>;
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
allowMutatingMethod?: boolean;
|
|
16
|
+
bambuModel?: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function isFuluPrintRpcMethod(method: string): boolean;
|
|
19
|
+
export declare function invokeFuluBridgeRpc(options: FuluBridgeRpcOptions): Promise<Record<string, unknown>>;
|
|
20
|
+
export declare function inspectFuluOrcaSetup(options: FuluOrcaSetupOptions): Promise<Record<string, unknown>>;
|