TwinCAT验证器MCP服务器
](https://www.python.org/downloads/)   
一个MCP服务器,用于验证、自动修复和构建TwinCAT 3 XML文件(.TcPOU, .TcIO, .TcDUT, .TcGVL).将其连接到任何LLM客户端,为您的AI助手提供可靠、确定的TwinCAT代码质量工具——结构检查、21个IEC 61131-3 OOP检查、自动修复管道和规范骨架生成。
支持的文件类型
| 扩展 | 描述 |
|---|---|
.TcPOU | 程序组织单元——功能块、程序、功能 |
.TcIO | I/O配置——接口 |
.TcDUT | 数据单元类型——结构、枚举、类型别名 |
.TcGVL | 全局变量列表 |
安装
pip install twincat-validator-mcp来源
git clone https://github.com/agenticcontrolio/twincat-validator-mcp.git
cd twincat-validator-mcp
pip install -e .Claude桌面扩展
将此服务器与Claude Desktop一起使用的最简单方法是单击 .dxt 扩展名:
pip install twincat-validator-mcp- 下载
.dxt文件来自 最新版本 - 打开克劳德桌面→ 设置 → 扩展 → 安装扩展
看 dxt/README.md 了解完整的说明和故障排除。
连接到LLM客户端
对于其他客户端(Cursor、VS Code、Windsurf、Cline),服务器使用 标准 运输。将以下内容添加到客户端的MCP配置文件中:
光标-- .cursor/mcp.json
{
"mcpServers": {
"twincat-validator": {
"command": "twincat-validator-mcp",
"args": []
}
}
}VS代码(复制/继续)-- .vscode/mcp.json
{
"servers": {
"twincat-validator": {
"type": "stdio",
"command": "twincat-validator-mcp",
"args": []
}
}
}风帆冲浪-- ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"twincat-validator": {
"command": "twincat-validator-mcp",
"args": []
}
}
}Cline(VS代码扩展)
{
"mcpServers": {
"twincat-validator": {
"command": "twincat-validator-mcp",
"args": [],
"disabled": false
}
}
}From-source config (all clients)
替换 "command": "twincat-validator-mcp" 与:
"command": "python",
"args": ["-m", "twincat_validator"],
"cwd": "/path/to/twincat-validator-mcp"MCP工具
验证
| 工具 | 说明 |
|---|---|
validate_file | 对单个文件的完全验证--返回所有问题及其严重性、位置、代码片段和解释 |
validate_batch | 验证与glob模式匹配的多个文件(例如。 ["**/*.TcPOU"]) |
validate_for_import | 仅进行快速关键检查,以确认文件可以安全导入TwinCAT |
check_specific | 对文件运行验证检查的命名子集 |
get_validation_summary | 返回0-100的健康评分,并按严重程度列出问题计数 |
suggest_fixes | 根据验证结果生成优先级修复建议 |
自动修正
| 工具 | 说明 |
|---|---|
autofix_file | 以确定的顺序将所有安全的自动修复程序应用于单个文件 |
autofix_batch | 对与glob模式匹配的多个文件应用自动修复 |
generate_skeleton | 为给定的文件类型和子类型生成规范的、确定性的XML骨架 |
extract_methods_to_xml | 推广内联 METHOD 从主ST声明到适当的块 `` XML元素 |
编排
| 工具 | 说明 |
|---|---|
process_twincat_single | 一个文件的完全强制管道:验证→ 自动修复→ 验证→ 如果仍然不安全,建议修复 |
process_twincat_batch | 通过摘要或完整响应模式在多个文件之间完全强制执行管道 |
verify_determinism_batch | 运行两次严格的管道,并报告每个文件的幂等性稳定性 |
get_effective_oop_policy | 解析文件或目录的活动OOP验证策略(遍历祖先目录 .twincat-validator.json) |
lint_oop_policy | 验证最近的 .twincat-validator.json 配置文件--检查键名、类型和值范围 |
get_context_pack | 将精心策划的知识库条目和OOP策略返回到工作流阶段(pre_generation 或 troubleshooting) |
验证检查
结构和格式(关键——块导入)
- XML结构有效性
- GUID格式(
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}) - 跨元素的GUID唯一性
- 属性吸气剂VAR块(缺失
VAR/END_VAR) - LineIds计数一致性
- 文件结束格式
风格(警告-建议)
- 制表符(TwinCAT需要空格)
- 2-空间压痕
- 元素排序
- 命名约定(
FB_,PRG_,FUNC_,E_,ST_,I_,GVL_) - 空白行过多
- CDATA格式化
OOP——IEC 61131-3(21次检查)
在以下情况下自动运行 EXTENDS 或 IMPLEMENTS 被检测到。跳过过程代码。
| 类别 | 检查 |
|---|---|
| 继承安全 | 扩展可见性、扩展循环检测、菱形继承警告 |
| 覆盖正确性 | 覆盖标记、覆盖签名匹配、覆盖超级调用 |
| 接口合规性 | 接口契约、继承属性契约、接口隔离 |
| FB生命周期 | FB_init 签名, FB_init 超级通话, FB_exit 合同 |
| 内存安全 | 动态创建属性,指针/删除配对 |
| 设计质量 | THIS^ 指针一致性、抽象契约、抽象实例化、组合深度 |
| 属性/方法 | 属性访问器配对、方法可见性一致性、方法计数 |
自动修复功能
修复以确定性、依赖性感知的顺序应用:
- 标签页 → 2 空格(缩进前的空格)
- 文件结束 --修复截断
]]>之后 `` - 物业新线 --规范声明换行符
- CDATA格式化 --更正CDATA节结构
- 房地产VAR区块 --插入物缺失
VAR/END_VAR吸气器 - 空白行过多 --减少到最多连续2次
- 缩进 --归一化为2空间倍数
- GUID案例 --大写十六进制到规范小写
- LineId --实验性生成(标记为不安全,仅限选择加入)
对同一文件运行两次autofix会产生字节相同的输出(保证幂等性)。
意图感知OOP执行
所有工具都接受 intent_profile 参数:
| 价值观 | 行为 |
|---|---|
"auto" (默认) | 检测OOP模式(EXTENDS/IMPLEMENTS)自动;仅在找到时运行OOP检查 |
"procedural" | 跳过所有21个OOP检查,无论文件内容如何 |
"oop" | 始终运行OOP检查 |
批处理工具扫描所有 .TcPOU 要解析的文件 "auto" 一次在批处理级别。
健康评分
根据问题计数,文件得分为0-100:
| 扣除 | 严重程度 |
|---|---|
| −25分 | 严重/错误 |
| −5分 | 警告 |
| −1分 | 信息 |
| 分数 | 评分 |
|---|---|
| 90–100 | 优秀——生产就绪 |
| 70–89 | 好-小问题 |
| 50–69 | 需要工作 |
| 0–49 | 存在关键问题 |
所有生产文件的目标值≥90。
MCP资源
| URI | 描述 |
|---|---|
validation-rules:// | 所有34个检查定义 |
fix-capabilities:// | 所有9个具有复杂性和风险级别的修复定义 |
naming-conventions:// | 按文件类型列出的TwinCAT命名模式 |
config://server-info | 服务器元数据和功能摘要 |
knowledge-base:// | 完整的LLM友好知识库 |
knowledge-base://checks/{check_id} | 一次检查的解释、示例和常见错误 |
knowledge-base://fixes/{fix_id} | 一次修复的算法和示例 |
generation-contract:// | 所有文件类型的确定性生成契约 |
generation-contract://types/{file_type} | 合同 TcPOU, TcDUT, TcGVL,或 TcIO |
oop-policy://defaults | 默认OOP策略值 |
oop-policy://effective/{target_path} | 已解决路径的OOP策略 |
MCP提示
8个可重用的提示模板,用于规范的LLM工作流,涵盖单文件生成、批验证、OOP脚手架、确定性验证和故障排除流程。可通过MCP客户端的提示界面访问。
代理指南
AGENT.md 是一个示例指南提示,告诉您的LLM代理如何使用此服务器-调用哪些工具、按何种顺序、如何路由意图(过程与OOP)、停止条件和报告约定。将其复制到您的系统提示或代理说明中,并对其进行自定义以匹配您的工作流程。
推荐工作流程
任何TwinCAT生成任务的模式——在用户批准计划之前,都不会编写代码。
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批准后,LLM遵循以下MCP工具顺序:
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看 示例\_ PROMPT.md 对于使用此模式的完整工作提示。
配置
配置文件位于 twincat_validator/config/ 在已安装的软件包内。要定位它们:
import twincat_validator, os
print(os.path.join(os.path.dirname(twincat_validator.__file__), "config"))| 文件 | 目的 |
|---|---|
validation_rules.json | 检查定义--严重性、类别、auto_fixable标志 |
fix_capabilities.json | 修正定义——复杂性、风险水平、确定性顺序 |
naming_conventions.json | 按文件类型和子类型命名模式 |
knowledge_base.json | LLM友好的解释和所有检查和修复的示例 |
generation_contract.json | 规范的XML生成规则和禁止的模式 |
编辑配置文件以重新加载后重新启动服务器。
发展
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许可证
麻省理工学院——见 许可证 了解详情。
作者
代理控制-Jaime Calvente Mieres:设计、架构和领域专业知识
