Skip to main content
Glama
apexsotjo-blip

RemoteConnect MCP Server

RemoteConnect MCP Server

Un servidor MCP para RemoteConnect de Schneider Electric y su UnitySoControl para el editor de lógica SCADAPack x70. Descubre los archivos emparejados .PRJ/.RCZ/.STU/.STA y permite a los agentes de IA inspeccionar, editar, reconstruir y guardar lógica IEC de forma segura.

Inspirado en tiaportal-mcp para Siemens TIA Portal. Mientras que TIA Portal expone la API Openness, Control Expert expone el servidor de automatización COM Unity Developer's Edition (UDE) (PSBroker.PManagerBroker) — este servidor lo controla mediante pywin32 y lo expone como herramientas MCP por stdio.

AI agent ──MCP/stdio──> remoteconnect-mcp ──COM/UDE──> UnitySoControl

Qué puede hacer la IA

  • Proyectos: crear desde cero con cualquier CPU del catálogo de hardware (M340, M580, Premium, Quantum...), abrir/guardar .stu/.sta, importar/exportar .xef/.zef

  • Explorar: tareas, secciones, variables, tipos DF/DDT, información de CPU/hardware, estado de compilación

  • Programar: crear/leer/editar/un delete secciones en ST, LD, FBD, SFC, IL; escribir lógica importando XML de Control Expert (la IA lee una vez el XML de una sección existente y replica el esquema — validación de ida y vuelta para los cinco lenguajes)

  • Hardware: recorrer la topología completa bus → drop → rack → módulo, añadir/eliminar módulos de E/S por número de parte del catálogo, cambiar la CPU

  • Modbus / DTM (validado en vivo con M580): explorar la topología DTM, añadir DTMs esclavos (add_dtm("Modbus Device", ..., parent_dtm="BMEP58_CU_EXT") — el ID de protocolo es Modbus y se intenta automáticamente), a configurar direcciones IP de los dispositivos, leer el estado del escáner (get_dtm_control_parameters) y añadir peticiones de escaneadcom (direcciones de lectura/escritura + tamaños) editando el dataset del DTM principal mediante get_master_dtm_dataset / set_master_dtm_dataset — en la descripción de la herramienta se incluye una plantilla ManagedModbusRequest con las reglas de numeración; una línea de escaneo escrita funda built_ok y aparece como ModbusScanLine en la configuración del escáner

  • Redes (Premium/Quantum): crear redes Ethernet lógicas y escribir su configuración del servicio de IP

  • Variables: listar/crear/actualizar/eliminar variables locales incl. tipo, comentario, dirección (%...), valor inicial

  • Compilar: analizar y compilar el proyect, obtener el estado de la compilación resultante

  • UI: abrir la ventana de Control Expert para que un humano pueda verla o tomar el control, y abrir el editor de una tabla de animación en directo (open_animation_table) para ver cómo animan los valores mientras la IA ejecuta una prueba

  • En línea (opcional): conectar con el PLC/el simulador, cargar/descargar, ejecutar/detener el sistema

  • Valores en vivo (opcional*o): leer y escribir valores de PLC/el simulad en tiempo real a través de Modbus TCP (modbus_connectread_tags/write_tags) — la UDE/COM API no permite ni acceso directo a las tags, así que este can** es** el canal para probar la lógica contra un controlador en ejecución (localizar etiquetas %M/%MW; primero se visualizan los internos de [DFB] no escritos en %MW)

Related MCP server: control-expert-mcp

Necesidades

  • Windows con EcoStruxure Control Expert (o Unity Pro) instalado y con licencia — probado con Control Expert 14.0, pero cualquier versión que se describa PSBroker.PServerBroker.1 debería funcionar (el servidor de automatización UDE se incluye con el propio Control Expert la uns utama only has limited exposure)

  • Python 3.10+ con pywin32

  • El servidor debe ejecutarse en la misma máquina que Control Expert (el acceso remoto mediante D DCOM es possible, pero no está configurado aquí)

