ha-mcp-dev 7.14.2.dev2167__tar.gz → 7.14.2.dev2169__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 (191) hide show
  1. {ha_mcp_dev-7.14.2.dev2167/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.14.2.dev2169}/PKG-INFO +5 -5
  2. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/README.md +4 -4
  3. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/pyproject.toml +1 -1
  4. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/locales/de.json +1 -1
  5. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/locales/en.json +1 -1
  6. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/locales/es.json +1 -1
  7. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/locales/fr.json +1 -1
  8. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/locales/ru.json +1 -1
  9. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/locales/zh-Hans.json +1 -1
  10. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/settings.js +1 -1
  11. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169/src/ha_mcp_dev.egg-info}/PKG-INFO +5 -5
  12. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/LICENSE +0 -0
  13. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/MANIFEST.in +0 -0
  14. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/setup.cfg +0 -0
  15. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/__init__.py +0 -0
  16. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/__main__.py +0 -0
  17. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/_pypi_marker +0 -0
  18. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/_version.py +0 -0
  19. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/auth/__init__.py +0 -0
  20. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/auth/consent_form.py +0 -0
  21. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/auth/provider.py +0 -0
  22. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/backup_manager.py +0 -0
  23. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/browser_landing.py +0 -0
  24. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/client/__init__.py +0 -0
  25. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/client/rest_client.py +0 -0
  26. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/client/supervisor_client.py +0 -0
  27. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/client/websocket_client.py +0 -0
  28. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/client/websocket_listener.py +0 -0
  29. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/config.py +0 -0
  30. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  31. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  32. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  33. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  34. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  35. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  36. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/errors.py +0 -0
  37. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/llm_exposure.py +0 -0
  38. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/__init__.py +0 -0
  39. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/approval_queue.py +0 -0
  40. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/evaluator.py +0 -0
  41. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/handlers.py +0 -0
  42. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/middleware.py +0 -0
  43. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/model.py +0 -0
  44. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/persistence.py +0 -0
  45. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/policy/value_sources.py +0 -0
  46. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/py.typed +0 -0
  47. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/read_only.py +0 -0
  48. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  49. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  50. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  51. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  52. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  53. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  54. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  55. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  56. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  57. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  58. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  59. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  60. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  61. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  62. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  63. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  64. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  65. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  66. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  67. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  68. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  69. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  70. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  71. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  72. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  73. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/server.py +0 -0
  74. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/__init__.py +0 -0
  75. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  76. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  77. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  78. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  79. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  80. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  81. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  82. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  83. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  84. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_theme.py +0 -0
  85. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  86. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  87. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/settings.css +0 -0
  88. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/settings_ui/settings.html +0 -0
  89. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/smoke_test.py +0 -0
  90. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  91. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/strict_bps.py +0 -0
  92. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/__init__.py +0 -0
  93. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/auto_backup.py +0 -0
  94. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/backup.py +0 -0
  95. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  96. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/component_api.py +0 -0
  97. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/component_config_reads.py +0 -0
  98. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/component_devices.py +0 -0
  99. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/component_registries.py +0 -0
  100. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  101. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  102. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/device_control.py +0 -0
  103. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/helpers.py +0 -0
  104. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/radio/__init__.py +0 -0
  105. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/radio/base.py +0 -0
  106. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/radio/matter.py +0 -0
  107. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/radio/thread.py +0 -0
  108. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  109. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/radio/zwave.py +0 -0
  110. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/reference_validator.py +0 -0
  111. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/registry.py +0 -0
  112. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  113. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  114. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  115. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  116. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  117. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  118. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  119. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  120. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  121. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  122. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_addons.py +0 -0
  123. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_areas.py +0 -0
  124. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  125. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  126. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_calendar.py +0 -0
  127. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_camera.py +0 -0
  128. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_categories.py +0 -0
  129. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_code.py +0 -0
  130. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  131. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  132. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  133. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  134. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  135. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  136. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_dev.py +0 -0
  137. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_energy.py +0 -0
  138. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_entities.py +0 -0
  139. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  140. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_groups.py +0 -0
  141. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_hacs.py +0 -0
  142. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_history.py +0 -0
  143. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_integrations.py +0 -0
  144. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_labels.py +0 -0
  145. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_radio.py +0 -0
  146. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_registry.py +0 -0
  147. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_resources.py +0 -0
  148. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_search.py +0 -0
  149. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_service.py +0 -0
  150. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_services.py +0 -0
  151. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_system.py +0 -0
  152. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_themes.py +0 -0
  153. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_todo.py +0 -0
  154. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_traces.py +0 -0
  155. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_updates.py +0 -0
  156. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_utility.py +0 -0
  157. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  158. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  159. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  160. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/tools_zones.py +0 -0
  161. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/util_helpers.py +0 -0
  162. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/tools/validation_middleware.py +0 -0
  163. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/transforms/__init__.py +0 -0
  164. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/transforms/categorized_search.py +0 -0
  165. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  166. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/transport_security.py +0 -0
  167. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/update_check.py +0 -0
  168. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/__init__.py +0 -0
  169. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/config_hash.py +0 -0
  170. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/config_write_lock.py +0 -0
  171. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/data_paths.py +0 -0
  172. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/domain_handlers.py +0 -0
  173. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  174. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  175. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/operation_manager.py +0 -0
  176. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/python_sandbox.py +0 -0
  177. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/skill_loader.py +0 -0
  178. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/utils/usage_logger.py +0 -0
  179. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/visibility/__init__.py +0 -0
  180. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/visibility/enforcement.py +0 -0
  181. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/visibility/model.py +0 -0
  182. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/visibility/persistence.py +0 -0
  183. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp/visibility/resolver.py +0 -0
  184. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  185. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  186. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  187. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  188. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  189. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/tests/__init__.py +0 -0
  190. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/tests/test_constants.py +0 -0
  191. {ha_mcp_dev-7.14.2.dev2167 → ha_mcp_dev-7.14.2.dev2169}/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.14.2.dev2167
