QOps 3.1.3

November 2026

Commands and the Portal store saved credentials the same way on Linux and macOS; your licence serial is restricted to your account

Passwords, API keys, tokens and client secrets saved with QOps-SetConfig, QOps-Configure or QOps-SetSensePassword, or in the Portal's Environment settings, are encrypted the same way. Commands such as QOps-Apps read the credentials saved in the Portal both inside a repository and from a folder without a .qopsconfig, for example right after QOps-StartPortal in a GitHub Codespace. Values saved with an earlier version are converted the next time QOps reads them inside a repository.

Your licence serial is readable only by your own account and the system account. QOps restricts the qopsconfig folder, the license.key file, the IPManager activation folder and the activation files in it to these two accounts: mode 600 for the file and 700 for the folders on Linux and macOS, and on Windows an access list with inheritance disabled that holds only your account and the system account. The restriction is applied when these are created and again on every write, so existing files and folders are restricted the next time QOps writes them. If the permissions cannot be changed, QOps carries on and the licence check is not affected.

AI assistant (MCP): a shorter tool list, and smaller answers for chart settings, sheet lists and dry runs

The list of tools the assistant receives gives each tool a short description of what it does and when to use it, so the list takes about a third of the room it took in the assistant's conversation. The details of a tool (what each argument means, the accepted values, examples) come from the new describe_tool, which the assistant calls for one tool when it needs them.

list_chart_customisations needs a chart type; without one, or with an unknown one, it answers with the list of valid types. By default it returns the names of the settings for that type. Ask for up to 10 settings by name (settings) to get their description, current value and a ready patch. This keeps each answer small enough for the assistant's conversation.

list_sheets answers with the id, title and object count of each sheet, 100 sheets to a page, and a page stays under about 27,600 characters. The assistant finds a sheet by part of its title (titleContains), or names sheets by id (sheetIds) to get only those, each with the id and type of every object on it. When the full list is too large for one answer, it is also written once to a file in the .mcp-files folder, and the answer gives its path.

set_object_properties and apply_object_patches with dryRun return the changed paths, each with its old and new value, instead of the whole object before and after. Long values are shortened, and more than 50 changed paths are cut with a note saying how many there are in total.

When such a dry run would change more than fits in one reply, the reply gives the counts per kind of change and lists as many changed paths as fit, the paths that would be removed first. The full before and after of every changed path is written once to a result file named in fullResultPath.

AI assistant (MCP): chart sorting that Qlik applies

Ask the assistant to sort the dimension of a pie chart alphabetically, numerically or by an expression, or to sort its measure numerically or alphabetically, and the chart is changed the same way Qlik stores it when you choose that sorting yourself: the Sorting is switched from Auto to Custom in the same change.

When apply_object_patches or set_object_properties writes the sort of a chart dimension or measure while its Sorting stays on Auto, the change is refused before anything is written, a preview included, and the answer says to switch that Sorting to Custom in the same change or to use the sort settings of list_chart_customisations, which do both.

Fixes

  • Activation and deactivation work when your Windows profile folder has a different name from your account. For example, the account jsmith with the profile folder C:UsersJohn. QOps keeps the activation files in your own roaming AppData folder (IPManager) and the file it reads them with in your qopsconfig folder, next to license.key. Files that an earlier version put in a folder named after the account are copied there once, on first use, and the existing activation keeps working. The originals stay where they were, so an earlier QOps version still finds them, and a later deactivation is not undone by copying them again. If a file exists in both places, the one in your profile is used and the other is left as it is. When QOps-Deactivate releases the licence but cannot remove a local file, it says so and names each file it left behind.
  • QOps-Push commits and pushes with the message, branch name, remote URL and folder exactly as written. A commit message with spaces, quotes, semicolons, brackets, $ or backticks is recorded word for word, and such characters in a branch name, URL or folder path are passed to git as plain text.
  • QOps-CleanSessions outside Qlik Sense says it works only with Qlik Sense. In a Qlik Cloud profile, or in any mode other than Qlik Sense, the command says that cleaning sessions works only with Qlik Sense and does nothing.