Releases: DMontgomery40/bambu-printer-mcp
Release list
v1.1.21: accept X2D cloud-job identity reports
Fixed
- Accept fresh X2D identity reports when
modelidentifies the printer butmodel_idcontains an unrelated cloud print-job identifier. Unrecognizedmodel_idvalues no longer block a recognized observed model or returned printer serial. Recognized model identifiers still participate in contradiction checks, unknown values in actual model fields still fail closed, and configured identity is never used as live safety evidence. Fixes #36.
Contributor
Huge thanks to JaviOFC for the precise X2D firmware, connection-mode, status-field, serial-prefix, and cloud-job evidence that made this defect reproducible and safe to correct.
Validation
- Local two-axis code review and GitHub Codex review found no remaining issues on the merged head.
- Linux and native macOS GitHub checks passed.
- The trusted main-branch workflow built, ran 579 tests with 571 passes and 8 environment/platform skips, and published npm 1.1.21 with signed provenance.
- Local validation passed 58/58 behavior tests and 577 full-suite tests with two optional installed-profile skips.
- GitHub Pages built and deployed successfully.
- Identity behavior is covered through mocked MQTT boundaries. No physical print was run for this release.
v1.1.20: P2S GUI jobs and review order
Accept Bambu Studio 02.08 P2S jobs while retaining strict nozzle and temperature inspection.
- Resolve project extruder-variant tables together with the selected per-extruder plate headers. Preserve their source so headers cannot substitute full tables for selections. Reject malformed or contradictory ids, variants, and nozzle types, including variants whose rows all use the same nozzle material.
- Accept the official P2S
M145 P0andM145 P1airduct commands; reject other parameters, unsupported models, and over-limit nozzle/chamber targets. - Correct the review order: local code review runs before PR pushes to save GitHub Actions work; GitHub Codex review and CI remain subsequent release gates.
- Preserve Izzy Mansurov's (@sapoepsilon) original contribution and credit the fix, regressions, and offline evidence in CONTRIBUTORS.md. Thank you, Izzy! PR #33.
Validation: the complete local suite passes 576 tests with two optional installed-preset skips (P2S and H2S); the required behavior suite passes 58 tests. The suite covers isolated local/global/npm-exec installs, dependency patches, Blender MCP, and extracted desktop extension startup. The documentation site builds successfully. GitHub runs Linux Node.js 24 and macOS native checks on the final PR head.
The contributor reports offline inspection of four real Bambu Studio 02.08.02.61 P2S 0.6 mm PLA/PETG jobs and unsafe mutated copies. No physical print is performed for this release.
v1.1.19: local code-review gate and no AI attribution
Maintenance rules
- The pre-PR review gate is Matt Pocock's
code-reviewskill, run locally against the main merge base before GitHub CI. Codex reviews are no longer requested by default. - No AI or agent attribution in commits, PR titles or bodies, review replies, issue comments, or release notes.
Documentation-only release; no runtime change from 1.1.18.
v1.1.18: slice for your nozzle, and know whether the print started
Slice for your nozzle, and know whether the print actually started
Found on a real P1S with a hardened-steel nozzle and current firmware:
nozzle_type(stainless_steel,hardened_steel,tungsten_carbide,brass; defaultBAMBU_NOZZLE_TYPE) is available onslice_stl,slice_with_template, and everyprint_3mfauto-slice path. Bambu's P1S, P1P, and A1 presets assume the stock stainless nozzle, and the print gate compares the job's nozzle type with the printer's report. Until now, a P1S with an upgraded nozzle could never print a CLI-sliced job.- Print commands report what the printer did. After a
project_fileorgcode_filestart, the server listens to the reports the printer pushes, for up toBAMBU_DISPATCH_CHECK_MS(15 s by default). It returnsdispatch: "started"or"unconfirmed", instead of a fixed "sent successfully". - Firmware rejections are explained. Firmware 01.08.05 and later rejects unsigned third-party commands with HMS 0500-0500-0001-0007 unless LAN Only Mode and Developer Mode are enabled. The print call now fails and says so, including that the printer keeps the error until it's cleared. A stop during the watch is reported as a stop, and refusals that block on an HMS entry name its code.
- Refusals suggest fixing the reported cause instead of "try again".
Ported from mcp-3D-printer-server, where the real-printer run found these problems.
Validation
- Full suite: 570 passed, 2 skipped (P2S and H2S presets not installed), 0 failed. CI (build, test, native-macos) passed.
- Real P1S (hardened steel): the old gate refused a stainless-sliced job, and slicing with
nozzle_type: hardened_steelproduced a matching job. The firmware's HMS 0500-0500-0001-0007 rejection of an unsigned command was observed; the new watcher logic that reports it is covered by tests but has not yet seen a live rejection.
v1.1.17: machine settings stay in the selected preset
Machine settings stay in the selected printer's preset
The Bambu-compatible CLI applies every key in every --load-settings and --load-filaments file. So a template 3MF's project_settings, or a custom process or filament JSON exported for another printer, could replace the selected preset's start G-code, printer model, and nozzle or bed values.
With BambuStudio 02.01.01.52, a P1S slice from a template that named the X1 Carbon produced plate G-code with the X1 Carbon header and the template's start G-code. Keys owned by the resolved machine preset are now dropped from process and filament files before slicing, and the drop is logged. That slice now keeps ; printer_model = Bambu Lab P1S with the P1S start G-code. OrcaSlicer's absolute-extrusion normalization now applies to the machine config too.
Also in this release:
- Confirmation prompts wait up to ten minutes by default (
BAMBU_CONFIRMATION_TIMEOUT_MS, 1000–3600000 ms) instead of the MCP SDK's 60 seconds. An unanswered prompt is reported as a timeout, instead of suggesting that you disable confirmation. - Malformed profile files are named in "profile not found" errors.
Ported from mcp-3D-printer-server, where the problem was found.
Validation
- Full suite: 555 passed, 2 skipped (P2S and H2S presets not installed), 0 failed. CI (build, test, native-macos) passed.
- Real BambuStudio marker reproduction: 2 marker hits and an X1 Carbon header before; 0 hits and a P1S header after.
- All 32 installed stock model/nozzle presets load their default process and filament profiles with nothing stripped.
- Not verified: OrcaSlicer and FULU real-slicer runs (not installed; tested with fake CLIs), and no physical print.
v1.1.16: correct published changelog history
Correct published changelog history
The source changelog and generated GitHub Pages site now show the shipped 1.1.14 and 1.1.15 work under their actual release headings instead of grouping it beneath Unreleased. The corrected 1.1.15 section preserves PR #26 and Vail's contributor credit, and the 1.1.14 section matches its published release notes.
Validation
- Matt Pocock two-axis pre-PR review found zero standards or spec issues.
- Full suite: 536 passed, 2 optional installed-profile skips, 0 failed.
- Behavior suite: 56 passed, 0 failed.
- Documentation build passed and rendered 1.1.16, 1.1.15, and 1.1.14 as peer release sections.
- A fresh public npm install and the downloaded MCPB both initialized over stdio at version 1.1.16 with 45 tools, the patched parser active, and native-helper build/lookup working. The downloaded MCPB matched GitHub's published SHA-256 digest exactly, and the live GitHub Pages changelog visibly shows separate 1.1.16, 1.1.15, and 1.1.14 sections.
v1.1.15: truthful read-only FTPS file listings
Truthful read-only FTPS file listings
list_printer_files now uses the same direct basic-ftp TLS/session handling as the validated file-transfer routes. A successful root listing distinguishes absent optional folders from real FTPS failures, and authentication, permission, timeout, TLS, and transfer errors now reach the MCP client instead of looking like empty or partial success.
The response remains read-only and compatible: it lists cache, timelapse, and logs, never creates directories, and always closes the FTPS client. This release also records Matt Pocock's two-axis local code review as the pre-PR gate so substantive standards and spec problems are caught before GitHub CI.
Huge, enthusiastic thanks to Vail (@VailElla) for the diagnosis, implementation, focused regressions, careful error semantics, and read-only X2D hardware check in #26! The physical X2D check established a successful empty-root listing without upload, deletion, directory creation, or printing. Nonempty folders, failure paths, and other printer models remain mocked evidence rather than new hardware claims.
Validation
- Full suite: 536 passed, 2 optional installed-profile skips, 0 failed.
- Behavior suite: 56 passed, 0 failed.
- Linux and macOS GitHub CI plus Pages build passed on the release PR.
- Local npm tarball and MCPB both initialized over stdio, exposed 45 tools including Blender integration, retained the patched parser, and built/located the optional native helper without connecting to a printer.
- Fresh public npm and downloaded GitHub MCPB installs both initialized over stdio at version 1.1.15 with 45 tools, the patched parser active, and native-helper build/lookup working. The downloaded MCPB matched GitHub's published SHA-256 digest exactly.
v1.1.14: checked native X2D transport and FTPS session reuse
Optional checked native X2D transport on macOS and FTPS data-session reuse fixes.
Fixed
- Revalidate positive heating, resume, and confirmed hardware-error clearing immediately before native command dispatch; keep stop and heater-off available without preflight.
- Reject fractional AMS unit/slot addresses rather than truncating them to another physical address.
- Require fresh shared printer-state authorization after native connection setup and again before certificate-retry print dispatch.
- Select raw native metadata controls by the requested printer instead of the global default model.
- Preserve unknown observed printer identities in status instead of substituting the configured model.
- Validate and forward native upload plate, bed, project, and preset metadata; explicitly reject unsupported print options instead of silently ignoring them.
- Keep heater-off on the selected printer transport after model elicitation, including an overridden non-X2D serial.
- Interrupt pending native helpers on MCP cancellation, stop, and heater-off; wait for process exit before releasing snapshots, with bounded SIGKILL escalation when SIGTERM is ignored.
- Route X2D controls from the selected serial when the print model was elicited, without applying the configured X2D transport to an overridden printer.
- Preserve unit-local filament metadata tray IDs and absolute calibration tray IDs across multiple AMS units and AMS-HT; reject contradictory unit/slot mappings.
- Restrict public raw native controls to validated AMS metadata and calibration queries/selection; exclude motion, loading, heating, and safety-setting mutations.
- Add a macOS native build/test CI job while preserving the existing Linux test check.
- Remove machine-specific launchers and unused GUI automation from the upstream change and release archives.
- Resolve the model before selecting the X2D native route, including MCP model elicitation, and pass that resolved model through dispatch.
- Reject raw
ams_mapping2overrides and missing/empty requested AMS mappings before dispatch; derive native mappings from checked structured tray assignments without silently selecting an external spool. - Cover macOS and Linux control routing explicitly, and restrict native helper execution tests to supported hosts.
- Integrate X2D native prints, uploads, heaters, resume, and error clearing with the current shared file/state/confirmation checks. Preserve existing model routes and reject raw-control bypasses.
- Include only native source and build scripts in npm and desktop distributions; locate the optional compiled helper relative to the installed package and test fresh local, global, and npm-exec installations. Keep proprietary plug-ins and local binaries out of release archives.
- Resolve include-based installed templates and substitute current filament/hotend macro names in optional syntax regressions; do not assume a particular installed G383 variant.
- Retain VailElla's prior X2D eMMC/certificate investigation and hardware evidence. This follow-up uses mocked printer regressions and clean-install/build checks; it does not claim a new physical print.
- Include the printer host in FTPS TLS options so data connections resume the control session. basic-ftp wraps each data socket without a host, so Node can bind its resumable session to
localhostinstead of the printer host and printers requiring TLS session reuse replied522 SSL connection failed: session reuse requiredto every LIST, STOR and RETR. The contributor verifies successful upload, size check, and deletion on physical X2D USB storage; internal eMMC still refuses FTPS writes with553. Printing remains a separate check.list_printer_filesstill uses bambu-js's own FTP client and is not covered by this change.
Contributors
Thanks to @VailElla for the native X2D transport, eMMC investigation, hardware evidence, AMS corrections, and packaging/platform regressions; and @sebas1986 for the FTPS session-host fix and physical X2D USB upload/size/delete verification. Original commit authorship is preserved.
Validation and limits
The local macOS suite passes 524 tests with two optional skips and no failures. Native compilation, clean local/global/npm-exec installation layouts, extracted MCPB startup, and documentation build pass. Linux/macOS CI and final-head Codex review passed. Trusted npm publication reports latest=1.1.14 and the matching merge commit; fresh public npm and downloaded MCPB installations both initialize with 45 tools and pass native build/lookup and runtime patch checks. The documentation deployment is verified in a browser. These checks use mocked printer boundaries and isolated artifacts; this release does not claim a new physical print or live Blender scene test. Native X2D transport requires macOS and the installed Bambu Studio networking plug-in; proprietary plug-ins and local binaries are not bundled. Legacy X2D FTPS print starts remain gated.
v1.1.13 — Added safety checks
Added safety checks
- Check final G-code, exact plate bytes/checksum, printer model, live nozzle configuration, declared materials, and model/component temperature limits.
- Require fresh MQTT identity, ready state, and actionable-error checks, and compare available mapped/currently loaded filament reports.
- Add human print/heating preflight through MCP elicitation, finished-bed clearance, and confirmed hardware-error clearing with acknowledgment before the next print. Stop and heater-off remain available immediately.
- Reject ambiguous ZIP entries and bound inspection. Inspect every plate in printable upload-only requests and preserve existing remote files through unique names and collision checks.
- Preserve ordered mixed-nozzle configurations, inspect private snapshots and remote G-code, and allow verified resume for inspected direct and bridge jobs.
- Validate supported H2D thermal command forms, apply a 260°C normal PLA policy with one narrowly bounded X1E startup-purge allowance, and reject explicit non-FFF jobs and recognized laser-enabling commands.
Legacy .gcode.3mf jobs need a single external-spool-only plate; use .3mf project exports for verified AMS mappings. Cloud bridge submission also requires local MQTT safety telemetry. Ambiguous multi-nozzle manual heating is refused. Inspection accepts files up to 256 MiB and archives up to 512 MiB inflated; ZIP64 is unsupported. Ordinary confirmation can be disabled only by trusted headless configuration; finished-bed and hardware-error acknowledgments remain required.
Thanks to Boardy (@BoardyAI) for raising nozzle verification, David Montgomery for the temperature/hardware reports, and the supplied Fable red-team review for archive reproductions and hardware-safety findings. See CONTRIBUTORS.md for community recognition and authorship.
Validation: 449 local tests pass, zero failures, two optional installed-profile skips (P2S/H2S). Node.js 24 Linux CI and the documentation build pass. A read-only H2S connection attempt was rejected by MQTT authorization before any command was published; live identity/nozzle acceptance remains unverified on that configuration. No physical print, heating, or motion was performed. Manual declarations and reported settings cannot prove physical spool/nozzle contents. These checks do not simulate arbitrary firmware motion or execution time.
Published-artifact validation: a fresh registry install and the downloaded GitHub .mcpb both start as 1.1.13 with 43 tools. All 14 JavaScript runtime files match the reviewed build. Both artifacts pass missing-machine-preset checks for BambuStudio/Orca/FULU and eight delivered-server safety regressions, including declined MCP confirmation. These artifact checks use mocked hardware boundaries.
v1.1.12 — Documentation site and agent examples
bambu-printer-mcp now has a searchable documentation site at https://dmontgomery40.github.io/bambu-printer-mcp/. Pages are generated from the README, setup, slicing, and FULU guides, changelog, and contributor credits at build time, so the repository Markdown remains the single source.
The README's example commands are rewritten for how people use agents now: ask for the result, not the steps. New examples start from a MakerWorld link or a photo, and check on a print by messaging an always-on agent from anywhere.
- Add a VitePress site in
site/, deployed by a Pages workflow frommainonly. Pull requests build it without deploying. - Keep README deep links working with GitHub-compatible heading anchors. The site build fails on broken links, unknown anchors, or README content that no page publishes.
- Add a large-image social card and per-page link-preview titles, descriptions, and canonical URLs.
- Replace the 35 outdated example commands with ten outcome-first requests. The section moves up beside the agent setup request, and it states which abilities come from the agent (web search, photos, Blender MCP) and which from this server. Printing a model the agent edited uses CLI slicing with your installed presets.
Thanks to FULU, Louis Rossmann, OrcaSlicer-bambulab contributors, and all repository contributors credited in CONTRIBUTORS.md. This release changes documentation and site tooling only; server code is unchanged.
Validation: 234 local tests pass, 0 fail; two optional installed-profile tests skip because P2S/H2S presets are absent. The site builds locally and in CI with no unresolved links or anchors, and was checked in Chrome at desktop and phone widths in light and dark themes. Codex review of the final commit found no issues. No physical printing or live FULU/Blender mutation was performed.
Publication verified: the Publish Package workflow published 1.1.12 with provenance, and npm latest is 1.1.12. Package, manifest, and the v1.1.12 tag agree on merge commit f8fda41. Fresh installation from npm and startup from the downloaded MCPB both initialize as 1.1.12, expose 43 tools, and pass bridge configuration discovery. The bundled bambu-node patch is present in both installed runtimes. Runtime initialization and tool discovery are not physical-print validation.