3
+ Version: 7.14.2.dev2169
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
@@ -357,9 +357,9 @@ Skills can still be installed manually for clients that prefer local skill files
357
357
 
358
358
  ## 🔍 Tool Discovery for AI Agents
359
359
 
360
- By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (Claude Sonnet, Claude Opus) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
360
+ By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (claude.ai, Claude Desktop, Claude Code) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
361
361
 
362
- For models *without* deferred tool support — Claude Haiku, Gemini, ChatGPT OpenAI-compatible local models, smaller open-weights models — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
362
+ For setups *without* deferred tool support — models like Claude Haiku, Gemini, OpenAI-compatible local models and smaller open-weights models, or clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI) — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
363
363
 
364
364
  ### Smaller or local LLMs (Ollama, etc.)
365
365
 
@@ -389,11 +389,11 @@ The proxy split lets MCP clients apply different permission policies per categor
389
389
 
390
390
  ### When to enable
391
391
 
392
- - **Claude Haiku, OpenAI-compatible local models, Gemini, ChatGPT or any model without native deferred tool support** — large idle-context savings.
392
+ - **Claude Haiku, OpenAI-compatible local models, Gemini, or any model without native deferred tool support** — large idle-context savings. The same applies to clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI, even when running Claude Sonnet/Opus).
393
393
  - MCP clients that cap total tool count (some cap at 100) — surfaces a minimal set (~10 tools) instead of 84.
394
394
  - **Cost-sensitive deployments** — fewer idle tokens per turn.
395
395
 
396
- Leave it off when using Claude Sonnet/Opus or any client with deferred tool loading; the full catalog has no idle cost there and direct calls skip the search step. If you choose to use our toolsearch then you should disable the native Claude Opus/Sonnet toolsearch, which is called deferred tools in the settings.
396
+ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
397
397
 
398
398
  > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the add-on or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
399
399
 
