TIA Portal MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| TIA_MCP_API_DLL_<V> | No | Openness API DLL per version, e.g. TIA_MCP_API_DLL_V20, TIA_MCP_API_DLL_V15_1, TIA_MCP_API_DLL_V17. | discovered |
| TIA_MCP_OUTPUT_ROOT | No | Default snapshot output root for tia_export_project_index / --export-snapshot. | <workspace>\tia-out |
| TIA_MCP_LIVE_CORE_EXE | No | Override the home-version executable of the live core companion. | tools\... |
| TIA_MCP_V15_1_API_DLL | No | Legacy Openness API DLL variable for V15.1. | discovered |
| TIA_MCP_WORKSPACE_ROOT | No | Where snapshots, import evidence (tia-openness-import/) and HMI exports (tia-exports/) are written. | package root |
| TIA_MCP_OPENNESS_API_DLL | No | Legacy Openness API DLL variable for V20. | discovered |
| TIA_MCP_OPENNESS_API_XML | No | Optional API XML documentation. | beside the DLL |
| TIA_MCP_V15_1_SNAPSHOT_EXE | No | Override the home-version executable of the V15.1 snapshot companion. | tools\... |
| TIA_MCP_ALLOWED_PROBE_HOSTS | No | Exact host allowlist for the probe, e.g. 192.0.2.10,plc-host. | 127.0.0.1,localhost |
| TIA_MCP_ALLOWED_PROBE_PORTS | No | Port allowlist for the probe. | 102,4840,80,443 |
| TIA_MCP_HMI_READ_TIMEOUT_MS | No | HMI companion limit for inspect/export (10000-3600000; bundle export gets at least 600000). | 120000 |
| TIA_MCP_ALLOWED_EXPORT_ROOTS | No | Extra semicolon-separated roots that tools may read exports from or write to. | |
| TIA_MCP_ALLOW_ANY_LOCAL_PATH | No | Disable the export/output root allowlist for a deliberate session. | off |
| TIA_MCP_ENABLE_NETWORK_PROBE | No | Enable plc_probe_ports (read-only TCP reachability probe). | off |
| TIA_MCP_HMI_WRITE_TIMEOUT_MS | No | HMI companion limit for imports, edits and project creation. Expiry kills the companion and reports an unknown write outcome. | 900000 |
| TIA_MCP_ALLOWED_PROJECT_ROOTS | No | Semicolon-separated roots for explicit TIA project paths. | %USERPROFILE%\Documents\Automation |
| TIA_MCP_ALLOW_ANY_PROJECT_PATH | No | Disable the project root allowlist for a deliberate session. | off |
| TIA_MCP_LIVE_CORE_IDLE_TIMEOUT_MS | No | Idle timeout of a prepared live session (30000-86400000). | 1 hour |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| tia_inspect_unified_hmiA | 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. |
| tia_create_unified_hmi_edit_planA | 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. |
| tia_apply_unified_hmi_editB | 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. |
| tia_generate_unified_hmi_designA | 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. |
| tia_create_unified_hmi_project_planA | 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. |
| 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). |
| tia_create_hmi_project_planA | 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. |
| 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). |
| tia_generate_hmi_designA | 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. |
| tia_preview_hmi_designA | 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. |
| tia_edit_hmi_textB | 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. |
| tia_update_hmi_objectA | 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. |
| tia_export_hmi_bundleB | 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. |
| tia_create_hmi_import_planB | 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. |
| tia_apply_hmi_importA | 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. |
| tia_hmi_authoring_capabilitiesB | Report separate HMI software/version adapters and implemented authoring boundaries. Availability is not live verification. |
| tia_export_hmi_nativeA | 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. |
| tia_edit_hmi_nativeA | 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. |
| tia_read_hmi_alarm_exportA | 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. |
| tia_analyze_hmi_alarmsA | 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. |
| tia_list_hmi_targetsB | List exact HMI software names, hardware paths and API types in a prepared project without reading PLC programs or exporting configuration. |
| tia_export_hmi_configurationB | 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. |
| plc_probe_portsA | Read-only TCP connectivity probe for likely S7/OPC UA/Web API endpoints. Does not authenticate or read PLC data. |
| tia_doctorA | 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 |
| tia_inspect_engineeringB | 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. |
| tia_prepare_live_sessionB | 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. |
| tia_get_graph_contextA | 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. |
| tia_search_live_objectsA | 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. |
| tia_navigate_live_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. |
| tia_query_live_projectA | 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. |
| tia_get_current_ui_contextB | 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. |
| 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. |
| tia_list_export_indexesA | 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. |
| tia_export_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. |
| tia_read_export_indexB | 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. |
| tia_build_reference_indexA | 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. |
| tia_trace_symbolB | 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. |
| tia_trace_data_flowC | 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. |
| tia_save_analysis_noteB | 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. |
| tia_search_analysis_notesB | Search persisted model-authored engineering notes and report whether each note still matches the current export signature. |
| tia_get_current_blockA | 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. |
| tia_read_blockA | 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. |
| tia_search_exportA | 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. |
| tia_trace_call_graphA | 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. |
| tia_fast_lookupA | 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. |
| tia_create_import_planA | 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. |
| tia_apply_importA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 47 tools
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.
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.
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.
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.