autoshop
This server lets you inspect, modify, convert, and compile H3U PLC projects via MCP without opening AutoShop's GUI.
capabilities: List available tools, supported formats, limitations, and native runtime status.
project_inspect: Inspect project type, POU/file list, SHA256 hashes, and support levels.
il_read: Read plaintext IL POU source (LF, GBK decoded).
il_patch_copy: Create a new patched project copy by uniquely matching and replacing IL text, with stale artifacts quarantined.
project_diff: Compare two project directories for file/IL/config changes.
package_project: Package source/config into a ZIP with hash manifests, excluding stale build outputs by default.
native_compile_probe: Statically inspect PE/install directory for architecture, hashes, and compile-related exports without executing DLLs.
native_compile_copy: Compile H3U IL/LD in a fresh copy using verified original DLLs, validating coverage and unchanged config, then output a ZIP.
ld_to_il_copy: Convert LD to editable IL via original interface, delivering a new copy only when compiled artifacts match byte-for-byte.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@autoshop compile my H3U project at C:/PLC/source to C:/PLC/build-001"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AutoShop MCP
不用操作 AutoShop 窗口,通过 MCP 或命令行读取、修改、转换和编译 H3U PLC 工程。
本项目提供 Python 工具层和一个独立的 x86 原生进程。原生进程调用本机 AutoShop 的编译、转换 DLL,不启动 AutoShop 主程序,不模拟鼠标键盘。适合接入 AI 编程工具,也可以直接写脚本调用。
0.4.0:新增 IL 转梯形图、全局符号表读取和写回,共 19 个工具。 已用原厂接口验证,转换和写回都要经过独立回读、重新编译和机器码对照。完整 H3U 运行仿真尚未打通,具体调查结果见 验证记录。
目前适配一个经过验证的 H3U 运行库组合,不是通用 AutoShop SDK。是否兼容以 DLL 的 SHA-256 为准,不能只看安装目录或软件版本号。原厂 DLL、安装包和现场 PLC 工程均不随本项目发布。
能做什么
工具 | 作用 |
| 查看支持范围、工具参数和原生运行库状态 |
| 读取工程索引、程序块、文件类型和文件哈希 |
| 读取受支持的未加密 IL 指令文本 |
| 按原文件哈希和精确文本修改 IL,生成新工程副本 |
| 比较两个工程的源码、配置和其他文件 |
| 打包离线工程,排除可能过期的编译产物 |
| 静态检查 PE 文件和导出,不执行 DLL |
| 调用原厂编译器,生成经过检查的新工程和 ZIP |
| 原厂 LD → IL 转换,转换前后机器码一致才交付副本 |
| 原厂 IL → LD,回读 IL 并核对机器码;原厂重排分支导致指令变化时拒绝交付 |
| 读取全局符号表中的名称、地址、注释和文件哈希 |
| 新增或修改全局符号;独立回读、机器码不变、其他配置不变才交付 |
| 整工程 LD → IL,逐块验证等价后统一编译打包 |
| 多文件、多处补丁同时校验,全部通过才生成副本 |
| 可选转换、批量修改、原厂编译和打包的一次调用 |
| 搜索 IL 文本,返回文件、行号和上下文 |
| 查询显式地址的引用位置和已识别指令的读写分类 |
| 列出缺失文件、多处 OUT、跨程序块写入等复核线索 |
| 导出 UTF-8 指令文本、引用表、检查结果和哈希清单 |
暂不提供 ST、H5U、受保护工程的原生编译,也不提供连接 PLC、下载、运行或停止接口。编译成功说明通过了编译检查,不等于设备动作已完成现场验证。
Related MCP server: OpenFab MCP
安装
离线文件工具需要 Python 3.10 或更高版本。原生编译和 LD 转换还需要:
Windows,以及自行安装的 AutoShop 和匹配的 VC90 MFC 运行库。
Visual Studio 2022 Build Tools,安装“使用 C++ 的桌面开发”和 Windows SDK。
与 profile.json 完全一致的原厂 DLL。当前 profile 标识为
h3u-4.10.2.4-local-1;它是验证组合的标识,不代表支持所有同名版本。
在 PowerShell 中执行:
git clone https://github.com/JonathanChan-geek/autoshop-mcp.git
cd autoshop-mcp
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .
# 编译本项目的 x86 host;不需要复制原厂 DLL 到仓库。
.\src\autoshop_mcp\native\build.cmd
# 改成自己的安装目录。
$env:AUTOSHOP_INSTALL_DIR = 'C:\Program Files (x86)\AutoShop'
.\.venv\Scripts\python.exe -m autoshop_mcp capabilities检查输出中的 native_compile.available。为 false 时,mismatches 会列出缺少或不匹配的文件;离线读取和修改工具仍可使用。
工具会在安装目录和 Windows WinSxS 中查找匹配的 mfc90.dll。需要指定检查路径时可设置 AUTOSHOP_MFC_PATH。该变量不会改变 Windows 的 DLL 加载规则;原生进程仍会检查实际加载的 MFC 哈希。不支持通过改哈希跳过版本校验,适配其他版本需要重新核对内部接口。
命令行用法
参数通过 UTF-8 JSON 文件传入。project 是包含 .hcp 和配套文件的工程目录,dest 必须是尚不存在的新目录。
例如,将以下内容保存为 compile.json:
{
"project": "C:/PLC/source",
"dest": "C:/PLC/build-001"
}然后编译:
.\.venv\Scripts\python.exe -m autoshop_mcp native_compile_copy --params-file compile.json成功结果包含 ok: true、native_compiled: true、机器码哈希和诊断信息。目标目录中包含 project/、compiled-project.zip 以及构建记录。失败时保留诊断,不把旧 Output.prg 当作新结果。
其他参数示例在 examples 中。示例路径和指令仅供说明,使用前替换为自己的工程和修改内容。
常用流程:
project_inspect确认工程和程序块。如果要改的是 LD,用
ld_to_il_copy转换指定块。il_read取得指令和 SHA-256。il_patch_copy提交原哈希、精确旧文本和新文本,得到修改副本。project_diff核对范围,再用native_compile_copy编译修改副本。
package_project 只做离线打包,不表示原生编译成功。native_compile_probe 也只是静态检查,不能代替编译。
转回梯形图与符号表写回
修改 IL 后,调用 il_to_ld_copy,参数为 project、file、dest。它生成真正的 LD 文件、更新工程登记、移除副本中的旧 IL,并重新编译。回读比较只忽略空行和指令名后的分隔空白;指令、操作数或注释变化都会拒绝,机器码也必须完全相同。不是所有 IL 都能通过:部分分支被原厂重排 MPS/MRD/MPP,本版本会明确报错并保留原工程。
symbols_read 返回 VarList.gdt 的 SHA-256 和每行 index/name/address/comment。将哈希传给 symbols_patch_copy:
{
"project": "C:/PLC/source",
"dest": "C:/PLC/symbols-001",
"expected_sha256": "替换成 symbols_read 返回的 SHA-256",
"changes": [
{"index": -1, "name": "FeedReady", "address": "M100", "comment": "送料准备完成"}
]
}index: -1 表示新增;已有行用读取到的 index 修改,四个字段必须齐全。支持 GBK 中文和多行注释。当前只接受直接地址,拒绝新增重名或重地址,不支持删除、局部符号表或结构化配置编辑。地址语法检查不代表物理端子存在;写回必须保持机器码不变,不能借此重映射程序逻辑。
批量修改与一键编译
il_batch_patch_copy 和 project_build_copy 使用同一种补丁结构:
{
"project": "C:/PLC/source",
"dest": "C:/PLC/build-002",
"patches": [
{
"file": "MAIN.IL",
"expected_sha256": "替换成 il_read 返回的 64 位 SHA-256",
"edits": [
{"old_text": "OUT\t\t Y1\n", "new_text": "OUT\t\t Y2\n"}
]
}
]
}每个文件列一次,edits 可列多处。所有替换都以修改前的文本定位,要求唯一匹配且区间不重叠。后面的替换不会意外命中前面新写入的内容。任一文件检查失败都不会交付部分修改的工程。
把参数保存后调用 project_build_copy,可直接得到编译包。只要修改副本时调用 il_batch_patch_copy。如果还需要转换,建议先调用 project_convert_all_copy,读取转换后 IL 的哈希,再准备补丁;convert_all: true 合并执行时也必须使用转换后的 IL 哈希。
查信号、查交叉写入
{"project": "C:/PLC/all-il/project", "device": "Y2"}将上述参数交给 project_xref 可查询 Y2 的显式引用。project_audit 查多处 OUT、跨块写入及缺失文件;project_search 可按字面文本找指令、常数或注释。
这些工具只分析已登记的未保护 IL,返回 skipped_blocks 和 complete_source_coverage。要读完整源程序,先转换全部 LD。地址引用不展开双字隐含的相邻寄存器、批量范围、位地址和间接地址;未知指令返回 unknown。没有搜索结果不能据此断言某个地址绝对未使用,多处写入也不一定表示逻辑错误。详细边界见 能力说明。
接入 MCP
将下面的配置加入支持 stdio MCP 的客户端,路径按实际安装位置修改:
{
"mcpServers": {
"autoshop": {
"command": "C:/tools/autoshop-mcp/.venv/Scripts/python.exe",
"args": ["-m", "autoshop_mcp", "serve"],
"env": {
"AUTOSHOP_INSTALL_DIR": "C:/Program Files (x86)/AutoShop"
}
}
}
}客户端只调用工具即可,不需要打开 AutoShop。服务使用当前用户的文件权限,应只连接自己信任的客户端。
编译结果怎么检查
原工程只读;原厂代码在临时工程副本和独立子进程中运行。
加载前校验 DLL 指纹;原生进程另行检查实际加载的运行库。
清除旧编译缓存,确认所有程序块都有本次生成的中间文件。
检查原厂错误信息、编译完成信号,以及连续两次一致的新机器码。
检查源文件和配置字节是否被编译器改动;异常时不交付工程包。
LD → IL 转换会分别编译转换前后的工程,比较机器码是否逐字节一致。
IL → LD 额外检查转回 IL 的结果;新 LD 首次编译产生的原厂格式整理只允许影响目标块,随后再次回读及严格编译。
符号表写回只允许改变 VarList.gdt,并在新进程中读取验证、比较修改前后机器码。
实现与限制见 原生后端说明。
测试与贡献
.\.venv\Scripts\python.exe -m unittest discover -s tests -v公开测试使用代码生成的合成数据,覆盖文件处理、修改检查、打包和 MCP 通信;这些数据不是可下载到 PLC 的工程。GitHub Actions 在 Windows、Linux 上运行离线测试,并单独构建 x86 host。
原厂编译的集成测试需要你自己提供运行库和工程,默认跳过。配置方法见 测试说明。CI 通过不代表已在所有 AutoShop 版本或设备上验证。
欢迎提交 issue 和 PR。适配新版本时请附 DLL 指纹、复现步骤和验证结果,不要提交原厂二进制、客户工程或设备凭据。更多说明见 CONTRIBUTING.md。
许可证
本仓库原创代码采用 MIT License。AutoShop 及其原厂组件归各自权利人所有,需自行取得并遵守其许可;不属于本仓库 MIT 授权范围。本项目为独立社区项目,与汇川无官方隶属或背书关系。
Available Tools
19 toolscapabilitiesA
工具清单、支持格式矩阵、限制与原生运行库状态。
Inputs: no named parameters.
il_batch_patch_copyA
一次核对多文件、多处非重叠补丁;成功才发布副本,隔离旧产物并核对其余文件。
Inputs: dest (required), patches (required), project (required).
il_patch_copyB
在不改动源工程的前提下,生成打了唯一匹配文本补丁的新工程副本,并把失效缓存/陈旧产物移入隔离区。
Inputs: dest (required), file (required), project (required), new_text (required), +3 more.
il_readA
读取纯明文 .IL POU 的 IL 源码文本(LF 换行,GBK 解码)。
Inputs: file (required), project (required).
il_to_ld_copyA
原厂 IL 转梯形图;独立回读 IL、清缓存编译并要求机器码一致后交付。
Inputs: dest (required), file (required), project (required), install_dir.
ld_to_il_copyA
调用原厂接口将指定 LD 转成可编辑 IL,仅转换前后编译产物逐字节一致时交付新副本。无需 GUI。
Inputs: dest (required), file (required), project (required), install_dir.
native_compile_copyA
在全新副本中调用原厂 x86 DLL 编译 H3U IL/LD;校验完整覆盖、稳定产物和配置不变,成功后输出工程 ZIP。无需 GUI,不连接 PLC。
Inputs: dest (required), project (required), install_dir.
native_compile_probeA
静态读取 PE 证据/安装目录,报告架构、SHA256 与编译相关导出;不执行 DLL、不假编译。
Inputs: dlls, evidence, install_dir.
package_projectA
打包源码与配置(排除派生表/陈旧编译结果),输出 ZIP 与 SHA256/CRC32 清单。
Inputs: out_zip (required), project (required), include_stale.
project_auditA
静态检查缺失文件、多处 OUT、跨块写入和未知指令;不是运行仿真或逻辑合格证明。
Inputs: project (required).
project_build_copyA
可选全部 LD 转换、多文件补丁、原厂编译和打包的一次调用;失败不发布中间工程。
Inputs: dest (required), project (required), patches, convert_all, +1 more.
project_convert_all_copyA
将工程内全部 LD 依次转成 IL,每次验证机器码等价,最后统一编译交付。
Inputs: dest (required), project (required), install_dir.
project_diffA
对比两个工程目录:新增/删除/改动文件、IL 文本 diff、配置与索引变化。
Inputs: after (required), before (required).
project_exportB
导出 UTF-8 IL 文本、哈希、引用和静态检查 JSON 到新目录,供审查。
Inputs: dest (required), project (required).
project_inspectB
列出工程机型、POU/文件类型、每个文件的 SHA256、支持级别与派生表。
Inputs: project (required).
project_searchA
搜索已登记 IL 的字面文本,返回文件、行号和上下文;明确未覆盖的 LD/保护块。
Inputs: query (required), project (required), limit, context, +1 more.
project_xrefA
列出显式软元件地址的指令和读写分类;范围、隐式双字和间接地址不作完整性保证。
Inputs: project (required), device.
symbols_patch_copyA
新增或修改全局符号,独立进程回读并要求前后机器码一致;只交付新副本。
Inputs: dest (required), changes (required), project (required), expected_sha256 (required), +1 more.
symbols_readA
原厂接口读取全局符号名称、地址、注释;只在工程副本中运行。
Inputs: project (required), install_dir.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Each tool has a clearly distinct purpose—read, patch, convert, compile, inspect, etc.—with no overlapping functionality. Even the copy variants are differentiated by their operation (IL-to-LD, LD-to-IL, patch, batch patch, convert-all, build).
Names use underscores and lowercase but mix conventions: some are verb-noun (package_project), some noun-verb (project_search), and others are compound phrases (il_batch_patch_copy). The pattern is not uniform but still readable.
19 tools is on the higher side but fits the server's comprehensive scope of PLC code manipulation, offering both granular operations and a combined build tool. The count is justified, though it approaches the heavy range.
The toolset covers reading, patching, converting, compiling, inspecting, searching, auditing, exporting, diffing, and packaging. Minor gaps exist (e.g., no delete/restore), but core workflows for IL/LD conversion and patching are fully covered.
Maintenance
Related MCP Connectors
One MCP server for all your MCP servers: code mode, per-tool permissions, approvals and audit.
Create, update, and publish changelog entries on your Patchlog changelog from any MCP client.
Read and write shared BitsWeave context, projects, tasks, and work sessions through MCP.
Build, deploy and manage MaShop e-commerce projects from Claude, Cursor or any MCP client.
Related MCP Servers
- FlicenseAqualityBmaintenanceProvides read-only analysis of Mitsubishi GX Works3 PLC projects via MCP, enabling device tracing, cross-referencing, ladder inspection, linting, and report generation without modifying source projects.1575 PyPI10-
- AlicenseAqualityBmaintenanceEnables offline-first industrial manufacturing workflows by parsing, linting, and drafting FANUC .LS robot programs and analyzing STEP/STP CAD files through MCP tools.4Apache 2.0
- AlicenseAqualityBmaintenanceEnables lossless parsing, inspection, validation, simulation, and creation or editing of FATEK .ldr ladder-logic files through local stdio MCP tools, including a user-import-verified start/stop template. New files are written to an artifacts directory so existing files and original samples are never overwritten.233MIT
- AlicenseNot gradedqualityBmaintenanceEnables local stdio-based MCP integration with InoProShop/CODESYS for project structure reading, POU editing with verified writes, compilation, task configuration, and persistent session recovery.3MIT