@@ -324,9 +324,9 @@ Skills can still be installed manually for clients that prefer local skill files
324
324
 
325
325
  ## 🔍 Tool Discovery for AI Agents
326
326
 
327
- By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (Claude Sonnet, Claude Opus) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
327
+ By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (claude.ai, Claude Desktop, Claude Code) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
328
328
 
329
- For models *without* deferred tool support — Claude Haiku, Gemini, ChatGPT OpenAI-compatible local models, smaller open-weights models — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
329
+ For setups *without* deferred tool support — models like Claude Haiku, Gemini, OpenAI-compatible local models and smaller open-weights models, or clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI) — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
330
330
 
331
331
  ### Smaller or local LLMs (Ollama, etc.)
332
332
 
@@ -356,11 +356,11 @@ The proxy split lets MCP clients apply different permission policies per categor
356
356
 
357
357
  ### When to enable
358
358
 
359
- - **Claude Haiku, OpenAI-compatible local models, Gemini, ChatGPT or any model without native deferred tool support** — large idle-context savings.
359
+ - **Claude Haiku, OpenAI-compatible local models, Gemini, or any model without native deferred tool support** — large idle-context savings. The same applies to clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI, even when running Claude Sonnet/Opus).
360
360
  - MCP clients that cap total tool count (some cap at 100) — surfaces a minimal set (~10 tools) instead of 84.
361
361
  - **Cost-sensitive deployments** — fewer idle tokens per turn.
362
362
 
363
- Leave it off when using Claude Sonnet/Opus or any client with deferred tool loading; the full catalog has no idle cost there and direct calls skip the search step. If you choose to use our toolsearch then you should disable the native Claude Opus/Sonnet toolsearch, which is called deferred tools in the settings.
363
+ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
364
364
 
365
365
  > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the add-on or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
366
366
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "7.14.2.dev2167"
7
+ version = "7.14.2.dev2169"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -110,7 +110,7 @@
110
110
  "visibility.assist.help": "Verstecke Entitäten, die nicht für den Assist-Sprachassistenten (Konversation) von Home Assistant freigegeben sind – entsprechend der Liste Einstellungen > Sprachassistenten > Freigeben. Fügt zwei WebSocket-Lesevorgänge pro Suche hinzu, während es aktiviert ist.",
111
111
  "visibility.assist.only_exposed": "Nur für Assist freigegebene Entitäten anzeigen",
112
112
  "features.enable_tool_search.label": "Tool-Suche aktivieren",
113
- "features.enable_tool_search.help": "Ersetzt den vollständigen Tool-Katalog durch suchbasierte Entdeckung. Reduziert den Leerlauf-Kontext von ~46K auf ~5K Tokens. ⚠️ Aktiviere dies NICHT, wenn du Claude im Sonnet- oder Opus-Modus verwendest – diese Modelle haben ihre eigene integrierte Tool-Suche / aufgeschobene Tools, die mit unserer kollidiert. Um die Tool-Suche von ha-mcp mit Claude zu verwenden, deaktiviere zuerst Claudes integrierte Tool-Suche; lasse dies andernfalls ausgeschaltet. Verwende dies nur mit LLMs, denen native aufgeschobene Tools fehlen (z. B. Claude Haiku, lokale OpenAI-kompatible Modelle) oder mit kleineren Kontextfenstern. Tools werden über ha_search_tools gefunden und über kategorisierte Proxys (read/write/delete) ausgeführt. Erfordert Neustart, um wirksam zu werden.",
113
+ "features.enable_tool_search.help": "Ersetzt den vollständigen Tool-Katalog durch suchbasierte Entdeckung. Reduziert den Leerlauf-Kontext um rund 90 % auf etwa 5K Tokens. ⚠️ Aktiviere dies NICHT in Clients mit eigener integrierter Tool-Suche / aufgeschobenen Tools (claude.ai, Claude Desktop, Claude Code) – die beiden Suchebenen kollidieren, und die integrierte Tool-Suche des Clients ist dort die bessere Wahl; lasse dies ausgeschaltet. Ob Tools aufgeschoben werden, hängt von der Kombination aus Client und Modell ab: Verwende dies, wenn dein Setup den vollständigen Katalog von Anfang an lädt – Modelle ohne native aufgeschobene Tools (z. B. Gemini, lokale OpenAI-kompatible Modelle, Claude Haiku), Clients, die alle Tool-Schemata unabhängig vom Modell direkt einbetten (z. B. GitHub Copilot CLI), oder kleinere Kontextfenster. Auch einige Codex-Modelle und ChatGPT haben aufgeschobene Tools – prüfe direkt bei deinem Client/Modell, welche Features er hat, damit du dies nicht unnötig aktiviert lässt. Tools werden über ha_search_tools gefunden und über kategorisierte Proxys (read/write/delete) ausgeführt. Erfordert Neustart, um wirksam zu werden.",
114
114
  "features.tool_search_max_results.label": "Max. Tool-Suchergebnisse",
