MCP server for Siemens TIA Portal project automation, providing tools for PLC block management, HMI operations, hardware configuration, and cross-reference analysis
TiaMcp defines 23 tools with basic schemas and descriptions, but exhibits significant quality gaps. All tools have descriptions (10-200 chars, mostly 80-150), and input schemas are present with parameter types. However, descriptions lack LLM-optimization guidance (no 'when to use', no prerequisites, no recovery hints). Parameter descriptions are minimal (5-30 chars). Output schemas are completely undocumented, no tool declares what fields it returns, forcing LLMs to guess. Error handling is absent from tool definitions; the server catches exceptions but provides no recovery guidance. Tool names are action-verb based (list, export, import, delete, compile) which is good, but several tools combine multiple concerns (e.g., 'export-xml' handles both graphical and text blocks; 'import-scl' does validation AND import). No tool declares idempotency, destructiveness, or read-only hints. Composition is weak: tools like 'where-used' and 'block-deps' overlap in intent; 'crossref-report' duplicates functionality. Per-tool scores average 42 due to missing output schemas and weak descriptions.
List all symbols that a given block depends on (symbols it references)
Display the call tree of a block, recursively expanding all FB/FC calls it makes (downward dependencies)
Display the callers tree of a block, recursively showing all blocks that reference it (upward dependencies)
Compile a PLC device and report compilation errors/warnings
Generate a full project cross-reference report in Markdown table format showing each block's dependencies and callers
Delete a PLC block from the project after checking for references and confirming no other blocks depend on it
No output schemas documented for any tool. LLMs cannot infer what fields are returned, forcing guesswork and downstream lookup calls.
Parameter descriptions are minimal (5-30 chars) and lack actionable guidance. E.g., 'outDir' is described as 'Optional output directory' but does not explain format, default behavior, or what happens if omitted.
Tool descriptions lack LLM-optimization guidance: no 'when to use', no prerequisites, no recovery hints. E.g., 'compile' does not explain when to call it vs other tools or what errors mean.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | <=2025-11-25 | v2 |
Display detailed information about a device including model, order number, author, comment, and CPU/module firmware versions
List all devices in the project with their types (PLC/HMI/other), model names, order numbers, and GSD/distributed IO status
Display the module tree of a device showing racks, slots, and modules (both central and distributed IO)
Display subnet/IO system topology and network interface node addresses for distributed IO network troubleshooting
Export SCL/STL source code from a PLC block to plaintext, with optional output directory for saving a copy
Export any PLC block (including graphical blocks LAD/FBD/GRAPH) as SimaticML XML, with optional plaintext copy to output directory
Identify dead code candidates: blocks and DBs that are not referenced by any other block in the project
List all HMI devices with counts of screens, variable tables, variables, and connections
Probe HMI device capabilities: screens, screen items, variables, connections, and attempt screen export to verify plaintext access
List all HMI device connections
Display the screen folder tree structure for all HMI devices
List HMI variables from tag tables with optional filtering by table name and variable name substring
Display the template screen (master page) tree for all HMI devices
Import plaintext SCL source code into the project, creating or overwriting PLC blocks, with optional dry-run preview and device selection
Import SimaticML XML block definition into the project, creating or overwriting blocks, with optional dry-run and device selection
List all PLC blocks in the current project with their names, types, languages, protection status, and paths
Find all blocks that reference a given symbol or member path (cross-reference query)
No tool declares destructiveness, idempotency, or read-only status. 'delete-block' and 'import-scl' are destructive but unmarked; agents cannot reason about retry safety or confirmation requirements.
Overlapping tool intent: 'where-used' and 'block-deps' both analyze dependencies; 'crossref-report' duplicates both. LLMs waste reasoning cycles choosing between them.