mcp-3d-printer-server 1.2.9 → 1.2.12

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.
Files changed (86) hide show
  1. package/CHANGELOG.md +222 -0
  2. package/CONTRIBUTORS.md +56 -0
  3. package/README.md +528 -811
  4. package/dist/3mf_parser.js +8 -8
  5. package/dist/blender-mcp-bridge.d.ts +1 -0
  6. package/dist/blender-mcp-bridge.js +209 -21
  7. package/dist/fulu-orca.js +29 -5
  8. package/dist/index.js +614 -110
  9. package/dist/printers/bambu-node-guard.d.ts +2 -0
  10. package/dist/printers/bambu-node-guard.js +38 -0
  11. package/dist/printers/bambu.d.ts +53 -7
  12. package/dist/printers/bambu.js +420 -126
  13. package/dist/printers/creality.d.ts +15 -6
  14. package/dist/printers/creality.js +42 -9
  15. package/dist/printers/duet.d.ts +11 -6
  16. package/dist/printers/duet.js +57 -34
  17. package/dist/printers/generic-base.d.ts +69 -0
  18. package/dist/printers/generic-base.js +209 -0
  19. package/dist/printers/klipper.d.ts +17 -6
  20. package/dist/printers/klipper.js +63 -16
  21. package/dist/printers/octoprint.d.ts +18 -6
  22. package/dist/printers/octoprint.js +64 -9
  23. package/dist/printers/printer-factory.d.ts +11 -2
  24. package/dist/printers/printer-factory.js +9 -8
  25. package/dist/printers/prusa.d.ts +14 -6
  26. package/dist/printers/prusa.js +56 -9
  27. package/dist/printers/repetier.d.ts +18 -6
  28. package/dist/printers/repetier.js +48 -6
  29. package/dist/safety/archive.d.ts +11 -0
  30. package/dist/safety/archive.js +214 -0
  31. package/dist/safety/artifact.d.ts +6 -0
  32. package/dist/safety/artifact.js +66 -0
  33. package/dist/safety/confirmation.d.ts +22 -0
  34. package/dist/safety/confirmation.js +43 -0
  35. package/dist/safety/expected-peaks.d.ts +24 -0
  36. package/dist/safety/expected-peaks.js +24 -0
  37. package/dist/safety/gcode-thermal.d.ts +64 -0
  38. package/dist/safety/gcode-thermal.js +382 -0
  39. package/dist/safety/limits.d.ts +31 -0
  40. package/dist/safety/limits.js +105 -0
  41. package/dist/safety/print-file.d.ts +25 -0
  42. package/dist/safety/print-file.js +610 -0
  43. package/dist/safety/printer-state.d.ts +51 -0
  44. package/dist/safety/printer-state.js +371 -0
  45. package/dist/slicer/bambu-cli.d.ts +110 -0
  46. package/dist/slicer/bambu-cli.js +547 -0
  47. package/dist/slicer/profile-flatten.d.ts +104 -0
  48. package/dist/slicer/profile-flatten.js +676 -0
  49. package/dist/slicer/run-slicer.d.ts +18 -0
  50. package/dist/slicer/run-slicer.js +102 -0
  51. package/dist/slicer/slicer-error.d.ts +27 -0
  52. package/dist/slicer/slicer-error.js +53 -0
  53. package/dist/slicer/templates.d.ts +126 -0
  54. package/dist/slicer/templates.js +255 -0
  55. package/dist/stl/stl-manipulator.d.ts +25 -3
  56. package/dist/stl/stl-manipulator.js +214 -232
  57. package/package.json +16 -9
  58. package/server.json +56 -0
  59. package/src/3mf_parser.ts +8 -8
  60. package/src/blender-mcp-bridge.ts +200 -19
  61. package/src/fulu-orca.ts +36 -6
  62. package/src/index.ts +686 -137
  63. package/src/printers/bambu-node-guard.ts +44 -0
  64. package/src/printers/bambu.ts +458 -164
  65. package/src/printers/creality.ts +40 -9
  66. package/src/printers/duet.ts +64 -53
  67. package/src/printers/generic-base.ts +286 -0
  68. package/src/printers/klipper.ts +83 -28
  69. package/src/printers/octoprint.ts +74 -21
  70. package/src/printers/printer-factory.ts +21 -11
  71. package/src/printers/prusa.ts +53 -10
  72. package/src/printers/repetier.ts +55 -17
  73. package/src/safety/archive.ts +181 -0
  74. package/src/safety/artifact.ts +58 -0
  75. package/src/safety/confirmation.ts +56 -0
  76. package/src/safety/expected-peaks.ts +47 -0
  77. package/src/safety/gcode-thermal.ts +404 -0
  78. package/src/safety/limits.ts +98 -0
  79. package/src/safety/print-file.ts +429 -0
  80. package/src/safety/printer-state.ts +344 -0
  81. package/src/slicer/bambu-cli.ts +633 -0
  82. package/src/slicer/profile-flatten.ts +830 -0
  83. package/src/slicer/run-slicer.ts +126 -0
  84. package/src/slicer/slicer-error.ts +72 -0
  85. package/src/slicer/templates.ts +288 -0
  86. package/src/stl/stl-manipulator.ts +247 -275
