TwinCAT Validator MCP Server

TwinCAT Validator MCP Server

An MCP server for validating, auto-fixing, and scaffolding TwinCAT 3 XML files using deterministic code quality tools and IEC 61131-3 OOP checks. It enables AI assistants to perform structural validation, apply safe fixes, and generate canonical code skeletons for industrial automation projects.

Category
访问服务器

README

TwinCAT Validator MCP Server

Python Version License: MIT MCP Compatible Code style: black

An MCP server that validates, auto-fixes, and scaffolds TwinCAT 3 XML files (.TcPOU, .TcIO, .TcDUT, .TcGVL). Connect it to any LLM client to give your AI assistant reliable, deterministic TwinCAT code quality tooling — structural checks, 21 IEC 61131-3 OOP checks, auto-fix pipelines, and canonical skeleton generation.

Supported File Types

Extension Description
.TcPOU Program Organization Units — Function Blocks, Programs, Functions
.TcIO I/O configurations — Interfaces
.TcDUT Data Unit Types — Structures, Enums, Type Aliases
.TcGVL Global Variable Lists

Installation

pip install twincat-validator-mcp

From Source

git clone https://github.com/agenticcontrolio/twincat-validator-mcp.git
cd twincat-validator-mcp
pip install -e .

Claude Desktop Extension

The easiest way to use this server with Claude Desktop is via the one-click .dxt extension:

  1. pip install twincat-validator-mcp
  2. Download the .dxt file from the latest release
  3. Open Claude Desktop → Settings → Extensions → Install Extension

See dxt/README.md for full instructions and troubleshooting.

Connecting to an LLM Client

For other clients (Cursor, VS Code, Windsurf, Cline), the server uses stdio transport. Add the following to your client's MCP config file:

Cursor — .cursor/mcp.json

{
  "mcpServers": {
    "twincat-validator": {
      "command": "twincat-validator-mcp",
      "args": []
    }
  }
}

VS Code (Copilot / Continue) — .vscode/mcp.json

{
  "servers": {
    "twincat-validator": {
      "type": "stdio",
      "command": "twincat-validator-mcp",
      "args": []
    }
  }
}

Windsurf — ~/.codeium/windsurf/mcp_config.json

{
  "mcpServers": {
    "twincat-validator": {
      "command": "twincat-validator-mcp",
      "args": []
    }
  }
}

Cline (VS Code Extension)

{
  "mcpServers": {
    "twincat-validator": {
      "command": "twincat-validator-mcp",
      "args": [],
      "disabled": false
    }
  }
}

<details> <summary>From-source config (all clients)</summary>

Replace "command": "twincat-validator-mcp" with:

"command": "python",
"args": ["-m", "twincat_validator"],
"cwd": "/path/to/twincat-validator-mcp"

</details>

MCP Tools

Validation

Tool Description
validate_file Full validation of a single file — returns all issues with severity, location, code snippet, and explanation
validate_batch Validate multiple files matching glob patterns (e.g. ["**/*.TcPOU"])
validate_for_import Quick critical-only check to confirm a file is safe to import into TwinCAT
check_specific Run a named subset of validation checks on a file
get_validation_summary Return a 0–100 health score with issue counts by severity
suggest_fixes Generate prioritized fix recommendations from a validation result

Auto-fix

Tool Description
autofix_file Apply all safe auto-fixes to a single file in deterministic order
autofix_batch Apply auto-fixes to multiple files matching glob patterns
generate_skeleton Generate a canonical, deterministic XML skeleton for a given file type and subtype
extract_methods_to_xml Promote inline METHOD blocks from the main ST declaration into proper <Method> XML elements

Orchestration

