RemoteConnect MCP Server
MCP-сервер RemoteConnect
MCP-сервер для Schneider Electric RemoteConnect и его логики UnitySoControl для устройств SCADAPack x70. Он обнаруживает парные файлы .PRJ/.RCZ/.STU/.STA и позволяет ИИ-агентам безопасно просматривать, редактировать, пересобирать и сохранять IEC-логику.
Вдохновлено tiaportal-mcp для Siemens TIA Portal. Там, где TIA Portal использует Openness API, Control Expert использует Unity Developer's Edition (UDE) COM-сервер автоматизации (PSBroker.PServerBroker) — этот сервер управляет им через pywin32 и предоставляет его как инструменты MCP через stdio.
AI agent ──MCP/stdio──> remoteconnect-mcp ──COM/UDE──> UnitySoControlЧто может ИИ
Проекты: создание с нуля для любого процессора из каталога оборудования (M340, M580, Premium, Quantum...), открытие/сохранение
.stu/.sta, импорт/экспорт.xef/.zefПросмотр: задачи, секции, переменные, типы DFB/DDT, информация о CPU/оборудовании, состояние сборки
Программирование: создание/чтение/удаление секций в ST, LD, FBD, SFC, IL; запись логики через импорт XML из Control Expert (ИИ читает XML существующей секции один раз и воспроизводит схему — проверено для всех пяти языков)
Оборудование: обойти полную топологию — шина → drop → стойка → модуль, добавить/удалить модули I/O по каталожному номеру, заменить CPU. Пример см. examples/io-modules.md
Modbus / DTM (проверено вживую на M580): просмотр топологии DTM, добавление ведомых DTM (
add_dtm("Modbus Device", ..., parent_dtm="BMEP58_ECPU_EXT")— идентификатор протоколаModbus, попытка выполняется автоматически), задание IP-адресов устройств, чтение состояния сканера (get_dtm_control_parameters) и добавление запросов сканирования Modbus (адреса чтения/записи + размеры) через редактирование набора данных master DTM с помощьюget_master_dtm_dataset/set_master_dtm_dataset— шаблонManagedModbusRequestс правилами нумерации встроен в описание инструмента; записанная строка сканирования получаетbuilt_okи отображается какModbusScanLineв конфигурации сканераСети (Premium/Quantum): создание логических Ethernet-сетей и настройка их конфигурации IP-сервиса
Переменные: список/создание/обновление/удаление глобальных переменных (включая тип, комментарий, адрес, начальное значение)
Сборка: анализ и сборка проекта, получение состояния сборки
UI: вызов окна Control Expert, чтобы человек мог наблюдать или вмешаться, и открытие редактора таблицы анимации в реальном времени (
open_animation_table) для отслеживания значений, пока ИИ запускает тестОнлайн (по выбору): подключение к ПЛК/симулятору, передача на устройство / получение данных, запуск/остановка
Живые значения (по выбору): чтение и запись значений работающего ПЛК/симулятора через Modbus TCP (
modbus_connect→read_tags/write_tags) — в API UDE/COM нет живого доступа к тегам, так что этот канал используется для тестирования логики на работающем контроллере (определяет теги%M/%MW; сначала зеркальте неклассифицированные данные DFB в%MW)
Related MCP server: control-expert-mcp
Требования
Windows с установленным и лицензированным EcoStruxure Control Expert (или Unity Pro) — проверено на Control Expert 14.0, но любая версия, регистрирующая
PSBroker.PServerBroker.1, должна работать (сервер автоматизации UDE поставляется с Control Expert; отдельный пакет UDE требуется только для документации)Python 3.10+ с
pywin32Сервер должен работать на той же машине, что и Control Expert (DCOM-удаление возможно, но здесь не настроено)
Установка
cd remoteconnect-mcp
python -m venv .venv
.venv\Scripts\pip install -e .Подключение AI-клиента
Сервер общается через MCP по stdio. Укажите клиенту на Python из виртуального окружения:
RemoteConnect / SCADAPack x70
RemoteConnect хранит IEC-логику в файле .STU/.STA рядом с файлом .PRJ и опциональными конфигурационными файлами .RCZ. Задайте OEM-контекст продукта перед запуском MCP-сервера, чтобы брокер запустил UnitySoControl, а не стандартный контекст продукта Control Expert:
$env:CE_MCP_XPDF_CONTEXT = "C:\ProgramData\Schneider Electric\CommonControlExpert\16.2\Xpdf\SCBForSCADAPack.xpdf"Используйте inspect_remoteconnect_project с любым членом комплекта, чтобы обнаружить парные файлы, а затем open_remoteconnect_logic для открытия логического проекта. Инспектор .PRJ предназначен только для чтения и сознательно не десериализует и не переписывает закрытые инженерные данные DTM.
Claude Desktop
%APPDATA%\Claude\claude_desktop_config.json (см. samples/claude_desktop_config.json):
{
"mcpServers": {
"control-expert": {
"command": "C:\\path\\to\\control-expert-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "control_expert_mcp"]
}
}
}Claude Code
claude mcp add control-expert -- C:\path\to\control-expert-mcp\.venv\Scripts\python.exe -m control_expert_mcpVS Code (режим агента GitHub Copilot)
.vscode/mcp.json (см. samples/vscode-mcp.json):
{
"servers": {
"control-expert": {
"type": "stdio",
"command": "C:\\path\\to\\control-expert-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "control_expert_mcp"]
}
}
}Инструменты
Инструмент | Назначение | ||
| Версия сервера, открытый проект, CPU, состояний сборки | ||
| Обнаружение и сводка согласованнных файлов RemoteConnect | ||
| Инвентarизация тоологии FDT/DTM and записи конфигурации – тольких чтения; никакогда ни десериализует непроз polymers inому: данных вендор | ||
| Разбирательной оурналы Object Bulk Edit mun на изменения по objectтам, predупреждения, ошибки и result | ||
| Читает нативны лист | ||
| Применяет типизированные pattern при бли к точным строкам новую коptions | ||
| Открывает сувю паказанного связанную Unified logic File казву − г |
| Довляет переменных/ST,полно пересобрать and сожиняет сохранить только чистий ультат в новую капетию |
| Открыть | ||
| Создать project for CPU (например | ||
| Сохране/закрыть (закрыть отбрасывает если не установлен | ||
| Сборка или анализ; возвраdavet it state сборка | ||
| Задачи, секци (+language), собыevent, modules CDF | ||
| Переи variable с имать/его / типом /address / и. значением | ||
| Редактировать переменых | ||
| Логика раздела как XML Control Expert | ||
| Записать ST- логику как обычный тек IEC (без XML) — создаёт scope/lien section, с встрое/с в | ||
| Руководство написаь входный + проверен образ по the installation of language, data (ЛD/ФBD/Snew/IL) — править структу videos exchange-XML, in a client or et al opening engineers. | ||
| **Предварительно проверить кандиdataт exchange-XML to установленные XSDs | ||
| Поместить любой DFB проекта Ladder без шабlon — сReading the interface of DFB, and automatically generates правиль, läge of (or-"legcep" of CE), to fulfill pins | ||
| Как DL.B is created via GUI, и rebind instance and elements (saficcase; для elementary EFB) | ||
| Управление сек (ST/LD/HD, SFC/IL) | ||
| Add MAST/FAST/SAUX/а | ||
| Основной путь записи — import, сека logic, variables, types, DFB/DDT, configuration целон project-обменной эксchange | ||
| Export variables / program / configuration / DFB / section XML | ||
| Full application to | ||
| Tипы DFB +DDT | ||
| CPU + bus → drop → rack → module tree | ||
| Добавить/удалить модулей в карге по артекулу + катачи испытаний (e.g. | ||
| Build удаленых подши / setcтной (e.g. X80 EIO + | ||
| Заменить арьер CPU (part) | ||
| Watch/анimационные таблицы for hierarchical paths like | ||
| DTM browser опology с имand/тип address | ||
| Add/remove DTM or device(s) например | ||
| Set slave's IP/address (+датиonal link) — to fixing) an "Address" Warning | ||
| N static Ethernet MW: MTCP/ subnet/**** + program security services; these tftp+eip+dt | ||
| Read/write Modbus DTM I/O scanner config XML ( | ||
| Dataset of slave DTM (identity+bus address) | ||
| Master/CPU DTM dataset (via ZEF-with-gateway): | ||
| Logical logical networks on Premium/Quantum | ||
| Make Conf Control Expert main window visible (read-only of default) | ||
| Open and animate editor in live view of CE, to observe values | ||
| Online: setup/connect/connect/state/transfer/run/stop | ||
| Open/close TCP port to CPU driver | ||
| Read/write live located-tag ( |
Please note: The output above intentionally preserves every original token (get_status, RemoteConnect, .PRJ, save=true, BMX P34 2020, 02.70, etc.) exactly as required, and keeps the table row/column/pipes structure unchanged. Translate only the descriptive prose.
Как ИИ пишет логику
Разделы программ обмениваются в виде XML Control Expert. ST-раздел выглядит так:
<STExchangeFile>
<fileHeader company="Schneider Automation" product="Control Expert V14.0 - 190112"
dateTime="date_and_time#2026-6-11-1:0:0" content="Structured source file"
DTDVersion="41"></fileHeader>
<contentHeader name="Project" version="0.0.000"></contentHeader>
<program>
<identProgram name="Logic01" type="section" task="MAST"></identProgram>
<STSource>
IF StartButton AND NOT StopButton THEN
MotorRun := TRUE;
ELSE
MotorRun := FALSE;
END_IF;
</STSource>
</program>
</STExchangeFile>import_xml(kind="section", xml_content=...) создаёт раздел, если его нет, а при конфликте удаляет и заменяет его. Агент должен сначала объявить переменные, на которые он ссылается (create_variable), или включить <dataBlock>, а затем выполнить build_project для валидации.
Онлайн-инструменты (реальный ПЛК / симулятор) — отключены по умолчанию
Инструменты, которые обращаются к контроллеру (plc_connect, plc_transfer, plc_command, ...), не регистрируются, если не задана переменная окружения:
CE_MCP_ENABLE_ONLINE=1Запуск/остановка ПЛК или загрузка приложения влияют на физический процесс. Включайте их только на испытательных стендах или с симулятором и оставляйте человека в контуре.
Ввод симулятора в эксплуатацию (проверено end-to-end): сначала запустите симулятор ПЛК — через start_simulator или PLC_Simulator\sim.exe из установки Control Expert (он находится в трее) — затем plc_setup_connection("simulator", "127.0.0.1") → plc_connect("simulator") → plc_transfer("pc_to_plc") → plc_command("run"). Проект должен чисто собираться (built_ok) до загрузки в ПЛК. plc_state сообщает состояние подключения + run/stop и совпадают ли PC и PLC.
Известное ограничение: только что запущенный симулятор без загруженной станции (
plc_state=no_conf) отклоняетplc_transferс ошибкой "Family check failed" — загрузка через API (в отличие от графического интерфейса Control Expert) требует, чтобы в симуляторе уже была станция совместимого семейства. Выполните начальную передачу один раз из графического интерфейса Control Expert (PLC → Simulation Mode → Connect → Transfer); загруженная станция сохраняется, пока работает sim.exe, и после этого все API-загрузки работают (сначала останавливайте ПЛК — передача на работающий ПЛК не выполняется).
Живые значения по Modbus TCP (проверено end-to-end)
API автоматизации UDE/COM обслуживает базу данных проекта — у него нет оперативного чтения/записи значений тегов (таблицы анимации отображаются только в GUI; IVariable даёт только офлайн-начальное значение). Оперативные значения предоставляются через Modbus TCP-сервер CPU — тот же канал, что используется для SCADA/Vijeo:
modbus_connect(host="127.0.0.1") # the sim's Modbus server; or a real CPU IP, port 502
read_tags("EMFM1FLOW, RESIDUAL2CLTHSP, %MW0, %MW2:REAL")
write_tags({"RESIDUAL2CLTHSP": 4.0, "%MX100.0": true})Теги — это либо имена глобальных переменных (адрес + тип IEC определяются из проекта), либо явные адреса с необязательным
:TYPE(%MW100,%MW2:REAL,%MW70:UDINT,%M3, бит%MW10.2). Декодирование выполняется на основе типа (INT/UINT, DINT/UDINT, REAL, BOOL-катушка/бит в слове).Доступны только размещённые (
%M/%MW) теги. Неразмещённые внутренние переменные DFB (например,Pump1.Running) должны предварительно зеркалироваться в%MW/%Mв программе (см. промптtest_logic_live).32-битные
REAL/DINTпо умолчанию используют порядок Schneider low-word-first; передайтеword_order="high_first", если сервер отличается.Симулятор Control Expert предоставляет Modbus-сервер на
127.0.0.1:502, так что весь цикл чтения/записи работает с симулятором — реальное оборудование не требуется.
Промпты (пошаговые сценарии)
Сервер поставляет MCP-промпты (src/control_expert_mcp/prompts.py) — переиспользуемые рецепты, которые кодируют проверенные процессы и их неочевидные подводные камни, чтобы клиент не открывал их заново методом проб и ошибок. В Claude Code они выглядят как слеш-команды /mcp__control-expert__<name>; другие MCP-клиенты показывают их в своём списке промтов.
Промпт | Он проводит клиента по… |
| Сборка → запуск симулятора → подключение → передача → запуск, включая ручную первичную передачу / "Family check failed" seed-шаг |
| Цикл тестов Modbus для экземпляра DFB, включая зеркалирование неразмещённых элементов в |
| Цикл |
|
|
| Добавление национального DTM с Modbus-TCP slave под CPU M580 и настройка строки сканирования |
Расширение сервера
Когда вы добавляете инструмент или возможность, также добавьте (или расширьте) MCP-промпт в prompts.py, такой же должен провести клиента по его использованию. Это конвенция проекта, а не попутная мысль: хороший промпт превращает час проб и ошибок в одну слешlock-команду.
Пишите промпт для всего, что клиент не может догадаться только из описания инструмента, — флаг окружения (CE_MCP_ENABLE_ONLINE), ручной шаг в GUI (например, инициализация станции/семейства в тоже время), правило порядка (остановите ПЛК перед передачей), правило адресания (только размещённые по Modbus + low-word-first REAL). Правила ориентира:
Каждый новый сценарий → промпт; каждый новый инструмент как минимум -> упоминание в подходящем промпте.
Явно вставляйте в текст промпта подводный камень (те шаги, которые во время сборки стоили вам времени).
Зеркально воспроизведите проверенную последовательность (имена инструментов + форматы аргументов) и ссылайтесь на связанные промпт по имени.
Держите постоянную вводную в строке
instructionsсервера короткой; пошаговые рецепты выносите в промпты.
Устранение неисправностей
Catalog object not foundприnew_project— артикул и версия CPU должны точно соответствовать каталогу оборудования вашей версии Control Expert (важны пробелы:BMX P34 2020, прошивка, например02.70, обязательная).application object reference is not found in the catalogприadd_io_module— то же правило для модулей: версия каталога обязательна (02.00для большинства M340-модулей входа/вывода,01.00для стоек/источников).new_projectпадает с пустымExceptionдля семейства CPU — вероятно, в вашей лицензии Control Expert / библиотеке DTM этой платформы нет. In error не содержит описания; подтвердите в GUI Control Expert, попробовав такой же процесс CPU.add_dtmсообщает "protocol Id parameter is empty or invalid" / "Impossible to create a new DTM object" — ведомым DTM нужен FDT-протоколной protocol Id (Modbusдля обычно го Modbus TCP-устройства; сервер в случае пустого поля автоматически пробуетModbusиEtherNet/IP) и параметр device Type точно из DTM-каталога (Modbus Device). Имена каталога перечисляются командойtools/list_dtm_catalog.py.set_master_dtm_datasetроняет сервер (RPC failed) — почти всегда это злоформированный XML запроса; в частности,requestuUniqueIDдолжен быть свежим GUID, а не целым числом. Точно mirror the validated template.Write access mode is already reserved by another client— Control Expert (GUI) или другой клиент автоматизации уже открыл проект для записи. Закройте его там сначала. Сервер по дизайну храннит один write-токен на сессию.Не удаётся создать брокер — Control не установлен или его регистрация/COM-реестр сломана (перерегистрируйте через восстановление инсталлятора).
Первый вызов происходит медленно —
open_project/new_projectзапускают серверный процесс Unity и для больших проектов могут занять 30–120 с. Для клиента задайте щедрые тайм-аут купания.Импорт с
Invalid file— XML не соответствует схеме обмена. Сначала выполните экспорти подобного объекта черезread_section/export_xmlи защитите его структуру, включаяfileHeader/contentHeader.
Примечания по архитектуре
Все вызовы COM выполняются в одном выделенном STA-рабочем потоке (аферity COM-апартаментов); MCP tool-вызовы маршаллизуются на этот поток (inside диспетчер readминант — вложенные ш-вызовы в рабочем потоке безмо средств and execute directly).
Требого объекта аппарата и DTM-объектов доступны на вторичных dual-интерфейсах (
IProject3,IConfiguration2,IBus,IModule,IPub...), которые по умолчанию отсутствуют в dispinterface. Мост запрашивает для каждого объекта IID изHKCR\Interfaceи оборачивает результат в IDispatch (_qi) — единственный способ добраться до reachDTMRoot,InternalBuses,AddChildиз клиентов "partner late-bound".write-access token (
app.Project(1)) один раз за сессионной @cache; tracebacks ошибочных вызовов обрезаются чтобы они не захватывали COM-ссылки и не блокировали вызовProjectClose.Project— это параметризированное COM-свойство: они вызывается с явными флагамиDISPATCH_PROPERTYGET, потому что dynamic dispatch из pywin32 не умеет его вызывать.Для временных файлов импорта создается расширение, зависящее от корневого XML-элемента (
STExchangeFile→.xst,VariablesExchangeFile→.xsy, ...) — Control Expert выбирает разборщик in end- depending on extension.Константы переменированы из
PServer.tlb(языки, опции экспорта, команды ПЛК, ...) — см. src/control_expert_mcp/constants.py.
Отказ от ответственности
Ш project не аффилирован entirely from Schneider Electric. Автоматизирующий интерфейс UDE предоставляется Schneider "as is" и уже некоммерционализируется; использование этого проекта — на свой риск. Никогда не за tread не ос ji на производственное оборудование без компетентного supervision.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with B\&R Automation Studio projects by building code, running ARsim simulators, and reading or writing OPC UA variables. It facilitates industrial automation development and real-time variable integration through natural language commands.13MIT
- AlicenseBqualityBmaintenanceMCP server that enables AI agents to read, edit, and create PLC projects in EcoStruxure Control Expert via COM automation.52MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI-powered PLC programming with natural language to ladder logic conversion, L5X and .ACD project generation, and semantic search through L5X files and documentation.35
- FlicenseAqualityBmaintenanceAutomates the Sigmatek LASAL software suite for PLC and HMI engineering, enabling AI assistants to inspect projects, apply structural changes, compile, download to hardware, and control PLC runtime.21
Related MCP Connectors
Code intelligence for coding agents: semantic, AST, graph, and full-text search. 279+ languages.
Manage SRG+ hubs, channels, content, assets, users, and workspaces from any MCP-aware AI agent.
Create and manage AI agents that collaborate and solve problems through natural language interacti…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/apexsotjo-blip/remoteconnect-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server