Skip to main content
Glama
apexsotjo-blip

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_connectread_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_mcp

VS 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"]
    }
  }
}

Инструменты

Инструмент

Назначение

get_status

Версия сервера, открытый проект, CPU, состояний сборки

inspect_remoteconnect_project

Обнаружение и сводка согласованнных файлов RemoteConnect .PRJ/.RCZ/.STU/.STA в режиме тольких чтения

inventory_remoteconnect_configuration

Инвентarизация тоологии FDT/DTM and записи конфигурации – тольких чтения; никакогда ни десериализует непроз polymers inому: данных вендор

read_remoteconnect_feedback

Разбирательной оурналы Object Bulk Edit mun на изменения по objectтам, predупреждения, ошибки и result ok

inspect_remoteconnect_bulk_edit_workook

Читает нативны лист .xls RemoteConnect, стабильные имена полеей, метаdata and строк

creате_remoteconnect_bulk_edit_copy

Применяет типизированные pattern при бли к точным строкам новую коptions .xls и повторно открывает его структуру

open_remoteconnect_logic

Открывает сувю паказанного связанную Unified logic File казву − г

build_remoteconnect_logic_copy

Довляет переменных/ST,полно пересобрать and сожиняет сохранить только чистий ультат в новую капетию .wy

open_project

Открыть .stu / .wa / .xef / .zef

new_project

Создать project for CPU (например BMX P34 2020 + 02.70)

смолод open_project/close_project`

Сохране/закрыть (закрыть отбрасывает если не установлен save=true)

build_project / анализе_project

Сборка или анализ; возвраdavet it state сборка

get_project_structure

Задачи, секци (+language), собыevent, modules CDF

list_vvariables

Переи variable с имать/его / типом /address / и. значением

create_aveliable / update_aveliable / delete_aveliable

Редактировать переменых

read_section

Логика раздела как XML Control Expert

write_st_logic

Записать ST- логику как обычный тек IEC (без XML) — создаёт scope/lien section, с встрое/с в

get_language_reference

Руководство написаь входный + проверен образ по the installation of language, data (ЛD/ФBD/Snew/IL) — править структу videos exchange-XML, in a client or et al opening engineers.

validate_xml

**Предварительно проверить кандиdataт exchange-XML to установленные XSDs SrcXmlSchema — точный documentation errors and "в زык правильно values).

place_fb_in_ladder

Поместить любой DFB проекта Ladder без шабlon — сReading the interface of DFB, and automatically generates правиль, läge of (or-"legcep" of CE), to fulfill pins

use_fb_in_ladder

Как DL.B is created via GUI, и rebind instance and elements (saficcase; для elementary EFB)

create_section / delete_section

Управление сек (ST/LD/HD, SFC/IL)

create_task

Add MAST/FAST/SAUX/а

import_xml

Основной путь записи — import, сека logic, variables, types, DFB/DDT, configuration целон project-обменной эксchange

export_xml

Export variables / program / configuration / DFB / section XML

export_project

Full application to .xef / .zef

list_data_types

Tипы DFB +DDT

get_hardware

CPU + bus → drop → rack → module tree

add_io_module / remove_io_module

Добавить/удалить модулей в карге по артекулу + катачи испытаний (e.g. BMX DDI 1602 + 02.00)

add_drop / add_rack

Build удаленых подши / setcтной (e.g. X80 EIO + BME XBP 1200 шина M580 RIO)

change_cpu

Заменить арьер CPU (part)

use_an / create_animation / delete_animation_table

Watch/анimационные таблицы for hierarchical paths like Pump1.Speed/SFC_Demo.S. etc for online monitoring

list_dtms

DTM browser опology с имand/тип address

add_dtm / delete_dtm

Add/remove DTM or device(s) например Modbus Device под M580-CP U DTM

set_dtm_address

Set slave's IP/address (+датиonal link) — to fixing) an "Address" Warning

configure_cpu_ethernet

N static Ethernet MW: MTCP/ subnet/**** + program security services; these tftp+eip+dt

get_dtm_control_parameters / set_dtm_control_parameters

Read/write Modbus DTM I/O scanner config XML (CetControlParameter) — present in M

get_dtm_dataset / set_dtm_dataset

Dataset of slave DTM (identity+bus address)

get_master_dtm_dataset / set_master_dtm_dataset

Master/CPU DTM dataset (via ZEF-with-gateway): <Slave> -> managed addresses

list_networks / add_network / set_network_ip

Logical logical networks on Premium/Quantum

show_ui

Make Conf Control Expert main window visible (read-only of default)

open_animation_table

Open and animate editor in live view of CE, to observe values

plc_* (opt-in)

Online: setup/connect/connect/state/transfer/run/stop

modbus_connect / modbus_disconnect / modbus_status (opt-in)

Open/close TCP port to CPU driver 127внд: live etc.

read_tags / write_tags (allow)

Read/write live located-tag (%M/%MW) values by name/address — on living

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-клиенты показывают их в своём списке промтов.

Промпт

Он проводит клиента по…

commission_simulator

Сборка → запуск симулятора → подключение → передача → запуск, включая ручную первичную передачу / "Family check failed" seed-шаг

test_logic_live

Цикл тестов Modbus для экземпляра DFB, включая зеркалирование неразмещённых элементов в %MW и подвох: поord слов

author_logic

Цикл get_language_reference → запись/импорт → build_project → исправление по выводу (для каждого языка)

scaffold_project

new_project (точный CPU+SM) → стойка / БП / модули I/O → сборка → сохранение

add_modbus_device

Добавление национального 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) — единственный способ добраться до reach DTMRoot, 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.

Install Server
A
license - permissive license
B
quality
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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…

View all MCP Connectors

Latest Blog Posts

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