115
115
  "features.tool_search_max_results.help": "Maximale Anzahl von Tools, die von ha_search_tools zurückgegeben werden, wenn die Tool-Suche aktiviert ist. Niedrigere Werte (2-3) sparen Kontext-Tokens, können aber relevante Tools übersehen. Bereich: 2-10. Erfordert Neustart.",
116
116
  "features.enable_tool_security_policies.label": "Tool-Sicherheitsrichtlinien aktivieren (erweitert)",
@@ -110,7 +110,7 @@
110
110
  "visibility.assist.help": "Hide entities not exposed to Home Assistant's Assist (“conversation”) voice assistant, mirroring the Settings > Voice assistants > Expose list. Adds two websocket reads per search while enabled.",
111
111
  "visibility.assist.only_exposed": "Only show entities exposed to Assist",
112
112
  "features.enable_tool_search.label": "Enable tool search",
113
- "features.enable_tool_search.help": "Replace the full tool catalog with search-based discovery. Reduces idle context from ~46K to ~5K tokens. ⚠️ Do NOT enable this if you use Claude in Sonnet or Opus modes — those models have their own built-in tool search / deferred tools, which conflicts with ours. To use ha-mcp's tool search with Claude, disable Claude's built-in tool search first; otherwise leave this off. Use this only with LLMs that lack native deferred tools (e.g. Claude Haiku, local OpenAI-compatible models) or with smaller context windows. Tools are found via ha_search_tools and executed via categorized proxies (read/write/delete). Requires restart to take effect.",
113
+ "features.enable_tool_search.help": "Replace the full tool catalog with search-based discovery. Reduces idle context by roughly 90%, to about 5K tokens. ⚠️ Do NOT enable this in clients with their own built-in tool search / deferred tools (claude.ai, Claude Desktop, Claude Code) — the two search layers conflict, and the client's built-in tool search is the better choice there; leave this off. Whether tools are deferred depends on your client and model combination: use this when your setup loads the full catalog up front — models without native deferred tools (e.g. Gemini, OpenAI-compatible local models, Claude Haiku), clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI), or smaller context windows. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily. Tools are found via ha_search_tools and executed via categorized proxies (read/write/delete). Requires restart to take effect.",
114
114
  "features.tool_search_max_results.label": "Tool search max results",
115
115
  "features.tool_search_max_results.help": "Maximum number of tools returned by ha_search_tools when tool search is enabled. Lower values (2-3) save context tokens but may miss relevant tools. Range: 2-10. Requires restart.",
116
116
  "features.enable_tool_security_policies.label": "Enable Tool Security Policies (advanced)",
@@ -110,7 +110,7 @@
110
110
  "visibility.assist.help": "Oculta las entidades no expuestas al asistente de voz Assist («conversation») de Home Assistant, replicando la lista de Ajustes > Asistentes de voz > Exponer. Añade dos lecturas por websocket en cada búsqueda mientras está activado.",
111
111
  "visibility.assist.only_exposed": "Mostrar solo las entidades expuestas a Assist",