Tool Description
process_twincat_single Full enforced pipeline for one file: validate → autofix → validate → suggest fixes if still unsafe
process_twincat_batch Full enforced pipeline across multiple files with summary or full response modes
verify_determinism_batch Run the strict pipeline twice and report per-file idempotence stability
get_effective_oop_policy Resolve the active OOP validation policy for a file or directory (walks ancestor dirs for .twincat-validator.json)
lint_oop_policy Validate the nearest .twincat-validator.json config file — checks key names, types, and value ranges
get_context_pack Return curated knowledge-base entries and OOP policy scoped to a workflow stage (pre_generation or troubleshooting)

Validation Checks

Structure & Format (critical — blocks import)

  • XML structure validity
  • GUID format ({xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx})
  • GUID uniqueness across elements
  • Property getter VAR blocks (missing VAR/END_VAR)
  • LineIds count consistency
  • File ending format

Style (warning — advisory)

  • Tab characters (TwinCAT requires spaces)
  • 2-space indentation
  • Element ordering
  • Naming conventions (FB_, PRG_, FUNC_, E_, ST_, I_, GVL_)
  • Excessive blank lines
  • CDATA formatting

OOP — IEC 61131-3 (21 checks)

Runs automatically when EXTENDS or IMPLEMENTS is detected. Skipped for procedural code.

Category Checks
Inheritance safety Extends visibility, extends cycle detection, diamond inheritance warning
Override correctness Override marker, override signature match, override super call
Interface compliance Interface contract, inheritance property contract, interface segregation
FB lifecycle FB_init signature, FB_init super call, FB_exit contract
Memory safety Dynamic creation attribute, pointer/delete pairing
Design quality THIS^ pointer consistency, abstract contract, abstract instantiation, composition depth
Property/method Property accessor pairing, method visibility consistency, method count

Auto-fix Capabilities

Fixes are applied in a deterministic, dependency-aware order:

  1. Tabs → 2 spaces (runs before indentation)
  2. File ending — fixes truncated ]]> after </TcPlcObject>
  3. Property newlines — normalizes declaration line breaks
  4. CDATA formatting — corrects CDATA section structure
  5. Property VAR blocks — inserts missing VAR/END_VAR in getters
  6. Excessive blank lines — reduces to max 2 consecutive
  7. Indentation — normalizes to 2-space multiples
  8. GUID case — uppercases hex to canonical lowercase
  9. LineIds — experimental generation (marked unsafe, opt-in only)

Running autofix twice on the same file produces byte-identical output (idempotency guaranteed).

Intent-Aware OOP Enforcement

All tools accept an intent_profile parameter:

Value Behavior
"auto" (default) Detects OOP patterns (EXTENDS/IMPLEMENTS) automatically; runs OOP checks only when found
"procedural" Skips all 21 OOP checks regardless of file content
"oop" Always runs OOP checks

Batch tools scan all .TcPOU files to resolve "auto" once at the batch level.

Health Score

Files are scored 0–100 based on issue counts:

Deduction Severity
−25 pts Critical / error
−5 pts Warning
−1 pt Info
Score Rating
90–100 Excellent — production ready
70–89 Good — minor issues
50–69 Needs work
0–49 Critical issues present

Target ≥ 90 for all production files.

MCP Resources

URI Description
validation-rules:// All 34 check definitions
fix-capabilities:// All 9 fix definitions with complexity and risk level
naming-conventions:// TwinCAT naming patterns by file type
config://server-info Server metadata and capability summary
knowledge-base:// Full LLM-friendly knowledge base
knowledge-base://checks/{check_id} Explanation, examples, and common mistakes for one check
knowledge-base://fixes/{fix_id} Algorithm and examples for one fix
generation-contract:// Deterministic generation contracts for all file types
generation-contract://types/{file_type} Contract for TcPOU, TcDUT, TcGVL, or TcIO
oop-policy://defaults Default OOP policy values
oop-policy://effective/{target_path} Resolved OOP policy for a path

MCP Prompts

8 reusable prompt templates for canonical LLM workflows — covering single-file generation, batch validation, OOP scaffolding, determinism verification, and troubleshooting flows. Accessible via your MCP client's prompt interface.

