@renanlido/tia-openness-mcp 1.0.1 → 1.1.0

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 (2) hide show
  1. package/dist/index.js +26 -5
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -31539,6 +31539,14 @@ async function deviceCreateFlow(args) {
31539
31539
  summary: `criar device "${args.deviceName ?? args.deviceItemName ?? "?"}" (${args.typeIdentifier})`
31540
31540
  });
31541
31541
  }
31542
+ async function deviceChangeVersionFlow(args) {
31543
+ const bad = gd5Violation(args.typeIdentifier);
31544
+ if (bad) return guardError("Gd5", bad, { typeIdentifier: args.typeIdentifier });
31545
+ return mutate("POST", `/plcs/${seg2(args.plc)}/device/changeversion`, jsonBody2({ typeIdentifier: args.typeIdentifier, dryRun: args.dryRun }), {
31546
+ dryRun: args.dryRun,
31547
+ summary: `trocar firmware da CPU "${args.plc}" para ${args.typeIdentifier}`
31548
+ });
31549
+ }
31542
31550
  var dryRunField = {
31543
31551
  dryRun: external_exports.boolean().optional().describe("Gd11: plano-sem-aplicar \u2014 valida os guards e descreve a a\xE7\xE3o SEM mutar o projeto")
31544
31552
  };
@@ -31557,6 +31565,19 @@ function registerAuthoringTools(server2) {
31557
31565
  },
31558
31566
  async (args) => deviceCreateFlow(args)
31559
31567
  );
31568
+ server2.registerTool(
31569
+ "tia_device_change_version",
31570
+ {
31571
+ title: "TIA \u2014 trocar firmware da CPU (in-place)",
31572
+ description: "Troca a vers\xE3o de FIRMWARE da CPU IN-PLACE (wrap do DeviceItem.ChangeType), PRESERVANDO o programa \u2014 alternativa ao delete+recreate (habilita o 'auto-FW-match'). Guard Gd5: o typeIdentifier segue 'OrderNumber:<MLFB>/V<fw>' com '/V' (barra), nunca ':V' \u2014 resolva via tia_catalog. Regra: a vers\xE3o de firmware do PROJETO deve ser \u2264 a do DEVICE f\xEDsico (project FW \u2264 device FW). dryRun (Gd11) devolve o plano sem mutar. Mapeia POST /plcs/{plc}/device/changeversion. Classe M-off.",
31573
+ inputSchema: {
31574
+ plc: external_exports.string().describe("nome do CLP (CPU) cujo firmware ser\xE1 trocado"),
31575
+ typeIdentifier: external_exports.string().describe('OrderNumber:<MLFB>/V<fw> do firmware destino (Gd5; resolva via tia_catalog) \u2014 ex.: "OrderNumber:6ES7 214-1HG40-0XB0/V4.4"'),
31576
+ ...dryRunField
31577
+ }
31578
+ },
31579
+ async ({ plc, typeIdentifier, dryRun }) => deviceChangeVersionFlow({ plc, typeIdentifier, dryRun })
31580
+ );
31560
31581
  server2.registerTool(
31561
31582
  "tia_device_plug",
31562
31583
  {
@@ -31724,8 +31745,8 @@ function registerAuthoringTools(server2) {
31724
31745
  plc: external_exports.string().describe("nome do CLP"),
31725
31746
  name: external_exports.string().describe("nome do FB"),
31726
31747
  language: external_exports.string().optional().describe("linguagem (ex.: SCL, LAD, FBD; default do projeto)"),
31727
- autoNumber: external_exports.boolean().optional().describe("numera\xE7\xE3o autom\xE1tica (default true)"),
31728
- number: external_exports.number().int().optional().describe("n\xFAmero do bloco (se autoNumber=false)"),
31748
+ autoNumber: external_exports.boolean().optional().describe("numera\xE7\xE3o autom\xE1tica (default true; omita 'number' para auto)"),
31749
+ number: external_exports.number().int().optional().describe("n\xFAmero do bloco \u22651 (s\xF3 com autoNumber=false); omitido ou 0 \u21D2 numera\xE7\xE3o autom\xE1tica"),
31729
31750
  group: external_exports.string().optional().describe("grupo de blocos de destino"),
31730
31751
  ...dryRunField
31731
31752
  }
@@ -31741,8 +31762,8 @@ function registerAuthoringTools(server2) {
31741
31762
  plc: external_exports.string().describe("nome do CLP"),
31742
31763
  name: external_exports.string().describe("nome do DB de inst\xE2ncia"),
31743
31764
  instanceOf: external_exports.string().describe("nome do FB do qual instanciar"),
31744
- autoNumber: external_exports.boolean().optional().describe("numera\xE7\xE3o autom\xE1tica (default true)"),
31745
- number: external_exports.number().int().optional().describe("n\xFAmero do bloco (se autoNumber=false)"),
31765
+ autoNumber: external_exports.boolean().optional().describe("numera\xE7\xE3o autom\xE1tica (default true; omita 'number' para auto)"),
31766
+ number: external_exports.number().int().optional().describe("n\xFAmero do bloco \u22651 (s\xF3 com autoNumber=false); omitido ou 0 \u21D2 numera\xE7\xE3o autom\xE1tica"),
31746
31767
  group: external_exports.string().optional().describe("grupo de blocos de destino"),
31747
31768
  ...dryRunField
31748
31769
  }
@@ -32441,7 +32462,7 @@ function registerSpecTools(server2) {
32441
32462
  }
32442
32463
 
32443
32464
  // src/index.ts
32444
- var server = new McpServer({ name: "tia-openness", version: "1.0.1" });
32465
+ var server = new McpServer({ name: "tia-openness", version: "1.1.0" });
32445
32466
  server.registerTool(
32446
32467
  "tia_ping",
32447
32468
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@renanlido/tia-openness-mcp",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "MCP server (stdio) — thin HTTP client over the TIA Openness `serve` API. Zero Openness/net48 references.",
5
5
  "license": "MIT",
6
6
  "type": "module",