112
112
  "features.enable_tool_search.label": "Activar la búsqueda de herramientas",
113
- "features.enable_tool_search.help": "Sustituye el catálogo completo de herramientas por un descubrimiento basado en búsqueda. Reduce el contexto en reposo de unos 46K a unos 5K tokens. ⚠️ NO actives esto si usas Claude en modo Sonnet u Opus: esos modelos tienen su propia búsqueda de herramientas / herramientas diferidas integrada, que entra en conflicto con la nuestra. Para usar la búsqueda de herramientas de ha-mcp con Claude, desactiva primero la búsqueda integrada de Claude; si no, deja esto desactivado. Úsalo solo con LLM que carezcan de herramientas diferidas nativas (p. ej. Claude Haiku, modelos locales compatibles con OpenAI) o con ventanas de contexto más pequeñas. Las herramientas se localizan mediante ha_search_tools y se ejecutan a través de proxies por categoría (lectura/escritura/borrado). Requiere reiniciar para que surta efecto.",
113
+ "features.enable_tool_search.help": "Sustituye el catálogo completo de herramientas por un descubrimiento basado en búsqueda. Reduce el contexto en reposo en torno a un 90 %, hasta unos 5K tokens. ⚠️ NO actives esto en clientes con su propia búsqueda de herramientas / herramientas diferidas integrada (claude.ai, Claude Desktop, Claude Code): las dos capas de búsqueda entran en conflicto y la búsqueda integrada del cliente es allí la mejor opción; deja esto desactivado. Que las herramientas se difieran depende de la combinación de cliente y modelo: usa esto cuando tu configuración carga el catálogo completo de entrada — modelos sin herramientas diferidas nativas (p. ej. Gemini, modelos locales compatibles con OpenAI, Claude Haiku), clientes que insertan todos los esquemas de herramientas sea cual sea el modelo (p. ej. GitHub Copilot CLI) o ventanas de contexto más pequeñas. Algunos modelos Codex y ChatGPT también incluyen herramientas diferidas: comprueba directamente con tu cliente/modelo qué características tiene para no dejar esto activado innecesariamente. Las herramientas se localizan mediante ha_search_tools y se ejecutan a través de proxies por categoría (lectura/escritura/borrado). Requiere reiniciar para que surta efecto.",
114
114
  "features.tool_search_max_results.label": "Máximo de resultados de la búsqueda de herramientas",
115
115
  "features.tool_search_max_results.help": "Número máximo de herramientas que devuelve ha_search_tools cuando la búsqueda de herramientas está activada. Los valores bajos (2-3) ahorran tokens de contexto pero pueden dejar fuera herramientas relevantes. Rango: 2-10. Requiere reiniciar.",
116
116
  "features.enable_tool_security_policies.label": "Activar las políticas de seguridad de herramientas (avanzado)",
@@ -110,7 +110,7 @@
110
110
  "visibility.assist.help": "Masque les entités non exposées à l'assistant vocal Assist (« conversation ») de Home Assistant, en miroir de la liste Paramètres > Assistants vocaux > Exposer. Ajoute deux lectures websocket par recherche lorsqu'il est activé.",
111
111
  "visibility.assist.only_exposed": "Afficher uniquement les entités exposées à Assist",
112
112
  "features.enable_tool_search.label": "Activer la recherche d'outils",
