MCP-HA-Connect

Un servidor del Protocolo de Contexto de Modelo (MCP) listo para producción para la integración de Home Assistant con asistentes de IA como Claude.

Documentación

MCP-HA-Connect

Un servidor de Model Context Protocol (MCP) listo para producción para la integración de Home Assistant con asistentes de IA como Claude y LM Studio.

npm version Docker Discord

Consulta docs/QUICK_START.md para Docker, modo servidor HTTP, integración con n8n y más opciones de instalación.

Características Principales

Funcionalidad Principal

  • Control Inteligente de Dispositivos
  • Luces: Brillo, temperatura de color, color RGB, transiciones
  • Clima: Temperatura, modos HVAC, modos de ventilador, humedad
  • Coberturas: Control de posición e inclinación
  • Interruptores: Control de encendido/apagado
  • Sensores y Contactos: Monitoreo de estado
  • Reproductores Multimedia: Control de reproducción, volumen, selección de fuente
  • Ventiladores: Velocidad, oscilación, dirección
  • Cerraduras: Control de bloqueo/desbloqueo
  • Aspiradoras: Iniciar, detener, regresar a la base
  • Cámaras: Detección de movimiento, capturas

Gestión de Automatizaciones

  • Listar todas las automatizaciones con estado
  • Activar automatizaciones manualmente con variables
  • Habilitar/deshabilitar/alternar automatizaciones
  • Crear nuevas automatizaciones mediante API
  • Eliminar automatizaciones
  • Ver trazas de ejecución de automatizaciones
  • Recargar automatizaciones desde la configuración

Características del Sistema

  • Integración directa con la API de Home Assistant
  • Autenticación con token de acceso de larga duración
  • Gestión de estados de entidades
  • Soporte de llamadas a servicios
  • Búsqueda avanzada de entidades
  • Análisis de sensores impulsado por IA con Ollama
  • Múltiples modos de transporte (stdio, HTTP Streamable)
  • Servidor HTTP con comprobaciones de salud
  • Soporte CORS para clientes basados en navegador
  • Registro estructurado (formatos plano, JSON, GCP-JSON)
  • Validación integral de configuración con Zod
  • Seguridad total de tipos con TypeScript
  • Soporte de sesiones con y sin estado
  • Autenticación JWT con control de acceso basado en roles
  • Instrucciones del servidor MCP para una mejor selección de herramientas LLM

Monitoreo de Red y Seguridad (TP-Link Omada)

Lleva tu red doméstica al mismo asistente que gestiona tu hogar. Estas son las preguntas de alto valor que un LLM puede responder realmente sobre tu red:

  • Estado de Internet y WAN — "¿Está mi internet activo? ¿Cuál es mi IP WAN y velocidad de enlace?" Estado en vivo por WAN, además de salud multi-WAN / ISP y balanceo de carga para la puerta de enlace.
  • Registros de eventos y alertas — "¿Qué pasó en mi red?" Los registros de eventos y alertas del sitio, con ventana de tiempo (por defecto los últimos 7 días), para correlacionar con el historial de Home Assistant.
  • Seguridad inalámbrica — Resultados de escaneo de AP rogue y (en Omada Pro) detección de intrusiones inalámbricas (WIDS) para una conciencia genuina de seguridad de red.
  • Salud del controlador y dispositivos — Resumen del panel más los principales dispositivos por uso de CPU y memoria, monitoreo estilo HA de tu pila de red.
  • Pruebas de velocidad — Superficie los resultados de pruebas de velocidad del propio controlador, combinando con analyzeSensors impulsado por IA para detección de anomalías.
  • Dispositivos pendientes — "¿Hay un nuevo dispositivo esperando ser adoptado?"
  • Conciencia de firmware — Información de firmware por dispositivo y una visión general de actualizaciones críticas a nivel de controlador, reflejando la filosofía de checkUpdates de Home Assistant en toda la red.
  • Gestión de clientes — Listar/inspeccionar clientes conectados, actividad de tráfico y aplicar perfiles de límite de velocidad, con correlación de presencia contra los rastreadores de dispositivos de Home Assistant.

Un modo de grafo de recursos descubrible (MCP_TOOL_REGISTRATION_MODE=graph) expone todo lo anterior a través de dos herramientas — omada_browse + omada_read — manteniendo el presupuesto de esquema de herramientas pequeño para modelos de bajo contexto. Consulta las tablas de herramientas de Omada a continuación para la superficie completa.

Herramientas Disponibles (69 en Total)

Herramientas de Home Assistant (38)

Herramientas de Estado y Entidades

HerramientaDescripción
getStatesObtener todos los estados de entidades (paginado, 50/página por defecto). Usa includeAttributes=true para datos completos
getStateObtener el estado de una entidad específica por entity_id
getEntitiesByDomainObtener entidades para un dominio (paginado, 50/página por defecto). Usa includeAttributes=true para datos completos
searchEntitiesBuscar entidades por nombre/entity_id (paginado, 50/página por defecto). Usa includeAttributes=true para datos completos
getAllSensorsObtener todos los sensores (paginado, 50/página por defecto). Usa includeAttributes=true para datos completos
listEntitiesListar entidades con filtrado (dominio, estado, búsqueda, límite). Usa includeAttributes=true para datos completos
getDomainSummaryObtener estadísticas resumidas para un dominio
getHistoryObtener datos históricos para una entidad
listPersonsListar todos los miembros del hogar con estado de ubicación (en casa/fuera)

