Skip to main content
Glama
fc0web

rei-lads-mcp

by fc0web

rei-lads-mcp

⚠️ v0.1.0-preview — versión para comentarios tempranos. NO para uso en producción. La API no es estable antes de v1.0.0. Pueden aparecer cambios incompatibles en cualquier versión 0.x. La autenticación con certificado X.509 no es compatible en la línea 0.1.x (solo nombre de usuario/contraseña). Consulta ROADMAP.md para los elementos de la Fase 5.

Un servidor MCP que expone instrumentos OPC UA LADS (Laboratory Agnostic Device Standard) a agentes LLM con dos disciplinas propias de Rei integradas:

  1. Ejecución con compuerta de aprobación — cada herramienta que cambia estado valida su nombre de operación contra un enum declarado por el servidor (métodos de máquina de estados de LADS, plantillas de programa). Las cadenas arbitrarias se rechazan en el límite de MCP, antes de que se realice ninguna llamada de red.

  2. Procedencia atestiguada — cada llamada que cambia estado emite un registro SHA-256 (iniciador, nodo, operación, parámetros, muestras, marca de tiempo) que se persiste en un JSONL local de solo adición y es recuperable por prefijo.

Modelado según las implementaciones de referencia de LADS en opcua-lads y fundamentado en el diseño de compuerta de aprobación + witnessed by de Rei / D-FUMT.

Instalación

Requiere Python 3.12+.

python -m venv .venv
./.venv/bin/pip install -r requirements.txt   # Linux/macOS
./.venv/Scripts/pip install -r requirements.txt   # Windows

Related MCP server: SiLA MCP Server

Inicio rápido

Arranca un servidor de referencia de LADS (por ejemplo, lads-viscometer de opcua-lads/lads-server-collection), luego ejecuta:

python server.py

Esto inicia un servidor MCP stdio. Apunta cualquier cliente MCP a él.

Comprobación de cordura mediante programación (no se requiere cliente MCP):

python test_tools_list.py    # 15 tools registered, schemas generated
python test_live_phase4.py   # end-to-end against a running LADS server on
                             # opc.tcp://localhost:4840

Herramientas (15)

Conexión

  • lads_connect(alias, server_url, user?, password?, wait_timeout_s?, cert_path?, key_path?)

  • lads_register_alias(alias, server_url, description?, user?, password?)

  • lads_list_aliases()

  • lads_connect_by_alias(alias, wait_timeout_s?)

Descubrimiento (solo lectura)

  • lads_list_devices(alias)

  • lads_get_functional_units(alias, device_index)

  • lads_get_sensor_value(alias, device_index, unit_index, function_index)

  • lads_get_state(alias, device_index, unit_index)

  • lads_get_state_machine_methods(alias, device_index, unit_index)

  • lads_list_program_templates(alias, device_index, unit_index)

  • lads_list_results(alias, device_index, unit_index)

Cambio de estado (emiten registros de atestiguamiento)

  • lads_call_state_machine_method(alias, device_index, unit_index, method_name) — valida method_name contra el inventario declarado por el servidor

  • lads_start_program(alias, device_index, unit_index, template_name, properties?, samples?, supervisory_job_id?, supervisory_task_id?) — valida template_name contra las plantillas de ProgramManager

Recuperación de registros de atestiguamiento

  • lads_list_witness_recent(limit?)

  • lads_show_witness(sha256_prefix) — mínimo 4 caracteres

Demo de la compuerta de aprobación

lads_call_state_machine_method(alias, 0, 0, "Start")
# -> {invocation: "queued (async)", witness_hash: "..."}

lads_call_state_machine_method(alias, 0, 0, "ArbitraryExec")
# -> {error: "method 'ArbitraryExec' not declared by this state machine",
#     valid_methods: ["Start", "StartProgram", "Stop"]}

El rechazo ocurre en el límite de la herramienta MCP — no se realiza ninguna llamada OPC UA para un nombre de operación que el servidor LADS no declaró. El mismo patrón se aplica a lads_start_program(template_name=...).

Procedencia atestiguada

Cada llamada de herramienta que cambia estado emite un registro como:

{
  "initiator": "mcp-caller",
  "node_alias": "viscometer",
  "server_url": "opc.tcp://localhost:4840",
  "device_browse_name": "myViscometer",
  "unit_browse_name": "ViscometerUnit",
  "operation": "StartProgram",
  "template_name": "Analytical Method A (30rpm)",
  "params": {"Speed": "30", "Duration": "60"},
  "sample_context": [{"ContainerId": "vial-01", "SampleId": "sample-a",
                      "Position": "A1", "CustomData": "phase4-test"}],
  "timestamp_utc": "2026-08-26T00:23:54.333266+00:00",
  "phase": "accepted",
  "sha256_hex": "174b5e1498a5d0cca55ce9291adf95f612161ed590b839258e700e994cba25ae"
}

Se persiste en ~/.rei-lads/witness/YYYY-MM.jsonl (anulable mediante la variable de entorno REI_LADS_WITNESS_DIR). Recuperable mediante las dos herramientas lads_*_witness_* por prefijo SHA-256.

Trabajo relacionado

Estado de la versión preliminar

  • Spike de las fases 1-4 completado — 15 herramientas, L2 y L3, ambas en verde, contra un simulador de viscosímetro LADS en vivo

  • Correcciones de la Fase 4 que ya están en el código: silenciamiento del banner al importar, sondeo de Connection.initialized, desempaquetado de QualifiedName

  • La Fase 5 aún no está implementada — consulta ROADMAP.md

  • Estabilidad de la API: no antes de v1.0.0 — espera cambios incompatibles en 0.x

El historial completo del spike se conserva en SPIKE-HISTORY.md para que quede constancia.

Licencia

MIT — consulta LICENSE. Convención del ecosistema LADS.

Contribuciones

Consulta CONTRIBUTING.md. Los contribuyentes externos deberán firmar un CLA una vez que se finalice el CLA del proyecto Rei.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

0Releases (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 Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects AI agents to OPC UA-enabled industrial systems for real-time monitoring and control of operational data. It enables users to read, write, and browse industrial device nodes through natural language interactions.
    MIT
  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI assistants to interact with laboratory devices via a SiLA server, allowing querying device info, listing commands, executing commands, and monitoring status.
  • A
    license
    B
    quality
    A
    maintenance
    Exposes a deterministic IoT edge runtime — Modbus/CAN/J1939 acquisition, local rules, alarms, and history — to AI assistants as typed, governed MCP tools. Reads are safe by default; device control stays deny-by-default, explicitly confirmed, and audited.
    23
    3
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables LLMs to read, write, browse, search, and subscribe to live data on OPC-UA industrial automation servers, with caching, discovery index, and support for stdio or HTTP transports.
    5
    MIT

View all related MCP servers

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/fc0web/rei-lads-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server