Skip to content

Référence des outils ​

45 outils, préfixés ha_. Tous les outils de lecture portent l'annotation readOnlyHint. Les réponses sont du JSON compact avec une enveloppe de liste standard :

json
{ "items": [...], "returned": 50, "total": 734, "has_more": true, "next_offset": 50, "note": "..." }

Entités ​

ha_search_entities ​

Recherche floue par nom, entity_id, alias Assist, pièce, étage ou label. Le point d'entrée naturel. Les alias pèsent comme le nom ; pièce, étage et labels pèsent moins.

ParamètreTypeNotes
querystring, requisex. lumière cuisine
limitnumberdéfaut 20, max 50

ha_list_entities ​

Liste paginée, filtrable par domain, area, floor, label, search et state. Appelé sans aucun filtre, il renvoie un histogramme (comptes par domaine et par pièce) au lieu d'un dump.

ParamètreTypeNotes
domainstringex. light, sensor, automation
areastringnom de pièce, insensible à la casse
searchstringfiltre flou
statestringétat exact, ex. on
limit / offsetnumberdéfaut 50, max 200

ha_get_entity ​

État complet et attributs d'une entité (les valeurs d'attributs très longues sont tronquées), plus son étage, ses alias Assist et ses labels quand elle en a.

ParamètreType
entity_idstring, requis

ha_list_areas ​

Toutes les pièces avec leur étage et leur nombre d'entités. Sans paramètre.

ha_list_devices ​

Appareils avec fabricant, modèle, pièce. Paramètres : area, limit, offset. Les child devices (HA 2026.9) portent parent_device_id et affichent la pièce de leur parent.

Services ​

ha_list_services ​

Sans paramètre : les domaines et leur nombre de services. Avec domain : le détail des services et leurs champs. Avec search : recherche transverse.

ha_call_service écriture ​

Enregistré uniquement quand allow_write est activé. Soumis aux règles d'écriture.

ParamètreTypeNotes
domain / servicestring, requisex. light / turn_on
targetobjectentity_id, device_id, area_id (préférez entity_id)
dataobjectdonnées du service, ex. { "brightness_pct": 50 }
dry_runbooleanaperçu sans exécution
confirm_tokenstringjeton issu d'une réponse confirmation_required (domaines sensibles)
return_responsebooleanpour les services qui renvoient des données

Sur les domaines listés dans confirm_domains (serrures et alarmes par défaut), le premier appel répond confirmation_required avec un confirm_token à usage unique lié à cet appel exact ; l'exécution se fait en rappelant avec les mêmes arguments plus le jeton.

ha_run_script écriture ​

Lance un script, avec variables optionnelles. Même chemin gardé que ha_call_service.

ParamètreTypeNotes
entity_idstring, requisdoit être une entité script.*
variablesobjecttransmises au script
dry_run / confirm_tokencomme ha_call_service

ha_trigger_automation écriture ​

Déclenche une automation immédiatement. skip_condition vaut true par défaut (les actions tournent même si les conditions ne tiennent pas).

ParamètreTypeNotes
entity_idstring, requisdoit être une entité automation.*
skip_conditionbooleandéfaut true
dry_run / confirm_tokencomme ha_call_service

ha_set_automation écriture ​

Active ou désactive une automation.

ParamètreTypeNotes
entity_idstring, requisdoit être une entité automation.*
enabledboolean, requistrue pour activer
dry_run / confirm_tokencomme ha_call_service

ha_create_helper écriture ​

Crée un helper : un pur conteneur d'état sans comportement (input_boolean, input_number, input_select, input_text, input_datetime, counter, timer). Audité ; pas d'étape de confirmation, créer un helper ne fait rien agir dans la maison.

ParamètreTypeNotes
helper_typestring, requisun des sept types ci-dessus
namestring, requisnom d'affichage
optionsobjectréglages propres au type (ex. min/max pour input_number, liste options pour input_select), transmis à HA tels quels

ha_delete_helper écriture ​

Supprime un helper géré par l'interface, par entity_id. L'id de collection est résolu via le registre d'entités, les helpers renommés sont donc gérés ; les helpers définis en YAML sont refusés avec un message clair. Soumis aux listes d'entités, audité.

ha_snapshot_scene écriture ​