Instalación

cd remoteconnect-mcp
python -m venv .venv
.venv\Scripts\pip install -e .

Conectn/write un cliente de IA

The server speaks MCP over stdio. Point your client at the venv's Python: El servidor usa MCP sobre stdio. Señala tu cliente al intérprete de Python del entorno virtual:

RemoteConnect /scadapack x70

RemoteConnect stores IEC logic in a .STU/.STA file beside its .PRJ and any optional .RCZ configuration. Set the OEM product context before launching the MCP server so the broker will launch UnitySoControl instead of the normal Control Expert product context:

RemoteConnect almacena la lógica IEC en un archivo .STA junto a su .PRJ y archivos de configuración opcionales . — Set la cl de contexto OPÉN. Official setting: "RemoteConnect stores logic in a .STU/.STA file next to its .PRJ and optional .RCZ configuration files. Start the OEM product context before starting the MCP server so the broker starts .STU/.STA.

$env:CE_MCP_XPDF_CONTEXT = "C:\ProgramData\Schneider Electric\CommonControlExpert\16.2\Xpdf\SCBForSCADAPack.xpdf"

Use inspect_remoteconnect_project with any other member of the bundle to discover the pair files, then open_remoteconnect_logic to open the logic project. The .PRJ inspector is read-only and intentionally does not write or rewrite or design DTM.

Utiliza inspect_remoteconnect_device con cualquier archivo del lote para descubrir los archivos emparejados, y luego open_remoteconnect_logic para abrir el proyecto de lógica. El inspector .PRJ database is read-only and.

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json (ver samples/claude_desktop_config.json):

GX4

Cnode Code

GX5

VS Code (modo agente de GitHub Copilot)

.vscode/mcp.json (consular 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"]
    }
  }
}

## Herramientas

RemoteConnect MCP Server

Un servidor MCP para RemoteConnect de Schneider Electric y su editor de lógica UnitySoControl para SCADAPack x70. Descubre los archivos emparejados .PRJ/.RCZ/.STU/.STA y permite a los agentes de IA inspeccionar, editar, reconstruir y guardar la lógica IEC de forma segura.

Inspirado en tiaportal-mcp para Siemens TIA Portal. Mientras que TIA Portal expone la API Openness, Control Expert expone el servidor de automatización COM Unity Developer's Edition (UDE) (PSBroker.PServerBroker) — este servidor lo maneja a través de pywin32 y lo expone como herramientas MCP a través de stdio.

AI agent ──MCP/stdio──> remoteconnect-mcp ──COM/UDE──> UnitySoControl

