Agente IA, servidor MCP

De hecho, para algunos clientes MCP (móvil, o como el cliente de voz que mostraste antes) creo que una versión accesible a través de Internet es necesaria.

Gracias por la información, voy a intentar implementarlo también, puede ser realmente genial tener acceso local para los que empiezan en Gladys.

¡Vaya! ¡Pierre-Gilles es muy rápido, gracias! Lo voy a integrar también.

Acabo de subir la autenticación local, la imagen está en proceso de construcción. Para acceder al MCP ahora hay que generar una clave API desde la interfaz de integración y luego configurar su cliente MCP para enviar un encabezado Authorization con el valor de la clave generada.

Por ejemplo, para usarlo a través de GitHub Copilot en VS Code, aquí está la configuración

{
  "servers": {
    "gladys": {
      "url": "http://<gladyslocalip>:1443/api/v1/service/mcp/proxy",
      "type": "http",
      "headers": {
        "Authorization": "<clé-api>"
      }
    }
  },
  "inputs": []
}

Una nueva versión de la imagen está disponible. Esta vez se añade el acceso al servidor a través de Gladys Plus. Para acceder, debe generar una clave API desde su cuenta Gladys Plus https://gladysassistant.com/fr/docs/plus/open-api/#g%C3%A9n%C3%A9rer-une-cl%C3%A9-dapi

A continuación, ingrese esta URL en su cliente MCP https://api.gladysgateway.com/v1/api/mcp/<OPEN_API_KEY> reemplazando <OPEN_API_KEY> por la clave recién generada.

Por ejemplo, en Le Chat de Mistral, vaya a Inteligencia → Conectores

Haga clic en Añadir un conector

En la pestaña Conector MCP personalizado, complete el formulario

Ahora puede interactuar con los datos de Gladys en Le Chat

Hola @bertrandda :slight_smile:

Gracias por el PR, ¡estoy probándolo!

Del lado de Mistral, funciona genial :ok_hand:

¿Sabes con qué frecuencia se actualiza la lista de recursos del lado del cliente?

He creado un enchufe para la prueba, pero el enchufe no parece ser encontrado:

Segunda pregunta, ¿qué tipos de sensores se gestionan?

La documentación menciona:

:thermometer: Obtener los estados de los dispositivos (temperatura, humedad, apertura, lámpara…)

No sé qué incluye en los “…” :smiley:

Por ejemplo, ¿debería funcionar esto?

De hecho, puede que no ocurra inmediatamente, hay dos cosas a tener en cuenta. La primera es que en Gladys el esquema se genera al iniciar el servicio, podríamos añadir un botón « Recargar » como hicimos para HomeKit para generar el esquema de nuevo si el usuario acaba de añadir un nuevo dispositivo. Para el lado del cliente, depende de la implementación, en general lo que he notado es que el cliente verifica el esquema al iniciar + si modificas la configuración del MCP en tu cliente y la guardas.

Normalmente creo que he puesto todos los tipos de sensores, pero puede que falten algunos.

Voy a aclarar eso, son todos los sensores + los dispositivos controlables compatibles (hoy en día, lámparas, interruptores).

¿Podrías darme la categoría y el tipo de característica asociada a esta funcionalidad, por favor? Lo voy a verificar.

¡Sí, incluso automáticamente!

categoría: level-sensor
tipo: liquid-depth

Faltaban algunos tipos de sensores, he añadido, entre otros, los sensores de nivel, de luz y de lluvia, por si quieres volver a intentarlo

Desde hace poco estoy aprendiendo en YouTube cómo crear un agente de IA con N8N. Si he entendido bien el funcionamiento del MCP, este servidor me permitiría conectar Gladys a mi agente de IA y hablar con él para lanzar escenas, obtener información de los sensores y controlar mis enchufes y luces sin pasar por Google Home o Alexa, que son muy limitados.

Sí, eso es exactamente. Cualquier agente, si es compatible con MCP (como es el caso de n8n), podrá conectarse.

Acabo de actualizar la PR para recargar automáticamente el esquema si se crea un nuevo dispositivo.