Capture l'état COURANT des entités données en une scène (« capture l'ambiance du salon en Soirée cinéma »), via scene.create avec snapshot_entities. La scène est volatile par conception de Home Assistant (elle vit jusqu'au rechargement des scènes ou un redémarrage) ; rejouez-la avec scene.turn_on. Les listes d'entités bornent ce qui est capturable ; un id de scène existant est refusé.

ha_send_notification écriture ​

Envoie une notification vers un téléphone ou toute cible notify. Sans target : liste les cibles disponibles (services notify.* historiques et entités notify modernes) ; le bon appel est routé automatiquement. Passe par le même chemin gardé que ha_call_service (denylist, audit, dry_run) et plafonné à 6 notifications par minute et par cible : une notification dérange physiquement, un assistant en boucle ne doit pas marteler.

ParamètreTypeNotes
messagestring, requistronqué au-delà de ~1000 caractères
targetstringex. mobile_app_pixel ou notify.telephone ; omettre pour lister
title / datastring / objectextras plateforme transmis tels quels
dry_run / confirm_tokencomme ha_call_service

ha_announce écriture ​

Fait parler la maison (« annonce que le dîner est prêt »). Sans target : liste les satellites Assist, les media players et les moteurs TTS. Les satellites utilisent leur announce natif ; les media players passent par tts.speak (moteur choisi automatiquement ou passé via engine). Même chemin gardé que tout appel de service, et plafonné à 3 annonces par minute et par cible : une voix dans le salon dérange plus qu'une vibration. Messages tronqués à ~500 caractères (c'est de l'audio).

ha_create_automation écriture config ​

Crée une NOUVELLE automation. Enregistré uniquement quand allow_config_write est activé (indépendant d'allow_write). Le parcours est volontairement lourd : Home Assistant valide d'abord les blocs, puis la réponse porte le YAML complet et un confirm_token ; le client doit montrer le YAML à l'humain et rappeler avec le jeton. Une automation existante (même alias) est refusée : création seule, pas de modification. variables et max_exceeded sont acceptés à la création (#158), pas besoin de créer puis modifier.

ParamètreTypeNotes
aliasstring, requisnom de l'automation
description / modestring / enumsingle (défaut), restart, queued, parallel
triggersarray, requissyntaxe moderne, ex. [{"trigger": "state", ...}]
conditionsarrayoptionnel
actionsarray, requisex. [{"action": "light.turn_on", ...}]
dry_run / confirm_tokenaperçu / jeton de seconde étape

ha_create_script écriture config ​

Crée un NOUVEAU script, même parcours gardé en deux temps. L'entity_id dérive de l'alias (script.<slug>) ; un existant est refusé.

ParamètreTypeNotes
aliasstring, requisnom du script
description / modecomme ci-dessus
sequencearray, requisséquence d'actions
dry_run / confirm_tokenaperçu / jeton de seconde étape

ha_create_from_blueprint écriture config ​

Crée une NOUVELLE automation (ou script) depuis un blueprint installé : le comportement est déjà écrit et éprouvé, l'assistant ne remplit que ses inputs typés (les requis sont vérifiés avant toute offre, les inconnus refusés). Paradoxalement le chemin le PLUS SÛR pour programmer la maison. Même parcours gardé en deux temps et même règle de création seule que ha_create_automation.

ha_update_automation / ha_update_script écriture config ​

Modifient une automation ou un script EXISTANT géré par l'interface. Les blocs fournis remplacent intégralement les blocs courants (une liste actions fournie remplace toutes les actions) ; les blocs non fournis sont conservés. Les cibles basées sur un blueprint prennent inputs à la place (remplace intégralement les inputs du use_blueprint, vérifiés contre le blueprint installé) ; les blocs bruts y sont refusés avec un message clair, et alias/description/mode marchent sur les deux sortes. Un bloc moderne fourni retire aussi sa clé jumelle legacy (trigger/condition/action) de la config stockée : les migrations de syntaxe legacy vers moderne passent par l'outil. Les clés racine de réglage sont couvertes aussi (#158) : variables (là où vit la logique des automations non triviales), max_exceeded, initial_state (automations seulement) et trace, chacune remplacée intégralement comme les blocs ; passer null retire la clé de la config stockée (un objet vide écrit un objet vide), c'est ainsi qu'on nettoie les restes comme les métadonnées d'éditeur. La confirmation montre un diff avant/après, et la configuration de base est empreinte : si elle change entre les deux passes (édition simultanée dans l'interface), le jeton est refusé et le parcours recommence. La réponse de succès porte le YAML précédent complet pour un retour arrière manuel. Les cibles définies en YAML sont refusées.

ha_delete_automation / ha_delete_script écriture config ​

Suppriment une automation ou un script EXISTANT géré par l'interface. L'outil le plus destructif reçoit les ceintures les plus solides : la première réponse porte le YAML complet de ce qui va disparaître (pas un diff) plus le confirm_token ; le client doit le montrer à l'humain avant de rappeler. La configuration de base est empreinte comme pour une modification : une édition dans l'interface entre les deux passes invalide le jeton. La réponse de succès renvoie deleted_yaml, donc ha_create_automation / ha_create_script peuvent la recréer si la suppression se révèle une erreur ; l'add-on lui-même ne stocke rien. Les éléments définis en YAML sont hors de portée (leur cycle de vie appartient aux fichiers de l'utilisateur), et les listes allow/deny d'entités s'appliquent.

Automations et scripts ​

ha_list_automations ​

entity_id, nom, enabled, last_triggered, et source : ui pour les automations modifiables via les outils de config, yaml pour celles définies dans les fichiers de l'utilisateur (lecture et trace seulement). Paramètres : limit, offset.

include_config: true (#160) attache la configuration complète de chaque automation UI et réduit la page (5 par défaut, 10 max) : la voie paginée pour exporter ou differ un parc sans un appel par automation (66 automations = ~13 pages au lieu de 66 appels). La page reste du JSON valide, toujours : une config trop grosse pour elle est omise entière par élément (config_omitted, à récupérer avec ha_get_automation), jamais tronquée au milieu d'une valeur ; les éléments yaml reçoivent config: null sans gaspiller d'appel. Position honnête : pour l'amorçage one-shot d'un très gros parc, l'API REST brute reste le meilleur outil ; include_config vise les deltas et les parcs moyens.

ha_get_automation ​

L'état plus, pour les automations créées via l'interface, la configuration complète (déclencheurs, conditions, actions). Les automations définies en YAML renvoient leur état avec une note. Cet outil a un plafond de réponse relevé (~64 Ko au lieu du ~15 Ko global, #159) : sa sortie alimente ha_update_automation, elle doit donc faire l'aller-retour entière ; aucune valeur n'est tronquée individuellement. Une config qui dépasse même le plafond relevé (média base64 inline) reçoit un message honnête orientant vers l'éditeur de l'interface plutôt que vers des filtres qui n'existent pas ici.

ha_list_scripts ​

entity_id, nom, running, last_triggered. Paramètres : limit, offset.

ha_list_blueprints ​

Les blueprints d'automations (ou de scripts) installés avec leurs inputs : nom, description, lesquels sont requis, défauts et types de selectors. Le premier arrêt naturel avant de créer une automation : ha_create_from_blueprint remplit des trous typés dans du comportement éprouvé.

ha_get_automation_trace ​

Le pas à pas des exécutions récentes d'une automation ou d'un script, le premier réflexe du « pourquoi ça s'est déclenché (ou pas) ? ». Sans run_id : la liste des exécutions récentes (déclencheur, issue, dernier step, erreur). Avec run_id : le chemin ordonné des steps avec les verdicts des conditions et les erreurs. Les variables sont volontairement omises (taille, et elles divulgueraient les états d'autres entités malgré filter_reads). Home Assistant ne garde que les dernières exécutions en mémoire, depuis son dernier redémarrage.

Diagnostics ​

ha_explain_event ​

Explique POURQUOI une entité a changé : suit la chaîne de contexte de Home Assistant (l'acteur immédiat, ce qui l'a déclenché à son tour, l'humain le cas échéant, résolu vers son entité person quand elle est liée et visible), jusqu'à 4 sauts. Sans at : le dernier changement de l'entité. Les causes masquées apparaissent comme (hidden entity) sous filter_reads. Le chaînon manquant entre le logbook (quoi) et ha_get_automation_trace (comment) ; la réponse renvoie vers la trace quand une automation est dans la chaîne.

ha_get_self_test ​

Diagnostique l'ADD-ON lui-même, pas la maison : connectivité WebSocket et REST avec latences, état de la carte d'états vivante, disponibilité du Supervisor, et un verdict global ok / degraded / broken. Aucune donnée de votre maison dans la réponse, par conception : collez sa sortie dans une issue de support.

ha_get_health ​

Le bilan de santé en un appel : les problèmes du système Réparations de Home Assistant, les entités unavailable/unknown avec leur ancienneté, les batteries faibles (battery_threshold, défaut 20 %), les automations actives qui ne se déclenchent plus (stale_days, défaut 30), les entités sans pièce. Sections plafonnées avec les comptes totaux, qualifiées plutôt que jugées : un capteur saisonnier n'est pas un défaut. À utiliser avec le prompt health-report.

Historique ​

ha_get_history ​

Changements d'état d'une entité, ou de 5 au maximum en un appel pour les comparer (entity_id accepte une chaîne ou une liste ; une liste renvoie un objet series par entité). Fenêtre : hours (min 0.25, défaut 24, max 168) ou start/end en ISO 8601. Le premier point est l'état déjà en vigueur au début de la fenêtre ; le budget de 250 points se partage entre les entités demandées, sous-échantillonnage avec une note au-delà.

ha_get_statistics ​

Agrégats du recorder (moyenne, min, max, somme) pour les capteurs numériques. statistic_id (chaîne ou liste jusqu'à 10), period parmi 5minute, hour, day, week, month, fenêtre jusqu'à un an. À préférer à ha_get_history sur les longues durées.

ha_get_logbook ​

Événements lisibles, filtrables par entity_id, fenêtre de 0.25 h à 7 jours, plafonné à 100 événements. Depuis 1.5.0, filtrable aussi par area ou floor entiers (un seul périmètre à la fois) : la pièce est résolue par le catalogue en entités visibles explicites (filter_reads s'applique, 60 entités max avec note au-delà) : « que s'est-il passé dans la cuisine cette nuit ? » tient en un appel.

Dashboards ​

ha_list_dashboards ​

Sans dashboard : les dashboards Lovelace (titre, url_path, éditable ou géré en YAML). Avec dashboard : ses vues (index, titre, layout, nombre de cartes), ce dont ha_add_dashboard_card a besoin.

ha_add_dashboard_card écriture config ​

Insère UNE carte dans une vue de dashboard (rédigez-la d'abord avec propose-dashboard-card). Même parcours gardé que ha_update_automation : diff avant/après de la vue, hash du dashboard entier dans l'empreinte de confirmation (une édition simultanée dans l'interface invalide le jeton), YAML de la vue précédente renvoyé pour retour arrière. Les layouts classiques cards et modernes sections sont gérés ; les dashboards en YAML sont refusés. Seule l'insertion existe : pas de suppression de carte, pas de réécriture de vue.

Énergie et présence ​

ha_get_energy ​

Les totaux d'énergie du dashboard énergie configuré (energy/get_prefs nomme les statistiques exactes : import/export réseau, solaire, batterie, gaz, eau, consommation par appareil) sur period (day par défaut, week, month). Avec compare: true, la période précédente et les deltas en pourcentage (« cette semaine vs la semaine dernière »). Les totaux somment la statistique change par période, le calcul du dashboard lui-même. Erreur claire si aucun dashboard n'est configuré.

ha_get_presence ​

Qui est à la maison, dans quelle zone, depuis quand, plus une timeline compacte des changements de zone sur la fenêtre (hours, défaut 24, max 168) et les zones avec leur nombre d'occupants. Noms de zones uniquement, jamais de coordonnées : latitude, longitude et sources de trackers ne sont jamais lues, par conception. filter_reads masque les personnes comme toute entité ; si vous confiez des jetons read à des tiers, denylister person.* est le contrôle prévu.

Météo ​

ha_get_forecast ​

Sans entity_id : liste les entités weather avec leur condition actuelle. Avec entity_id : les prévisions (« il pleut demain ? ») via weather.get_forecasts, type parmi hourly (plafonné à 48 entrées), daily (défaut, 14) et twice_daily quand le fournisseur le supporte (son erreur est relayée sinon). Les unités viennent des attributs de l'entité weather. Les conditions actuelles vivent sur l'entité elle-même (ha_get_entity).

Calendrier et todo ​

ha_get_calendar ​

Sans entity_id : liste les entités calendrier. Avec entity_id : les événements sur une fenêtre (hours défaut 24, max 720, ou start/end en ISO 8601).

ha_get_todo_list ​

Sans entity_id : liste les entités todo. Avec entity_id : les éléments de la liste (filtre status optionnel). Lecture seule, via todo.get_items.

ha_manage_todo écriture ​

Ajoute, coche, décoche, retire ou renomme un élément (« ajoute le lait à la liste de courses »). Les éléments sont référencés par leur texte, comme le fait Home Assistant. Même chemin gardé que tout appel de service (denylist, audit, dry_run).

ParamètreTypeNotes
entity_idstring, requisune liste todo.*
actionenum, requisadd, complete, uncomplete, remove, rename
itemstring, requisle texte de l'élément
new_namestringrename uniquement
dry_run / confirm_tokencomme ha_call_service

Caméras ​

ha_get_camera_snapshot opt-in ​

Renvoie l'image fixe courante d'une entité camera.* sous forme d'image MCP, pour que l'assistant décrive ce qu'il voit. Enregistré uniquement quand l'option allow_camera est active (indépendante de allow_write) ; filter_reads et entity_denylist s'appliquent toujours, et chaque capture est auditée.

Add-ons et système ​

ha_get_addons ​

Sans slug : la liste des add-ons installés. Avec slug : le détail d'un add-on. Lecture seule. Nécessite le Supervisor (indisponible en mode dev).

ha_render_template ​

Évalue un template Jinja2 côté serveur et renvoie le rendu. Lecture seule, très puissant pour les requêtes calculées. Non enregistré quand filter_reads est actif (un template peut lire n'importe quelle entité) :

{{ states.light | selectattr('state','eq','on') | list | count }}

ha_get_system ​

section: "config" : version de HA, nom, fuseau, unités, nombre d'intégrations. section: "error_log" : erreurs et avertissements récents, structurés, depuis le system log (WS), avec repli REST legacy pour les vieux cores. section: "updates" : mises à jour Core, OS et add-ons en attente ; les parties Core et OS exigent un rôle Supervisor supérieur et répondent une note structurée sous le rôle minimal, la partie add-ons marche toujours. section: "backups" : âge de la dernière sauvegarde et sauvegardes récentes (note structurée sous le rôle minimal). Aucune section ne fuit jamais d'erreur HTTP brute. La section mounts (1.4.0) rapporte les montages réseau avec leur usage et les mêmes seuils d'alerte que la page Storage de HA (warning au-delà de 85 %, critical au-delà de 95 %) ; les sondes par montage sont indépendantes et dégradent en notes structurées.

Resources et prompts ​

Depuis la v0.3, chaque réponse d'outil porte aussi structuredContent (le même JSON que le texte, typé pour les clients qui le gèrent), et le serveur expose :

Depuis la 0.18.0, les arguments de forme entité supportent les complétions MCP (completion/complete) : un client qui les implémente propose les vrais identifiants de votre instance pendant la frappe, pour l'argument automation de diagnose-automation et l'entity_id de ha://entity/{entity_id}. Mêmes règles de visibilité que toute lecture (filter_reads s'applique) ; le support côté clients varie.

Resources (application/json, pour les clients qui épinglent du contexte sans appel d'outil) :

URIContenu
ha://areastoutes les pièces avec leur nombre d'entités
ha://servicesles domaines de services avec leur nombre de services
ha://configconfiguration compacte de l'instance (version, nom, fuseau, unités)
ha://area/{area_id}état compact d'une pièce (comptes par domaine, entités actives notables) ; abonnable en mode sessions

Prompts (parcours guidés) :

NomArgumentsCe que ça fait
diagnose-automationautomation (entity_id)enquête pas à pas sur une automation qui n'a pas tourné
energy-reporthours (optionnel)bilan de consommation bâti sur les statistiques long terme
health-reportaucunbilan de santé guidé bâti sur ha_get_health
propose-automationgoalrédige un YAML d'automation prêt à coller depuis des entités vérifiées, n'écrit rien
propose-dashboard-cardgoalrédige un YAML de carte Lovelace prêt à coller depuis des entités vérifiées, n'écrit rien
propose-scriptgoalrédige un YAML de script prêt à coller depuis des entités vérifiées, n'écrit rien
daily-briefingaucunle rituel du matin : présence, agenda, météo, énergie, urgences