bambu-printer-mcp 1.1.23 → 1.1.24

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/CONTRIBUTORS.md CHANGED
@@ -6,6 +6,7 @@ Thank you to everyone who builds, tests, reports problems, and shares real print
6
6
 
7
7
  | Contributor | Contribution |
8
8
  | --- | --- |
9
+ | [nitpreet22](https://github.com/nitpreet22) | Fixes rejection of the stock A1/A1 mini `M109 H` startup waits in [#41](https://github.com/DMontgomery40/bambu-printer-mcp/pull/41), contributes temperature and model regressions, and supplies Windows Bambu Studio profile and real sliced A1 job inspection evidence. Their physical print used Bambu Studio, not this MCP change. |
9
10
  | [Steavie (steavie)](https://github.com/steavie) | Reports the reversed A1/A1 mini serial prefixes in [#39](https://github.com/DMontgomery40/bambu-printer-mcp/issues/39), with A1 status and configuration evidence that identifies the status and fresh-identity regression. |
10
11
  | [JaviOFC](https://github.com/JaviOFC) | Reports the X2D identity rejection in [#36](https://github.com/DMontgomery40/bambu-printer-mcp/issues/36) and supplies current firmware, connection-mode, status-field, serial-prefix, and cloud-job evidence showing that `model_id` can contain a print-job identifier while `model` correctly identifies the printer. |
11
12
  | [Izzy Mansurov (sapoepsilon)](https://github.com/sapoepsilon) | Fixes Bambu Studio 02.08 P2S extruder-variant metadata and airduct-command inspection in [#33](https://github.com/DMontgomery40/bambu-printer-mcp/pull/33). Supplies regression tests and offline inspection evidence from four real P2S 0.6 mm PLA/PETG jobs and unsafe mutated copies; this contribution does not claim a physical print. |
@@ -405,9 +405,15 @@ export async function inspectPrintFile(filePath, options) {
405
405
  }
406
406
  if (['M104', 'M109', 'M140', 'M190', 'M141', 'M191'].includes(code)) {
407
407
  const args = parameters(argumentsText, 'A');
408
+ // Official A1 and A1 mini start G-code waits with M109 S<target> H<limit>
409
+ // (S25 H140, S100 H170, S220 H300). H is not a heater target: S stays the
410
+ // checked target, so H is accepted only within those vendor bounds.
411
+ const vendorWait = code === 'M109' && ['a1', 'a1mini'].includes(model);
408
412
  for (const key of args.keys())
409
- if (!'SRTA'.includes(key))
413
+ if (!'SRTA'.includes(key) && !(key === 'H' && vendorWait))
410
414
  fail(`unsupported ${code} temperature parameter ${key}`);
415
+ if (args.has('H') && (!Number.isFinite(args.get('H')) || args.get('H') < 0 || args.get('H') > 300))
416
+ fail(`unsupported ${code} wait parameter H`);
411
417
  if (!args.has('S') && !args.has('R'))
412
418
  fail(`missing ${code} temperature target`);
413
419
  const component = ['M104', 'M109'].includes(code) ? 'nozzle' : ['M140', 'M190'].includes(code) ? 'bed' : 'chamber';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bambu-printer-mcp",
3
- "version": "1.1.23",
3
+ "version": "1.1.24",
4
4
  "description": "MCP server for Bambu Lab 3D printers with STL manipulation, slicing, and print management",
5
5
  "main": "dist/index.js",
6
6
  "repository": {
@@ -296,7 +296,12 @@ export async function inspectPrintFile(filePath: string, options: {model:string;
296
296
  }
297
297
  if(['M104','M109','M140','M190','M141','M191'].includes(code)) {
298
298
  const args=parameters(argumentsText,'A');
299
- for(const key of args.keys()) if(!'SRTA'.includes(key)) fail(`unsupported ${code} temperature parameter ${key}`);
299
+ // Official A1 and A1 mini start G-code waits with M109 S<target> H<limit>
300
+ // (S25 H140, S100 H170, S220 H300). H is not a heater target: S stays the
301
+ // checked target, so H is accepted only within those vendor bounds.
302
+ const vendorWait=code==='M109' && ['a1','a1mini'].includes(model);
303
+ for(const key of args.keys()) if(!'SRTA'.includes(key) && !(key==='H' && vendorWait)) fail(`unsupported ${code} temperature parameter ${key}`);
304
+ if(args.has('H') && (!Number.isFinite(args.get('H')) || args.get('H')!<0 || args.get('H')!>300)) fail(`unsupported ${code} wait parameter H`);
300
305
  if(!args.has('S')&&!args.has('R')) fail(`missing ${code} temperature target`);
301
306
  const component= ['M104','M109'].includes(code)?'nozzle': ['M140','M190'].includes(code)?'bed':'chamber';
302
307
  // Heater T is a physical nozzle, unlike standalone remapped T filament selection.