Skip to main content
Glama
TIA Portal MCP Server

TIA Portal MCP Server

by BJM1122

TIA Portal MCP Server

A local Model Context Protocol server and CLI for Windows that lets an AI coding assistant (Claude Code, Codex or any stdio MCP client) analyze and carefully change Siemens TIA Portal projects through the official TIA Portal Openness API.

Version 0.29.1 (0.29.0 was the first standalone public distribution). It contains only the tool itself: no TIA projects, exports, PLC programs, site data, Siemens binaries or private Git history.

What it does:

  • Exports a complete, hash-verified PLC program-source snapshot (blocks, PLC types/UDTs, tag tables) from the project that is already open in TIA Portal, and builds an offline index and execution model from it.

  • Answers engineering questions offline from that snapshot: call graphs, block interfaces, symbol and data-flow traces, references, compact LAD/FBD/SCL text rendering of blocks, saved analysis notes.

  • Observes the current Portal UI context (open project, selected block, network) and runs exact, read-only live queries against the open V20 project.

  • Imports 1–20 block XML files into the open project through a plan → approve → apply gate with baseline backup, compile, readback comparison and rollback.

  • Classic WinCC and WinCC Unified V20 HMI export, analysis and (unaccepted, plan-gated) authoring.

It never downloads to a PLC, goes online, forces values or writes PLC runtime data.

Supported TIA Portal versions

Versions are declared in portal-versions.json; the project file extension selects the version, and there is no cross-version fallback.

Version

Project

Snapshot export + offline analysis

Block import

Passive UI context

Live query / navigation / engineering inspect

HMI tools

V20

.ap20

yes

yes

yes

yes

yes

V15.1

.ap15_1

yes

yes

yes

no

no

V17

.ap17

yes

yes

yes

no

no

V16, V18, V19

recognized and rejected (no adapter)

A capability in the table is only an upper bound. It becomes available on a machine only when the native companion for that exact version is built, is not older than its sources and passes its offline self-test. tia_doctor reports what is actually available. See docs/multi-version-architecture.md.

Offline analysis tools work on any existing export directory and do not need TIA Portal at all.

Related MCP server: tiacommander-mcp

Prerequisites

  • Windows 10/11 x64.

  • Node.js 20.11 or later with npm (tested with Node.js 24).

  • Windows PowerShell 5.1 (powershell.exe, built into Windows). The tool never uses pwsh.

  • .NET Framework 4.x C# compiler (%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\csc.exe, present on standard Windows installs) to build the native companions.

  • For anything that talks to TIA Portal: a licensed TIA Portal installation of a supported version with the TIA Openness option installed, and the Windows user in the local "Siemens TIA Openness" group.

Siemens assemblies

This repository contains no Siemens binaries. The native companions are compiled against Siemens.Engineering.dll from your local TIA Portal install (<Portal root>\PublicAPI\<version>\Siemens.Engineering.dll). Resolution order per version:

  1. TIA_MCP_API_DLL_<version> (e.g. TIA_MCP_API_DLL_V20, TIA_MCP_API_DLL_V15_1, TIA_MCP_API_DLL_V17);

  2. the legacy variable (TIA_MCP_OPENNESS_API_DLL for V20, TIA_MCP_V15_1_API_DLL for V15.1);

  3. the Portal root from the registry (HKLM\SOFTWARE\Siemens\Automation\_InstalledSW\TIAPxx\Global\Path);

  4. the standard root C:\Program Files\Siemens\Automation\Portal Vxx.