package/CHANGELOG.md CHANGED
@@ -1,5 +1,227 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.12 — 2026-10-13
4
+
5
+ ### Fixed
6
+
7
+ - Correct fresh H2C (`31B`) and H2D Pro (`239`) returned-serial identity without trusting configured identity or suppressing conflicts. Accept a cloud print-job identifier in `model_id` only when another recognized observed model or returned serial identifies the printer; unknown actual model fields still reject. Port reports from Adam (@adamkaplan, [fork #47](https://github.com/DMontgomery40/bambu-printer-mcp/issues/47)) and JaviOFC ([fork #36](https://github.com/DMontgomery40/bambu-printer-mcp/issues/36)).
8
+ - Accept Bambu Studio 02.08 P2S per-variant nozzle tables alongside the selected plate header, and the exact P2S `M145 P0/P1` airduct forms. Preserve selected extruder/variant conflicts and independent thermal checks. Port Izzy Mansurov's (@sapoepsilon) code and regressions from [fork #33](https://github.com/DMontgomery40/bambu-printer-mcp/pull/33), including the subsequent selection-validation corrections.
9
+ - Accept the official H2C startup forms only inside its single bounded executable startup block, with independent base/derived nozzle and bed checks and declared filament positions. Keep configuration `layer_change_gcode` keys from ending startup; actual layer markers and extrusion still close it. Reject unchecked `G383 U` targets outside the allowance. Thanks to Adam for [fork #48](https://github.com/DMontgomery40/bambu-printer-mcp/issues/48) and the exact vendor template evidence.
10
+ - Accept the official X2D bare material-switch `B` flag and exact `M620.22 I<declared filament> P1` runout-purge form while rejecting unsupported variants and preserving heater ceilings. Thanks to Travis Cashman (@travismcashan) for [fork #44](https://github.com/DMontgomery40/bambu-printer-mcp/issues/44). These are file-inspection changes; no native X2D helper is added to this server.
11
+
12
+ ### Dependencies
13
+
14
+ - Update basic-ftp to 6.2.3 for [GHSA-r4jh-29pc-gfqr](https://github.com/patrickjuchli/basic-ftp/security/advisories/GHSA-r4jh-29pc-gfqr): rejected control-character passwords/resume paths no longer cause an uncaught exception or leave the client unusable, and rejected PASS errors omit the password. Keep bambu-node pinned and preserve the parent's direct MQTT wire-shape and rejection guard.
15
+
16
+ Validation uses mocked transports, the pinned official H2C template, unsafe-file mutations, and clean package installations. No physical printer operation is performed or claimed.
17
+
18
+ ## 1.2.11 — 2026-10-06
19
+
20
+ This release also includes the safety, slicing, Blender, and documentation
21
+ changes prepared as 1.2.10 below. Version 1.2.10 was not published to npm.
22
+
23
+ ### Fixed
24
+
25
+ - Send Moonraker's configured `API_KEY` as `X-Api-Key` on every request,
26
+ including multipart uploads and remote-file inspection downloads. Thanks to
27
+ Jack Manning (@EastArctica) for [#30](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/30)
28
+ and Klipper 0.13.0 authentication evidence. Loopback tests cover authenticated
29
+ and trusted-client configurations; no maintainer physical print was run.
30
+ - Correct fresh Bambu A1/A1 mini serial identity (`039` / `030`) and accept the
31
+ official A1/A1 mini `M109 H` wait parameter without weakening independently
32
+ checked S/R temperature targets. Port the fork's fixes reported by @Steavie
33
+ ([#39](https://github.com/DMontgomery40/bambu-printer-mcp/issues/39)) and implemented
34
+ by @nitpreet22 ([#41](https://github.com/DMontgomery40/bambu-printer-mcp/pull/41)).
35
+ Covered by mocked identity and file-inspection regressions.
36
+ - Keep model parsing, slicing, and STL diagnostics on stderr so they cannot
37
+ corrupt stdio MCP messages, following @travismcashan's report in the fork's
38
+ [#44](https://github.com/DMontgomery40/bambu-printer-mcp/issues/44). Subprocess
39
+ regressions check the compiled parser and slicer.
40
+ - Make Bambu file metadata lookup read-only through the shared FTPS client;
41
+ remove the obsolete `bambu-js` dependency that created directories during reads.
42
+
43
+ ### Dependencies and interoperability
44
+
45
+ - Update the MCP SDK to 1.32.1, basic-ftp to 6.2.2, JSZip to 3.10.2, dotenv
46
+ within version 16, and proxy-addr to its patched release. The production npm
47
+ audit reports no vulnerabilities; unresolved nodemon watcher advisories are
48
+ development-only and remain deferred rather than forcing an unsafe downgrade.
49
+ - Verify discovery, invocation, and STL export with upstream mcp-for-blender
50
+ 2.1.9 and the former blender-mcp 2.0.0 package in isolated Blender 5.0.1.
51
+ The exported fixture has 12 triangles and measures 40 × 20 × 10 mm. This
52
+ verifies application interoperability, not a user's live scene or a print.
53
+
54
+ ### Discovery
55
+
56
+ - Add the official MCP Registry ownership field and server metadata for the
57
+ npm package. The listing documents printer backend configuration and marks
58
+ API keys and Bambu LAN access codes as secrets.
59
+
60
+ ## 1.2.10 — repository changes, not published to npm
61
+
62
+ ### Safety
63
+
64
+ - Port the bambu-printer-mcp print safety gate to every Bambu print and heat
65
+ route (print_3mf, start_print, upload_gcode with print, process_and_print_stl,
66
+ set_printer_temperature). Each route inspects a private snapshot of the exact
67
+ selected plate or G-code (every S/R heater target and tool change), enforces
68
+ per-model hardware and declared-material ceilings, and checks a fresh MQTT
69
+ report of the printer's model, serial, nozzle, state, errors and loaded
70
+ filament before, after the human confirmation and again before dispatch.
71
+ - Ask a human through MCP elicitation before every print start and positive
72
+ heating command. PRINT_REQUIRE_CONFIRMATION=0 (all printers) or
73
+ BAMBU_REQUIRE_CONFIRMATION=0 (Bambu only) opts out for headless clients; a
74
+ printer reporting a finished job still asks. Clients without elicitation are
75
+ refused with instructions.
76
+ - Validate temperatures as finite, non-negative numbers before connecting.
77
+ Heater-off (0) and cancel are never gated and cancel pending checked prints.
78
+ - Start remote files only after downloading and inspecting them, then start a
79
+ uniquely named checked copy (Bambu, OctoPrint, Moonraker, Duet). Repetier,
80
+ Prusa and Creality refuse remote starts because no verified download route
81
+ exists; upload the local G-code with print=true instead.
82
+ - Gate OctoPrint, Klipper/Moonraker, Duet, Repetier, Prusa and Creality with
83
+ shared thermal checks: independent nozzle/bed/chamber ceilings (defaults
84
+ 300/120/60 °C, server-only PRINTER_MAX_NOZZLE_TEMP, PRINTER_MAX_BED_TEMP,
85
+ PRINTER_MAX_CHAMBER_TEMP), material ceilings, a declared material for
86
+ positive nozzle heating (G-code filament_type or the new material argument),
87
+ and adapter state checks that refuse printing, paused, errored, offline or
88
+ unreadable printers. Klipper macro parameters that name a heater are checked;
89
+ macro bodies on the printer cannot be inspected.
90
+ - Stop again when a cancel arrives while an OctoPrint or Repetier
91
+ upload-and-print is still uploading, so the cancellation wins.
92
+ - Pass `nozzle_type` and `bed_type` through `process_and_print_stl` slicing.
93
+ - Refuse RepRapFirmware `M144` bed standby/activation, which heats to stored
94
+ temperatures the job does not show.
95
+ - Refuse RepRapFirmware `M568 A1/A2` tool activation unless the job itself set
96
+ that tool's standby/active target first; activation-only commands would heat
97
+ to an uninspected printer-side value.
98
+ - Fix process_and_print_stl, which only logged a temperature mismatch and kept
99
+ printing and whose check missed R targets. Expected extruder_temp/bed_temp
100
+ must now equal the sliced job's highest S/R target or nothing is uploaded.
101
+ - Stop print_3mf from uploading the original project when auto-slicing fails
102
+ or the selected plate has no G-code.
103
+ - Behavior changes: print_3mf compares bed_type (default BED_TYPE, else
104
+ textured_plate) with the sliced plate's bed metadata, so a file sliced for
105
+ another plate or without bed metadata is refused until bed_type matches.
106
+ Moonraker complete/cancelled, PrusaLink FINISHED/STOPPED and Bambu FINISH
107
+ count as a finished job, so the first print after a previous job always asks
108
+ a human to confirm the bed is clear, even with confirmation opted out.
109
+ Generic print uploads need a plain filename so the started file is exactly
110
+ the uploaded one.
111
+ - Refuse raw FULU bridge print methods, printer messages and unknown methods in
112
+ fulu_bambu_network_rpc; allow_mutating_method now covers only agent/session
113
+ setup methods.
114
+ - Publish Bambu safety commands with string sequence ids and keep bambu-node's
115
+ internal parser errors (H2-series serials, PAUSE to IDLE after a cancel) from
116
+ terminating the server, without patching bambu-node.
117
+ - Fix OctoPrint nozzle targets (tool0 instead of extruder) and use the DSF
118
+ raw-text /machine/code and PUT /machine/file routes for Duet.
119
+ - Give people 10 minutes to answer confirmation prompts
120
+ (PRINT_CONFIRMATION_TIMEOUT_MS) instead of the MCP SDK's 60-second default,
121
+ and report an unanswered prompt as a timeout. Previously a slow answer was
122
+ reported as missing elicitation support, which pointed users at disabling
123
+ the prompt.
124
+ - Report what a Bambu printer did after a print command instead of assuming
125
+ success: watch fresh reports (BAMBU_DISPATCH_CHECK_MS, default 15 s) and
126
+ return `dispatch: "started"` or `"unconfirmed"`, or fail with an explanation
127
+ when firmware 01.08.05+ refuses the command (HMS 0500-0500-0001-0007, needs
128
+ LAN Only Mode and Developer Mode). Found on a real P1S, where the old code
129
+ reported "sent successfully" while nothing printed.
130
+ - List Bambu files over FTPS directly (ported from bambu-printer-mcp): the
131
+ previous bambu-js listing returned empty folders on every failure,
132
+ including on a healthy P1S with 286 files.
133
+ - Explain credential rejections (Bambu MQTT "Not authorized", FTPS 530,
134
+ HTTP 401/403) as a changed access code or API key instead of advising a
135
+ retry, and mark safety refusals as not retryable.
136
+ - Evidence: unit tests and MCP-level tests with mocked MQTT/FTPS boundaries and
137
+ loopback HTTP printer APIs cover every gate. One real P1S run (firmware
138
+ 01.08.05 or later, LAN Only Mode off) exercised the Bambu path: fresh MQTT
139
+ status and AMS reads, the nozzle-type gate correctly refusing a job sliced
140
+ for a stainless nozzle on a hardened-steel printer, human confirmation, and
141
+ the checked FTPS upload. The firmware then refused the start command (HMS
142
+ 0500-0500-0001-0007), so nothing printed; that finding produced the dispatch
143
+ check above, whose logic is unit-tested but not yet seen against the
144
+ firmware. No printer was heated. The other backends are verified against
145
+ mocked APIs only.
146
+
147
+ ### Slicing
148
+
149
+ - Resolve BambuStudio, OrcaSlicer, and FULU OrcaSlicer-bambulab CLI profiles
150
+ before slicing. The exact model/nozzle machine preset must exist in the
151
+ selected installation, `inherits` and `include` chains are flattened, and
152
+ the model's `cli_config.json` entry is validated. A raw inherited preset
153
+ such as P1S 0.4 is no longer passed to BambuStudio, which rejected it with
154
+ exit 239 ("process not compatible with printer").
155
+ - Stop before running the slicer on missing presets, wrong nozzle sizes,
156
+ missing parents or includes, cycles, malformed profiles, missing process
157
+ or filament files, and machine/process lists in `slicer_profile`.
158
+ - Report slicer failures with the exit code or signal, timeout state, and
159
+ stdout/stderr tails, plus slicer-specific suggestions instead of printer
160
+ connectivity advice.
161
+ - Give every STL edit and slice its own output folder, so concurrent requests
162
+ for same-named inputs cannot replace each other's result before it is used
163
+ or printed, and write prepared slicer profiles atomically.
164
+ - Extend bases under the model (Z-up) instead of along Y; `extend_stl_base`
165
+ and `process_and_print_stl` previously added the base to the model's side.
166
+ - Require a nonempty `Metadata/plate_<n>.gcode` in Bambu-compatible output.
167
+ A checksum-only archive, missing output, or stale file from an earlier run
168
+ is an error.
169
+ - Add `nozzle_type` (and `BAMBU_NOZZLE_TYPE`) so jobs can be sliced for the
170
+ installed nozzle. Bambu machine presets assume the stock nozzle (stainless
171
+ steel on P1S/P1P/A1), and the print gate compares the job with the
172
+ printer's report, so a P1S with a hardened-steel nozzle could never print a
173
+ CLI-sliced job.
174
+ - Keep OrcaSlicer's absolute-extrusion normalization when the machine preset
175
+ owns the layer-change G-code, so isolating machine settings cannot pair
176
+ absolute E with the machine's `G92 E0` resets.
177
+ - Drop machine settings carried by process or filament files, including
178
+ template 3MF project settings exported for another printer, so they
179
+ cannot replace the selected preset's start G-code.
180
+ - Add `bed_type`, `load_filaments`, `load_filament_ids`, `filament_colours`,
181
+ template selection, and the Bambu CLI placement and transform options to
182
+ `slice_stl`. Slicing accepts `p2s`, `h2s`, and `h2c` when the installed
183
+ slicer includes those presets. Generic OrcaSlicer keeps its
184
+ `machine;process|filament` path unless the call passes `bambu_model`.
185
+ - Add `slice_with_template`, `list_templates`, `save_template`, and
186
+ `get_slice_settings` for a local template registry (`BAMBU_TEMPLATE_DIR`).
187
+ - Add `BAMBU_PROFILES_ROOT`, `BAMBU_SLICER_PROFILE_DIRS`,
188
+ `BAMBU_TEMPLATE_DIR`, and `BAMBU_TEMPLATE_3MF_PATH` configuration.
189
+
190
+ ### Blender MCP
191
+
192
+ - Add `blender_mcp_export_stl`, which exports named objects from the live
193
+ Blender scene to a new, verified STL. It writes world-space evaluated
194
+ geometry without changing the scene, selection, or mode, checks the export
195
+ receipt and triangle count, never overwrites files, reports bounding-box
196
+ dimensions measured from the written file, supports `scale`, and warns when
197
+ geometry looks like it was modelled in metres. Blender MCP's own
198
+ `export_scene` writes GLB/FBX only, so edits made through
199
+ `execute_blender_code` previously had no verified path to a printable STL.
200
+ - Report measured bounding boxes for every verified STL, including
201
+ `blender_mcp_edit_model` results.
202
+ - `blender_mcp_status` lists tool names and summaries by default (about 8 KB
203
+ instead of 60 KB against mcp-for-blender 2.1.1) and returns full input
204
+ schemas through `tool_names` or `include_schemas`.
205
+ - Surface the Blender addon's own exception message when an export fails, and
206
+ point configuration errors at the renamed `mcp-for-blender` package and the
207
+ addon's GUI-only requirement.
208
+ - Add `scripts/blender-live-check.mjs`, an opt-in check against a real,
209
+ isolated factory-settings Blender. Verified with Blender 5.0.1 and
210
+ mcp-for-blender 2.1.1, together with an end-to-end phone-case refit
211
+ (import, measure, refit, fit check, export, and a real BambuStudio P1S
212
+ slice). No physical print was made.
213
+
214
+ ### Documentation
215
+
216
+ - Restructure the README around a copy-and-paste "Set up with your agent"
217
+ request and "What to ask your agent" examples, move manual configuration to
218
+ docs/SETUP.md, and add docs/SLICING.md, docs/FULU.md, docs/BLENDER.md, and
219
+ CONTRIBUTORS.md.
220
+ - Publish a generated documentation site to GitHub Pages
221
+ (https://dmontgomery40.github.io/mcp-3D-printer-server/).
222
+ - Make AGENTS.md the tracked source of truth for release, review, community
223
+ triage, safety, and Blender rules.
224
+
3
225
  ## 1.2.9
4
226
 
5
227
  - Address Bambu FTPS upload failures reported in #22 by using TLS 1.2 control
@@ -0,0 +1,56 @@
1
+ # Contributors
2
+
3
+ Thank you to everyone who builds, tests, reports problems, and shares real printer evidence. This project supports seven printer systems, and no one person owns all of that hardware, so your reports are how it improves.
4
+
5
+ ## Merged contributions
6
+
7
+ | Contributor | Contribution |
8
+ | --- | --- |
9
+ | [Adam (@adamkaplan)](https://github.com/adamkaplan) | Supplies H2C serial/status evidence in [fork #47](https://github.com/DMontgomery40/bambu-printer-mcp/issues/47) and exact Bambu Studio 02.08 startup/template reproductions in [fork #48](https://github.com/DMontgomery40/bambu-printer-mcp/issues/48), ported here with fresh identity and bounded file-inspection regressions. No maintainer physical H2C print is claimed. |
10
+ | [Izzy Mansurov (sapoepsilon)](https://github.com/sapoepsilon) | Implements P2S extruder-variant and airduct inspection in [fork #33](https://github.com/DMontgomery40/bambu-printer-mcp/pull/33). Original code authorship is retained in the port, alongside unsafe-file and selected-header regressions; hardware printing is not claimed. |
11
+ | [JaviOFC](https://github.com/JaviOFC) | Provides X2D firmware/status evidence in [fork #36](https://github.com/DMontgomery40/bambu-printer-mcp/issues/36) demonstrating that a cloud job identifier in model_id is not a printer declaration. The observed-identity correction and conflict regressions are ported here. |
12
+ | [Jack Manning (EastArctica)](https://github.com/EastArctica) | Sends `X-Api-Key` on every Klipper/Moonraker request, including uploads and remote-file downloads, in [#30](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/30). Supplies Klipper 0.13.0 evidence of authenticated status succeeding after the previous 401 response. |
13
+ | [nitpreet22](https://github.com/nitpreet22) | Adds A1/A1 mini `M109 H` wait compatibility and safety regressions in the Bambu fork's [#41](https://github.com/DMontgomery40/bambu-printer-mcp/pull/41), ported here with original code authorship. Shares Windows A1 slicing and file-inspection evidence; this is not physical-print verification. |
14
+ | [Javier Cortejoso (jcortejoso)](https://github.com/jcortejoso) | Reads the FULU bridge command from server configuration by default, with an explicit opt-in for per-call bridge commands, in [#20](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/20). [#21](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/21) extends the same gate to every per-call executable selector. |
15
+ | [Ewan Monro (heyitsmeez)](https://github.com/heyitsmeez) | Reports in [#17](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/17) that a top-level `anyOf` in the `upload_gcode` input schema made the Anthropic API reject every tool, and fixes it in [#18](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/18). |
16
+ | [David Gageot (dgageot)](https://github.com/dgageot) | Fixes the Docker build and hardens the image (non-root user, pinned base image, production dependencies only, build caching) in [#3](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/3). |
17
+ | [Frank Fiegel (punkpeye)](https://github.com/punkpeye) | Adds the [Glama MCP directory](https://glama.ai/mcp/servers/7f6v2enbgk) listing badge in [#1](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/1). |
18
+ | [Lawrence Sinclair (lwsinclair)](https://github.com/lwsinclair) | Adds the MseeP.ai security listing badge in [#5](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/5). |
19
+
20
+ ## Bug reports and printer evidence
21
+
22
+ | Contributor | Contribution |
23
+ | --- | --- |
24
+ | [Steavie](https://github.com/Steavie) | Reports reversed A1/A1 mini serial identity in the Bambu fork's [#39](https://github.com/DMontgomery40/bambu-printer-mcp/issues/39). This repository now uses the corrected prefixes for fresh safety identity, with mocked MQTT regressions. |
25
+ | [Travis Cashman (travismcashan)](https://github.com/travismcashan) | Reports MCP stdout pollution from model parsing and slicing in the Bambu fork's [#44](https://github.com/DMontgomery40/bambu-printer-mcp/issues/44). The stderr correction and subprocess regressions are also applied here. Their exact stock material-switch and runout-purge evidence informs the X2D file-inspection port; maintainer validation remains offline and mocked. |
26
+ | [Lickitysplitted](https://github.com/Lickitysplitted) | Diagnoses Bambu FTPS "Premature close" upload failures on an X1C as missing TLS session reuse in [#22](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/22). Release 1.2.9 addresses it; confirmation on that X1C firmware is still outstanding. |
27
+ | [CrowSoda](https://github.com/CrowSoda) | Tries slicing and printing on a Creality K1 Max through Klipper and Moonraker, and reports invalid OrcaSlicer CLI flags, missing filament-profile support, and unregistered upload and start tools in [#16](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/16). All three are fixed. |
28
+ | [dongio20](https://github.com/dongio20) | Reports the PrusaLink 0.8.1 status 404, with firmware details and the working endpoint, in [#11](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/11). Fixed in [#15](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/15). |
29
+ | [Remco Veldkamp (remcoder)](https://github.com/remcoder) | Reports that a large OctoPrint file list (324 files, about 500 KB of JSON) overflows a model's context window in [#4](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/4). The full list is still returned; this is documented as a limitation. |
30
+ | [Jose Martinez (josemartinezbli)](https://github.com/josemartinezbli) | Reports that `SLICER_PROFILE` was ambiguous for PrusaSlicer and OrcaSlicer, with slicer error output, in [#7](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/7). The slicing guide now documents profiles per slicer. |
31
+ | [Gioele Molinari (gioelemo)](https://github.com/gioelemo) | Shares a Prusa Connect configuration in [#9](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/9). The Prusa adapter now normalizes `connect.prusa3d.com` to HTTPS; cloud access has not been confirmed on hardware. |
32
+ | [BruceJin (BruceJqs)](https://github.com/BruceJqs) | Reports that a per-call `bridge_command` in `blender_mcp_edit_model` could launch an arbitrary local executable (CWE-78) in [#14](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/14). Per-call executable selectors now require the server-side `MCP_ALLOW_EXECUTABLE_ARG=1` opt-in ([#20](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/20), [#21](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/21)). |
33
+ | [0xBrandon (0x4272616E646F6E)](https://github.com/0x4272616E646F6E) | Asks for network (SSE) serving in [#6](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/6). The server now provides a streamable HTTP transport. |
34
+
35
+ ## Requests and proposals not yet merged
36
+
37
+ | Contributor | Contribution |
38
+ | --- | --- |
39
+ | [Raza Sharif (razashariff)](https://github.com/razashariff) | Proposes cryptographic signing, replay protection, and agent identity checks before print commands in [#13](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/13). Signing is not implemented; since 1.2.10, every print start and positive heating command requires human confirmation through MCP elicitation, and printed files are inspected before dispatch. |
40
+ | [DarkCraven (sweidinger)](https://github.com/sweidinger) | Requests Klipper print-job status (progress, file, times) beyond Moonraker's `/printer/info` in [#12](https://github.com/DMontgomery40/mcp-3D-printer-server/issues/12). Not yet implemented. |
41
+ | [Hex (hexatriene)](https://github.com/hexatriene) | Proposes migrating Bambu support to `bambu-js` v3 for H2D support and FTP operations in [#10](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/10). Closed without merging; the server keeps `bambu-node` for MQTT and uses `basic-ftp` directly for uploads. |
42
+ | [Jean-Laurent de Morlhon (jeanlaurent)](https://github.com/jeanlaurent) | Proposes Docker support in [#2](https://github.com/DMontgomery40/mcp-3D-printer-server/pull/2). Closed without merging; the repository's Docker setup was later fixed in #3. |
43
+
44
+ ## Project maintainer
45
+
46
+ - [David Montgomery (DMontgomery40)](https://github.com/DMontgomery40): project maintainer and Bambu Lab hardware testing.
47
+
48
+ See the [full contribution history](https://github.com/DMontgomery40/mcp-3D-printer-server/graphs/contributors) for commit authorship. Credit here includes bug reports, printer evidence, and reviewed proposals as well as merged code.
49
+
50
+ ## Dependency maintenance
51
+
52
+ Thanks to [Patrick Juchli](https://github.com/patrickjuchli) and the basic-ftp maintainers for [6.2.3](https://github.com/patrickjuchli/basic-ftp/releases/tag/v6.2.3), which fixes rejected-command crashes, client recovery, and password exposure in PASS errors. The compatible FTPS security update is validated in this release.
53
+
54
+ ## Open-source community and interoperability
55
+
56
+ Special thanks to the [FULU Foundation](https://www.fulu.org/), [Louis Rossmann](https://www.youtube.com/@rossmanngroup), and the [OrcaSlicer-bambulab contributors](https://github.com/FULU-Foundation/OrcaSlicer-bambulab) for their work supporting user control and interoperable tools. This is community recognition, separate from code authorship in this repository. The Bambu-only fork, [bambu-printer-mcp](https://github.com/DMontgomery40/bambu-printer-mcp), credits its own contributors in its [CONTRIBUTORS.md](https://github.com/DMontgomery40/bambu-printer-mcp/blob/main/CONTRIBUTORS.md).