ha-mcp-dev 7.9.0.dev753__tar.gz → 7.9.0.dev755__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. {ha_mcp_dev-7.9.0.dev753/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.9.0.dev755}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +1 -1
  4. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/AGENTS.md +2 -0
  5. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +2 -0
  6. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/README.md +3 -1
  7. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +24 -17
  8. ha_mcp_dev-7.9.0.dev755/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +537 -0
  9. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +358 -9
  10. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +182 -15
  11. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +120 -7
  12. ha_mcp_dev-7.9.0.dev755/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +92 -0
  13. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +7 -6
  14. ha_mcp_dev-7.9.0.dev755/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +28 -0
  15. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  16. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp_dev.egg-info/SOURCES.txt +2 -0
  17. ha_mcp_dev-7.9.0.dev753/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -21
  18. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/LICENSE +0 -0
  19. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/MANIFEST.in +0 -0
  20. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/README.md +0 -0
  21. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/setup.cfg +0 -0
  22. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/__init__.py +0 -0
  23. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/__main__.py +0 -0
  24. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/_pypi_marker +0 -0
  25. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/_version.py +0 -0
  26. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/auth/__init__.py +0 -0
  27. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/auth/consent_form.py +0 -0
  28. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/auth/provider.py +0 -0
  29. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/backup_manager.py +0 -0
  30. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/client/__init__.py +0 -0
  31. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/client/rest_client.py +0 -0
  32. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/client/supervisor_client.py +0 -0
  33. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/client/websocket_client.py +0 -0
  34. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/client/websocket_listener.py +0 -0
  35. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/config.py +0 -0
  36. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  37. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  38. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  39. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/errors.py +0 -0
  40. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/__init__.py +0 -0
  41. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/approval_queue.py +0 -0
  42. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/evaluator.py +0 -0
  43. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/handlers.py +0 -0
  44. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/middleware.py +0 -0
  45. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/model.py +0 -0
  46. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/persistence.py +0 -0
  47. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/policy/value_sources.py +0 -0
  48. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/py.typed +0 -0
  49. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/read_only.py +0 -0
  50. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  51. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  52. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  53. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  54. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  55. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  56. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  57. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  58. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  59. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  60. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  61. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  62. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/server.py +0 -0
  63. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/settings_ui/__init__.py +0 -0
  64. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/settings_ui/settings.css +0 -0
  65. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/settings_ui/settings.html +0 -0
  66. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/settings_ui/settings.js +0 -0
  67. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/smoke_test.py +0 -0
  68. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  69. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/__init__.py +0 -0
  70. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/auto_backup.py +0 -0
  71. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/backup.py +0 -0
  72. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  73. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  74. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/device_control.py +0 -0
  75. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/enhanced.py +0 -0
  76. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/helpers.py +0 -0
  77. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/radio/__init__.py +0 -0
  78. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/radio/base.py +0 -0
  79. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/radio/matter.py +0 -0
  80. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/radio/thread.py +0 -0
  81. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  82. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/radio/zwave.py +0 -0
  83. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/reference_validator.py +0 -0
  84. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/registry.py +0 -0
  85. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  86. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  87. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  88. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  89. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  90. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  91. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  92. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  93. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  94. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  95. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_addons.py +0 -0
  96. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_areas.py +0 -0
  97. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  98. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  99. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_calendar.py +0 -0
  100. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_camera.py +0 -0
  101. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_categories.py +0 -0
  102. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_code.py +0 -0
  103. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  104. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  105. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  106. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  107. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  108. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  109. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_energy.py +0 -0
  110. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_entities.py +0 -0
  111. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  112. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_groups.py +0 -0
  113. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_hacs.py +0 -0
  114. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_history.py +0 -0
  115. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_integrations.py +0 -0
  116. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_labels.py +0 -0
  117. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  118. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_radio.py +0 -0
  119. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_registry.py +0 -0
  120. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_resources.py +0 -0
  121. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_search.py +0 -0
  122. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_service.py +0 -0
  123. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_services.py +0 -0
  124. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_system.py +0 -0
  125. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_themes.py +0 -0
  126. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_todo.py +0 -0
  127. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_traces.py +0 -0
  128. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_updates.py +0 -0
  129. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_utility.py +0 -0
  130. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  131. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  132. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/tools_zones.py +0 -0
  133. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/util_helpers.py +0 -0
  134. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/tools/validation_middleware.py +0 -0
  135. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/transforms/__init__.py +0 -0
  136. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/transforms/categorized_search.py +0 -0
  137. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  138. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/update_check.py +0 -0
  139. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/__init__.py +0 -0
  140. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/config_hash.py +0 -0
  141. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/data_paths.py +0 -0
  142. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/domain_handlers.py +0 -0
  143. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  144. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  145. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/operation_manager.py +0 -0
  146. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/python_sandbox.py +0 -0
  147. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/skill_loader.py +0 -0
  148. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp/utils/usage_logger.py +0 -0
  149. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  150. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  151. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  152. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  153. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/tests/__init__.py +0 -0
  154. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/tests/test_constants.py +0 -0
  155. {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev755}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.9.0.dev753