113
- "features.enable_tool_search.help": "Remplace le catalogue complet d'outils par une découverte basée sur la recherche. Réduit le contexte inactif d'environ 46K à 5K tokens. ⚠️ N'active PAS ceci si tu utilises Claude en modes Sonnet ou Opus — ces modèles ont leur propre recherche d'outils intégrée / outils différés, qui entre en conflit avec la nôtre. Pour utiliser la recherche d'outils de ha-mcp avec Claude, désactive d'abord la recherche d'outils intégrée de Claude ; sinon, laisse ceci désactivé. Utilise ceci uniquement avec des LLM qui n'ont pas d'outils différés natifs (p. ex. Claude Haiku, modèles locaux compatibles OpenAI) ou avec des fenêtres de contexte plus petites. Les outils sont trouvés via ha_search_tools et exécutés via des proxys catégorisés (lecture/écriture/suppression). Nécessite un redémarrage pour prendre effet.",
113
+ "features.enable_tool_search.help": "Remplace le catalogue complet d'outils par une découverte basée sur la recherche. Réduit le contexte inactif d'environ 90 %, à près de 5K tokens. ⚠️ N'active PAS ceci dans les clients qui ont leur propre recherche d'outils intégrée / outils différés (claude.ai, Claude Desktop, Claude Code) — les deux couches de recherche entrent en conflit, et la recherche d'outils intégrée du client y est le meilleur choix ; laisse ceci désactivé. Le report des outils dépend de la combinaison client/modèle : utilise ceci lorsque ta configuration charge le catalogue complet d'emblée — modèles sans outils différés natifs (p. ex. Gemini, modèles locaux compatibles OpenAI, Claude Haiku), clients qui intègrent tous les schémas d'outils quel que soit le modèle (p. ex. GitHub Copilot CLI), ou fenêtres de contexte plus petites. Certains modèles Codex et ChatGPT incluent aussi des outils différés — vérifie directement auprès de ton client/modèle quelles fonctionnalités il possède pour ne pas laisser ceci activé inutilement. Les outils sont trouvés via ha_search_tools et exécutés via des proxys catégorisés (lecture/écriture/suppression). Nécessite un redémarrage pour prendre effet.",
114
114
  "features.tool_search_max_results.label": "Résultats max. de la recherche d'outils",
115
115
  "features.tool_search_max_results.help": "Nombre maximum d'outils renvoyés par ha_search_tools lorsque la recherche d'outils est activée. Des valeurs plus basses (2-3) économisent des tokens de contexte mais peuvent manquer des outils pertinents. Plage : 2-10. Nécessite un redémarrage.",
116
116
  "features.enable_tool_security_policies.label": "Activer les politiques de sécurité des outils (avancé)",
@@ -110,7 +110,7 @@
110
110
  "visibility.assist.help": "Скрывает сущности, не предоставленные голосовому помощнику Assist («conversation»), в соответствии со списком «Настройки → Голосовые помощники → Предоставить доступ». При каждом поиске выполняются два дополнительных WebSocket-запроса.",
111
111
  "visibility.assist.only_exposed": "Показывать только сущности, доступные Assist",
112
112
  "features.enable_tool_search.label": "Включить поиск инструментов",
113
- "features.enable_tool_search.help": "Заменяет полный каталог инструментов поиском по запросу. Уменьшает неиспользуемый контекст примерно с 46 тыс. до 5 тыс. токенов. ⚠️ НЕ включайте этот параметр, если используете Claude в режимах Sonnet или Opus: у этих моделей есть собственный встроенный поиск инструментов и отложенные инструменты, которые конфликтуют с нашими. Чтобы использовать поиск инструментов ha-mcp с Claude, сначала отключите встроенный поиск инструментов Claude; в противном случае оставьте этот параметр выключенным. Используйте его только с LLM без собственных отложенных инструментов (например, Claude Haiku или локальными OpenAI-совместимыми моделями) либо с небольшими контекстными окнами. Инструменты находятся через ha_search_tools и выполняются через распределённые по категориям прокси (чтение, запись, удаление). Для применения требуется перезапуск.",
113
+ "features.enable_tool_search.help": "Заменяет полный каталог инструментов поиском по запросу. Уменьшает неиспользуемый контекст примерно на 90 % — до порядка 5 тыс. токенов. ⚠️ НЕ включайте этот параметр в клиентах с собственным встроенным поиском инструментов и отложенными инструментами (claude.ai, Claude Desktop, Claude Code): два слоя поиска конфликтуют, а встроенный поиск инструментов клиента там — лучший выбор; оставьте этот параметр выключенным. Будут ли инструменты отложенными, зависит от сочетания клиента и модели: используйте этот параметр, когда ваша конфигурация загружает полный каталог сразу — модели без собственных отложенных инструментов (например, Gemini, локальные OpenAI-совместимые модели, Claude Haiku), клиенты, которые встраивают все схемы инструментов независимо от модели (например, GitHub Copilot CLI), или небольшие контекстные окна. Некоторые модели Codex и ChatGPT тоже включают отложенные инструменты — уточните непосредственно у своего клиента/модели, какие функции он поддерживает, чтобы не оставлять этот параметр включённым без необходимости. Инструменты находятся через ha_search_tools и выполняются через распределённые по категориям прокси (чтение, запись, удаление). Для применения требуется перезапуск.",
114
114
  "features.tool_search_max_results.label": "Максимальное количество результатов поиска инструментов",
