Repository navigation
Releases: renanlido/tia-openness
Release list
TIAOpenness 1.7.0
What's new in TIAOpenness 1.7.0
Added
- Project objects can now be exported to a Version Control Interface workspace, compared with their files and imported
back (ADR 0029). A VCI workspace is a folder on theservehost that mirrors objects as files, so that git or a
diff tool can version them.GET /vci/workspaceslists the workspaces of the system group and of the workspace user
groups, nested groups included without a depth limit (name,group,rootPath,mappedObjects); a name found in two groups is409 workspace_ambiguous, and a workspace group reached twice, so that the list would be partial, is409 vci_inventory_incomplete.
POST /vci/workspaces {name, rootPath}creates one in the system group, or reuses the same name with the same root
(the existing root is the one reported), and creates the root folder when it is missing (a UNC, device, relative or
drive-less path, a.or..segment, a reserved name, a path over 160 characters, and a root that is an existing file or lies below one are400 invalid_workspace_path; a name that exists with another root is409 workspace_exists, a root another workspace of
any group uses, also written as a short 8.3 name, is409 workspace_root_in_use; roots are compared ignoring case
and without Unicode normalization).POST /vci/workspaces/{workspace}/exportwrites PLC blocks, PLC data types and
tag tables to the workspace files andPOST /vci/workspaces/{workspace}/importwrites a workspace file back into the
project. Only those leaf objects are accepted: a device, a PLC, a block group, a library object or any otherkindis
refused with400 bad_request, and a mapped or resolved container with409 vci_not_leaf, before any Version
Control Interface call is made; the same refusal covers the generic/objpath. A call takes 1 to 50 objects (400 batch_too_largeabove that), anddryRunin the JSON body (a strict boolean;dryRunin the query string of aPOST
is400) runs every guard in the same order and lists what would be written without changing anything. A refusal
decided before the first write changes nothing. A batch is not a transaction and stops at the first failure:409 vci_batch_incompletesays which objects were written, while a504 worker_restarted, a lost connection or a lost
session during a write leaves an unknown, possibly partial outcome (check the status before repeating). An export
checks every target before it writes: a path over the Windows limit is409 vci_path_too_long, and two objects,
another mapped object or an existing file (also under its short 8.3 name; when the short name of an existing file cannot be read,
a collision cannot be excluded and the export is refused withreason: "alias_unverifiable") sharing a target, ignoring case and with
any extension, is409 vci_path_collision, for an object that is already mapped as much as for a new one; so are two
targets whose paths differ only in segments where one has the shape of an 8.3 short name (VERYLO~1) and the other
is stored under a generated short name (VeryLongBlockName, which Windows also answers to asVERYLO~1; folder names
included), whether both are in the call or one is another mapped object of the workspace, and a file that appeared
under a target's name or alias after the plan (the folder is listed again before every write, the first into each
folder included) stops that object and the rest of the call instead of being overwritten; a mapping
that is not below the workspace root, or a reparse point on the way to its file, is409 vci_mapping_outside_workspace(nothing written, or, when a NEW export
reports a location outside the root, the file was written there and the answer says so); names are made safe for
Windows and never truncated. An object that is already mapped is synchronized in place and its workspace file is
overwritten with the project content, which destroys a change made only in that file; it keeps its own location and
format, andformatchooses the file format of an object that is not mapped yet only. To compare without replacing
anything, read the status. An import needs the object to be mapped (409 not_mapped) and its file to exist (409 workspace_file_missing), skips an object that is already equal, shows in the dry run itsstatusBeforeand whether
itoverwritesProjectChanges, honors the optionalexpectedContentHashof the stale-write guard for blocks and types
(a tag table has no hash and one is400), and ends every imported object with a mandatory postcheck (status equal,
consistency, compile errors, and for SimaticML the hash of the file against a fresh export): an object whose postcheck
does not verify is409 import_unverified, and the object was already written.GET /vci/workspaces/{workspace}/statusanswers the state of each mapped object (equal,projectChanged,
workspaceChanged,conflict,workspaceFileMissing,unknown,unequal,statusFailedorunsupported) in a
stable order, with asummaryand acoveragethat say what was compared; onlyequalis a verified match, and a
row that isunsupportedorstatusFailed, orcoverage.complete: false, means those objects were not verified.
Addlimit(1 to 1000) andcursorto read it page by page: the comparison runs only for the rows of the page, so
paging bounds the time of the call,summaryandcoveragedescribe the rows of that response, and a mapping that
appears, disappears or moves answers409 cursor_stale. The export, the import and the status use the long timeout
(3600 s by default); listing and creating a workspace use the standard one. A new export creates its target folder
when it is missing (the dry run listswillCreateDirectoryper object), an import replaces the project object (a
handle read before it is stale), and regenerating a block from SCL drops its mapping, so a later import is
409 not_mapped. These routes were run against a real project on the bench of 2026-10-19 (live-13-vci, 30 passed). - The session is now bound to the exact project it connected (ADR 0028).
serverecords the canonical path of the
project of the session and, before every operation that works on the project, checks that the project open in the
bound TIA is still that one. When it is not (the project was closed in the TIA window, another project was opened
there, or File > Save as... changed its path) the operation is refused with409 binding_conflictanddetails
{bound, actual, reason}, wherereasonisproject_closed,other_projectorproject_object_stale; nothing is
done.POST /connectwith the project to work on (the bound path to go back, the actual path to adopt it) restores
the binding. The binding is recorded only with a readable path: while the path of the project cannot be read the
session is unbound and its operations are not checked, andservetries again after every operation until the read
succeeds.GET /statusandGET /projectnow returnboundProjectPath(nullwhile nothing is bound), and
GET /tiareturnsboundProjectPathplusbindingDrift(null, or{actual, reason}: it reports the drift and
never fails).GET /projectand the answers ofPOST /connectandPOST /project/createalso returnmodified,
whether the project has unsaved changes:true,false, ornullwhen TIA could not answer the read. - A write can now refuse to overwrite a change made in TIA Portal after the object was read.
GET /plcs/{plc}/blocks/{block}/xmlandGET /plcs/{plc}/types/{type}/xmlanswer acontentHash
and acontentHashError
(lower-case SHA-256 of the SimaticML export with default options, normalized so volatile export
noise such as<Created>, line endings and the layout between the tags of an element that holds
only elements never changes it, while whitespace inside text is part of it: a multi-line comment,
the text of a leaf such as<ConstantValue>, and every text node of an element that mixes text and
elements (an element that holds a CDATA section keeps its layout exactly too);UIdattributes are renumbered
canonically instead of dropped, so a renumbering by TIA never changes it but a rewired LAD/FBD
network does; it is the same for anyoptions). It is a different contract from the
normalizedSha256oftia_block_compareand from thesha256of the raw text: never substitute
one for another, and pass only thecontentHashof a fresh read asexpectedContentHash. The hash
exists only for a well-formed XML document (one root element, balanced tags, legal characters and
references, no DOCTYPE: DTD processing is prohibited and nothing external is ever resolved): for an
export that is not well-formed the XML reads still answer thexml, withcontentHash: nulland
contentHashError: "not well-formed: <reason>"(the reason is English whatever the UI language of
the machine; the XML declarationencodingvalue must be an XMLEncName, soencoding=""or
encoding="not an encoding"is not well-formed, and names follow the XML 1.0
fourth-edition character tables of the .NET reader).
GET /plcs/{plc}/blocks/{block}/sourceandGET /plcs/{plc}/types/{type}/source
answer the hash of the same object's SimaticML export and acontentHashError; the block read
compiles nothing, so an inconsistent, know-how protected, unexportable or not well-formed block still answers its
code withcontentHash: nulland the reason incontentHashError.POST /plcs/{plc}/source,
POST /plcs/{plc}/importandPOST /plcs/{plc}/types/importtake an optional
expectedContentHash: when the object in the project no longer has that hash (or no longer
exists) the write is refused with409 state_changedanddetails {object, expected, actual},
and nothing is written; when it matches, the wr...
Claude Desktop bundle for the MCP 1.11.0
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.11.0.
SHA-256, to check the download before you install it:
c0eadadafe099ca1315e741f3c3725454aa5057c2cc587f270ecc8a2b8cd5656 tia-openness-mcp-1.11.0.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.11.0.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.11.0.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.
Claude Desktop bundle for the MCP 1.10.7
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.10.7.
SHA-256, to check the download before you install it:
83ac2882e9766c49b1276382adef30cb27f2bcd379dcf65f5fc71bdbc3679d76 tia-openness-mcp-1.10.7.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.10.7.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.10.7.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.
Claude Desktop bundle for the MCP 1.10.6
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.10.6.
SHA-256, to check the download before you install it:
268324510c8bbde3ca91f1b9cb02fd040aabce2dc354c6f93b61f9a38f265311 tia-openness-mcp-1.10.6.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.10.6.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.10.6.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.
Claude Desktop bundle for the MCP 1.10.5
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.10.5.
SHA-256, to check the download before you install it:
fd62676c9afeca22b1fab69f241f9f00cb4b9e80a176feef84114703c1b8cc82 tia-openness-mcp-1.10.5.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.10.5.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.10.5.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.
TIAOpenness 1.7.1-beta.1
What's new in TIAOpenness 1.7.1-beta.1 (beta)
Beta build. A pre-release for testing, offered only to installations that turned on Receive beta versions in the app (Updates tab). It is not the stable release: it may have defects. Report them with the support report in the app. The notes below are what has changed since the last stable release.
Added
-
Linked the welcome window, license tab, and tray menu to the 30-day trial and plans when a license is missing or expired.
-
The “Connect your AI agents” screen is now available on the stable channel.
-
The Windows installer embeds the MCP runtime for supported app-managed routes. The app uses its pinned Node/package
for Claude Code and Codex file-config; Claude Desktop opens the matching.mcpb. The Codex CLI plugin, Gemini extension,
and manual/macOS/Linux/remote workflows keep usingnpx. The app-managed Claude Code plugin receives the embedded
launcher on a fresh install; existing connections switch with Disconnect then Connect.
Fixed
-
Update checks refetch a replaced release manifest. Cached manifests are reused only when the manifest asset ID stays the same; a replacement under the same tag is downloaded and verified again.
-
Claude Desktop settings updates require a full quit before the write. The setup wizard shows this before its yes/no
confirmation; the app screen shows it before Connect. After applying, reopen and verify withdoctoror Refresh. -
The setup guidance now identifies
TIA_CONNECT_TIMEOUT_MSas thetia_local_session_openG6 logon timeout only. It
does not change connection lifecycle or imply G1.
Install or update
- Beta channel: open the app, turn on Receive beta versions in the Updates tab, then choose Install update. Nothing changes for installations that did not opt in.
- Fresh install of this beta: run
TIAOpenness-Setup-1.7.1-beta.1.exe. - Back to stable: turn the setting off. Nothing is downgraded: the installed beta stays until a stable release newer than it is published.
Requires Windows x64, .NET Framework 4.8 and Siemens TIA Portal V21 with TIA Openness. The API needs an activation license.
Verify the download
| File | Size | SHA-256 |
|---|---|---|
TIAOpenness-Setup-1.7.1-beta.1.exe |
28,819,373 bytes | 2efaf2e5d500623ac82939ce5dff0db7e1f216b0a9a104cb6052873b33f85d59 |
TIAOpenness-app-v1.7.1-beta.1.zip |
3,296,485 bytes | 074995cb12fd3f72f9b120ffa343e5a33dedddc475b650e8505c6018e6d4928e |
The in-app updater accepts this release only through update-manifest.json, signed with key u1.
Questions or problems: support@plcware.io
Claude Desktop bundle for the MCP 1.9.2
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.9.2.
SHA-256, to check the download before you install it:
985b966d676ecfc1b8accca710b8f4dcbcbdc4639a18ad26592537f7e98f26dd tia-openness-mcp-1.9.2.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.9.2.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.9.2.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.
Claude Desktop bundle for the MCP 1.10.4
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.10.4.
SHA-256, to check the download before you install it:
8fa37712eb980342879d1b8226e64a66fc8625583c1864221184e59094e57252 tia-openness-mcp-1.10.4.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.10.4.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.10.4.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.
Claude Desktop bundle for the MCP 1.10.3
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.10.3.
SHA-256, to check the download before you install it:
bd888f984261a6398ff4142928f51749ba37d9e6656a5cf81feaf0076c18a217 tia-openness-mcp-1.10.3.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.10.3.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.10.3.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.
Claude Desktop bundle for the MCP 1.10.2
Claude Desktop bundle (.mcpb) of the PLCWare tia MCP server, version 1.10.2.
SHA-256, to check the download before you install it:
66419a8939af9a593c9e9816c17097894f87732dd5dd694abc857650bb32d87a tia-openness-mcp-1.10.2.mcpb
- Windows (PowerShell):
Get-FileHash tia-openness-mcp-1.10.2.mcpb -Algorithm SHA256 - macOS / Linux:
shasum -a 256 tia-openness-mcp-1.10.2.mcpb
Install: open the file (double click), or in Claude Desktop go to Settings > Extensions > Advanced settings > Install Extension... and pick it. Fill in the PLCWare API URL (http://localhost:5000 when PLCWare Desktop runs on the same machine). Claude Desktop does not update a bundle installed from a file: to move to a newer version, download its file and install it again.
The bundle is unsigned and has not been verified on every Claude Desktop build yet (the .exe and the Microsoft Store build). Report problems as an issue on this repository.
The Pre-release label is only a means: it keeps this release from becoming the repository's latest release, which is where PLCWare Desktop is downloaded. It says nothing about the maturity of the bundle. PLCWare Desktop updates itself from the app-v* releases and ignores this one.