Agent Guide

AGENT.md is an example guide prompt that tells your LLM agent exactly how to use this server — which tools to call, in what order, how to route intent (procedural vs OOP), stop conditions, and the reporting contract. Copy it into your system prompt or agent instructions and customise it to match your workflow.

Recommended Workflow

The pattern for any TwinCAT generation task — no code is written until the user has approved the plan.

flowchart LR
    A([User Prompt]) --> B[📋 Plan\nLLM produces plan file\nand stops]
    B --> C{User reviews\nand approves?}
    C -- No --> B
    C -- Yes --> D[⚙️ Implement\nLLM generates\nTwinCAT artifacts]
    D --> E[✅ Validate\nMCP server validates,\nauto-fixes, confirms safety]
    E --> F([Done])

    style A fill:#4a90d9,color:#fff,stroke:none
    style F fill:#27ae60,color:#fff,stroke:none
    style C fill:#f39c12,color:#fff,stroke:none

After approval, the LLM follows this MCP tool sequence:

flowchart TD
    START([Plan approved by user]) --> CTX

    CTX["get_context_pack\n(stage=pre_generation)"]
    CTX --> POLICY["get_effective_oop_policy\n(if OOP task)"]
    POLICY --> SKE
    CTX --> SKE

    SKE["generate_skeleton\nfor each artifact"]
    SKE --> WRITE["LLM writes\nST content into files"]

    WRITE --> ORCH

    subgraph ORCH_LOOP ["Orchestration loop (max 3 iterations)"]
        ORCH["process_twincat_single\nor process_twincat_batch"]
        ORCH --> SAFE{safe_to_import\n&& safe_to_compile?}
        SAFE -- Yes --> DET
        SAFE -- No --> BLOCKED{no_progress\nor iter >= 3?}
        BLOCKED -- No --> KB["get_context_pack\n(stage=troubleshooting,\ncheck_ids=blockers)"]
        KB --> FIX["LLM applies\none focused correction"]
        FIX --> ORCH
        BLOCKED -- Yes --> FAIL([Report blocked —\nstop])
    end

    DET["verify_determinism_batch\n(second pass — no changes expected)"]
    DET --> STABLE{stable?}
    STABLE -- No --> ORCH
    STABLE -- Yes --> DONE([Report done ✅\nsafe_to_import, safe_to_compile,\nblocking_count=0, content_changed=false])

    style START fill:#4a90d9,color:#fff,stroke:none
    style DONE fill:#27ae60,color:#fff,stroke:none
    style FAIL fill:#e74c3c,color:#fff,stroke:none
    style BLOCKED fill:#f39c12,color:#fff,stroke:none
    style SAFE fill:#f39c12,color:#fff,stroke:none
    style STABLE fill:#f39c12,color:#fff,stroke:none

See EXAMPLE_PROMPT.md for a complete worked prompt using this pattern.

Configuration

Config files live in twincat_validator/config/ inside the installed package. To locate them:

import twincat_validator, os
print(os.path.join(os.path.dirname(twincat_validator.__file__), "config"))
File Purpose
validation_rules.json Check definitions — severity, category, auto_fixable flag
fix_capabilities.json Fix definitions — complexity, risk level, deterministic order
naming_conventions.json Naming patterns by file type and subtype
knowledge_base.json LLM-friendly explanations and examples for all checks and fixes
generation_contract.json Canonical XML generation rules and forbidden patterns

Restart the server after editing config files to reload.

Development

pip install -e ".[dev]"

# Run tests
pytest tests/

# Format
black --line-length=100 .

# Lint
ruff check .

# Type check
mypy twincat_validator/server.py --ignore-missing-imports

# Full CI suite (py311 + py312, lint, type check)
tox

License

MIT — see LICENSE for details.

Authors

Agentic Control - Jaime Calvente Mieres: design, architecture, and domain expertise

Built with the assistance of Claude (Anthropic) and Codex (OpenAI).

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选