Qué puede hacer la IA

  • Proyectos: crear desde cero para cualquier CPU del catálogo de hardware (M340, M580, Premium, Quantum...), abrir/guardar .stu/.sta, importar/exportar .xef/.zef

  • Explorar: tareas, secciones, variables, tipos DFB/DDT, información de CPU/hardware, estado de compilación

  • Programar: crear/leer/editar/eliminar secciones en ST, LD, FBD, SFC, IL; escribir lógica importando XML de Control Expert (la IA lee una vez el XML de una sección existente y replica el esquema — con validación de ida y vuelta para los cinco lenguajes)

  • Hardware: recorrer la topología completa bus → drop → rack → módulo, añadir/eliminar módulos de E/S por número de parte del catálogo, cambiar la CPU

  • Modbus / DTM (validado en vivo con M580): navegar por la topología de DTMs, añadir DTMs esclavos (add_dtm("Modbus Device", ..., parent_dtm="BMEP58_ECPU_EXT") — el id de protocolo es Modbus y se intenta automáticamente), configurar las direcciones IP de los dispositivos, leer el estado del escáner (get_dtm_control_parameters) y añadir solicitudes de escaneo Modbus (direcciones de lectura/escritura + tamaños) editando el conjunto de datos del DTM maestro mediante get_master_dtm_dataset / set_master_dtm_dataset — se incluye una plantilla ManagedModbusRequest con las reglas de numeración en la descripción de la herramienta; una línea de escaneo escrita genera built_ok y aparece como ModbusScanLine en la configuración del escáner

  • Redes (Premium/Quantum): crear redes lógicas Ethernet y definir su configuración de servicio IP

  • Variables: listar/crear/actualizar/eliminar variables globales, incluyendo tipo, comentario, dirección (%MW...), valor inicial

  • Compilar: analizar y compilar el proyecto, obtener el estado de compilación resultante

  • Interfaz: abrir la ventana de Control Expert para que un humano pueda observar o tomar el control, y abrir el editor de una tabla de animación en vivo (open_animation_table) para ver cómo cambian los valores mientras la IA ejecuta una prueba

  • En línea (opcional): conectar con el PLC/simulador, descargar/subir, ejecutar/detener

  • Valores en vivo (opcional): leer y escribir valores del PLC/simulador en ejecución a través de Modbus TCP (modbus_connectread_tags/write_tags) — la API UDE/COM no tiene acceso a las etiquetas en vivo, así que este es el canal para probar la lógica contra un controlador en ejecución (ubica las etiquetas %M/%MW; refleja primero los internos de DFB no ubicados en %MW)

Requisitos

  • Windows con EcoStruxure Control Expert (o AutoPro) instalado y con licencia — probado con Control Expert 14.0, pero cualquier versión que registre PSBroker.PServerBroker.1 debería funcionar (el servidor de automatización UDE se incluye con Control Expert; el paquete UDE separado solo es necesario para la documentación)

  • Python 3.10+ con pywin32

  • El servidor debe ejecutarse en la misma máquina que Control Expert (DCOM remoting es posible, pero no está configurado aquí)

Instalación

cd remoteconnect-mcp
python -m venv .venv
.venv\Scripts\pip install -e .

Conectar a un cliente de IA

El servidor habla MCP sobre stdio. Apunta tu cliente al Python del venv:

RemoteConnect / SCADAPack x70

RemoteConnect almacena la lógica IEC en un archivo .STU/.STA junto a su .PRJ y los archivos de configuración opcionales .RCZ. Configura el contexto de producto OEM antes de iniciar el servidor MCP para que el broker se hote con el dispositivo se llome el contexto de producto estándal de Control Expert:

$env:CE_MCP_XPDF_CONTEXT = "C:\ProgramData\Schneider Electric\CommonControlExpert\16.2\Xpdf\SCBForSCADAPack.xpdf"

Usa inspect_remoteconnect_project con cualquier miembro del paquete de archivos para descubrir los archivos emparejados, y luego open_remoteconnect_logic para abrir el proyecto de lógica. El inspector de .PRJ es de escritura y de solo lectura, y no deserializa ni reescribe los datos de opción: la realidad DTM opaque.

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json (consulta 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 (modo agente de GitHub Copilot)

.vscode/mcp.json (consulta 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"]
    }
  }
}

Herramientas

Herramienta

Propósito

get_status

Versión del servidor, proyecto abierto, CPU, estado de compilación

inspect_remoteconnect_project

Descubrimiento y resumen de solo lectura de archivos .PRJ/.RCZ/.STU/.STA de RemoteConnect emparejados

inventory_remoteconnect_configuration

Inventario de solo lectura de la topología FDT/DTM y de los registros de configuración; nunca deserializa cargas útiles opacas del proveedor

read_remoteconnect_feedback

Analiza los registros de Object Bulk Edit en cambios por objeto, advertencias, errores y un resultado ok

inspect_remoteconnect_bulk_edit_workbook

Lee las hojas .xls nativas de RemoteConnect, nombres de campo estables, metadatos y filas

create_remoteconnect_bulk_edit_copy