Herramientas de Servicio y Control

HerramientaDescripción
callServiceLlamar a cualquier servicio de Home Assistant
entityActionAcciones simples de encender/apagar/alternar

Herramientas de Control de Dispositivos

HerramientaDescripción
controlLightControlar luces con brillo, color, temperatura
controlClimateControlar termostatos con temperatura, modo HVAC
controlMediaPlayerControlar reproductores multimedia con reproducción, volumen
controlCoverControlar coberturas/persianas con posición, inclinación
controlFanControlar ventiladores con velocidad, oscilación, dirección
activateSceneActivar una escena de Home Assistant
runScriptEjecutar un script de Home Assistant
sendNotificationEnviar notificaciones con soporte completo de aplicación móvil (acciones, prioridad, imágenes)
listNotificationTargetsDescubrir objetivos de notificación disponibles de la aplicación móvil

Preguntas al Propietario (aprobación en el teléfono)

Haz una pregunta al propietario como notificación de teléfono con hasta 3 botones y lee la respuesta. Solo modo HTTP; necesita un token de Home Assistant de administrador (los toques de botón son eventos solo de administrador) y MCP_AUTH_SECRET para que las preguntas abiertas sobrevivan a un reinicio. Todo excepto una respuesta de aprobación explícita cuenta como NO.

HerramientaDescripción
askOwnerEnviar la pregunta (texto plano, máximo 256 caracteres; 1-3 botones, por defecto Aprobar / Rechazar; abierta hasta 7 días) y devolver un requestId de inmediato
getOwnerAnswerEsperar hasta 50 s por llamada: answered (índice y etiqueta del botón, hora, usuario de HA), pending, timeout, cancelled o unknown
cancelOwnerQuestionRetirar una pregunta abierta; la notificación cambia a "Cancelada"

Los toques se verifican con identificadores de botón firmados y deben provenir de la aplicación móvil (una automatización no puede falsificarlos); establece MCP_OWNER_QUESTIONS_HA_USERS para que solo tu usuario de HA pueda responder. Solo el cliente que preguntó puede leer la respuesta; como máximo 3 preguntas abiertas y 30 por hora por cliente.

Límite conocido: las cancelaciones y respuestas se mantienen en memoria. Después de un reinicio, alguien con un inicio de sesión de Home Assistant podría reenviar un identificador de botón antiguo a través de la propia API de HA y responder una pregunta que había sido cancelada o rechazada (el teléfono ya no muestra sus botones). Ese acceso ya permite controlar la casa directamente.

Herramientas de Automatización

HerramientaDescripción
listAutomationsListar todas las automatizaciones con estado
triggerAutomationActivar manualmente una automatización
enableAutomationHabilitar una automatización deshabilitada
disableAutomationDeshabilitar una automatización
toggleAutomationAlternar el estado de una automatización
reloadAutomationsRecargar automatizaciones desde la configuración
createAutomationCrear una nueva automatización
deleteAutomationEliminar una automatización
getAutomationTraceEjecuciones recientes de una automatización, más recientes primero: disparador, resultado, errores (solo automatizaciones con un id)

Herramientas del Sistema

HerramientaDescripción
getVersionObtener la versión de Home Assistant e información de configuración
restartHomeAssistantReiniciar el servidor de Home Assistant
getSystemLogObtener entradas de registro del sistema desde el libro de registro
checkUpdatesVerificar actualizaciones disponibles

Herramientas de Calendario

HerramientaDescripción
listCalendarsListar todas las entidades de calendario
getCalendarEventsObtener eventos de uno o todos los calendarios

Herramientas de Red Omada (49)

Herramientas de Sitio

HerramientaDescripción
omada_listSitesListar todos los sitios configurados en el controlador Omada

Herramientas de Dispositivos

HerramientaDescripción
omada_listDevicesListar todos los dispositivos de red (APs, switches, puertas de enlace) en un sitio
omada_getDeviceObtener información detallada sobre un dispositivo de red específico
omada_searchDevicesBuscar dispositivos globalmente en todos los sitios
omada_getSwitchStackDetailObtener información detallada sobre una pila de switches
omada_listDevicesStatsObtener estadísticas para dispositivos adoptados globales con filtrado

Herramientas de Clientes

HerramientaDescripción
omada_listClientsListar todos los clientes conectados (dispositivos/usuarios) en un sitio
omada_getClientObtener información detallada sobre un cliente conectado específico
omada_listMostActiveClientsObtener los clientes más activos ordenados por tráfico total
omada_listClientsActivityObtener estadísticas de actividad de clientes a lo largo del tiempo
omada_listClientsPastConnectionsObtener datos históricos de conexión de clientes