115
115
  "features.tool_search_max_results.help": "Максимальное количество инструментов, возвращаемых ha_search_tools при включённом поиске инструментов. Меньшие значения (2–3) экономят токены контекста, но могут пропустить подходящие инструменты. Диапазон: 2–10. Требуется перезапуск.",
116
116
  "features.enable_tool_security_policies.label": "Включить политики безопасности инструментов (расширенная настройка)",
@@ -110,7 +110,7 @@
110
110
  "visibility.assist.help": "隐藏未暴露给 Home Assistant 的 Assist(“对话”)语音助手的实体,对应设置 > 语音助手 > 暴露列表。启用时每次搜索额外增加两次 websocket 读取。",
111
111
  "visibility.assist.only_exposed": "仅显示暴露给 Assist 的实体",
112
112
  "features.enable_tool_search.label": "启用工具搜索",
113
- "features.enable_tool_search.help": "用基于搜索的发现取代完整工具目录。将空闲上下文从约 46K 降至约 5K token。⚠️ 如果你在 Sonnet 或 Opus 模式下使用 Claude,请勿启用此功能——这些模型自带内置工具搜索/延迟工具,会与我们的功能冲突。要在 Claude 中使用 ha-mcp 的工具搜索,请先禁用 Claude 的内置工具搜索;否则请保持关闭。仅在与缺乏原生延迟工具的 LLM 一起使用(例如 Claude Haiku、本地 OpenAI 兼容模型)或上下文窗口较小时才使用此功能。工具通过 ha_search_tools 发现,并通过分类代理(读/写/删)执行。需要重启才能生效。",
113
+ "features.enable_tool_search.help": "用基于搜索的发现取代完整工具目录。将空闲上下文减少约 90%,降至约 5K token。⚠️ 如果客户端自带内置工具搜索/延迟工具(claude.ai、Claude Desktop、Claude Code),请勿启用此功能——两层搜索会相互冲突,且在这些客户端中其内置工具搜索是更好的选择;请保持关闭。工具是否延迟取决于客户端与模型的组合:当你的配置会一次性加载完整目录时才使用此功能——例如没有原生延迟工具的模型(如 Gemini、本地 OpenAI 兼容模型、Claude Haiku)、无论模型如何都会内联全部工具架构的客户端(如 GitHub Copilot CLI),或上下文窗口较小时。部分 Codex 模型和 ChatGPT 也带有延迟工具——请直接向你的客户端/模型确认其具备哪些功能,以免不必要地保持启用此功能。工具通过 ha_search_tools 发现,并通过分类代理(读/写/删)执行。需要重启才能生效。",
114
114
  "features.tool_search_max_results.label": "工具搜索最大结果数",
115
115
  "features.tool_search_max_results.help": "启用工具搜索时 ha_search_tools 返回的最大工具数。较小的值(2–3)可节省上下文 token,但可能遗漏相关工具。范围:2–10。需要重启。",
116
116
  "features.enable_tool_security_policies.label": "启用工具安全策略(高级)",