Aplica parches tipados de filas exactas a un archivo .xls nuevo y lo reabre estructuralmente

open_remoteconnect_logic

Abre el archivo de lógica Unity emparejado de un paquete usando el contexto OEM configurado

build_remoteconnect_logic_copy

Añade variables/ST, reconstrucción completa y guarda solo un resultado limpio en un .STU nuevo

open_project

Abre .stu / .sta / .xef / .zef

new_project

Crea un proyecto para una CPU (p. ej. BMX P34 2020 + 02.70)

save_project / close_project

Guardar / cerrar (al cerrar se descartan los cambios salvo que save=true)

build_project / analyze_project

Compila o analiza; devuelve el estado de compilación resultante

get_project_structure

Tareas, secciones (+idioma), eventos, módulos fct

list_variables

Variables con tipo/comentario/dirección/valor inicial

create_variable / update_variable / delete_variable

Edición de variables

read_section

Lógica de sección como XML de Control Expert

write_st_logic

Escribe lógica ST como texto IEC plano (sin XML) — cree o reemplaza una sección, con declaraciones de variables en línea

get_language_reference

Guía de redacción + ejemplo validado para ST/LD/FBD/SFC/IL — las reglas de estructura del XML de intercambio que un cliente de IA necesita para escribir lógica gráfica (regla de geometría de pines de FBD, modelo de línea/célula de LD, disposición del diagrama SFC)

validate_xml