Herramientas de Límite de Velocidad

HerramientaDescripción
omada_getRateLimitProfilesObtener perfiles de límite de velocidad disponibles para un sitio
omada_setClientRateLimitEstablecer límites de ancho de banda personalizados para un cliente (descarga/subida en Kbps)
omada_setClientRateLimitProfileAplicar un perfil de límite de velocidad a un cliente
omada_disableClientRateLimitEliminar límites de ancho de banda de un cliente

Acciones de Clientes y Dispositivos

HerramientaDescripción
omada_blockClientBloquear un cliente de la red
omada_unblockClientDesbloquear un cliente previamente bloqueado (explica cuándo la API de Omada ya no puede alcanzar a un cliente sin conexión)
omada_listBlockedClientsListar clientes bloqueados, incluidos los sin conexión
omada_deleteClientEliminar el registro de un cliente (nombre, historial, bloqueo) para limpiar un bloqueo que el desbloqueo no puede alcanzar (necesita CONFIGURE)
omada_cyclePoePortCiclo de energía en puertos PoE de switches (reinicio remoto de APs/cámaras)
omada_setSsidEnabledActivar o desactivar un SSID (por ejemplo, WiFi de invitados) por nombre

Diagnóstico de Clientes y Grupos MAC

HerramientaDescripción
omada_diagnoseClientExplicar por qué un dispositivo (por MAC) no puede conectarse: estado de bloqueo, grupos MAC y las listas de permitir/denegar SSID que los usan, filtro MAC del sitio, enlace IP-MAC, reserva DHCP, y para llamadores ADMIN el registro de auditoría (detecta un bloqueo huérfano). Solo lectura
omada_listMacGroupsListar grupos MAC con sus entradas y qué SSIDs los usan como listas de permitir o denegar (modo grafo: omada_read /profiles/mac-groups)
omada_setMacGroupEntryAgregar una MAC a un grupo MAC, o renombrar su entrada (necesita CONFIGURE)
omada_removeMacGroupEntryEliminar una MAC de un grupo MAC (necesita CONFIGURE)

Control de Acceso (horarios, grupos, ACL de puerta de enlace)

Permite que el controlador aplique un horario por sí mismo (por ejemplo, un toque de queda) en lugar de un bucle diario de bloqueo/desbloqueo. Todas las escrituras necesitan CONFIGURE.

HerramientaDescripción
omada_listAccessControlRangos de tiempo (ventanas legibles), grupos IP y reglas ACL de puerta de enlace con nombres y horarios (modo grafo: omada_read /profiles/time-range, /profiles/ip-groups, /network/acls/gateway)
omada_createTimeRange / omada_updateTimeRange / omada_deleteTimeRangeHorarios semanales en cuartos de hora, por ejemplo {days:["mon","tue"], start:"14:30", end:"19:00"}; invertWindows convierte las horas permitidas en las bloqueadas. Máximo 7 ventanas por perfil (un toque de queda necesita un perfil de mañana y uno de tarde). Se rechaza la eliminación mientras una regla lo use
omada_createGroup / omada_deleteGroupGrupos IP (fuentes/destinos ACL) y grupos MAC (listas de permitir/denegar SSID); se rechaza la eliminación para grupos integrados y grupos en uso
omada_setDhcpReservation / omada_removeDhcpReservationIP fija para un dispositivo (para que una ACL pueda coincidir); rechaza una dirección reservada para otro dispositivo
omada_createGatewayAcl / omada_updateGatewayAcl / omada_deleteGatewayAcl / omada_moveGatewayAclReglas de puerta de enlace (router) LAN a internet: permitir/denegar una fuente (grupo IP, red LAN o SSID), opcionalmente solo durante un rango de tiempo; cubre cableado y Wi-Fi
omada_setSsidMacFilterActivar el filtro MAC de un SSID (grupo MAC como lista de permitir o denegar) o desactivarlo; informa y rechaza desconectar clientes conectados a menos que allowLockout; dryRun previsualiza

Herramientas de Seguridad

HerramientaDescripción
omada_getThreatListObtener lista de gestión de amenazas de seguridad

Herramientas de Configuración de Red

HerramientaDescripción
omada_getInternetInfoObtener configuración de conexión a internet para un sitio
omada_getPortForwardingStatusObtener reglas de reenvío de puertos (Usuario o UPnP)
omada_getLanNetworkListObtener lista de configuración de red LAN
omada_getLanProfileListObtener lista de configuración de perfiles LAN
omada_getWlanGroupListObtener lista de configuración de grupos WLAN
omada_getSsidListObtener lista de SSID para un grupo WLAN
omada_getSsidDetailObtener configuración detallada de SSID
omada_getFirewallSettingObtener configuración de firewall para un sitio
omada_getSiteNtpStatusObtener configuración y estado del servidor NTP del sitio
omada_setSiteNtpServersReemplazar la lista de servidores NTP del sitio (necesita CONFIGURE; dryRun previsualiza el cambio)

