mcp-3d-printer-server 1.2.16 → 1.2.18

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/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.2.18 — 2026-10-30
4
+
5
+ ### Changed
6
+
7
+ - Require Node.js 20 or newer. Node.js 18 reached end-of-life in April 2025, and the patched `@hono/node-server` relies on the global Web Crypto API that Node.js 18 does not expose by default, so streamable HTTP fails there. CI now tests Node.js 20, 22 and 24.
8
+
9
+ ### Dependencies
10
+
11
+ - Refresh the installation lock to `@hono/node-server` 2.1.5 for GHSA-rmxm-3fg6-px4f using `npm audit fix` without forcing dependency ranges. The MCP SDK already accepts this version. The updated dependency declares Node 20 or newer; no patched 1.x release is available. This lock controls reproducible installs, not existing consumers’ locks. Validation uses offline tests and mocked transports; no printer is contacted.
12
+
13
+ ## 1.2.17 — 2026-10-27
14
+
15
+ ### Fixed
16
+
17
+ - Accept the official OrcaSlicer `M620.17 T<nozzle> S<target> L-1` preheat for an unused nozzle on X2D, H2D and H2D Pro. Keep the target bounded by the hardware limit and every declared material, restrict the physical nozzle to 0 or 1, and do not invent a filament/AMS position. Ported from bambu-printer-mcp 1.1.38 following [ZombieLurker's H2D report](https://github.com/DMontgomery40/bambu-printer-mcp/issues/73). Reproduced and validated here with offline file-inspection regressions; no physical print was run.
18
+
19
+ ### Dependencies
20
+
21
+ - Update the MCP SDK to 1.32.2 and Axios to 1.21.0 within their supported major versions. Verify MCP startup and HTTP header/body handling alongside the adapter and package tests. Thank you to the [MCP TypeScript SDK contributors](https://github.com/modelcontextprotocol/typescript-sdk) and [Axios contributors](https://github.com/axios/axios/releases/tag/v1.21.0).
22
+
3
23
  ## 1.2.16 — 2026-10-26
4
24
 
5
25
  ### Documentation
package/CONTRIBUTORS.md CHANGED
@@ -21,6 +21,7 @@ Thank you to everyone who builds, tests, reports problems, and shares real print
21
21
 
22
22
  | Contributor | Contribution |
23
23
  | --- | --- |
24
+ | [ZombieLurker](https://github.com/ZombieLurker) | Supplies the exact OrcaSlicer 2.4.2 H2D startup commands and unused-nozzle diagnosis in [fork #73](https://github.com/DMontgomery40/bambu-printer-mcp/issues/73). The X2D/H2D/H2D Pro preheat correction is ported here with independent offline safety regressions; no physical printing is claimed. |
24
25
  | [MorganFreeeman](https://github.com/MorganFreeeman) | Reports in the Bambu fork's [#67](https://github.com/DMontgomery40/bambu-printer-mcp/issues/67) that every H2D print stopped on stock nozzles, with idle and mid-print H2D firmware 01.04.00.00 reports, and that a declined confirmation pointed to the wrong cause. The nozzle-information and confirmation-wording fixes are ported here with that report as a mocked-status regression; no H2D print is claimed. |
25
26
  | [Aaron Roberts (aaroberts)](https://github.com/aaroberts) | Diagnoses FULU's Linux host failures under Node.js in the Bambu fork's [#68](https://github.com/DMontgomery40/bambu-printer-mcp/issues/68), with the upstream issues ([FULU #50](https://github.com/FULU-Foundation/OrcaSlicer-bambulab/issues/50), [FULU #51](https://github.com/FULU-Foundation/OrcaSlicer-bambulab/issues/51)) and a working configuration. The Linux library paths, exit-101 explanation and `cat` wrapper are ported here and checked against FULU's real Linux host without contacting a printer. |
26
27
  | [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. |
@@ -58,3 +59,7 @@ Thanks to [Henk Kraal (hkraal)](https://github.com/hkraal) and the [MQTT.js main
58
59
  ## Open-source community and interoperability
59
60
 
60
61
  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).
62
+
63
+ ## Dependency maintenance
64
+
65
+ Thank you to the [MCP TypeScript SDK contributors](https://github.com/modelcontextprotocol/typescript-sdk/graphs/contributors) and [Axios contributors](https://github.com/axios/axios/graphs/contributors) for the compatible 1.32.2 and 1.21.0 releases validated in this project.
@@ -574,7 +574,21 @@ export async function inspectPrintFile(filePath, options) {
574
574
  for (const key of args.keys())
575
575
  if (!'SLT'.includes(key))
576
576
  fail(`unsupported M620.17 parameter ${key}`);
577
- heat('nozzle', args.get('S'), requirePosition(args.get('L')));
577
+ if (args.get('L') === -1 && ['x2d', 'h2d', 'h2dpro'].includes(model)) {
578
+ // OrcaSlicer's X2D/H2D/H2D Pro start G-code preheats a nozzle with no assigned
579
+ // filament (L-1) for toolhead-offset calibration; Bambu Studio writes
580
+ // L0 there. No project filament is selected, so check the target
581
+ // against the hardware limit and every declared material, like other
582
+ // heater commands without a verified filament. That is never looser
583
+ // than an accepted L<position> form. Material left in the nozzle from
584
+ // an earlier job is live state that no file can declare. T names one
585
+ // of the two physical nozzles, whatever the file declares.
586
+ if (args.get('T') > 1)
587
+ fail('unsupported M620.17 nozzle/material temperature mapping');
588
+ heat('nozzle', args.get('S'), undefined, true);
589
+ }
590
+ else
591
+ heat('nozzle', args.get('S'), requirePosition(args.get('L')));
578
592
  }
579
593
  else if ((/^M620\./.test(code) && !['M620.3', 'M620.6', 'M620.11'].includes(code)) || /^M621\./.test(code)) {
580
594
  fail(`unsupported thermal-affecting filament command ${code}`);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mcp-3d-printer-server",
3
3
  "mcpName": "io.github.DMontgomery40/mcp-3d-printer-server",
4
- "version": "1.2.16",
4
+ "version": "1.2.18",
5
5
  "description": "MCP server for connecting Claude with 3D printer management systems",
6
6
  "main": "dist/index.js",
7
7
  "repository": "https://github.com/DMontgomery40/mcp-3D-printer-server",
@@ -79,8 +79,8 @@
79
79
  "author": "David Montgomery",
80
80
  "license": "GPL-2.0",
81
81
  "dependencies": {
82
- "@modelcontextprotocol/sdk": "^1.32.1",
83
- "axios": "^1.20.0",
82
+ "@modelcontextprotocol/sdk": "^1.32.2",
83
+ "axios": "^1.21.0",
84
84
  "bambu-node": "3.22.21",
85
85
  "basic-ftp": "^6.2.3",
86
86
  "dotenv": "^16.6.1",
@@ -99,6 +99,6 @@
99
99
  "typescript": "~5.9.3"
100
100
  },
101
101
  "engines": {
102
- "node": ">=18"
102
+ "node": ">=20"
103
103
  }
104
104
  }
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "url": "https://github.com/DMontgomery40/mcp-3D-printer-server",
8
8
  "source": "github"
9
9
  },
10
- "version": "1.2.16",
10
+ "version": "1.2.18",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "mcp-3d-printer-server",
15
- "version": "1.2.16",
15
+ "version": "1.2.18",
16
16
  "runtimeHint": "npx",
17
17
  "transport": {
18
18
  "type": "stdio"
@@ -406,7 +406,18 @@ export async function inspectPrintFile(filePath: string, options: {model:string;
406
406
  const args=parameters(argumentsText);
407
407
  if(!args.has('S') || !args.has('L') || !args.has('T') || !Number.isInteger(args.get('T')) || args.get('T')!<0 || args.get('T')!>=nozzleDiameters.length) fail('unsupported M620.17 nozzle/material temperature mapping');
408
408
  for(const key of args.keys()) if(!'SLT'.includes(key)) fail(`unsupported M620.17 parameter ${key}`);
409
- heat('nozzle',args.get('S')!,requirePosition(args.get('L')!));
409
+ if(args.get('L')===-1 && ['x2d','h2d','h2dpro'].includes(model)) {
410
+ // OrcaSlicer's X2D/H2D/H2D Pro start G-code preheats a nozzle with no assigned
411
+ // filament (L-1) for toolhead-offset calibration; Bambu Studio writes
412
+ // L0 there. No project filament is selected, so check the target
413
+ // against the hardware limit and every declared material, like other
414
+ // heater commands without a verified filament. That is never looser
415
+ // than an accepted L<position> form. Material left in the nozzle from
416
+ // an earlier job is live state that no file can declare. T names one
417
+ // of the two physical nozzles, whatever the file declares.
418
+ if(args.get('T')!>1) fail('unsupported M620.17 nozzle/material temperature mapping');
419
+ heat('nozzle',args.get('S')!,undefined,true);
420
+ } else heat('nozzle',args.get('S')!,requirePosition(args.get('L')!));
410
421
  } else if((/^M620\./.test(code) && !['M620.3','M620.6','M620.11'].includes(code)) || /^M621\./.test(code)) {
411
422
  fail(`unsupported thermal-affecting filament command ${code}`);
412
423
  } else if(code==='M145') {