@@ -1845,7 +1845,7 @@ document.getElementById('stopSidecarBtn').addEventListener('click', stopSidecar)
1845
1845
  const FEATURE_META = {
1846
1846
  enable_tool_search: {
1847
1847
  label: "Enable tool search",
1848
- help: "Replace the full tool catalog with search-based discovery. Reduces idle context from ~46K to ~5K tokens. ⚠️ Do NOT enable this if you use Claude in Sonnet or Opus modes. Those models have their own built-in tool search / deferred tools, which conflicts with ours. To use ha-mcp's tool search with Claude, disable Claude's built-in tool search first; otherwise leave this off. Use this only with LLMs that lack native deferred tools (e.g. Claude Haiku, local OpenAI-compatible models) or with smaller context windows. Tools are found via ha_search_tools and executed via categorized proxies (read/write/delete). Requires restart to take effect.",
1848
+ help: "Replace the full tool catalog with search-based discovery. Reduces idle context by roughly 90%, to about 5K tokens. ⚠️ Do NOT enable this in clients with their own built-in tool search / deferred tools (claude.ai, Claude Desktop, Claude Code) — the two search layers conflict, and the client's built-in tool search is the better choice there; leave this off. Whether tools are deferred depends on your client and model combination: use this when your setup loads the full catalog up front — models without native deferred tools (e.g. Gemini, OpenAI-compatible local models, Claude Haiku), clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI), or smaller context windows. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily. Tools are found via ha_search_tools and executed via categorized proxies (read/write/delete). Requires restart to take effect.",
1849
1849
  },
1850
1850
  tool_search_max_results: {
1851
1851
  label: "Tool search max results",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.14.2.dev2167
3
+ Version: 7.14.2.dev2169
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
@@ -357,9 +357,9 @@ Skills can still be installed manually for clients that prefer local skill files
357
357
 
358
358
  ## 🔍 Tool Discovery for AI Agents
359
359
 
360
- By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (Claude Sonnet, Claude Opus) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
360
+ By default, the full tool catalog (~84 tools) is listed to the client through the standard MCP `tools/list` response. Clients with deferred / on-demand tool loading (claude.ai, Claude Desktop, Claude Code) handle that fine — tools are pulled into context only when needed, so idle context cost is near-zero.
361
361
 
362
- For models *without* deferred tool support — Claude Haiku, Gemini, ChatGPT OpenAI-compatible local models, smaller open-weights models — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
362
+ For setups *without* deferred tool support — models like Claude Haiku, Gemini, OpenAI-compatible local models and smaller open-weights models, or clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI) — listing the full tool catalog up front adds a lot of idle context and can overwhelm smaller models. To address that, the server ships with a **search-based discovery mode** built on top of FastMCP's BM25 search transform.
363
363
 
364
364
  ### Smaller or local LLMs (Ollama, etc.)
365
365
 
@@ -389,11 +389,11 @@ The proxy split lets MCP clients apply different permission policies per categor
389
389
 
390
390
  ### When to enable
391
391
 
392
- - **Claude Haiku, OpenAI-compatible local models, Gemini, ChatGPT or any model without native deferred tool support** — large idle-context savings.
392
+ - **Claude Haiku, OpenAI-compatible local models, Gemini, or any model without native deferred tool support** — large idle-context savings. The same applies to clients that inline all tool schemas regardless of model (e.g. GitHub Copilot CLI, even when running Claude Sonnet/Opus).
393
393
  - MCP clients that cap total tool count (some cap at 100) — surfaces a minimal set (~10 tools) instead of 84.
394
394
  - **Cost-sensitive deployments** — fewer idle tokens per turn.
395
395
 
396
- Leave it off when using Claude Sonnet/Opus or any client with deferred tool loading; the full catalog has no idle cost there and direct calls skip the search step. If you choose to use our toolsearch then you should disable the native Claude Opus/Sonnet toolsearch, which is called deferred tools in the settings.
396
+ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
397
397
 
398
398
  > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the add-on or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but return `Unknown tool` when called. ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after re-adding, delete the connector and create a new one with a **different name**.
399
399