MCP server for Siemens TIA Portal automation, providing tools to connect, manage projects, export/import blocks and types, and analyze PLC software
TIA Portal MCP server has 28 tools with basic naming and descriptions, but significant quality gaps. All tools have names starting with action verbs (Connect, Disconnect, GetState, etc.), which is positive. However, descriptions are uniformly terse (10-50 chars), providing minimal context for LLM tool selection. Input schemas are present but minimal: most tools have 0-2 parameters with only type and description fields, lacking enums, constraints, ranges, or validation guidance. No output schemas are documented. Error handling is generic (McpException with error codes) without recovery guidance. Tool composition is reasonable (single responsibility), but parameter descriptions lack actionable detail (e.g., 'path: defines the path to the project' does not specify format, constraints, or examples). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels (READ_ONLY, WRITE, IRREVERSIBLE). Security: no evidence of secret injection, permission gates, or audit logging in visible code.
Apply analog patch to project
Close the current TIA-Portal project
Compile PLC software
Connect to TIA-Portal
Disconnect from TIA-Portal
Export blocks from PLC software
Export blocks as documents (.s7dcl/.s7res format)
Export types from PLC software
All tool descriptions are under 50 characters and lack context for LLM selection. Current descriptions are bare action statements.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | <=2025-11-25 | v2 |
Generate PLC blocks from an external source file such as .scl
Get analog channels from project analysis
Get analog patch preview from project analysis
Get information about a specific block
Get database members from project analysis
Get information about a specific device
Get information about a device item
Get all devices in the current project
Get parameter databases from project analysis
Get open local projects
Get the project structure/tree on the current TIA Portal project
Get information about PLC software
Get the structure/tree of a specific PLC software showing blocks and types
Get the state of the TIA-Portal MCP server
Get tag usages from project analysis
Get information about a user-defined type
Import a single block from SIMATIC SD documents (.s7dcl/.s7res) (V20+)
Open a TIA-Portal local project
Save current TIA-Portal project with a new name
Save the current TIA-Portal local project
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels declared (READ_ONLY, WRITE, IRREVERSIBLE). ApplyAnalogPatch is marked IRREVERSIBLE but has no annotation to warn LLMs. This violates pattern:tool-annotation and increases risk of accidental destructive operations.
Parameter descriptions lack actionable constraints. E.g., 'path: defines the path to the project' does not specify file extension, absolute vs relative, or validation rules. OpenProject validates .apXX extension in code but does not document it in the parameter description, forcing LLMs to guess.
No output schemas documented. Tools return ResponseConnect, ResponseState, ResponseGetProjects, etc., but the structure of these response objects is not visible in the provided code. LLMs cannot plan downstream tool calls without knowing what fields are returned.
Error handling is generic (McpException with error codes) without recovery guidance. Per pattern:recovery-guide, errors should tell the LLM what to do next. E.g., 'Invalid project file extension. Use .apXX for projects' is good, but most tools lack this level of detail.