mcp-3d-printer-server 1.2.15 → 1.2.17
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 +15 -0
- package/CONTRIBUTORS.md +5 -0
- package/README.md +2 -0
- package/dist/safety/print-file.js +15 -1
- package/package.json +3 -3
- package/server.json +2 -2
- package/src/safety/print-file.ts +12 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.17 — 2026-10-27
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- 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.
|
|
8
|
+
|
|
9
|
+
### Dependencies
|
|
10
|
+
|
|
11
|
+
- 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).
|
|
12
|
+
|
|
13
|
+
## 1.2.16 — 2026-10-26
|
|
14
|
+
|
|
15
|
+
### Documentation
|
|
16
|
+
- Show the documentation site's social card directly below the README title and link it to the site.
|
|
17
|
+
|
|
3
18
|
## 1.2.15 — 2026-10-26
|
|
4
19
|
|
|
5
20
|
### 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.
|
package/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# MCP 3D Printer Server
|
|
2
2
|
|
|
3
|
+
[](https://dmontgomery40.github.io/mcp-3D-printer-server/)
|
|
4
|
+
|
|
3
5
|
> **Thank you, [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).** Thank you for standing up for consumer ownership, open-source developers, repair rights, and owners whose working hardware should not be made worse by locked-down software.
|
|
4
6
|
>
|
|
5
7
|
> This server treats the FULU OrcaSlicer-bambulab fork as a first-class slicer for Bambu Lab projects. See the [FULU guide](https://github.com/DMontgomery40/mcp-3D-printer-server/blob/main/docs/FULU.md) for setup and current status.
|
|
@@ -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
|
-
|
|
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.
|
|
4
|
+
"version": "1.2.17",
|
|
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.
|
|
83
|
-
"axios": "^1.
|
|
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",
|
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.
|
|
10
|
+
"version": "1.2.17",
|
|
11
11
|
"packages": [
|
|
12
12
|
{
|
|
13
13
|
"registryType": "npm",
|
|
14
14
|
"identifier": "mcp-3d-printer-server",
|
|
15
|
-
"version": "1.2.
|
|
15
|
+
"version": "1.2.17",
|
|
16
16
|
"runtimeHint": "npx",
|
|
17
17
|
"transport": {
|
|
18
18
|
"type": "stdio"
|
package/src/safety/print-file.ts
CHANGED
|
@@ -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
|
-
|
|
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') {
|