Herramientas de Red Independientes del Proveedor (9)

Las herramientas net_ describen redes de la misma manera para cada proveedor de controladores: un modelo compartido, con un adaptador por proveedor (TP-Link Omada hoy; UniFi y MikroTik están planificados). Cada adaptador indica por característica si es nativa, construida a partir de varios objetos, o no soportada (net_capabilities), y rechaza lo que no puede hacer en lugar de omitirlo. Cada cambio se planifica primero: dryRun muestra los pasos, qué significan y qué dispositivos en línea se desconectarían; la aplicación rechaza si el controlador cambió mientras tanto, o si los dispositivos se desconectarían sin allowLockout. Las contraseñas de Wi-Fi nunca se toman ni se muestran: una red Wi-Fi nueva o restablecida obtiene una contraseña temporal aleatoria, y la real se establece en la interfaz web del controlador. Las lecturas necesitan QUERY, los cambios CONFIGURE.

HerramientaDescripción
net_capabilitiesQué puede hacer el controlador, por característica
net_listNetworksRedes (VLANs): VLAN, puerta de enlace, DHCP, IPv6, protegida
net_createNetwork / net_updateNetwork / net_deleteNetworkCrear o cambiar una VLAN con su puerta de enlace y rango DHCP. La red en la que está el controlador está protegida; se rechaza la eliminación mientras una red Wi-Fi, perfil de puerto, reserva o regla la use
net_listWifiRedes Wi-Fi: red, bandas, seguridad, aislamiento, filtro MAC
net_createWifi / net_updateWifi / net_deleteWifiCrear o cambiar un SSID en una red determinada (bandas, WPA2/WPA3, PMF, aislamiento, oculto, 802.11r, filtro MAC), o restablecer su contraseña a una aleatoria

En Omada, el aislamiento de red, un tipo de red "invitado", activar IPv6 y el modo mixto WPA2/WPA3 no están disponibles a través de la API y se rechazan. Las reglas llegan en 2.4.6, los puertos de switch y mDNS en 2.4.7.

Herramientas de IA (1)

HerramientaDescripción
analyzeSensorsAnalizar datos de sensores usando IA (Ollama) para detectar problemas y proporcionar recomendaciones

Recursos MCP

URI del RecursoDescripción
hass://entitiesListar todas las entidades agrupadas por dominio
hass://entities/{entity_id}Obtener estado de una entidad específica
hass://entities/{entity_id}/detailedObtener información detallada de la entidad con todos los atributos
hass://entities/domain/{domain}Obtener todas las entidades para un dominio
hass://search/{query}/{limit}Buscar entidades con límite de resultados

Requisitos Previos

  • Node.js 20+ (probado con v20.19.6) - para métodos npm/npx
  • npm 10.8+ (probado con v10.8.2) - para métodos npm/npx
  • Docker (opcional) - para el método Docker
  • Instancia de Home Assistant con token de acceso de larga duración
  • Acceso de red a su instancia de Home Assistant
  • (Opcional) Ollama para análisis impulsado por IA

Cómo Obtener su Token de Home Assistant

  1. Inicie sesión en su instancia de Home Assistant
  2. Haga clic en su perfil (abajo a la izquierda)
  3. Desplácese hacia abajo hasta "Tokens de Acceso de Larga Duración"
  4. Haga clic en "Crear Token"
  5. Asígnele un nombre (por ejemplo, "Servidor MCP")
  6. Copie el token (¡se muestra solo una vez!)

Variables de Entorno

Requeridas

VariableDescripciónEjemplo
HA_URLURL de Home Assistanthttp://homeassistant.10.0.0.19.nip.io:8123
HA_TOKENToken de acceso de larga duracióneyJhbGciOiJIUzI1NiIsInR5cCI...

Opcionales - Home Assistant

VariablePredeterminadoDescripción
HA_PLUGIN_ENABLEDtrueHabilitar complemento de Home Assistant
HA_STRICT_SSLtrueValidar certificados SSL
HA_TIMEOUT30000Tiempo de espera de solicitud de API (ms)

Opcionales - Servidor MCP

VariablePredeterminadoDescripción
MCP_SERVER_LOG_LEVELinfoNivel de registro: debug, info, warn, error
MCP_SERVER_LOG_FORMATplainFormato de registro: plain, json, gcp-json
MCP_SERVER_USE_HTTPfalseHabilitar modo HTTP (en lugar de stdio)
MCP_SERVER_STATEFULfalseHabilitar sesiones con estado en modo HTTP

Opcionales - Modo HTTP

VariablePredeterminadoDescripción
MCP_HTTP_PORT3000Puerto del servidor HTTP
MCP_HTTP_BIND_ADDR127.0.0.1Dirección de enlace
MCP_HTTP_PATH/mcpRuta del punto final MCP
MCP_HTTP_ENABLE_HEALTHCHECKtrueHabilitar punto final de verificación de salud
MCP_HTTP_HEALTHCHECK_PATH/healthRuta de verificación de salud
MCP_HTTP_ALLOW_CORStrueHabilitar CORS
MCP_HTTP_ALLOWED_ORIGINS127.0.0.1,localhostOrígenes CORS permitidos

