Skip to main content
Glama
Svel26

Sigmatek LASAL MCP Server

by Svel26

visu_project

Destructive

Run VISUDesigner engine operations for LASAL HMI projects: update stations, publish, manage text lists/schemes/media/code modules, set datapoint properties, and download to HMI.

Instructions

Run VISUDesigner engine operations: update stations, publish, manage text lists/schemes/media/code modules, set datapoint properties, or download to HMI. These need the VISUDesigner engine — for direct dashboard JSON editing, edit the files in the project directly.

Input Schema

NameRequiredDescriptionDefault
flagsNoDownload mode: 0=normal (default), 1=changes only, 2=publish+download changes (download only).
actionYes'apply_changes' loads the project, runs operations, saves, and closes. 'download' pushes the project to an HMI without saving content changes.
lvp_pathNoFull path to the .lvp project file. Omit to auto-detect from the selected project.
connectionNoHMI connection string, e.g. 'TCPIP:192.168.1.100' (download only).
operationsNoOrdered list of VISUDesigner operations (apply_changes only). Each has a 'type' field. Available types: update_all_stations | update_station | publish | add_text_lists | remove_text_lists | add_texts | remove_texts | change_texts | change_component_texts | set_text_list_revisions | set_component_text_list_revisions | csv_export_text_lists | csv_import_text_lists | csv_export_component_text_lists | csv_import_component_text_lists | set_datapoint_properties | set_datatype_properties | add_schemes | remove_schemes | add_scheme_entries | remove_scheme_entries | move_scheme_entries | set_scheme_inputs | set_scheme_properties | set_scheme_entry_properties | add_media_items | remove_media_items | add_code_modules | remove_code_modules | update_property_values | update_runtime | delete_station | station_details | import_project | add_languages | remove_languages | set_language_properties | add_alarms | remove_alarms | set_alarm_properties | set_alarm_servers_or_groups | set_alarm_revisions | download
add_runtimeNoForce runtime download even if version already matches (download only).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.3.2
    • changedInput schema / properties / operations / description
      Previous value: -"Ordered list of VISUDesigner operations (apply_changes only). Each has a 'type' field. Available types: update_all_stations | update_station | publish | add_text_lists | remove_text_lists | add_texts | remove_texts | change_texts | change_component_texts | set_text_list_revisions | set_component_text_list_revisions | csv_export_text_lists | csv_import_text_lists | csv_export_component_text_lists | csv_import_component_text_lists | set_datapoint_properties | set_datatype_properties | add_schemes | remove_schemes | add_scheme_entries | remove_scheme_entries | move_scheme_entries | set_scheme_inputs | set_scheme_properties | set_scheme_entry_properties | add_media_items | remove_media_items | add_code_modules | remove_code_modules | update_property_values | download"New value: +"Ordered list of VISUDesigner operations (apply_changes only). Each has a 'type' field. Available types: update_all_stations | update_station | publish | add_text_lists | remove_text_lists | add_texts | remove_texts | change_texts | change_component_texts | set_text_list_revisions | set_component_text_list_revisions | csv_export_text_lists | csv_import_text_lists | csv_export_component_text_lists | csv_import_component_text_lists | set_datapoint_properties | set_datatype_properties | add_schemes | remove_schemes | add_scheme_entries | remove_scheme_entries | move_scheme_entries | set_scheme_inputs | set_scheme_properties | set_scheme_entry_properties | add_media_items | remove_media_items | add_code_modules | remove_code_modules | update_property_values | update_runtime | delete_station | station_details | import_project | add_languages | remove_languages | set_language_properties | add_alarms | remove_alarms | set_alarm_properties | set_alarm_servers_or_groups | set_alarm_revisions | download"
    • changedInput schema / properties / operations / items / oneOf
      Previous value: -[
      -  {
      -    "properties": {
      -      "type": {
      -        "const": "update_all_stations",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "station_nr": {
      -        "description": "Station number to update (as defined in the VISUDesigner project)",
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "update_station",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "station_nr"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "debug": {
      -        "default": false,
      -        "description": "Publish with additional debug information. Requires TypeScript support to be enabled in the project.",
      -        "type": "boolean"
      -      },
      -      "type": {
      -        "const": "publish",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "text_lists": {
      -        "description": "Text lists to add (optionally with texts and revisions)",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Text list name",
      -              "type": "string"
      -            },
      -            "revision": {
      -              "description": "Revision string, e.g. '1.0'",
      -              "type": "string"
      -            },
      -            "texts": {
      -              "description": "Text entries with translations per language",
      -              "items": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "add_text_lists",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text_lists"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "names": {
      -        "description": "Names of text lists to remove",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "remove_text_lists",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "names"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "text_lists": {
      -        "description": "Text lists with texts to add",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Text list name",
      -              "type": "string"
      -            },
      -            "revision": {
      -              "description": "Revision string, e.g. '1.0'",
      -              "type": "string"
      -            },
      -            "texts": {
      -              "description": "Text entries with translations per language",
      -              "items": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "add_texts",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text_lists"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "text_lists": {
      -        "description": "Text lists with text IDs to remove",
      -        "items": {
      -          "properties": {
      -            "ids": {
      -              "description": "IDs of texts to remove",
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "name": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "name",
      -            "ids"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "remove_texts",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text_lists"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "text_lists": {
      -        "description": "Text lists with updated text values",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Text list name",
      -              "type": "string"
      -            },
      -            "revision": {
      -              "description": "Revision string, e.g. '1.0'",
      -              "type": "string"
      -            },
      -            "texts": {
      -              "description": "Text entries with translations per language",
      -              "items": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "change_texts",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text_lists"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "text_lists": {
      -        "description": "Component text lists with updated text values",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Text list name",
      -              "type": "string"
      -            },
      -            "revision": {
      -              "description": "Revision string, e.g. '1.0'",
      -              "type": "string"
      -            },
      -            "texts": {
      -              "description": "Text entries with translations per language",
      -              "items": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "change_component_texts",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text_lists"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "text_lists": {
      -        "description": "Text lists with their revision strings to set (use the 'revision' field)",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Text list name",
      -              "type": "string"
      -            },
      -            "revision": {
      -              "description": "Revision string, e.g. '1.0'",
      -              "type": "string"
      -            },
      -            "texts": {
      -              "description": "Text entries with translations per language",
      -              "items": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "set_text_list_revisions",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text_lists"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "text_lists": {
      -        "description": "Component text lists with their revision strings to set (use the 'revision' field)",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "description": "Text list name",
      -              "type": "string"
      -            },
      -            "revision": {
      -              "description": "Revision string, e.g. '1.0'",
      -              "type": "string"
      -            },
      -            "texts": {
      -              "description": "Text entries with translations per language",
      -              "items": {
      -                "additionalProperties": {
      -                  "type": "string"
      -                },
      -                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      -                "propertyNames": {
      -                  "type": "string"
      -                },
      -                "type": "object"
      -              },
      -              "type": "array"
      -            }
      -          },
      -          "required": [
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "set_component_text_list_revisions",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text_lists"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "csv_path": {
      -        "description": "Destination CSV file path",
      -        "type": "string"
      -      },
      -      "languages": {
      -        "description": "Subset of language codes to export (omit for all)",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "text_lists": {
      -        "description": "Subset of text list names to export (omit for all)",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "csv_export_text_lists",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "csv_path"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "file_paths": {
      -        "description": "CSV file paths to import from",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "languages": {
      -        "description": "Subset of language codes to import (omit for all)",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "text_lists": {
      -        "description": "Subset of text list names to import (omit for all)",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "csv_import_text_lists",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "file_paths"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "csv_path": {
      -        "description": "Destination CSV file path",
      -        "type": "string"
      -      },
      -      "languages": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "text_lists": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "csv_export_component_text_lists",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "csv_path"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "file_paths": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "languages": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "text_lists": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "csv_import_component_text_lists",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "file_paths"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "properties": {
      -        "description": "List of property sets. Use property constants: AliasName, RefreshTime (High/Medium/Low/Standard), WriteProtected, AccessNumber, LimitLow, LimitHigh, Unit, Keyboard, EnumValue, InitValue, etc.",
      -        "items": {
      -          "properties": {
      -            "element": {
      -              "description": "Datapoint / datatype / scheme name",
      -              "type": "string"
      -            },
      -            "property": {
      -              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      -              "type": [
      -                "string",
      -                "number",
      -                "boolean",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "element",
      -            "property",
      -            "value"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "set_datapoint_properties",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "properties"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "properties": {
      -        "items": {
      -          "properties": {
      -            "element": {
      -              "description": "Datapoint / datatype / scheme name",
      -              "type": "string"
      -            },
      -            "property": {
      -              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      -              "type": [
      -                "string",
      -                "number",
      -                "boolean",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "element",
      -            "property",
      -            "value"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "set_datatype_properties",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "properties"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "schemes": {
      -        "description": "Schemes to add. Entries and input can be specified to set them simultaneously.",
      -        "items": {
      -          "properties": {
      -            "entries": {
      -              "description": "Scheme entries",
      -              "items": {
      -                "properties": {
      -                  "new_position": {
      -                    "description": "Target position for move operations",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "position": {
      -                    "description": "0-based position in the scheme",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "property": {
      -                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "description": "Value to set for the property",
      -                    "type": [
      -                      "string",
      -                      "number",
      -                      "boolean",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "position"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "input": {
      -              "description": "Input datapoint name for the scheme",
      -              "type": "string"
      -            },
      -            "moves": {
      -              "description": "Move operations (for move_scheme_entries)",
      -              "items": {
      -                "properties": {
      -                  "from": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "to": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  }
      -                },
      -                "required": [
      -                  "from",
      -                  "to"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "name": {
      -              "description": "Scheme name",
      -              "type": "string"
      -            },
      -            "positions": {
      -              "description": "Entry positions (for remove_scheme_entries)",
      -              "items": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "type": "array"
      -            },
      -            "scheme_type": {
      -              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scheme_type",
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "add_schemes",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "schemes"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "schemes": {
      -        "description": "Schemes to remove",
      -        "items": {
      -          "properties": {
      -            "name": {
      -              "type": "string"
      -            },
      -            "scheme_type": {
      -              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scheme_type",
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "remove_schemes",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "schemes"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "schemes": {
      -        "description": "Schemes with entries to add. Position determines insertion point; entries beyond max are appended.",
      -        "items": {
      -          "properties": {
      -            "entries": {
      -              "description": "Scheme entries",
      -              "items": {
      -                "properties": {
      -                  "new_position": {
      -                    "description": "Target position for move operations",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "position": {
      -                    "description": "0-based position in the scheme",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "property": {
      -                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "description": "Value to set for the property",
      -                    "type": [
      -                      "string",
      -                      "number",
      -                      "boolean",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "position"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "input": {
      -              "description": "Input datapoint name for the scheme",
      -              "type": "string"
      -            },
      -            "moves": {
      -              "description": "Move operations (for move_scheme_entries)",
      -              "items": {
      -                "properties": {
      -                  "from": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "to": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  }
      -                },
      -                "required": [
      -                  "from",
      -                  "to"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "name": {
      -              "description": "Scheme name",
      -              "type": "string"
      -            },
      -            "positions": {
      -              "description": "Entry positions (for remove_scheme_entries)",
      -              "items": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "type": "array"
      -            },
      -            "scheme_type": {
      -              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scheme_type",
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "add_scheme_entries",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "schemes"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "schemes": {
      -        "description": "Schemes with positions to remove. Use 'positions' or 'entries[].position'.",
      -        "items": {
      -          "properties": {
      -            "entries": {
      -              "description": "Scheme entries",
      -              "items": {
      -                "properties": {
      -                  "new_position": {
      -                    "description": "Target position for move operations",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "position": {
      -                    "description": "0-based position in the scheme",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "property": {
      -                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "description": "Value to set for the property",
      -                    "type": [
      -                      "string",
      -                      "number",
      -                      "boolean",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "position"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "input": {
      -              "description": "Input datapoint name for the scheme",
      -              "type": "string"
      -            },
      -            "moves": {
      -              "description": "Move operations (for move_scheme_entries)",
      -              "items": {
      -                "properties": {
      -                  "from": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "to": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  }
      -                },
      -                "required": [
      -                  "from",
      -                  "to"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "name": {
      -              "description": "Scheme name",
      -              "type": "string"
      -            },
      -            "positions": {
      -              "description": "Entry positions (for remove_scheme_entries)",
      -              "items": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "type": "array"
      -            },
      -            "scheme_type": {
      -              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scheme_type",
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "remove_scheme_entries",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "schemes"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "schemes": {
      -        "description": "Schemes with move operations. Use 'moves': [{from: N, to: M}, ...]",
      -        "items": {
      -          "properties": {
      -            "entries": {
      -              "description": "Scheme entries",
      -              "items": {
      -                "properties": {
      -                  "new_position": {
      -                    "description": "Target position for move operations",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "position": {
      -                    "description": "0-based position in the scheme",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "property": {
      -                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "description": "Value to set for the property",
      -                    "type": [
      -                      "string",
      -                      "number",
      -                      "boolean",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "position"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "input": {
      -              "description": "Input datapoint name for the scheme",
      -              "type": "string"
      -            },
      -            "moves": {
      -              "description": "Move operations (for move_scheme_entries)",
      -              "items": {
      -                "properties": {
      -                  "from": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "to": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  }
      -                },
      -                "required": [
      -                  "from",
      -                  "to"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "name": {
      -              "description": "Scheme name",
      -              "type": "string"
      -            },
      -            "positions": {
      -              "description": "Entry positions (for remove_scheme_entries)",
      -              "items": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "type": "array"
      -            },
      -            "scheme_type": {
      -              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scheme_type",
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "move_scheme_entries",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "schemes"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "schemes": {
      -        "description": "Schemes with the 'input' field set to the datapoint name to use as input",
      -        "items": {
      -          "properties": {
      -            "entries": {
      -              "description": "Scheme entries",
      -              "items": {
      -                "properties": {
      -                  "new_position": {
      -                    "description": "Target position for move operations",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "position": {
      -                    "description": "0-based position in the scheme",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "property": {
      -                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "description": "Value to set for the property",
      -                    "type": [
      -                      "string",
      -                      "number",
      -                      "boolean",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "position"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "input": {
      -              "description": "Input datapoint name for the scheme",
      -              "type": "string"
      -            },
      -            "moves": {
      -              "description": "Move operations (for move_scheme_entries)",
      -              "items": {
      -                "properties": {
      -                  "from": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "to": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  }
      -                },
      -                "required": [
      -                  "from",
      -                  "to"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "name": {
      -              "description": "Scheme name",
      -              "type": "string"
      -            },
      -            "positions": {
      -              "description": "Entry positions (for remove_scheme_entries)",
      -              "items": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "type": "array"
      -            },
      -            "scheme_type": {
      -              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scheme_type",
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "set_scheme_inputs",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "schemes"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "properties": {
      -        "description": "PropertySets where 'element' is the scheme name. Available properties: Revision, LockOverloadCompareValue, LockOverloadSetValue",
      -        "items": {
      -          "properties": {
      -            "element": {
      -              "description": "Datapoint / datatype / scheme name",
      -              "type": "string"
      -            },
      -            "property": {
      -              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      -              "type": "string"
      -            },
      -            "value": {
      -              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      -              "type": [
      -                "string",
      -                "number",
      -                "boolean",
      -                "null"
      -              ]
      -            }
      -          },
      -          "required": [
      -            "element",
      -            "property",
      -            "value"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "scheme_type": {
      -        "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "set_scheme_properties",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "scheme_type",
      -      "properties"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "schemes": {
      -        "description": "Schemes with entries where each entry specifies position + property + value to set. Entry properties: Operator (<,<=,=,>=,>,<>), CompareValue, SetValue. For StateScheme SetValue: None, Active, Inactive, Invisible.",
      -        "items": {
      -          "properties": {
      -            "entries": {
      -              "description": "Scheme entries",
      -              "items": {
      -                "properties": {
      -                  "new_position": {
      -                    "description": "Target position for move operations",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "position": {
      -                    "description": "0-based position in the scheme",
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "property": {
      -                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      -                    "type": "string"
      -                  },
      -                  "value": {
      -                    "description": "Value to set for the property",
      -                    "type": [
      -                      "string",
      -                      "number",
      -                      "boolean",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "required": [
      -                  "position"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "input": {
      -              "description": "Input datapoint name for the scheme",
      -              "type": "string"
      -            },
      -            "moves": {
      -              "description": "Move operations (for move_scheme_entries)",
      -              "items": {
      -                "properties": {
      -                  "from": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  },
      -                  "to": {
      -                    "maximum": 9007199254740991,
      -                    "minimum": -9007199254740991,
      -                    "type": "integer"
      -                  }
      -                },
      -                "required": [
      -                  "from",
      -                  "to"
      -                ],
      -                "type": "object"
      -              },
      -              "type": "array"
      -            },
      -            "name": {
      -              "description": "Scheme name",
      -              "type": "string"
      -            },
      -            "positions": {
      -              "description": "Entry positions (for remove_scheme_entries)",
      -              "items": {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              "type": "array"
      -            },
      -            "scheme_type": {
      -              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "scheme_type",
      -            "name"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "set_scheme_entry_properties",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "schemes"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "items": {
      -        "description": "Media items to add. Each needs media_type and path (full file path).",
      -        "items": {
      -          "properties": {
      -            "media_type": {
      -              "description": "Media type: 'Image', 'Video', 'Audio', 'Docs', 'Fonts', 'KeyboardLayouts', 'Other'",
      -              "type": "string"
      -            },
      -            "name": {
      -              "description": "File name including extension (for remove operations)",
      -              "type": "string"
      -            },
      -            "path": {
      -              "description": "Full file path (for add operations)",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "media_type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "overwrite": {
      -        "default": false,
      -        "description": "Overwrite existing items with the same name",
      -        "type": "boolean"
      -      },
      -      "type": {
      -        "const": "add_media_items",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "items"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "items": {
      -        "description": "Media items to remove. Each needs media_type and name (filename + extension).",
      -        "items": {
      -          "properties": {
      -            "media_type": {
      -              "description": "Media type: 'Image', 'Video', 'Audio', 'Docs', 'Fonts', 'KeyboardLayouts', 'Other'",
      -              "type": "string"
      -            },
      -            "name": {
      -              "description": "File name including extension (for remove operations)",
      -              "type": "string"
      -            },
      -            "path": {
      -              "description": "Full file path (for add operations)",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "media_type"
      -          ],
      -          "type": "object"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "remove_media_items",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "items"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "paths": {
      -        "description": "Full paths to code module files (.js or .ts) to add",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "add_code_modules",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "paths"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "names": {
      -        "description": "File names (with extension) of code modules to remove",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "type": {
      -        "const": "remove_code_modules",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "names"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "type": {
      -        "const": "update_property_values",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "properties": {
      -      "add_runtime": {
      -        "default": false,
      -        "description": "Force runtime download even if version matches",
      -        "type": "boolean"
      -      },
      -      "connection": {
      -        "description": "Connection string, e.g. 'TCPIP:192.168.1.100' or 'TCPIP:myhmi.local'. Use the 'TCPIP:' prefix for IP/DNS targets.",
      -        "type": "string"
      -      },
      -      "flags": {
      -        "default": 0,
      -        "description": "Download mode: 0=normal (default), 1=changes only, 2=publish+download changes",
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "download",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "connection"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "type": {
      +        "const": "update_all_stations",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "station_nr": {
      +        "description": "Station number to update (as defined in the VISUDesigner project)",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "update_station",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "station_nr"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "debug": {
      +        "default": false,
      +        "description": "Publish with additional debug information. Requires TypeScript support to be enabled in the project.",
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "const": "publish",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "text_lists": {
      +        "description": "Text lists to add (optionally with texts and revisions)",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Text list name",
      +              "type": "string"
      +            },
      +            "revision": {
      +              "description": "Revision string, e.g. '1.0'",
      +              "type": "string"
      +            },
      +            "texts": {
      +              "description": "Text entries with translations per language",
      +              "items": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "add_text_lists",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text_lists"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "names": {
      +        "description": "Names of text lists to remove",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_text_lists",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "names"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "text_lists": {
      +        "description": "Text lists with texts to add",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Text list name",
      +              "type": "string"
      +            },
      +            "revision": {
      +              "description": "Revision string, e.g. '1.0'",
      +              "type": "string"
      +            },
      +            "texts": {
      +              "description": "Text entries with translations per language",
      +              "items": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "add_texts",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text_lists"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "text_lists": {
      +        "description": "Text lists with text IDs to remove",
      +        "items": {
      +          "properties": {
      +            "ids": {
      +              "description": "IDs of texts to remove",
      +              "items": {
      +                "type": "string"
      +              },
      +              "type": "array"
      +            },
      +            "name": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "ids"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_texts",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text_lists"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "text_lists": {
      +        "description": "Text lists with updated text values",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Text list name",
      +              "type": "string"
      +            },
      +            "revision": {
      +              "description": "Revision string, e.g. '1.0'",
      +              "type": "string"
      +            },
      +            "texts": {
      +              "description": "Text entries with translations per language",
      +              "items": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "change_texts",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text_lists"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "text_lists": {
      +        "description": "Component text lists with updated text values",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Text list name",
      +              "type": "string"
      +            },
      +            "revision": {
      +              "description": "Revision string, e.g. '1.0'",
      +              "type": "string"
      +            },
      +            "texts": {
      +              "description": "Text entries with translations per language",
      +              "items": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "change_component_texts",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text_lists"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "text_lists": {
      +        "description": "Text lists with their revision strings to set (use the 'revision' field)",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Text list name",
      +              "type": "string"
      +            },
      +            "revision": {
      +              "description": "Revision string, e.g. '1.0'",
      +              "type": "string"
      +            },
      +            "texts": {
      +              "description": "Text entries with translations per language",
      +              "items": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_text_list_revisions",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text_lists"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "text_lists": {
      +        "description": "Component text lists with their revision strings to set (use the 'revision' field)",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Text list name",
      +              "type": "string"
      +            },
      +            "revision": {
      +              "description": "Revision string, e.g. '1.0'",
      +              "type": "string"
      +            },
      +            "texts": {
      +              "description": "Text entries with translations per language",
      +              "items": {
      +                "additionalProperties": {
      +                  "type": "string"
      +                },
      +                "description": "Text entry: { \"id\": \"KEY\", \"De\": \"German text\", \"En\": \"English text\", ... }",
      +                "propertyNames": {
      +                  "type": "string"
      +                },
      +                "type": "object"
      +              },
      +              "type": "array"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_component_text_list_revisions",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text_lists"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "csv_path": {
      +        "description": "Destination CSV file path",
      +        "type": "string"
      +      },
      +      "languages": {
      +        "description": "Subset of language codes to export (omit for all)",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "text_lists": {
      +        "description": "Subset of text list names to export (omit for all)",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "csv_export_text_lists",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "csv_path"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "file_paths": {
      +        "description": "CSV file paths to import from",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "languages": {
      +        "description": "Subset of language codes to import (omit for all)",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "text_lists": {
      +        "description": "Subset of text list names to import (omit for all)",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "csv_import_text_lists",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "file_paths"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "csv_path": {
      +        "description": "Destination CSV file path",
      +        "type": "string"
      +      },
      +      "languages": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "text_lists": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "csv_export_component_text_lists",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "csv_path"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "file_paths": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "languages": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "text_lists": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "csv_import_component_text_lists",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "file_paths"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "properties": {
      +        "description": "List of property sets. Use property constants: AliasName, RefreshTime (High/Medium/Low/Standard), WriteProtected, AccessNumber, LimitLow, LimitHigh, Unit, Keyboard, EnumValue, InitValue, etc.",
      +        "items": {
      +          "properties": {
      +            "element": {
      +              "description": "Datapoint / datatype / scheme name",
      +              "type": "string"
      +            },
      +            "property": {
      +              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      +              "type": [
      +                "string",
      +                "number",
      +                "boolean",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "element",
      +            "property",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_datapoint_properties",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "properties"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "properties": {
      +        "items": {
      +          "properties": {
      +            "element": {
      +              "description": "Datapoint / datatype / scheme name",
      +              "type": "string"
      +            },
      +            "property": {
      +              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      +              "type": [
      +                "string",
      +                "number",
      +                "boolean",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "element",
      +            "property",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_datatype_properties",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "properties"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "schemes": {
      +        "description": "Schemes to add. Entries and input can be specified to set them simultaneously.",
      +        "items": {
      +          "properties": {
      +            "entries": {
      +              "description": "Scheme entries",
      +              "items": {
      +                "properties": {
      +                  "new_position": {
      +                    "description": "Target position for move operations",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "position": {
      +                    "description": "0-based position in the scheme",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "property": {
      +                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "description": "Value to set for the property",
      +                    "type": [
      +                      "string",
      +                      "number",
      +                      "boolean",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "position"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "input": {
      +              "description": "Input datapoint name for the scheme",
      +              "type": "string"
      +            },
      +            "moves": {
      +              "description": "Move operations (for move_scheme_entries)",
      +              "items": {
      +                "properties": {
      +                  "from": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "to": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "name": {
      +              "description": "Scheme name",
      +              "type": "string"
      +            },
      +            "positions": {
      +              "description": "Entry positions (for remove_scheme_entries)",
      +              "items": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            "scheme_type": {
      +              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scheme_type",
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "add_schemes",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "schemes"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "schemes": {
      +        "description": "Schemes to remove",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "type": "string"
      +            },
      +            "scheme_type": {
      +              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scheme_type",
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_schemes",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "schemes"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "schemes": {
      +        "description": "Schemes with entries to add. Position determines insertion point; entries beyond max are appended.",
      +        "items": {
      +          "properties": {
      +            "entries": {
      +              "description": "Scheme entries",
      +              "items": {
      +                "properties": {
      +                  "new_position": {
      +                    "description": "Target position for move operations",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "position": {
      +                    "description": "0-based position in the scheme",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "property": {
      +                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "description": "Value to set for the property",
      +                    "type": [
      +                      "string",
      +                      "number",
      +                      "boolean",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "position"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "input": {
      +              "description": "Input datapoint name for the scheme",
      +              "type": "string"
      +            },
      +            "moves": {
      +              "description": "Move operations (for move_scheme_entries)",
      +              "items": {
      +                "properties": {
      +                  "from": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "to": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "name": {
      +              "description": "Scheme name",
      +              "type": "string"
      +            },
      +            "positions": {
      +              "description": "Entry positions (for remove_scheme_entries)",
      +              "items": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            "scheme_type": {
      +              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scheme_type",
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "add_scheme_entries",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "schemes"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "schemes": {
      +        "description": "Schemes with positions to remove. Use 'positions' or 'entries[].position'.",
      +        "items": {
      +          "properties": {
      +            "entries": {
      +              "description": "Scheme entries",
      +              "items": {
      +                "properties": {
      +                  "new_position": {
      +                    "description": "Target position for move operations",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "position": {
      +                    "description": "0-based position in the scheme",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "property": {
      +                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "description": "Value to set for the property",
      +                    "type": [
      +                      "string",
      +                      "number",
      +                      "boolean",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "position"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "input": {
      +              "description": "Input datapoint name for the scheme",
      +              "type": "string"
      +            },
      +            "moves": {
      +              "description": "Move operations (for move_scheme_entries)",
      +              "items": {
      +                "properties": {
      +                  "from": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "to": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "name": {
      +              "description": "Scheme name",
      +              "type": "string"
      +            },
      +            "positions": {
      +              "description": "Entry positions (for remove_scheme_entries)",
      +              "items": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            "scheme_type": {
      +              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scheme_type",
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_scheme_entries",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "schemes"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "schemes": {
      +        "description": "Schemes with move operations. Use 'moves': [{from: N, to: M}, ...]",
      +        "items": {
      +          "properties": {
      +            "entries": {
      +              "description": "Scheme entries",
      +              "items": {
      +                "properties": {
      +                  "new_position": {
      +                    "description": "Target position for move operations",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "position": {
      +                    "description": "0-based position in the scheme",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "property": {
      +                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "description": "Value to set for the property",
      +                    "type": [
      +                      "string",
      +                      "number",
      +                      "boolean",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "position"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "input": {
      +              "description": "Input datapoint name for the scheme",
      +              "type": "string"
      +            },
      +            "moves": {
      +              "description": "Move operations (for move_scheme_entries)",
      +              "items": {
      +                "properties": {
      +                  "from": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "to": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "name": {
      +              "description": "Scheme name",
      +              "type": "string"
      +            },
      +            "positions": {
      +              "description": "Entry positions (for remove_scheme_entries)",
      +              "items": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            "scheme_type": {
      +              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scheme_type",
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "move_scheme_entries",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "schemes"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "schemes": {
      +        "description": "Schemes with the 'input' field set to the datapoint name to use as input",
      +        "items": {
      +          "properties": {
      +            "entries": {
      +              "description": "Scheme entries",
      +              "items": {
      +                "properties": {
      +                  "new_position": {
      +                    "description": "Target position for move operations",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "position": {
      +                    "description": "0-based position in the scheme",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "property": {
      +                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "description": "Value to set for the property",
      +                    "type": [
      +                      "string",
      +                      "number",
      +                      "boolean",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "position"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "input": {
      +              "description": "Input datapoint name for the scheme",
      +              "type": "string"
      +            },
      +            "moves": {
      +              "description": "Move operations (for move_scheme_entries)",
      +              "items": {
      +                "properties": {
      +                  "from": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "to": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "name": {
      +              "description": "Scheme name",
      +              "type": "string"
      +            },
      +            "positions": {
      +              "description": "Entry positions (for remove_scheme_entries)",
      +              "items": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            "scheme_type": {
      +              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scheme_type",
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_scheme_inputs",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "schemes"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "properties": {
      +        "description": "PropertySets where 'element' is the scheme name. Available properties: Revision, LockOverloadCompareValue, LockOverloadSetValue",
      +        "items": {
      +          "properties": {
      +            "element": {
      +              "description": "Datapoint / datatype / scheme name",
      +              "type": "string"
      +            },
      +            "property": {
      +              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      +              "type": [
      +                "string",
      +                "number",
      +                "boolean",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "element",
      +            "property",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "scheme_type": {
      +        "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "set_scheme_properties",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "scheme_type",
      +      "properties"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "schemes": {
      +        "description": "Schemes with entries where each entry specifies position + property + value to set. Entry properties: Operator (<,<=,=,>=,>,<>), CompareValue, SetValue. For StateScheme SetValue: None, Active, Inactive, Invisible.",
      +        "items": {
      +          "properties": {
      +            "entries": {
      +              "description": "Scheme entries",
      +              "items": {
      +                "properties": {
      +                  "new_position": {
      +                    "description": "Target position for move operations",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "position": {
      +                    "description": "0-based position in the scheme",
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "property": {
      +                    "description": "Entry property to set, e.g. 'SetValue', 'CompareValue', 'Operator'",
      +                    "type": "string"
      +                  },
      +                  "value": {
      +                    "description": "Value to set for the property",
      +                    "type": [
      +                      "string",
      +                      "number",
      +                      "boolean",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "required": [
      +                  "position"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "input": {
      +              "description": "Input datapoint name for the scheme",
      +              "type": "string"
      +            },
      +            "moves": {
      +              "description": "Move operations (for move_scheme_entries)",
      +              "items": {
      +                "properties": {
      +                  "from": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  },
      +                  "to": {
      +                    "maximum": 9007199254740991,
      +                    "minimum": -9007199254740991,
      +                    "type": "integer"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              },
      +              "type": "array"
      +            },
      +            "name": {
      +              "description": "Scheme name",
      +              "type": "string"
      +            },
      +            "positions": {
      +              "description": "Entry positions (for remove_scheme_entries)",
      +              "items": {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              "type": "array"
      +            },
      +            "scheme_type": {
      +              "description": "Scheme type constant: 'ColorScheme', 'StateScheme', 'FontStyleScheme', 'KeyboardScheme', 'KeyboardLayoutScheme', 'MediaScheme', 'NavigationScheme', 'TextScheme', 'UnitScheme', 'DatapointScheme', 'CompositeControlScheme'",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scheme_type",
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_scheme_entry_properties",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "schemes"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "items": {
      +        "description": "Media items to add. Each needs media_type and path (full file path).",
      +        "items": {
      +          "properties": {
      +            "media_type": {
      +              "description": "Media type: 'Image', 'Video', 'Audio', 'Docs', 'Fonts', 'KeyboardLayouts', 'Other'",
      +              "type": "string"
      +            },
      +            "name": {
      +              "description": "File name including extension (for remove operations)",
      +              "type": "string"
      +            },
      +            "path": {
      +              "description": "Full file path (for add operations)",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "media_type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "overwrite": {
      +        "default": false,
      +        "description": "Overwrite existing items with the same name",
      +        "type": "boolean"
      +      },
      +      "type": {
      +        "const": "add_media_items",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "items": {
      +        "description": "Media items to remove. Each needs media_type and name (filename + extension).",
      +        "items": {
      +          "properties": {
      +            "media_type": {
      +              "description": "Media type: 'Image', 'Video', 'Audio', 'Docs', 'Fonts', 'KeyboardLayouts', 'Other'",
      +              "type": "string"
      +            },
      +            "name": {
      +              "description": "File name including extension (for remove operations)",
      +              "type": "string"
      +            },
      +            "path": {
      +              "description": "Full file path (for add operations)",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "media_type"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_media_items",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "items"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "paths": {
      +        "description": "Full paths to code module files (.js or .ts) to add",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "add_code_modules",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "paths"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "names": {
      +        "description": "File names (with extension) of code modules to remove",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_code_modules",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "names"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "type": {
      +        "const": "update_property_values",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "type": {
      +        "const": "update_runtime",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "station_nr": {
      +        "description": "Station number to delete from the project.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "delete_station",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "station_nr"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "output_path": {
      +        "description": "Destination JSON file for the update-station details.",
      +        "type": "string"
      +      },
      +      "station_nr": {
      +        "description": "Station number to diff against the project state.",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "station_details",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "station_nr",
      +      "output_path"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "deep_merge": {
      +        "default": true,
      +        "type": "boolean"
      +      },
      +      "overwrite": {
      +        "default": true,
      +        "type": "boolean"
      +      },
      +      "source_path": {
      +        "description": "Source .lvp project to import from.",
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "import_project",
      +        "type": "string"
      +      },
      +      "user_folder": {
      +        "default": true,
      +        "description": "Import the user-defined folder structure.",
      +        "type": "boolean"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "source_path"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "languages": {
      +        "description": "Language names/codes to add (e.g. ['De','En']).",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "add_languages",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "languages"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "languages": {
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_languages",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "languages"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "properties": {
      +        "description": "Property sets where 'element' is the language name. Use the properties supported by lvd.Language (e.g. the constants behind Language.NameSet / Language.RevisionSet).",
      +        "items": {
      +          "properties": {
      +            "element": {
      +              "description": "Datapoint / datatype / scheme name",
      +              "type": "string"
      +            },
      +            "property": {
      +              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      +              "type": [
      +                "string",
      +                "number",
      +                "boolean",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "element",
      +            "property",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_language_properties",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "properties"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "alarms": {
      +        "description": "Alarms to add (name, optional server/group and revision).",
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "description": "Alarm name",
      +              "type": "string"
      +            },
      +            "revision": {
      +              "description": "Alarm revision string",
      +              "type": "string"
      +            },
      +            "server_or_group": {
      +              "description": "Alarm server or group",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "add_alarms",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "alarms"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "names": {
      +        "description": "Alarm names to remove",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "remove_alarms",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "names"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "properties": {
      +        "description": "Property sets where 'element' is the alarm name.",
      +        "items": {
      +          "properties": {
      +            "element": {
      +              "description": "Datapoint / datatype / scheme name",
      +              "type": "string"
      +            },
      +            "property": {
      +              "description": "Property constant, e.g. 'AliasName', 'RefreshTime', 'WriteProtected', 'LimitLow', 'LimitHigh', 'Unit', 'Keyboard', 'EnumValue', 'InitValue'",
      +              "type": "string"
      +            },
      +            "value": {
      +              "description": "Value to set. Numbers and booleans are auto-converted to strings by the API.",
      +              "type": [
      +                "string",
      +                "number",
      +                "boolean",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "element",
      +            "property",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_alarm_properties",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "properties"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "alarms": {
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "type": "string"
      +            },
      +            "server_or_group": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "server_or_group"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_alarm_servers_or_groups",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "alarms"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "alarms": {
      +        "items": {
      +          "properties": {
      +            "name": {
      +              "type": "string"
      +            },
      +            "revision": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "revision"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "type": {
      +        "const": "set_alarm_revisions",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "alarms"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "add_runtime": {
      +        "default": false,
      +        "description": "Force runtime download even if version matches",
      +        "type": "boolean"
      +      },
      +      "connection": {
      +        "description": "Connection string, e.g. 'TCPIP:192.168.1.100' or 'TCPIP:myhmi.local'. Use the 'TCPIP:' prefix for IP/DNS targets.",
      +        "type": "string"
      +      },
      +      "flags": {
      +        "default": 0,
      +        "description": "Download mode: 0=normal (default), 1=changes only, 2=publish+download changes",
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "download",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "connection"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Added

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations supply only destructiveHint=true, so the description carries most of the burden. It adds real context by stating the engine dependency (a runtime prerequisite), but does not disclose what gets destroyed, that apply_changes saves and closes the project, that operations are executed in order, or any error/rollback behavior. Useful but incomplete for a destructive multi-op tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the operation catalog and followed by the engine requirement and the fallback alternative. The enumeration is long but earns its place by signalling breadth. Minor waste only.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 params and 40+ operation types, no output schema, and a destructive annotation, the description is a thin overview. It omits the critical apply_changes/download mode split and any destructive-operation warning, though the exhaustive schema compensates substantially for those gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter and operation variant is documented inline, so the baseline is 3. The description's enumeration of operation families loosely maps to the 'operations' param but adds no syntax, ordering, or constraint detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Run VISUDesigner engine operations') and enumerates the covered categories: stations, publish, text lists, schemes, media, code modules, datapoint properties, and HMI download. It is far from a tautology. However, it never distinguishes itself from the closely-named sibling manage_visudesigner, so an agent cannot fully route between them from the description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one genuine exclusion — 'for direct dashboard JSON editing, edit the files in the project directly' — which tells the agent when NOT to use this tool. But it offers no guidance on apply_changes vs download, no prerequisites beyond 'needs the VISUDesigner engine', and no comparison to the manage_visudesigner sibling, leaving the primary routing decision to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.