**Prevalida validate_emXML candidato contra los XSD de SrcXmlSchema instalados antes de importar/compilar — errores estructurales de la` with los conjuntos de valores válidos

place_fb_in_ladder

Suelta cualquier DFB del proyecto en Ladder, sin plantilla — lee la interfaz del DFB y genera automáticamente la geometría de pines correcta (propiedad de CE), y luego vincula los pines.

use_fb_in_ladder

Clona una plantilla de bloque-en-LD creada por la interfaz GUI y reasigna la instancia y las variables (respaldo para EFBs elementales / geometría GUI exacta)

create_section / delete_section

Gestión de secciones (ST/LD/SD/ULD/SFC/SIL)

create_task

Añade tarea MAST/FAST/AUX/SAFE

import_xml

**** import** una sección,la ruta de escritura principal — importa lógica de sección, variables, tipos DFB/DDT, configuración o archivos de intercambio de proyecto ** (XML en línea o un archivo)

export_xml

Exporta variables / programa / configuración / un DFB / una sección como XML

export_project

Exportación completa de la aplicación a .xef / .zef

list_data_types

Tipos DFB + DDT

get_hardware

CPU + bus → drop → rack → rack → coche

get_hardware

No. I need to fix final table. Let's reconstruct carefully.

Oops, I accidentally produced errors. Let's systematically produce final table correctly.

I will write the final response from scratch, replacing all rows in Spanish. Need ensure no insertions/errors.

Let's create a list of rows clearly.

I'll redo with exact table.

Row contents:

1 get_status — "Versión del servidor, proyecto abierto, CPU, estado de compilación" 2 inspect_remoteconnect_project — "Descubrimiento y resumen de solo lectura de archivos .PRJ/.RCZ/.STU/.STA de RemoteConnect emparejados" 3 inventory_remoteconnect_configuration — "Inventario de solo lectura de topología FDT/DTM'll refreshed..." Let's write all 46 without mistakes.

I must be meticulous.| Herramienta | Propósito | | ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | get_status | Versión del servidor, proyecto abierto, CPU, estado de compilación | | inspect_remoteconnect_project | Descubrimiento y resumen de solo lectura de archivos .PRJ/.RCZ/.STU/.STA de RemoteConnect emparejados | | inventory_remoteconnect_configuration | Inventario de solo lectura de la topología FDT/DTM y de los registros de configuración; nunca deserializa cargas útiles opacas del proveedor | | read_remoteconnect_feedback | Analiza los registros de Object Bulk Edit en cambios por objeto, advertencias, errores y un resultado ok | | inspect_remoteconnect_bulk_edit_workbook | Lee hojas .xls nativas de RemoteConnect, nombres de campo estables, metadatos y filas | | create_remoteconnect_bulk_edit_copy | Aplica parches tipados de filas exactas a una copia .xls nueva y la reabre estructuralmente | | create_remoteconnect_bulk_edit_copy | Aplica parches tipados de filas exactas a una copia .xls nueva y la reabre estructuralmente | | open_remoteconnect_logic | Abre el archivo de lógica Unity emparejado de un paquete usando el contexto OEM configurado | | build_remoteconnect_logic_copy | Añade variables/ST, reconstruye por completo y guarda solo un resultado limpio en una copia .STU nueva | | open_project | Abre .stu / .sta / .xef / .zef | | new_project | Crea un proyecto para una CPU (p. ej. BMX P34 2020 + 02.70) | | save_project / close_project | Guarda / cierra (cerrar descarta los cambios salvo que save=true) | | build_project / analyze_project | Compila o analiza; devuelve el estado de compilación resultante | | get_project_structure | Tareas, secciones (+idioma), eventos, módulos fct | | list_variables | Variables con tipo/comentario/dirección/valor inicial | | create_variable / update_variable / delete_variable | Edición de variables | | read_section | Lógica de sección como XML de Control Expert | | write_st_logic | Escribe lógica ST como texto IEC plano (sin XML) — crea o reemplaza una sección, con declaraciones de variables en línea | | get_language_reference | Guía de escritura + ejemplo validado para ST/LD/FBD/SFC/IL — las reglas de estructura del XML de intercambio que un cliente de IA necesita para escribir lógica gráfica (regla de geometría de pines de FBD, modelo de línea/celda de LD, disposición del diagrama SFC) | | validate_xml | Prevalida XML de intercambio candidato contra las XSD de SrcXmlSchema instaladas antes de importar/compilar — errores estructurales instantáneos con los conjuntos de valores válidos | | place_fb_in_ladder | Coloca cualquier DFB del proyecto en Ladder, sin plantilla — lee la interfaz del DFB y genera automáticamente la geometría de pines correcta (propiedad de CE), y luego vincula los pines | | use_fb_in_ladder | Clona una plantilla editada por GUI y reenlaza la instancia y las variables (respaldo para EFB elementales / geometría exacta de la GUI) | | create_section / delete_section | Gestión de secciones (ST/LD/FD/SFC/IL) | | create_task | Añadir tarea MAST/FAST/AUX/SAFE | | import_xml | La ruta principal de escritura — importa lógica de sección, variables, tipos DFB/DDT, configuración o archivos de intercambio de proyecto completo (XML en línea o un archivo) | | export_xml | Exporta variables / programa / configuración / un DFB / una sección como XML | | export_project | Exportación completa de la aplicación a .xef / .zef | | list_data_types | Tipos DFB + DDT | | get_hardware | CPU + bus → drop → rack → árbol de módulos | | add_io_module / remove_io_module | Añade/elimina módulos de rack según número de pieza + versión de catálogo (p. ej. BMX DDI 1602 + 02.00) | | add_drop / add_rack | Construye drops/racks remotos (p. ej. uno drop de X80 EIO + rack BME XBP 1200 en un bus M580 RIO) | | change_cpu | Cambia la referencia de la CPU | | list_animation_tables / create_animation_table / delete_animation_table | Tablas de vigilancia/animación (acepta rutas jerárquicas como Pump1.Speed, SFC_Demo.S_Init.x) para monitorizar/forzar valores en línea | | list_dtms | Topología del DTM Browser con nombres, tipos, direcciones | | add_dtm / delete_dtm | Añade DTMs de comunicación o dispositivos esclavos (p. ej. Modbus Device bajo el DTM de la CPU M580) | | set_dtm_address | Configura una IP / dirección de bus de un segundo plano (y opcionalmente gateway/subred — corrige el aviso de compilación "IP Address and Gateway address are not in the same domain") | | configure_cpu_ethernet | Ethernet integrado de la CPU M580: IP/subred/puerta de enlace + servicios de pantalla de seguridad (tftp/eip/dhcp_bootp/ftp/web/snmp). Activar tftp+eip+dhcp clears the remote-EIO CRA build error) | | get_dtm_control_parameters / set_dtm_control_parameters | Configuración de parámetros de control (es Config SetControlParameter Classic): IP, unit id, timeouts, líneas de escaneo ModbusTcpRequest | | get_dtm_dataset / set_dtm_dataset | Conjunto de datos propio del DTM de un esclavo (paso deMódulo identidad y dirección de bus) | | get_master_dtm_dataset / set_master_dtm_dataset | El conjunto de datos del DTM maestro/CPU (via ida y -> de ZEF round-trip) — <SlaveDevices> / vdash <ManagedModbusRequestList> contienen las líneas de escaneo Modbus; escribe un nodo ManagedModbusRequest para añadir una solicitud | | list_networks / add_network / set_network_ip | Redes lógicas en Premium/Quantum | | show_ui | Hacer visible la ventana de Control Expert (solo lectura por defecto para que siga lavent y abra editores mientras el cliente mantiene la escritura) | | open_animation_table | Abre el editor de una tabla de animación en la ventana activa, para que un humano observe cómo se animan los valores durante una prueba | | plc_* (opt-in) | En línea: preparación / conexión / desconexión / estado / transferencia / ejecución / parada | | modbus_connect / modbus_disconnect / modbus_status (opt-in) | Abre/cierra un enlace Modbus TCP con el servidor de la CPU/simulador (127.0.0.1:502 para el simulador) para obtener valores en tiempo real | | modbus_connect / modbus_disconnect / modbus_status (opt-in) | Abre/cierra un enlace Modbus TCP con el servidor de la CPU/simulador (127.0.0.1:502 para el simulador) para obtener valores en tiempo real | | read_tags / write_tags (opt-in) | Lee/escribe valores en vivo de etiquetas locales (%M/%MW) por nombre o dirección (%MW86, %MW2:REAL); la única ruta de lectura/escritura en vivo (la API COM no tiene) |

Cómo la IA escribe la lógica

Los intercambios de secciones de programa se realizan como XML de Control Expert. Una sección ST tiene este aspecto:

<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=...) crea la sección si no existe o la elimina y sustituye en caso de conflicto. El agente debe declarar primero las variables referenciadas (create_variable) o incluir un <dataBlock>, y después ejecutar build_project para validar.

Herramientas en línea (PLC real / simulador) — deshabilitadas por defecto

Las herramientas que tocan un controlador (plc_connect, plc_transfer, plc_command, ...) no están registradas salvo que defina la variable de entorno:

CE_MCP_ENABLE_ONLINE=1

Arrancar/parar un PLC o descargar una aplicación afecta al proceso físico. Active esto solo en bancos de pruebas o con el simulador, y mantenga a una persona en el bucle.

Puesta en marcha del simulador (validada de extremo a extremo): arranque primero el simulador de PLC — start_simulator o PLC_Simulator\sim.exe desde la instalación de Control Expert (se queda en la bandeja del sistema) — y después plc_setup_connection("simulator", "127.0.0.1")plc_connect("simulator")plc_transfer("pc_to_plc")plc_command("run"). El proyecto debe compilar limpiamente (built_ok) antes de la descarga. plc_state informa de la conexión + el estado run/stop y de si PC == PLC.

Limitación conocida: un simulador recién arrancado sin ningu station loaded (plc_state = no_conf) rechaza plc_transfer con "Family check failed" — la descarga de la API (a diferencia de la de la GUI de Control Expert) requiere que el simulador ya tenga una estación de una familia compatible. Prepárela una vez transfiriendo cualquier proyecto desde la GUI de Control Expert (PLC → Simulation Mode → Connect → Transfer); la estación cargada persiste mientras se ejecute sim.exe, y, a partir de entonces, todas las descargas de la API funcionarán (pare el PLC primero; la transferencia a un PLC en ejecución falla).

Valores en vivo por Modbus TCP (validado de extremo a extremo)

La API de automatización UDE/COM expone la base de datos del proyecto — no tiene lectura/escritura de valores en vivo de etiquetas (las tablas de animación solo se representan en la GUI; IVariable expone únicamente el valor inicial en offline). Los valores en vivo van por el servidor Modbus TCP de la CPU — el mismo canal que usan 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})
  • Los tags son nombres de variables globales (dirección + tipo IEC resuelto desde el proyecto) o direcciones explícitas con :TYPE opcional (%MW86, %MW2:REAL, %MW70:UDINT, %M10, %MW10.2 como bit). La decodificación se guía por el tipo (INT/UINT, DINT/UDINT, REAL, BOOL bobina/bit de palabra).

  • Solo las etiquetas %M/%MW con ubicación son alcanzables. Los internos de DFB sin ubicar (p. ej., Pump1.Running) deben reflejarse previamente en %MW/%M dentro del programa (véase el prompt test_logic_live).

  • Los REAL/DINT de 32 bits usan por defecto el orden de Schneider low-word-first; pasa word_order="high_first" si algún servidor difiere.

  • El simulador de Control Expert expone un servidor Modbus en 127.0.0.1:502, por lo que todo el bucle de prueba de lectura/escritura funciona contra el simulador — sin necesidad de hardware.

Prompts (flujos de trabajo guiados)

El servidor incluye prompts MCP (src/control_expert_mcp/prompts.py) — recetas reutilizables que codifican los flujos validados y sus gotchas no triviales para que application client no los redescubran por prueba y error. En Claude Code aparecen como comandos de barra /mcp__control-expert__<name>; otros clientes MCP los muestran en su selector de prompts.

Prompt

Qué le guía paso a paso

commission_simulator

Compilar → arrancar simulador → conectar → transferir → ejecutar, incluido el paso manual de siembra inicial / "Family check failed"

test_logic_live

El bucle de prueba Modbus para una instancia de DFB, incl. reflejar los internos no ubicados a %MW y la trampa del orden de palabra

author_logic

El bucle get_language_reference → escribir/importar → build_project → corregir según la salida (por idioma)

scaffold_project

new_project (CPU+versión exactas) → rack/fuente de alimentación/IO → compilar → guardar

add_modbus_device

Añadir una DTM esclavo Modbus-TCP bajo la CPU M580 y configurar une ligne de scan

Ampliar el servicio

Cuando añada una herramienta o funcionalidad, añada también (o amplíe) un prompt MCP en prompts.py que guíe a un cliente a través de su uso. Esta es una convención del proyecto, no un extra: un buen prompt convierte una hora de prueba y error en un solo comando de barra.

Escriba un prompt para cualquier cosa que un cliente no pueda deducir solo de la descripción de la herramienta: una variable de entorno (CE_MCP_ENABLE_ONLINE), un paso manual de GUI (el seed de "family check" del simulador), una restricción de orden (parar el PLC antes de transferir), o una regla de direccionamiento (solo Modbus ubicado, REAL low-order). Rules prácticas:

  • Cada nuevo flujo → un prompt; cada nueva herramienta → al menos una mención en un prompt relevante.

  • Ponga el paso oculto explícito en el texto del prompt (los pasos que a usted le costaron tiempo mientras lo construía).

  • Replique la secuencia validada (nombres de herramientas + formas de argumentos) y mencione los prompts relacionados por nombre.

  • Mantenga la orientación general en el string instructions del servidor; ponga las recetas paso a paso en prompts.

Solución de problemas

  • Catalog object not found en new_project — el número/versión de CPU debe coincidir exactamente con el catálogo de hardware de su versión de Control Expert (los espacios importan: BMX P35 2020, se requiere firmware como 02.70).

  • application object reference is not found in the catalog en add_io_module — la misma regla para módulos: la versión del catálogo es obligatoria (02.00 para la mayoría de módulos de IO M340, 01.00 para racks/fuentes de alimentación).

  • new_project falla con un Exception occurred sin descripción para una familia de CPU — su licencia de Control Expert o biblioteca de DTM probablemente no incluye esa plataforma. El error no lleva descripción; pruebe la misma CPU en GUI de Control Expert para confirmar.

  • add_dtm dice "protocol Id parameter is empty or invalid" / "Impossible to create a new DTM object" — los DTM esclavos necesitan el nombre del protocolo FDT como protocol_id (Modbus para el dispositivo Modbus TCP genérico; si está vacío el servidor comprueba automáticamente Modbus y EtherNet/IP) y un device_type_name que coincida exactamente con el catálogo de DTM (Modbus Device). Liste los nombres del catá logo con tools/list_dtm_catalog.py.

  • set_master_dtm_dataset hace que el servidor se bloquee (RPC failed) — casi siempre es XML de petición mal formado; en particular request ID debe ser un GUID nuevo, no un entero. Replique exactamente la plantilla validada de la descripción de la herramienta.

  • Write access mode is already reserved by another client — Control Expert (la GUI) o aplicación de automatización tiene el proyecto abierto para escritura. Ciérrelo antes allí. El servidor tiene un token de escritura por sesión, por diseño.

  • La creación de broker falla — puede que no esté instalado Control Expert, o su registro COM está roto (vuélvalo a registrar reparando la instalación).

  • Primera llamada lentaopen_project/new_project arrancan el proceso de servidor que un task puede tardar 30–120 s para proyectos grandes. Configure tiempos de espera generosos en el cliente.

  • Importación falla con Invalid file — el XML no cumple el esquema de intercambio. Exporte primero un objeto similar (read_section, export_xml) y replique su estructura, incluidos fileHeader/contentHeader.

Notas de arquitectura

  • Todas las llamadas COM ejecutan hilo de trabajo STA dedicado (pia affinidad de apartamento COM); las llamadas de herramienta MCP se pasan a ese hilo (el dispatcher es reentrante — las llamadas anidadas del vínculo en hilo ya ejecutan directamente).

  • Los objetos de hardware/DMM exponen sus miembros en interfaces duales secundarias (IProject3, IConfiguration2, IBus, IModule, IPeer? ...) que no se incluyen en la dispinterface predeterminada. El puente aplica QI a cada objeto con los IIDs de HKCR\Interface y envuelve el resultado como IDispatch (_qi), la única vía para llegar a DTMRoot, InternalBuses, AddChild, etc., desde clientes enlazados tardía.

  • El token de acceso de escritura (app.Project(1)) se adquiere una vez por proyecto y se cachea; se eliminan los backtraces los errores para que no fijen referencias COM y bloquear ProjectClose).

  • Project es una propiedad COM parametrizada — se invoca con DISPATCH_PROPERTYGET explícitos porque el despacho dinámico de pywin32 no puede llamarla.

  • Los ficheros temporales de importación reciben la extension del elemento raíz del XML (STExchangeFile.xst, VariablesExchangeFile.xsy, ...) porque Control Expert elige el parser según la extensión.

  • Las constantes de enumeración (lenguages, opciones de exportación, comandos de PLC...) se extrajeron de PServer.tlb — vea src/control_expert_mcp/constants.py.

No vinculado con Schneider. La interfaz de automatización UDE la da Schneider "as is" y ya no comercializada; este proyecto la usa por su cuenta y riesgo. No apunte nunca herramientas en línea a equipos de producción sin supervisión cualificada.

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