Opcionales - Interfaz de chat (superficie OpenAPI/REST)

El servidor también sirve una interfaz OpenAPI/REST (/openapi.json + /api/*) para interfaces de chat como Open WebUI. Por defecto expone las 8 herramientas clásicas de Home Assistant. Las herramientas marcadas como elegibles para chat en el código se pueden activar por categoría con granularidad de lectura/escritura:

VariablePredeterminadoDescripción
MCP_CHAT_TOOLSsin establecer (= 8 herramientas HA heredadas)Porción de categoría, p. ej. ha-core:rw,ha-history:r,omada-read:r. Categorías: ha-core, ha-history, ha-automations, omada-read, omada-write. La configuración solo puede reducir lo que el código marca como elegible para chat; las herramientas ADMIN (invokeAction) nunca pueden aparecer en esta interfaz.
MCP_REST_ACTIONSsin establecer (= herramienta no registrada)Mapa JSON de acciones REST pre-registradas para la herramienta MCP invokeAction (ADMIN; solo interfaz MCP), p. ej. {"deploy":{"url":"http://host:8425/v1/update","bearerToken":"...","cooldownMs":300000}}. Cada acción tiene límite de velocidad: intervalo mínimo entre ejecuciones = cooldownMs (predeterminado 60000; 0 deshabilita) — limita el radio de explosión de implementación de tormenta si un modelo repite una acción legítima

Las herramientas de chat activadas aparecen en el /openapi.json generado como POST /api/tools/<name> y se envían a través de los mismos manejadores, validación y RBAC que la interfaz MCP.

Opcionales - Eventos SSE

VariablePredeterminadoDescripción
MCP_SSE_EVENTS_ENABLEDtrueHabilitar eventos SSE en tiempo real
MCP_OWNER_QUESTIONS_ENABLEDtrueHabilitar askOwner / getOwnerAnswer / cancelOwnerQuestion (modo HTTP con Home Assistant)
MCP_OWNER_QUESTIONS_HA_USERS(cualquier usuario de HA)IDs de usuario de Home Assistant separados por comas permitidos para responder preguntas del propietario (el valor answeredBy de una respuesta)
MCP_SSE_EVENTS_PATH/subscribe_eventsRuta del punto final SSE

Opcionales - Límite de Velocidad

VariablePredeterminadoDescripción
MCP_RATE_LIMIT_ENABLEDfalseHabilitar límite de velocidad
MCP_RATE_LIMIT_WINDOW_MS60000Ventana de límite de velocidad (ms)
MCP_RATE_LIMIT_MAX_REQUESTS100Máximo de solicitudes por ventana

Opcionales - Autenticación

VariablePredeterminadoDescripción
MCP_AUTH_METHODnoneMétodo de autenticación: none o bearer
MCP_AUTH_SECRET-Secreto de firma JWT (mínimo 32 caracteres, requerido para el método bearer)
MCP_PERMISSIONS_CONFIG-Configuración JSON para roles y permisos de usuario

Autenticación JWT

Cuando MCP_AUTH_METHOD=bearer, los clientes deben proporcionar un token JWT en el encabezado de Autorización:

Authorization: Bearer <jwt-token>

Genere tokens con su MCP_AUTH_SECRET usando el algoritmo HS256. La carga útil del JWT debe incluir:

  • sub (sujeto): Identificador de usuario para la búsqueda de permisos
  • exp (opcional): Marca de tiempo de expiración

Sistema de Permisos

El servidor utiliza control de acceso basado en roles con máscaras de permisos binarias:

PermisoBanderaDescripción
ADMIN1Operaciones del sistema (reinicio, actualizaciones)
CONFIGURE2Crear/modificar automatizaciones, scripts
CONTROL4Controlar dispositivos (luces, clima, etc.)
QUERY8Leer estados de entidades, historial, listas
NOTIFY16Enviar notificaciones
AI32Usar funciones de análisis de IA

Roles Predefinidos:

RolPermisos
NONESin permisos
READONLYSolo QUERY
OPERATORQUERY + CONTROL + NOTIFY
CONTRIBUTORQUERY + CONTROL + NOTIFY + CONFIGURE
ADMINLos seis permisos (QUERY, CONTROL, NOTIFY, CONFIGURE, AI, ADMIN)
SUPERUSERTodos los permisos

Ejemplo de Configuración:

{
  "users": [
    { "sub": "admin@example.com", "role": "admin" },
    { "sub": "user@example.com", "role": "operator" },
    { "sub": "viewer@example.com", "role": "readonly" }
  ],
  "defaultRole": "NONE"
}

Establecer mediante variable de entorno (escape de comillas para shell):

MCP_PERMISSIONS_CONFIG='{"users":[{"sub":"admin","role":"admin"}],"defaultRole":"NONE"}'

Recomendado: defaultRole: "NONE" más una entrada users por cliente. defaultRole se aplica a cada token firmado válidamente cuyo sub no esté listado — un valor predeterminado no-NONE otorga silenciosamente acceso real a clientes no mapeados. El servidor registra una advertencia al inicio cuando defaultRole otorga algo. Mapee cada cliente (Open WebUI, n8n, agentes…) explícitamente antes de cambiar una implementación existente a NONE.

Los clientes solo ven las herramientas que pueden usar: tools/list se filtra por los permisos del llamador, por lo que un token readonly nunca recibe herramientas de control o administración (las llamadas aún se verifican por herramienta).

Opcionales - Proveedor de IA

VariablePredeterminadoDescripción
AI_PLUGIN_ENABLEDtrueHabilitar complemento de IA
AI_PROVIDERollamaProveedor de IA: ollama, openai, o none
AI_URLhttp://localhost:11434URL del servidor de IA (Ollama)
AI_MODELllama2Nombre del modelo de IA
AI_TIMEOUT60000Tiempo de espera de solicitud de IA (ms)

Opcionales - Controlador de Red Omada

VariablePredeterminadoDescripción
OMADA_PLUGIN_ENABLEDfalseHabilitar complemento Omada
OMADA_BASE_URL-URL del controlador Omada (p. ej., https://10.0.0.1:8043)
OMADA_CLIENT_ID-ID de cliente OAuth2 del controlador Omada
OMADA_CLIENT_SECRET-Secreto de cliente OAuth2 del controlador Omada
OMADA_OMADAC_ID-ID del controlador Omada
OMADA_SITE_ID-ID de sitio predeterminado para operaciones
OMADA_STRICT_SSLtrueValidar certificados SSL
OMADA_TIMEOUT30000Tiempo de espera de solicitud de API (ms)

Ejemplos Avanzados de Configuración

Con Análisis de IA (Ollama)

{
  "mcpServers": {
    "homeassistant": {
      "command": "npx",
      "args": ["-y", "@coffeerunhobby/mcp-ha-connect"],
      "env": {
        "HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
        "HA_TOKEN": "your_token",
        "AI_PROVIDER": "ollama",
        "AI_URL": "http://ollama.10.0.0.17.nip.io:11434",
        "AI_MODEL": "llama2"
      }
    }
  }
}

Deshabilitar Funciones de IA

{
  "mcpServers": {
    "homeassistant": {
      "command": "npx",
      "args": ["-y", "@coffeerunhobby/mcp-ha-connect"],
      "env": {
        "HA_URL": "http://homeassistant.10.0.0.19.nip.io:8123",
        "HA_TOKEN": "your_token",
        "AI_PROVIDER": "none"
      }
    }
  }
}

Docker con Configuración de Red

Para Linux, es posible que necesite agregar host.docker.internal:

{
  "mcpServers": {
    "homeassistant": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "--add-host=host.docker.internal:host-gateway",
        "-e", "HA_URL=http://host.docker.internal:8123",
        "-e", "HA_TOKEN=your_token",
        "ghcr.io/coffeerunhobby/mcp-ha-connect:latest"
      ]
    }
  }
}

Modos de Uso

Modo 1: Cliente MCP (Claude Desktop / LM Studio)

Modo stdio predeterminado para clientes MCP. Consulte la sección Inicio Rápido para la configuración.

Para opciones de configuración detalladas, consulte docs/LOCAL_CLIENT.md.

Modo 2: Servidor HTTP

Inicie como servidor HTTP independiente para aplicaciones web:

# Using npx
npx @coffeerunhobby/mcp-ha-connect

# Or with environment variables
MCP_SERVER_USE_HTTP=true \
MCP_HTTP_PORT=3000 \
HA_URL=http://homeassistant.10.0.0.19.nip.io:8123 \
HA_TOKEN=your_token \
npx @coffeerunhobby/mcp-ha-connect

Transporte HTTP Transmisible

Configure su cliente MCP para usar:

  • URL: http://localhost:3000/mcp
  • Transporte: HTTP Transmisible (MCP 2025-03-26)

Suscripción a Eventos SSE

Suscríbase a eventos en tiempo real:

const eventSource = new EventSource(
  'http://localhost:3000/subscribe_events?domain=light&entity_id=light.living_room'
);

eventSource.addEventListener('state_changed', (event) => {
  const data = JSON.parse(event.data);
  console.log('Entity changed:', data.entity_id, data.new_state);
});

Consulte docs/SSE_API.md para la documentación completa de SSE.

Modo 3: Docker Independiente

# Pull image
docker pull ghcr.io/coffeerunhobby/mcp-ha-connect:latest

# Run in HTTP mode
docker run -d --name mcp-ha-connect \
  -e HA_URL=http://homeassistant.10.0.0.19.nip.io:8123 \
  -e HA_TOKEN=your_token \
  -e MCP_SERVER_USE_HTTP=true \
  -p 3000:3000 \
  ghcr.io/coffeerunhobby/mcp-ha-connect:latest

Modo 4: Docker Compose

version: '3.8'

services:
  mcp-ha-connect:
    image: ghcr.io/coffeerunhobby/mcp-ha-connect:latest
    container_name: mcp-ha-connect
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - HA_URL=http://homeassistant.10.0.0.19.nip.io:8123
      - HA_TOKEN=${HA_TOKEN}
      - MCP_SERVER_USE_HTTP=true
      - MCP_HTTP_BIND_ADDR=0.0.0.0
    networks:
      - home-automation

networks:
  home-automation:
    driver: bridge

Ejemplos de Integración

Con Claude Desktop

Una vez configurado, puedes preguntarle a Claude:

  • "Muéstrame todas las luces de mi casa"
  • "Enciende las luces de la cocina al 50% de brillo"
  • "Establece la temperatura de la sala de estar a 72 grados"
  • "Crea una automatización que apague todas las luces a medianoche"
  • "¿Qué automatizaciones están habilitadas actualmente?"
  • "Activa la automatización de la rutina matutina"
  • "Busca entidades con 'dormitorio' en su nombre"
  • "Obtén todas las entidades de clima"
  • "Analiza mis sensores para detectar problemas" (requiere Ollama)
  • "Revisa el historial de mi termostato"

Con Flujos de Trabajo n8n

El servidor se puede integrar con n8n para monitoreo automatizado del hogar. Hay flujos de trabajo preconstruidos disponibles en el directorio n8n/:

  1. ai-agent-safety-monitor - Monitoreo de seguridad crítico cada 5 minutos

Importación de Flujos de Trabajo

Método 1: Interfaz de n8n

  1. Abre n8n: http://127.0.0.1:5678
  2. Haz clic en Workflows → Import from File
  3. Selecciona el archivo JSON de n8n-files/
  4. Activa el flujo de trabajo

Método 2: CLI de Docker

# Copy workflow to n8n container
docker cp "n8n-files/AI Agent Safety Monitor - Updated.json" n8n:/files/workflow.json

# Import using n8n CLI
docker exec -it n8n n8n import:workflow --input=/files/workflow.json

# Verify import
docker exec -it n8n n8n list:workflow

Con Aplicaciones Web

Usa el transporte HTTP con tu cliente web compatible con MCP:

  1. Inicia el servidor en modo HTTP
  2. Configura el cliente para usar http://localhost:3000/mcp
  3. Establece el transporte a Streamable HTTP (MCP 2025-03-26)
  4. Habilita CORS agregando tu origen a MCP_HTTP_ALLOWED_ORIGINS

Con Proxy MCP Remoto (mcp-remote)

Conecta un cliente solo-stdio (Claude Desktop, LM Studio) a un servidor MCP HTTP remoto usando mcp-remote. En Windows, inícialo a través de cmd /c e incluye -y para que la primera ejecución nunca se bloquee en el mensaje de instalación de npx:

{
  "mcpServers": {
    "homeassistant": {
      "command": "cmd",
      "args": [
        "/c",
        "npx",
        "-y",
        "mcp-remote",
        "https://your-server.example/mcp",
        "--header",
        "Authorization: Bearer <your-jwt-token>"
      ]
    }
  }
}

⚠️ No uses marcadores de posición ${VAR} en el valor de --header. Una configuración como "Authorization: Bearer ${MCP_AUTH_TOKEN}" con un bloque env correspondiente no funciona en Windows: cmd /c solo expande %VAR% (no ${VAR}), y mcp-remote tampoco lo sustituye. El texto literal ${MCP_AUTH_TOKEN} se envía como token, el servidor responde 401, y mcp-remote cae en un flujo OAuth fallido que se muestra como "Server disconnected". Inserta el JWT real directamente. (En macOS/Linux puedes dejar que tu shell expanda la variable antes de que el cliente se inicie).

Notas de Configuración de Red

  • host.docker.internal - Úsalo para acceder a servicios en tu máquina host desde Docker
    • Funciona en Windows y macOS por defecto
    • En Linux, agrega --add-host=host.docker.internal:host-gateway a los argumentos de docker
  • IP Directa - Usa la dirección IP de tu máquina (por ejemplo, http://10.0.0.19:8123)
  • Dominios nip.io - Usa DNS comodín para desarrollo local fácil (por ejemplo, http://homeassistant.10.0.0.19.nip.io:8123)

Mejores Prácticas de Seguridad

Seguridad de Red

  • Segmentación de Red: Ejecuta el servidor MCP solo en LAN privada
  • Redes Docker: Usa redes Docker para aislamiento de contenedores
  • VLAN: Considera VLAN para dispositivos IoT
  • Sin Exposición a Internet: Nunca expongas el servidor MCP directamente a internet

Seguridad de Tokens y Configuración

  • Almacena .env de forma segura (contiene token de acceso)
  • Nunca hagas commit de .env al control de versiones
  • Establece permisos de .env: chmod 600 .env
  • Usa HA_STRICT_SSL=true para HTTPS en producción
  • Rota los tokens de acceso periódicamente
  • Restringe MCP_HTTP_ALLOWED_ORIGINS (evita el comodín *)
  • Vincula a 127.0.0.1 para acceso solo local
  • Habilita limitación de velocidad en producción (MCP_RATE_LIMIT_ENABLED=true)

Seguridad de Configuración del Cliente MCP

⚠️ Importante: Almacenar tokens directamente en archivos de configuración del cliente MCP (Claude Desktop, LM Studio) los expone a cualquier persona con acceso al sistema de archivos. Considera:

  • Usar archivos .env con permisos restringidos para implementaciones Docker/locales
  • Establecer permisos de archivo en los archivos de configuración (por ejemplo, chmod 600)
  • Usar sustitución de variables de entorno si tu cliente lo admite
  • Nunca hacer commit de archivos de configuración con tokens reales al control de versiones

Instrucciones del Servidor

El servidor proporciona Instrucciones del Servidor MCP durante la inicialización para ayudar a los LLMs a entender cómo usar óptimamente las herramientas disponibles. Las instrucciones se generan dinámicamente según los plugins habilitados e incluyen:

  • Consultas de Entidades: Orientación sobre paginación, inclusión de atributos y uso de herramientas especializadas como listPersons
  • Control de Dispositivos: Cuándo usar herramientas de control especializadas vs callService genérico
  • Flujos de Trabajo de Automatización: Mejores prácticas para crear y probar automatizaciones
  • Operaciones Omada: Requisitos de contexto del sitio, distinción entre cliente y dispositivo, seguridad de limitación de velocidad
  • Integración Entre Plugins: Cómo la detección de presencia de HA se correlaciona con los clientes de red Omada

Las instrucciones siguen las mejores prácticas de MCP: concisas, accionables y enfocadas en relaciones entre herramientas en lugar de repetir descripciones individuales de herramientas.

Solución de Problemas

Claude Desktop / LM Studio No Se Conecta

  1. Verifica la ubicación del archivo de configuración - Confirma que estás editando el archivo correcto
  2. Reinicia la aplicación - Cierra y vuelve a abrir después de cambios de configuración
  3. Revisa los registros - Busca mensajes de error en los registros de la aplicación
  4. Prueba la conexión manualmente:
# Test npx
npx @coffeerunhobby/mcp-ha-connect

# Test Docker
docker run --rm -i \
  -e HA_URL=http://homeassistant.10.0.0.19.nip.io:8123 \
  -e HA_TOKEN=your_token \
  ghcr.io/coffeerunhobby/mcp-ha-connect:latest

mcp-remote Muestra "Server disconnected" (401)

Si /health devuelve 200 pero el cliente muestra "Server disconnected", el encabezado de autenticación casi con certeza está mal formado. La causa más común: un marcador de posición ${VAR} en el valor de --header que nunca se expandió (ver la advertencia en Con Proxy MCP Remoto). Verifica que el endpoint acepte tu token directamente:

curl -i -X POST https://your-server.example/mcp \
  -H "Authorization: Bearer <your-jwt-token>" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"diag","version":"1.0"}}}'

Un 200 con un resultado initialize significa que el servidor y el token están bien — corrige la configuración del cliente (inserta el token literal). Un 401 significa que el token en sí es incorrecto.

Docker host.docker.internal No Funciona (Linux)

Agrega la puerta de enlace del host:

{
  "args": [
    "run",
    "--rm",
    "-i",
    "--add-host=host.docker.internal:host-gateway",
    "-e", "HA_URL=http://host.docker.internal:8123",
    ...
  ]
}

Problemas de Conexión con Home Assistant

  1. Verifica la URL - Intenta acceder a http://your-ha-url:8123/api/ en el navegador
  2. Revisa el token - Asegúrate de que sea un token de acceso de larga duración válido
  3. Acceso de red - Verifica que el servidor MCP pueda alcanzar Home Assistant
  4. Problemas SSL - Prueba con HA_STRICT_SSL=false para pruebas

El Análisis de IA No Funciona

  1. Verifica que Ollama esté ejecutándose - curl http://your-ollama-url:11434/api/tags
  2. Revisa que el modelo esté disponible - Asegúrate de que el modelo esté descargado: ollama pull llama2
  3. Configura AI_PROVIDER - Debe estar configurado en ollama (no none)

Desarrollo

Configuración

# Clone repository
git clone https://github.com/coffeerunhobby/mcp-ha-connect.git
cd mcp-ha-connect

# Install dependencies
npm install

# Copy environment template
cp .env.example .env

# Edit .env with your Home Assistant details
nano .env

# Build
npm run build

# Run
npm start

Scripts Disponibles

npm run build      # Build TypeScript to dist/
npm run dev        # Run in development mode with watch
npm start          # Run built version
npm test           # Run tests
npm run lint       # Run ESLint
npm run format     # Format code with Prettier

Licencia

MIT

Autor

Coffee Run Hobby (github.com/coffeerunhobby)

Enlaces

Documentación

Contribuciones

¡Las contribuciones son bienvenidas! No dudes en enviar una Solicitud de Extracción (Pull Request).