3
+ Version: 7.9.0.dev755
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "7.9.0.dev753"
7
+ version = "7.9.0.dev755"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.14"
@@ -2,7 +2,7 @@
2
2
  "name": "home-assistant-skills",
3
3
  "owner": {
4
4
  "name": "homeassistant-ai",
5
- "email": ""
5
+ "email": "homeassistant-mcp@qc-h.net"
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Agent skills for Home Assistant: best practices for automations, helpers, templates, device control, and dashboards",
@@ -30,6 +30,8 @@ description: >
30
30
  Constraints from CONTRIBUTING.md:
31
31
  - Max **500 lines** per SKILL.md
32
32
  - `metadata.version` must be `0` on new skills (do not edit manually)
33
+ - `name` must match `[a-z0-9-]+` and be ≤64 characters
34
+ - `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
33
35
  - Reference files must be **one level deep** only (e.g. `references/example.yaml`)
34
36
  - Use **forward slashes** in all file paths
35
37
  - Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
@@ -30,6 +30,8 @@ description: >
30
30
  Constraints from CONTRIBUTING.md:
31
31
  - Max **500 lines** per SKILL.md
32
32
  - `metadata.version` must be `0` on new skills (do not edit manually)
33
+ - `name` must match `[a-z0-9-]+` and be ≤64 characters
34
+ - `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
33
35
  - Reference files must be **one level deep** only (e.g. `references/example.yaml`)
34
36
  - Use **forward slashes** in all file paths
35
37
  - Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
@@ -31,7 +31,7 @@ Run each command separately inside Claude Code:
31
31
  /plugin marketplace add homeassistant-ai/skills
32
32
  ```
33
33
  ```
34
- /plugin install home-assistant-skills@homeassistant-ai-skills
34
+ /plugin install home-assistant-skills@home-assistant-skills
35
35
  ```
36
36
 
37
37
  Run `/reload-plugins` or restart Claude Code for the skill to take effect.
@@ -57,10 +57,12 @@ The `home-assistant-best-practices` skill includes:
57
57
  | `references/template-guidelines.md` | When to use templates, when to avoid them, and sensor best practices |
58
58
  | `references/yaml-only-integrations.md` | YAML-only integration types, post-edit actions (reload vs restart) |
59
59
  | `references/device-control.md` | Service calls, entity_id vs device_id, Zigbee buttons |
60
+ | `references/scenes.md` | Scene authoring: config shape, snapshot/restore, snapshot-vs-script distinction |
60
61
  | `references/dashboard-guide.md` | Dashboard layout, view types, sections, custom cards, CSS styling |
61
62
  | `references/dashboard-cards.md` | Card type lookup and card-specific documentation |
62
63
  | `references/domain-docs.md` | Integration and domain documentation for service calls, entity attributes |
63
64
  | `references/examples.yaml` | Compound examples combining multiple best practices |
65
+ | `references/appdaemon.md` | AppDaemon apps: when to use vs. native HA, app structure, service calls, scheduling, error handling, safe refactoring impact |
64
66
 
65
67
  ## Contributing
66
68
 
@@ -1,27 +1,28 @@
1
1
  ---
2
2
  name: home-assistant-best-practices
3
3
  description: >
4
- Best practices for HA automations, helpers, scripts, device controls, and dashboards.
4
+ Best practices for HA automations, helpers, scripts, controls, and dashboards.
5
5
 
6
6
  TRIGGER THIS SKILL WHEN:
7
- - Creating/editing automations, scripts, scenes, or dashboards
7
+ - Creating or editing automations, scripts, scenes, or dashboards
8
8
  - Choosing between template sensors and built-in helpers
9
- - Writing or restructuring triggers, conditions, or automation modes
10
- - Setting up Zigbee button/remote automations (ZHA or Zigbee2MQTT)
9
+ - Restructuring triggers, conditions, or automation modes
10
+ - Setting up Zigbee button/remote automations
11
11
  - Renaming entities or migrating device_id to entity_id
12
- - Configuring dashboard cards or picking helpers to feed them
13
- - Looking up card types or domain-specific documentation
12
+ - Configuring dashboard cards or selecting helpers
13
+ - Looking up card types or domain docs
14
+ - Writing or reviewing AppDaemon apps
14
15
 
15
16
  SYMPTOMS:
16
- - Agent uses Jinja2 templates where native conditions/triggers/helpers exist
17
+ - Agent uses Jinja2 templates where native options exist
17
18
  - Agent uses device_id instead of entity_id
18
- - Agent modifies entity IDs without checking consumers
19
- - Agent chooses wrong automation mode (e.g., single for motion lights)
20
- - Agent hard-codes values or picks raw sensor over derived helper
21
- - Agent edits `.storage/` files, writes raw YAML, or generates YAML snippets
22
- - Agent tells user to edit configuration.yaml for UI-configured integrations
19
+ - Agent changes entity IDs without checking consumers
20
+ - Wrong automation mode
21
+ - Agent hard-codes values or uses raw sensor over helper
22
+ - Agent edits .storage, writes YAML, or generates YAML snippets
23
+ - Agent tells user to edit configuration.yaml for UI integrations
23
24
  metadata:
24
- version: 5
25
+ version: 12
25
26
  ---
26
27
 
27
28
  # Home Assistant Best Practices
@@ -88,7 +89,7 @@ See `references/device-control.md#zigbee-buttonremote-patterns`.
88
89
  ## Critical Anti-Patterns
89
90
 
90
91
  | Anti-pattern | Use instead | Why | Reference |
91
- |---|---|---|---|
92
+ |--------------|-------------|-----|-----------|
92
93
  | `condition: template` with `float > 25` | `condition: numeric_state` | Validated at load, not runtime | `references/automation-patterns.md#native-conditions` |
93
94
  | `wait_template: "{{ is_state(...) }}"` | `wait_for_trigger` with state trigger | Event-driven, not polling; waits for *change* (see `references/safe-refactoring.md#trigger-restructuring` for semantic differences) | `references/automation-patterns.md#wait-actions` |
94
95
  | `device_id` in triggers | `entity_id` (or `device_ieee` for ZHA) | device_id breaks on re-add | `references/device-control.md#entity-id-vs-device-id` |
@@ -108,6 +109,10 @@ See `references/device-control.md#zigbee-buttonremote-patterns`.
108
109
  | `vacuum.send_command` with vendor room IDs | `vacuum.clean_area` with HA `area_id` (if segments are mapped) | Uses native HA areas, works across integrations — but requires segment-to-area mapping in entity settings first | `references/device-control.md#vacuum-control` |
109
110
  | Using `color_temp` (mireds) in light service calls | Use `color_temp_kelvin` | The `color_temp` parameter was removed in 2026.3; only Kelvin is supported | `references/device-control.md#lights` |
110
111
  | Person/Device Tracker `entered_home`/`left_home` device triggers or `is_home`/`is_not_home` conditions | `state` trigger `to: home` / `to: not_home`, or `state` condition | These were removed in 2026.5 — state triggers and conditions are the correct replacements | `references/automation-patterns.md#presence-and-person-triggers-and-conditions-removed-in-20265` |
112
+ | Registering callbacks or calling `self.turn_on()`/`self.get_state()` in `__init__()` | Register everything in `initialize()` | Plugin connection not established during `__init__` — calls fail silently | `references/appdaemon.md#app-structure-and-lifecycle` |
113
+ | Calling `run_in` on repeated triggers without cancelling the previous handle | `cancel_timer(self._off_handle)` before each new `run_in` | Every trigger stacks an independent timer — devices toggle unpredictably | `references/appdaemon.md#scheduling-and-timers` |
114
+ | Storing persistent state in instance variables | Use HA `input_number`, `input_boolean`, or `input_text` helpers | Instance variables reset on app reload or daemon restart | `references/appdaemon.md#state-management-and-inter-app-communication` |
115
+ | Hardcoding entity IDs inside the class body | Pass entity IDs via `self.args` in `apps.yaml` | Hardcoded IDs prevent reuse and require code edits per installation | `references/appdaemon.md#appsyaml-configuration` |
111
116
 
112
117
  ---
113
118
 
@@ -118,12 +123,14 @@ Read these when you need detailed information:
118
123
  | File | When to read | Key sections |
119
124
  |------|--------------|--------------|
120
125
  | `references/safe-refactoring.md` | Renaming entities, replacing helpers, restructuring automations, or any modification to existing config | `#universal-workflow`, `#entity-renames`, `#helper-replacements`, `#trigger-restructuring`, `#config-entry-data--blind-spots-for-entity-registry-renames`, `#storage-mode-dashboards-storagelovelace` |
121
- | `references/automation-patterns.md` | Writing triggers, conditions, waits, or choosing automation modes; disabling automations | `#native-conditions`, `#trigger-types`, `#wait-actions`, `#automation-modes`, `#continue-on-error`, `#repeat-actions`, `#ifthen-vs-choose`, `#trigger-ids`, `#disabling-automations` |
122
- | `references/helper-selection.md` | Deciding whether to use a built-in helper vs template sensor | `#menu-based-helpers`, `#numeric-aggregation`, `#rate-and-change`, `#time-based-tracking`, `#counting-and-timing`, `#scheduling`, `#entity-grouping`, `#data-smoothing`, `#random-values`, `#climate-control`, `#domain-conversion`, `#template-helpers`, `#decision-matrix` |
126
+ | `references/automation-patterns.md` | Writing triggers, conditions, waits, variables, or choosing automation modes; capturing action responses; documenting/annotating steps; disabling automations | `#native-conditions`, `#trigger-types`, `#wait-actions`, `#automation-modes`, `#continue-on-error`, `#stopping-a-sequence`, `#variables`, `#capturing-action-responses`, `#repeat-actions`, `#ifthen-vs-choose`, `#parallel-actions`, `#trigger-ids`, `#documenting-automations--scripts`, `#disabling-automations` |
127
+ | `references/helper-selection.md` | Deciding whether to use a built-in helper vs template sensor | `#how-helpers-are-created`, `#menu-based-helpers`, `#numeric-aggregation`, `#rate-and-change`, `#time-based-tracking`, `#counting-and-timing`, `#scheduling`, `#entity-grouping`, `#probabilistic-inference`, `#data-smoothing`, `#random-values`, `#climate-control`, `#domain-conversion`, `#template-helpers`, `#decision-matrix` |
123
128
  | `references/template-guidelines.md` | Confirming templates ARE appropriate for a use case | `#when-templates-are-appropriate`, `#when-to-avoid-templates`, `#template-sensor-best-practices`, `#common-patterns`, `#error-handling` |
124
129
  | `references/yaml-only-integrations.md` | Creating or editing YAML-only integrations that have no config flow (e.g. `command_line`, platform-based `mqtt`, `rest`) | `#yaml-only-integration-types`, `#post-edit-actions` |
125
130
  | `references/device-control.md` | Writing service calls, Zigbee button automations, or using target: | `#entity-id-vs-device-id`, `#service-calls-best-practices`, `#zigbee-buttonremote-patterns`, `#domain-specific-patterns` |
126
- | `references/dashboard-guide.md` | Designing or modifying Lovelace dashboards layout, view types, sections, custom cards, CSS styling, HACS | `#dashboard-structure`, `#view-types`, `#built-in-cards`, `#features`, `#custom-cards`, `#css-styling`, `#common-pitfalls` |
131
+ | `references/scenes.md` | Authoring or activating scenes; snapshot/restore patterns; snapshot-vs-script distinction | `#scene-config-shape`, `#activating-a-scene`, `#snapshot--restore-scenecreate`, `#apply-states-without-storing-sceneapply` |
132
+ | `references/dashboard-guide.md` | Designing or modifying Lovelace dashboards — layout, view types, strategies, sections, cards, badges, CSS styling, HACS | `#dashboard-structure`, `#view-types`, `#dashboard-strategies`, `#built-in-cards`, `#features`, `#badges`, `#custom-cards`, `#css-styling`, `#common-pitfalls` |
127
133
  | `references/dashboard-cards.md` | Looking up available card types or fetching card-specific documentation | — |
128
134
  | `references/domain-docs.md` | Looking up integration or domain documentation for service calls, entity attributes, or configuration | — |
129
135
  | `references/examples.yaml` | Need compound examples combining multiple best practices | — |
136
+ | `references/appdaemon.md` | AppDaemon apps: when to use vs. native HA, app structure, service calls, scheduling, error handling, safe refactoring impact | — |