使用说明
mcp-nodered-demo
Proyecto de ejemplo para conectar una IA (Claude Desktop) con un sistema IoT usando:
- MCP (Model Context Protocol)
- Node-RED
- HTTP + MQTT (EMQX)
- ESP32 + OLED I²C
La IA no habla directo con el hardware: habla con un servidor MCP, que llama a Node-RED, y desde ahí se orquesta MQTT hacia los ESP32.
Estructura del proyecto
mcp-nodered-demo/
├─ docker-compose.yml
├─ nodered/
│ └─ data/
│ └─ flows.json
└─ mcp-server/
├─ Dockerfile
├─ package.json
└─ server.mjs
Prerrequisitos
- Docker y docker compose
- Git
- Claude Desktop
- Node.js + npm (para
npx mcp-remote) - Opcional: broker EMQX y ESP32 + OLED I²C ya funcionando con MQTT
Puesta en marcha rápida
Clonar y levantar
git clone URL_DEL_REPO mcp-nodered-demo
cd mcp-nodered-demo
docker compose up -d --build
Servicios:
- Node-RED:
http://localhost:1880 - MCP server:
http://localhost:3000/mcp
Prueba rápida a Node-RED:
curl -X POST http://localhost:1880/device/led \
-H "Content-Type: application/json" \
-d '{"deviceId":"esp32-lab1","state":"ON","durationSeconds":5}'
Herramienta MCP setLedState
El servidor MCP expone una única herramienta:
-
name:setLedState -
Entrada:
deviceId:stringstate:"ON"|"OFF"durationSeconds:number(opcional)
-
Acción:
- Envía
POSTahttp://NODERED_URL/device/led
- Envía
-
Salida:
status:"ok"nodeRedResponse: respuesta de Node-RED
Configuración en Claude Desktop
Editar:
~/Library/Application Support/Claude/claude_desktop_config.json
Agregar:
{
"mcpServers": {
"iot-nodered": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:3000/mcp"
]
}
}
}
Reinicia Claude Desktop.
Ejemplo de uso (en lenguaje natural):
“En el servidor MCP
iot-nodered, usa la herramientasetLedStatepara encender el LED del dispositivoesp32-lab1durante 5 segundos.”
Reto sugerido
-
En Node-RED:
-
Agregar mqtt out para publicar a EMQX (
lab1/esp32/led). -
Adaptar el
functionpara que:- Primera salida → respuesta HTTP actual.
- Segunda salida → JSON por MQTT (incluyendo un campo
message).
-
-
En ESP32:
- Suscribirse a
lab1/esp32/led. - Parsear el JSON recibido.
- Mostrar
messageen la pantalla OLED I²C.
- Suscribirse a
Objetivo: cuando invoques setLedState desde Claude, el mensaje correspondiente se vea en la OLED del ESP32.
Licencia
MIT License