Built executables (tools/*.exe) are local build output and are ignored by Git.

Install and build

git clone <this repository> tia-mcp
cd tia-mcp
npm ci
npm run build            # TypeScript -> dist/
npm run doctor           # what is available on this machine; attaches to nothing

That is enough for the offline analysis tools. Build native companions for the TIA Portal versions you have:

Command

Builds

npm run build:production

TypeScript, then the five production companions: V20 importer, V20 resident live-query core, V20 HMI companion, V15.1 snapshot companion, V15.1 importer. Every component is staged, compiled and must pass its offline self-test before any installed executable is replaced; a failure rolls the whole batch back. Requires both the V20 and V15.1 Openness APIs.

npm run build:v17

V17 snapshot companion (tools/TiaV15Snapshot.v17.exe) and V17 importer (tools/TiaOpennessImportBlock.v17.exe).

npm run build:native -- -Component <live-core|importer|hmi|v15-snapshot> [-Version <V>]

One companion for one version, e.g. npm run build:native -- -Component importer -Version V20 when only V20 is installed.

npm run build:live-core, npm run build:hmi-native, npm run build:v15-snapshot, npm run build:import-helper

Single-component shortcuts.

Every rebuilt companion triggers Siemens' Openness authorization prompt in Portal on its first attach. After rebuilding, reconnect the MCP client so it loads the new server.

Register with an MCP client

The server speaks MCP over stdio: node <repo>\dist\index.js.

Claude Code

claude mcp add --transport stdio --scope user tia_portal -- node "C:\path\to\tia-mcp\dist\index.js"
claude mcp list

Add --env NAME=value options before -- for any configuration below, e.g. --env TIA_MCP_ALLOWED_PROJECT_ROOTS=D:\TIA\Projects. Start a new session and check the connection with /mcp.

Codex

Merge into %USERPROFILE%\.codex\config.toml:

[mcp_servers.tia_portal]
command = "node"
args = ['C:\path\to\tia-mcp\dist\index.js']
# Snapshot exports and imports can take minutes.
tool_timeout_sec = 900
env = { TIA_MCP_ALLOWED_PROJECT_ROOTS = 'D:\TIA\Projects' }

Other stdio clients

{
  "mcpServers": {
    "tia_portal": {
      "command": "node",
      "args": ["C:\\path\\to\\tia-mcp\\dist\\index.js"]
    }
  }
}

If the client cannot find node, use the absolute path from Get-Command node. Do not auto-approve the write tools (tia_apply_*).

Configuration

All settings are environment variables; none are required for offline analysis.

Variable

Default

Purpose

TIA_MCP_WORKSPACE_ROOT

package root

Where snapshots, import evidence (tia-openness-import/) and HMI exports (tia-exports/) are written.

TIA_MCP_OUTPUT_ROOT

<workspace>\tia-out

Default snapshot output root for tia_export_project_index / --export-snapshot.

TIA_MCP_ALLOWED_EXPORT_ROOTS

—

Extra semicolon-separated roots that tools may read exports from or write to.

TIA_MCP_ALLOWED_PROJECT_ROOTS

%USERPROFILE%\Documents\Automation

Semicolon-separated roots for explicit TIA project paths.

TIA_MCP_ALLOW_ANY_LOCAL_PATH=1

off

Disable the export/output root allowlist for a deliberate session.

TIA_MCP_ALLOW_ANY_PROJECT_PATH=1

off

Disable the project root allowlist for a deliberate session.

TIA_MCP_API_DLL_<V> / TIA_MCP_OPENNESS_API_DLL / TIA_MCP_V15_1_API_DLL

discovered

Openness API DLL per version (see above).

TIA_MCP_OPENNESS_API_XML

beside the DLL

Optional API XML documentation.

TIA_MCP_LIVE_CORE_EXE, TIA_MCP_V15_1_SNAPSHOT_EXE

tools\...

Override the home-version executable of a companion.

TIA_MCP_LIVE_CORE_IDLE_TIMEOUT_MS

1 hour

Idle timeout of a prepared live session (30000–86400000).

TIA_MCP_HMI_READ_TIMEOUT_MS

120000

HMI companion limit for inspect/export (10000–3600000; bundle export gets at least 600000).

TIA_MCP_HMI_WRITE_TIMEOUT_MS

900000

HMI companion limit for imports, edits and project creation. Expiry kills the companion and reports an unknown write outcome.

TIA_MCP_ENABLE_NETWORK_PROBE=1

off

Enable plc_probe_ports (read-only TCP reachability probe).

TIA_MCP_ALLOWED_PROBE_HOSTS

127.0.0.1,localhost

Exact host allowlist for the probe, e.g. 192.0.2.10,plc-host.

TIA_MCP_ALLOWED_PROBE_PORTS

102,4840,80,443

Port allowlist for the probe.

Typical workflow

  1. tia_doctor — what is ready, degraded, missing or stale. With portalVersion or projectPath it adds per-version capability status.

  2. tia_get_current_ui_context — the running Portal processes, open project, selected block/network. Pass the returned processId to later calls when more than one Portal is open.

  3. Live reads (V20): tia_get_current_block, tia_query_live_project, tia_search_live_objects, tia_get_graph_context. They attach an exact read-only session themselves when Portal is visible.

  4. For whole-program analysis, tia_export_project_index once. The first call is an authorization preflight; keep Portal visible and repeat with explicit authorization readiness. Later snapshots reuse unchanged objects.

  5. Offline: tia_fast_lookup, tia_read_block, tia_search_export, tia_trace_call_graph, tia_trace_symbol, tia_trace_data_flow. Save verified conclusions with tia_save_analysis_note.

  6. Changes: tia_create_import_plan → human approval → tia_apply_import.

First attach and Siemens authorization

The first Openness attach of a given executable makes TIA Portal show an authorization dialog that a human must approve. The server never attaches silently from a cold state: a cold tia_prepare_live_session / --prepare-live-session first returns portal_authorization_check_required, and a minimized Portal returns portal_must_be_visible_for_authorization. Keep Portal in the foreground and approve the prompt.

Import safety model (plan → approve → apply)

Block import is the only PLC-program write path. It is deliberately two-step:

  1. Plan — tia_create_import_plan validates 1–20 candidate SimaticML block files (blocks: [{ xmlPath, targetName, targetNumber }]) against the exact open project. It returns a review and a short-lived (15 min), single-use confirmation token bound to: Portal PID and process-start time, canonical project path, every target block and candidate XML SHA-256, compile scope, the save choice (saveProject defaults to false), and the self-tested, version-selected importer and Openness API paths and SHA-256 hashes.

  2. Approve — a human reviews the plan. The assistant must not approve its own plan; configure the client so tia_apply_import is never auto-approved.

  3. Apply — tia_apply_import with the token and the same block list. It re-verifies identities and hashes, consumes the token once, then: exports a baseline of each target, imports, compiles (block or PLC-software scope), re-exports and compares program content, and rolls every imported block back on failure. A separate process then reads the blocks back independently. It never downloads to a PLC. With saveProject: false the project stays unsaved for review in TIA Portal.

Any identity, hash, file or block-list change between plan and apply blocks the import; never replay a token, create a new plan. HMI write tools use the same single-use plan store. See docs/current-ui-context.md and docs/live-openness.md.

Tools (47)

Area

Tools

Diagnostics

tia_doctor, plc_probe_ports (disabled by default)

UI context and live V20 session

tia_get_current_ui_context, tia_prepare_live_session, tia_get_current_block, tia_query_live_project, tia_search_live_objects, tia_get_graph_context, tia_navigate_live_object, tia_inspect_engineering

Snapshots and indexes

tia_export_project_index, tia_list_export_indexes, tia_read_export_index, tia_reanalyze_snapshot, tia_build_reference_index

Offline analysis

tia_read_block, tia_search_export, tia_fast_lookup, tia_trace_call_graph, tia_trace_symbol, tia_trace_data_flow, tia_save_analysis_note, tia_search_analysis_notes

Block import

tia_create_import_plan, tia_apply_import

HMI read and analysis

tia_list_hmi_targets, tia_export_hmi_configuration, tia_read_hmi_alarm_export, tia_analyze_hmi_alarms, tia_export_hmi_native, tia_export_hmi_bundle, tia_inspect_unified_hmi, tia_hmi_authoring_capabilities

HMI authoring (classic WinCC)

tia_generate_hmi_design, tia_preview_hmi_design, tia_edit_hmi_native, tia_edit_hmi_text, tia_update_hmi_object, tia_create_hmi_import_plan, tia_apply_hmi_import, tia_create_hmi_project_plan, tia_apply_hmi_project

HMI authoring (WinCC Unified)

tia_generate_unified_hmi_design, tia_create_unified_hmi_project_plan, tia_apply_unified_hmi_project, tia_create_unified_hmi_edit_plan, tia_apply_unified_hmi_edit

node dist/index.js --list-tools prints the registered catalog. HMI authoring has not passed native acceptance; see docs/hmi-authoring-status.md.

CLI

The CLI shares the capability checks and resident-query implementation with MCP:

npm run doctor                                   # same as node dist\index.js --doctor
node dist\index.js --doctor --require core-read
npm run prewarm                                  # start/fingerprint the helper; no attach
node dist\index.js --prepare-live-session --process-id <PID>
node dist\index.js --prepare-live-session --process-id <PID> --confirm-portal-authorization-ready
node dist\index.js --live-query --process-id <PID> --resource-kind block --name Main --number 1
node dist\index.js --live-batch --input .\queries.json
node dist\index.js --export-snapshot --process-id <PID> --project-path '<project>.ap20'
node dist\index.js --export-snapshot --process-id <PID> --project-path '<project>.ap20' --confirm-portal-authorization-ready

queries.json is an array or { "queries": [...] }; each item has a unique operationId, resourceKind, exact name and optional number, blockKind or softwarePath.

Tests

Command

Needs

npm test (= npm run test:all: test:unit + test:smoke)

Windows, Node.js, Windows PowerShell 5.1 and the .NET Framework csc.exe. No TIA Portal. Tests that execute real built companions or the real Openness API skip themselves when those are absent.

npm run test:import-gate, npm run test:live-core

Built companions and TIA_MCP_OPENNESS_API_DLL; otherwise those tests skip.

npm run test:integration

A running Portal and TIA_IMPORT_TEST_PROCESS_ID, TIA_IMPORT_TEST_PROJECT_PATH, TIA_IMPORT_TEST_XML_PATH, TIA_IMPORT_TEST_TARGET_NAME, TIA_IMPORT_TEST_TARGET_NUMBER. Creates a plan and verifies that a mismatched apply is blocked; it imports nothing.

node scripts/read-only-live-smoke.mjs <PID> '<GRAPH block>' <transition> --authorization-ready

A running V20 Portal; read-only.

All test fixtures are synthetic. Use copies of test projects for any live verification, never production projects.

Documentation

Limitations

  • No PLC download, upload, online monitoring, forcing or runtime value access. Online monitoring would need a separate PLC Web API, OPC UA or S7 read path.

  • Live queries, navigation, engineering inspection and HMI tools are V20 only.

  • Not verified: imports that change logic followed by a real save, fault-injected rollback, FB imports with instance DBs on V17, know-how protected blocks, and native acceptance of HMI authoring.

  • Siemens, SIMATIC, TIA Portal and WinCC are trademarks of Siemens AG. This project is not affiliated with or endorsed by Siemens.

License

MIT

Available Tools

47 tools
plc_probe_portsProbe PLC PortsA
Read-onlyIdempotent

Read-only TCP connectivity probe for likely S7/OPC UA/Web API endpoints. Does not authenticate or read PLC data.

Inputs: host (required), ports, timeoutMs.

tia_analyze_hmi_alarmsLink HMI alarms to PLC sourceA
Idempotent

Analyze a saved exact HMI observation and existing PLC export without TIA. Link trigger/acknowledgement tags and optional reset tags to exact PLC tag or DB definitions, writers, clear candidates, guards and screen references. Explicit connection-to-software-path bindings prevent cross-PLC guesses. Optional official alarm XLSX supplements classic HMI evidence; its HMI ownership is caller-selected, not verified. Does not execute scripts or inspect runtime.

Inputs: hmiName (required), hmiPath (required), exportDir (required), projectPath (required), +5 more.

tia_apply_hmi_importA
Destructive

Apply an explicitly approved exact HMI import plan once. Backs up the original object, rechecks baseline under exclusive access, imports, compiles and reads back. No download. Failure can leave unsaved engineering changes; never replay a token.

Inputs: approval (required), planSha256 (required), confirmToken (required).

tia_apply_hmi_projectA

Create a new isolated classic WinCC project only after explicit approval of the exact immutable plan. Does not attach to an existing project or download. Compiles, saves and independently reopens the generated project. Partial failed output is retained. Two headless TIA sessions; can take several minutes (TIA_MCP_HMI_WRITE_TIMEOUT_MS, default 15 min).

Inputs: approval (required), planSha256 (required), confirmToken (required).

tia_apply_importApply TIA Project ImportA
Destructive

Consume one import plan token and import its blocks into the exact running TIA process with the version-selected importer: back up every target, override-import (data blocks first), compile, re-export and compare every block, roll back on any failure, and optionally save. blocks must repeat the planned blocks in the planned order. Never downloads to a PLC.

Inputs: blocks (required), projectPath (required), confirmToken (required), outDir, +1 more.

tia_apply_unified_hmi_editB
Destructive

Apply one explicitly approved immutable Unified property plan, recheck baseline under exclusive access, keep scoped recovery values, compile the hosting device and verify in a fresh helper session. No object reconstruction, download or automatic rollback.

Inputs: approval (required), planSha256 (required), confirmToken (required).

tia_apply_unified_hmi_projectA

Apply an explicitly approved Unified project creation plan once in an isolated TIA process. Create native objects, compile the created device, save and independently reopen for requested-value verification. No download; partial failed output is retained. Two headless TIA sessions; can take several minutes (TIA_MCP_HMI_WRITE_TIMEOUT_MS, default 15 min).

Inputs: approval (required), planSha256 (required), confirmToken (required).

tia_build_reference_indexBuild TIA Reference IndexA
Idempotent

Build or refresh a persistent project-neutral symbol definition, read/write reference, and data-flow cache from an existing Simatic ML export. It writes only under the export's _codex_index folder and never changes the TIA project or PLC.

Inputs: exportDir (required), forceRebuild.

tia_create_hmi_import_planB
Read-only

Read-only exact plan for replacement of one existing classic V20 screen/template. Captures live baseline, full exact diff, compile/save scope and immutable one-time approval token. Rejects renamed objects and changed external references.

Inputs: kind (required), processId (required), objectPath (required), targetPath (required), +4 more.

tia_create_hmi_project_planA
Read-only

Offline immutable plan to create a NEW isolated classic WinCC V20 project and device, import generated screen/template candidates, compile, save and reopen for verification. Requires an exact Siemens catalog type identifier. Does not access TIA or overwrite an existing directory.

Inputs: spec (required).

tia_create_import_planCreate TIA Import PlanA
Read-onlyIdempotent

Read-only validation for importing 1 to 20 candidate Simatic ML blocks as one change (for example a DB member plus the FC networks that use it). Binds one short-lived confirmation token to the exact live TIA process and project, every candidate XML digest and target identity, each target's current content digest, the importer and API identity, and the save choice. Several blocks also return each candidate as compact text for review; tia_apply_import then imports them in one session, data blocks first, with one software compile, and rolls all of them back on any failure.

Inputs: blocks (required), projectPath (required), note, processId, +4 more.

tia_create_unified_hmi_edit_planA
Read-only

Read-only exact plan for existing Unified control geometry, ARGB colors, text in one existing language and font size. Rejects dynamically bound properties and stale identities. Compile covers the entire hosting device; save is optional and covers the entire project.

Inputs: input (required).

tia_create_unified_hmi_project_planA
Read-only

Create an immutable offline plan for a NEW isolated Unified V20 project. Exact catalog ID, destination, startup screen, objects and scripts are included. No existing project is opened or overwritten.

Inputs: spec (required).

tia_doctorTIA MCP DoctorA
Read-onlyIdempotent

Read-only capability diagnosis shared with the CLI: installed files, policy gates and stale native binaries. By default it attaches to nothing and starts nothing. Optional sections: projectPath or portalVersion adds environment (project path and version-adapter validation); liveCore=true starts the resident read-only core when absent and adds its version, uptime and attached session; onlineReport=true adds the online-monitoring boundary report.

Inputs: require, liveCore, timeoutMs, projectPath, +2 more.

tia_edit_hmi_nativeA
Read-onlyIdempotent

Create an offline native XML candidate using exact UTF-16 ranges and expected text. Preserves every unedited range, including unknown vendor XML. Does not import, compile or establish dependency compatibility.

Inputs: edits (required), originalXml (required), baselineSha256 (required).

tia_edit_hmi_textB
Read-only

Replace the text of one uniquely named classic HMI object in one existing language. Supports Text, TextOn or TextOff. Preserves other languages, events, bindings and unknown XML; replaces formatting only inside the selected text value.

Inputs: text (required), culture (required), objectName (required), originalXml (required), +2 more.

tia_export_hmi_bundleB
Read-only

Export classic V20 screens, templates, tag tables, VB scripts, text/graphic lists, project graphics and connections as native XML in one read-only attachment, with hashes and external-reference inventory. Alarms, recipes and library types are excluded; dependency closure is incomplete.

Inputs: processId (required), targetPath (required), projectPath (required), processStartTimeUtc (required).

tia_export_hmi_configurationExport HMI configuration for analysisB
Idempotent

Reuse one canonical JSON observation per exact project and HMI, or read alarms, tags, connections, screens and scripts through public Openness APIs. Set refresh only after a project change. Does not execute scripts, modify the project, export PLC blocks, or produce an importable WinCC backup. Partial reads never replace a usable observation.

Inputs: hmiName (required), hmiPath (required), projectPath (required), refresh, +3 more.

tia_export_hmi_nativeA
Read-onlyIdempotent

Read-only classic WinCC V20 native screen/template XML export using the official API. Discover exact targets first, then list object paths with an empty objectPath. Requires exact PID, process start and project. Dependencies are not included; this is not a complete HMI backup.

Inputs: processId (required), projectPath (required), processStartTimeUtc (required), kind, +3 more.

tia_export_project_indexExport TIA Project IndexA

Create one exact-session snapshot of every PLC block, PLC type/UDT, and complete tag table with the official TIA Openness export APIs, then build the existing offline index and execution model. Hardware/network/HMI objects are outside this program-source snapshot. It never modifies, saves, compiles, or downloads the project.

Inputs: projectPath (required), confirmExport (required), detail, processId, +5 more.

tia_fast_lookupFast TIA Program LookupA
Idempotent

One-call lookup across block inventory, call edges, persistent symbol definitions, read/write references, data flows and saved engineering notes for an indexed S7-1200/S7-1500 export. query is one string, or up to 50 strings (block aliases, symbols, addresses) resolved together in a single cached call.

Inputs: query (required), exportDir (required), limit, autoBuild.

tia_generate_hmi_designA
Read-only

Generate classic V20 native screen/template candidates with text, rectangles, buttons, navigation, momentary tag commands and IO fields. No visual template required. Dependencies must be provided when planning a project. Native serialization requires later TIA validation.

Inputs: design (required).

tia_generate_unified_hmi_designA
Read-only

Generate an offline WinCC Unified V20 public-API creation program with screens, reusable layouts, internal/external tags, explicit connections, discrete alarms, native controls, navigation and event script bodies. This JSON is not a native import archive. No TIA access or network probing.

Inputs: design (required).

tia_get_current_blockGet Current TIA BlockA
Read-onlyIdempotent

Details of the block currently selected/open in TIA Portal. source=live (default) reads it from the exact running V20 project: official attributes, cross references and, from one temporary block export, interface and program body; nothing is persisted. source=export resolves it through an exactly matching existing export instead: offline metadata, call relations, interface members and existing non-stale reference results; never creates or refreshes an export.

Inputs: limit, roots, source, exportDir, +10 more.

tia_get_current_ui_contextGet Current TIA UI ContextB
Read-onlyIdempotent

Perform one bounded passive observation of the selected TIA Portal version (V20 by default; other supported versions explicitly selectable), exact project and visible editor evidence. Does not attach, click, focus, poll, capture the screen or access a PLC.

Inputs: roots, maxDepth, maxNodes, processId, +4 more.

tia_get_graph_contextRead GRAPH Step or Transition ContextA
Read-onlyIdempotent

Read one exact live GRAPH block and return a step's exits or a transition's predecessor/successor steps, actions, interlocks and Boolean guards. Sequence numbers disambiguate reused step numbers. No UI navigation, project write, scheduler simulation or PLC runtime monitoring.

Inputs: name (required), processId (required), step, limit, +5 more.

tia_hmi_authoring_capabilitiesB
Read-only

Report separate HMI software/version adapters and implemented authoring boundaries. Availability is not live verification.

Inputs: no named parameters.

tia_inspect_engineeringInspect TIA Hardware, Network and HMIB
Read-onlyIdempotent

Read a bounded hardware/network/HMI/PLC-tag observation from an already prepared exact V20 session and report evidence-backed configuration diagnostics. Includes exposed HMI tags, connections and Unified alarms; classic HMI alarms are explicitly unsupported when not exposed. Never compiles, exports files, changes a project or contacts a PLC.

Inputs: processId (required), timeoutMs, maxObjects, includeScreens.

tia_inspect_unified_hmiA
Read-only

Read-only Unified V20 inspection. Empty targetPath lists targets; empty screenPath lists screens including groups; empty objectName lists screen items. A selected primitive returns a scoped property baseline and scripts, not a complete native import archive.

Inputs: processId (required), projectPath (required), processStartTimeUtc (required), language, +3 more.

tia_list_export_indexesList TIA Export IndexesA
Read-onlyIdempotent

List compact export summaries under bounded roots. By default each project scope returns its valid current snapshot, or its latest indexed snapshot with the current-pointer failure reason; historyCount counts all snapshot directories. includeHistory shows all snapshots. Child directories starting with '_' are tool test directories: skipped by default and always excluded from automatic matching; the search root itself is exempt. _codex_index is always skipped. omitted counts collapsed history snapshots, skipped test directories, project-filtered entries, and matching entries beyond maxResults; project filters run before maxResults. Explicit listing never makes an invalid or historical snapshot eligible for automatic matching.

Inputs: roots, maxResults, projectName, projectPath, +2 more.

tia_list_hmi_targetsList HMI targetsB
Read-onlyIdempotent

List exact HMI software names, hardware paths and API types in a prepared project without reading PLC programs or exporting configuration.

Inputs: processId (required), timeoutMs.

tia_navigate_live_objectNavigate TIA Portal to ObjectB

Explicit UI navigation action. Resolves one object in the exact current PID/project and invokes only the official ShowInEditor API for PlcBlock, PlcType, or PlcTagTable. Exact network/line navigation is never claimed from ReferenceLocation metadata.

Inputs: name (required), resourceKind (required), confirmNavigation (required), number, +12 more. Returns: ok, status, completeness, requestedActionCompleted

tia_prepare_live_sessionPrepare Exact TIA Live SessionB
Read-onlyIdempotent

Prepare one exact resident read-only Openness session without enumerating project objects. A cold session first returns an explicit Portal-authorization check; call again only after the user has Portal visible and is ready to approve the Siemens access prompt.

Inputs: maxDepth, maxNodes, processId, timeoutMs, +1 more.

tia_preview_hmi_designA
Read-only

Generate self-contained offline HTML to preview a design, screen navigation, local IO values and press/release buttons. Never connects to equipment. This is not TIA runtime simulation or a verified native rendering.

Inputs: design (required).

tia_query_live_projectQuery Current TIA Project ObjectsA
Read-onlyIdempotent

Resolve blocks, PLC data types/UDTs, tag tables or PLC tags in the exact running TIA V20 project through the resident session (attached automatically when Portal is visible). One object: give resourceKind and name; returns direct official attributes, optional CrossReferenceService evidence and, for a block, interface and program body from one temporary XML. Several objects: give queries (up to 50) for a shallower result per object in one call; cross references default off there.

Inputs: name, number, queries, blockKind, +16 more. Returns: ok, status, completeness, requestedActionCompleted

tia_read_blockRead TIA BlockA
Read-onlyIdempotent

Read one exported block, DB, UDT or tag table. Give exportDir with name/number/relativePath; view=text also accepts xmlPath for a single Simatic ML file such as an import candidate. Views: text (default) is compact text, the interface then one line per coil, assignment, instruction box or block call in each network (LAD/FBD), or the SCL source, with every instruction box shown including GET/PUT/MOVE; xml is the raw exported XML, only needed to prepare an import; interface is the flattened interface/member table; context is the metadata, direct callers, direct callees and same-number companion objects.

Inputs: name, view, limit, number, +7 more.

tia_read_export_indexRead TIA Export IndexB
Read-onlyIdempotent

Read compact summary metadata from an existing _codex_index/tia-export-index.json. Coverage includes issueCount; includeCoverageIssues explicitly returns the full summary.analysis.coverage.issues array. includeProfile adds the detected PLC family (S7-1200, S7-1500 or unknown) from project evidence.

Inputs: exportDir (required), limit, includeCalls, includeItems, +2 more.

tia_read_hmi_alarm_exportRead exported HMI alarmsA
Read-onlyIdempotent

Read an existing official WinCC alarm XLSX export, including classic HMI alarms unavailable through Openness. Preserves multilingual text, trigger and acknowledgement columns with worksheet/row evidence. Does not launch Excel, evaluate formulas, attach to TIA or import anything. Workbook project identity is not independently verifiable.

Inputs: file (required), limit, query.

tia_reanalyze_snapshotB

Verify all current snapshot XML against the manifest, rebuild the execution model offline and publish its analysis under the current-pointer lock.

Inputs: exportDir, projectScopeDir.

tia_save_analysis_noteSave TIA Analysis NoteB
Idempotent

Persist an evidence-backed engineering explanation under the export cache so a stronger model can analyze once and later models can reuse it. The note is bound to the current export signature and marked stale after program changes.

Inputs: subject (required), summary (required), evidence (required), exportDir (required), +2 more.

tia_search_analysis_notesSearch TIA Analysis NotesB
Read-onlyIdempotent

Search persisted model-authored engineering notes and report whether each note still matches the current export signature.

Inputs: exportDir (required), limit, query.

tia_search_exportSearch TIA ExportA
Read-onlyIdempotent

Search one export index; bounded and read-only. in=text (default): plain-text search across the indexed XML files. in=inventory: block/type/tag names and call edges. in=symbols: symbol table from block interfaces, DB members and PLC tag tables, filtered by scope and query. in=references: call edges, symbol/tag definitions and XML text matches for the query together, filtered by kind.

Inputs: exportDir (required), in, kind, limit, +6 more.

tia_search_live_objectsSearch Current TIA Project ObjectsA
Read-onlyIdempotent

Search prepared live inventory by partial name/group path or exact block kind/number. Returns exact identities for subsequent reads. No whole-project XML export, program-body scan, navigation or PLC access. Pagination requires an unchanged project inventory.

Inputs: processId (required), query, number, offset, +6 more.

tia_trace_call_graphTrace TIA Call GraphA
Read-onlyIdempotent

Walk downstream, upstream or both directions through indexed call edges from one block. Without name/number/relativePath it lists the OB entry blocks and their direct calls instead.

Inputs: exportDir (required), name, number, maxDepth, +3 more.

tia_trace_data_flowTrace TIA Data FlowC
Idempotent

Recursively trace where a value comes from or where it is used, using evidence-backed SCL assignments, GRAPH actions, and LAD/FBD network flows from a cached S7-1200/S7-1500 export.

Inputs: query (required), exportDir (required), match, maxDepth, +3 more.

tia_trace_symbolTrace TIA SymbolB
Idempotent

Find symbol definitions, writers, readers, and direct upstream/downstream flows across SCL, LAD/FBD calls, and GRAPH actions. The cache is rebuilt automatically when the export signature changes.

Inputs: query (required), exportDir (required), limit, match, +1 more.

tia_update_hmi_objectA
Read-only

Offline scoped edit of one uniquely named native screen object. Change existing geometry or RGB color properties while preserving all other native XML, bindings and extensions verbatim.

Inputs: objectName (required), properties (required), originalXml (required), baselineSha256 (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 47 tools

    Disambiguation3/5

    Descriptions are unusually detailed and often explicitly carve out boundaries, but there are several clusters with overlapping purpose: tia_export_hmi_bundle / tia_export_hmi_native / tia_export_hmi_configuration, tia_edit_hmi_text / tia_update_hmi_object / tia_edit_hmi_native, and tia_search_export / tia_fast_lookup / tia_trace_symbol / tia_trace_data_flow all read from the same export index. The classic-versus-Unified HMI split and the plan/apply pairing add further near-duplicates (e.g. tia_create_hmi_project_plan vs tia_create_unified_hmi_project_plan, tia_apply_hmi_project vs tia_apply_unified_hmi_project) that an agent must carefully disambiguate by target type.

    Naming Consistency4/5

    Almost everything is snake_case with a tia_ prefix and a verb_noun shape (tia_create_import_plan, tia_apply_import, tia_search_export, tia_trace_symbol). Deviations are minor: noun-phrase names like tia_doctor and tia_hmi_authoring_capabilities, the adjective-first tia_fast_lookup, and one tool (plc_probe_ports) outside the tia_ prefix.

    Tool Count2/5

    47 tools is far beyond a comfortably scoped surface, and the count is inflated by parallel classic/Unified HMI variants and three-stage plan/apply pipelines. Many tools are legitimate, but the set is large enough that discovery and selection become a burden rather than an aid.

    Completeness3/5

    The domain surface is broad: session preparation, live queries, export indexing, symbol/data-flow tracing, block import with rollback, and HMI inspect/plan/apply/export for both classic and Unified. However, there are notable gaps—no object deletion, no PLC download or online monitoring, no alarm or recipe authoring, and PLC program creation is limited to importing pre-authored Simatic ML candidates.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      C
      maintenance
      MCP server that connects AI assistants to Siemens TIA Portal via the Openness API. AI-assisted PLC programming, project management, hardware configuration, cross-reference analysis, and deployment. 19 tools, 230 actions.
      60
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      An MCP server for controlling Siemens TIA Portal, enabling AI agents to connect, read PLC tags, list blocks, inspect project structure, and compile projects. This community edition provides 5 read-only tools under the MIT license.
      MIT