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──> UnitySoControlQué 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/.zefExplorar: 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 esModbusy 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 medianteget_master_dtm_dataset/set_master_dtm_dataset— en la descripción de la herramienta se incluye una plantillaManagedModbusRequestcon las reglas de numeración; una línea de escaneo escrita fundabuilt_oky aparece comoModbusScanLineen la configuración del escánerRedes (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 inicialCompilar: 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 pruebaEn 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_connect→read_tags/write_tags) — la UDE/COM API no permite ni acceso directo a lastags, 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.1deberí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
pywin32El 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──> UnitySoControlQué 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/.zefExplorar: 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 esModbusy 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 medianteget_master_dtm_dataset/set_master_dtm_dataset— se incluye una plantillaManagedModbusRequestcon las reglas de numeración en la descripción de la herramienta; una línea de escaneo escrita generabuilt_oky aparece comoModbusScanLineen la configuración del escánerRedes (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 inicialCompilar: 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 pruebaEn 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_connect→read_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.1deberí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
pywin32El 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_mcpVS 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 | |||
| Versión del servidor, proyecto abierto, CPU, estado de compilación | |||
| Descubrimiento y resumen de solo lectura de archivos | |||
| Inventario de solo lectura de la topología FDT/DTM y de los registros de configuración; nunca deserializa cargas útiles opacas del proveedor | |||
| Analiza los registros de Object Bulk Edit en cambios por objeto, advertencias, errores y un resultado | |||
| Lee las hojas | |||
| Aplica parches tipados de filas exactas a un archivo | |||
| Abre el archivo de lógica Unity emparejado de un paquete usando el contexto OEM configurado | |||
| Añade variables/ST, reconstrucción completa y guarda solo un resultado limpio en un | |||
| Abre | |||
| Crea un proyecto para una CPU (p. ej. | |||
| Guardar / cerrar (al cerrar se descartan los cambios salvo que | |||
| Compila o analiza; devuelve el estado de compilación resultante | |||
| Tareas, secciones (+idioma), eventos, módulos fct | |||
| Variables con tipo/comentario/dirección/valor inicial | |||
| Edición de variables | |||
| Lógica de sección como XML de Control Expert | |||
| Escribe lógica ST como texto IEC plano (sin XML) — cree o reemplaza una sección, con declaraciones de variables en línea | |||
| 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) | |||
| **Prevalida | |||
| 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. | |||
| 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) | |||
| Gestión de secciones (ST/LD/SD/ULD/SFC/SIL) | |||
| Añade tarea MAST/FAST/AUX/SAFE | |||
| **** 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) | |||
| Exporta variables / programa / configuración / un DFB / una sección como XML | |||
| Exportación completa de la aplicación a | |||
| Tipos DFB + DDT | |||
| CPU + bus → drop → rack → rack → coche |
| ||
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=1Arrancar/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) rechazaplc_transfercon "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
:TYPEopcional (%MW86,%MW2:REAL,%MW70:UDINT,%M10,%MW10.2como bit). La decodificación se guía por el tipo (INT/UINT, DINT/UDINT, REAL, BOOL bobina/bit de palabra).Solo las etiquetas
%M/%MWcon ubicación son alcanzables. Los internos de DFB sin ubicar (p. ej.,Pump1.Running) deben reflejarse previamente en%MW/%Mdentro del programa (véase el prompttest_logic_live).Los
REAL/DINTde 32 bits usan por defecto el orden de Schneider low-word-first; pasaword_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 |
| Compilar → arrancar simulador → conectar → transferir → ejecutar, incluido el paso manual de siembra inicial / "Family check failed" |
| El bucle de prueba Modbus para una instancia de DFB, incl. reflejar los internos no ubicados a |
| El bucle |
|
|
| 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
instructionsdel servidor; ponga las recetas paso a paso en prompts.
Solución de problemas
Catalog object not foundennew_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 como02.70).application object reference is not found in the catalogenadd_io_module— la misma regla para módulos: la versión del catálogo es obligatoria (02.00para la mayoría de módulos de IO M340,01.00para racks/fuentes de alimentación).new_projectfalla con unException occurredsin 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_dtmdice "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 (Modbuspara el dispositivo Modbus TCP genérico; si está vacío el servidor comprueba automáticamenteModbusyEtherNet/IP) y un device_type_name que coincida exactamente con el catálogo de DTM (Modbus Device). Liste los nombres del catá logo contools/list_dtm_catalog.py.set_master_dtm_datasethace que el servidor se bloquee (RPC failed) — casi siempre es XML de petición mal formado; en particularrequestID 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 lenta —
open_project/new_projectarrancan 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, incluidosfileHeader/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 deHKCR\Interfacey envuelve el resultado como IDispatch (_qi), la única vía para llegar aDTMRoot,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 bloquearProjectClose).Projectes una propiedad COM parametrizada — se invoca conDISPATCH_PROPERTYGETexplí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.
Aviso legal
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.
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