¡Gracias @bertrandda, funciona genial :heart_eyes:

Aclaro que funciona perfectamente en « Le Chat » móvil en iOS:

¡Muy, muy buen trabajo!!

Te he dejado algunos comentarios en la PR:

Pero creo que podemos publicar esto rápido en PROD!

¿Podrías poner un listener también en el cambio de nombre de un dispositivo? :slight_smile: ¡Acabo de tener ese caso!

He subido los cambios solicitados. Para información, también he realizado una pequeña actualización para encontrar el dispositivo correcto solicitado por el usuario. Si el nombre exacto no existe, se realiza una verificación de nombres cercanos con la distancia de Levenshtein. En la mayoría de los casos no debería ser necesario, ya que todo el esquema se basa en enumeraciones, pero algunos clientes MCP no parecen tenerlo en cuenta. Tras una pequeña prueba con 11ai que presentaste antes, parece que no gestiona correctamente las énums y estos pequeños cambios, aunque no sean perfectos, deberían ayudar un poco (una mejora por parte de 11ai sería mucho más eficaz).

¡Genial!

No sé si has visto mi respuesta a tu comentario.

@bertrandda he revisado tu PR, solo tengo un pequeño comentario sobre una línea de código que creo que es de la antigua implementación:

Por lo demás está muy bien, he probado la actualización del nombre de un dispositivo y funciona muy bien :slight_smile: ¡Bravo!

Efectivamente, fue un pequeño olvido en la última corrección, ya está solucionado

¡Gracias!

He notado un pequeño error al eliminar la clave de la API:

No funciona cuando la clave acaba de ser creada

¡Bien visto, está arreglado!

¡Genial, me parece bien!

Está fusionado y saldrá en la próxima versión de Gladys :white_check_mark:

¡Buen trabajo :clap:

Hola,

Acabo de actualizar mi Gladys, y el servicio tiene un error de inicio en mi entorno de producción. Al parecer debido a un dispositivo que no tendría una habitación (supongo).

compose-gladys-1      | 2025-11-03T16:18:35+0100 <info> index.js:27 (Object.start) Iniciando el servicio MCP
compose-gladys-1      | 2025-11-03T16:18:35+0100 <warn> service.start.js:44 (Service.start) No se puede iniciar el servicio mcp TypeError: No se puede leer propiedades de null (lectura 'selector')
compose-gladys-1      |     at /src/server/services/mcp/lib/buildSchemas.js:41:28
compose-gladys-1      |     at Array.forEach (<anonymous>)
compose-gladys-1      |     at MCPHandler.getAllResources (/src/server/services/mcp/lib/buildSchemas.js:28:17)
compose-gladys-1      |     at MCPHandler.createServer (/src/server/services/mcp/lib/createServer.js:26:4)
compose-gladys-1      |     at Object.start (/src/server/services/mcp/index.js:29:5)
compose-gladys-1      |     at Service.start (/src/server/lib/service/service.start.js:33:7)
compose-gladys-1      |     at start (/src/server/api/controllers/service.controller.js:22:21)

No logro encontrar el dispositivo en cuestión, voy a mirar en la base de datos a ver si lo encuentro :slight_smile:

Edición:

Es el dispositivo vinculado al servicio Enedis el que causa el problema, lo voy a eliminar por ahora, no lo uso :wink:

@bertrandda Tengo el mismo problema que @JeuFore en mi instancia también:

2025-11-03T15:04:03+0100 <warn> service.start.js:44 (Service.start) No se puede iniciar el servicio mcp TypeError: No se pueden leer propiedades de null (lectura 'selector')
    at /src/server/services/mcp/lib/buildSchemas.js:41:28
    at Array.forEach (<anonymous>)
    at MCPHandler.getAllResources (/src/server/services/mcp/lib/buildSchemas.js:28:17)
    at MCPHandler.createServer (/src/server/services/mcp/lib/createServer.js:26:4)
    at Object.start (/src/server/services/mcp/index.js:29:5)
    at Service.start (/src/server/lib/service/service.start.js:33:7)