ha-mcp-dev 7.6.0.dev659__tar.gz → 7.6.0.dev661__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 (140) hide show
  1. {ha_mcp_dev-7.6.0.dev659/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.6.0.dev661}/PKG-INFO +4 -4
  2. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/README.md +3 -3
  3. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/pyproject.toml +1 -1
  4. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/errors.py +3 -3
  5. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/server.py +10 -17
  6. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/settings.js +2 -2
  7. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/settings_ui.py +2 -2
  8. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_deep.py +443 -77
  9. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_fetch.py +28 -9
  10. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_scenes.py +88 -21
  11. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_calendar.py +6 -6
  12. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_camera.py +13 -4
  13. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_code.py +1 -1
  14. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_config_automations.py +9 -9
  15. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_config_dashboards.py +1 -2
  16. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_config_helpers.py +2 -3
  17. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_config_scenes.py +6 -6
  18. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_config_scripts.py +9 -9
  19. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_entities.py +9 -9
  20. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_history.py +2 -2
  21. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_integrations.py +53 -24
  22. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_registry.py +1 -1
  23. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_search.py +829 -63
  24. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_service.py +2 -2
  25. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_traces.py +1 -1
  26. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_voice_assistant.py +1 -1
  27. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/util_helpers.py +16 -8
  28. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/transforms/categorized_search.py +1 -1
  29. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/fuzzy_search.py +1 -1
  30. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661/src/ha_mcp_dev.egg-info}/PKG-INFO +4 -4
  31. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/LICENSE +0 -0
  32. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/MANIFEST.in +0 -0
  33. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/setup.cfg +0 -0
  34. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/__init__.py +0 -0
  35. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/__main__.py +0 -0
  36. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/_pypi_marker +0 -0
  37. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/_version.py +0 -0
  38. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/auth/__init__.py +0 -0
  39. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/auth/consent_form.py +0 -0
  40. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/auth/provider.py +0 -0
  41. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/backup_manager.py +0 -0
  42. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/client/__init__.py +0 -0
  43. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/client/rest_client.py +0 -0
  44. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/client/supervisor_client.py +0 -0
  45. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/client/websocket_client.py +0 -0
  46. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/client/websocket_listener.py +0 -0
  47. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/config.py +0 -0
  48. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  49. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  50. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  51. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/__init__.py +0 -0
  52. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/approval_queue.py +0 -0
  53. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/evaluator.py +0 -0
  54. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/handlers.py +0 -0
  55. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/middleware.py +0 -0
  56. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/model.py +0 -0
  57. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/persistence.py +0 -0
  58. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/policy/value_sources.py +0 -0
  59. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/py.typed +0 -0
  60. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  61. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  62. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  63. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  64. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  65. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  66. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  67. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  68. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  69. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  70. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  71. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  72. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  73. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  74. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  75. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  76. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  77. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  78. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  79. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  80. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  81. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  82. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/settings.css +0 -0
  83. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/smoke_test.py +0 -0
  84. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  85. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/__init__.py +0 -0
  86. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/auto_backup.py +0 -0
  87. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/backup.py +0 -0
  88. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  89. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/device_control.py +0 -0
  90. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/enhanced.py +0 -0
  91. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/helpers.py +0 -0
  92. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/reference_validator.py +0 -0
  93. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/registry.py +0 -0
  94. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  95. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  96. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  97. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  98. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  99. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  100. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_addons.py +0 -0
  101. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_areas.py +0 -0
  102. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  103. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  104. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_categories.py +0 -0
  105. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  106. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  107. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_energy.py +0 -0
  108. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  109. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_groups.py +0 -0
  110. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_hacs.py +0 -0
  111. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_labels.py +0 -0
  112. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  113. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_resources.py +0 -0
  114. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_services.py +0 -0
  115. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_system.py +0 -0
  116. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_todo.py +0 -0
  117. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_updates.py +0 -0
  118. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_utility.py +0 -0
  119. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  120. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/tools_zones.py +0 -0
  121. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/tools/validation_middleware.py +0 -0
  122. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/transforms/__init__.py +0 -0
  123. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  124. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/__init__.py +0 -0
  125. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/config_hash.py +0 -0
  126. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/data_paths.py +0 -0
  127. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/domain_handlers.py +0 -0
  128. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  129. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/operation_manager.py +0 -0
  130. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/python_sandbox.py +0 -0
  131. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/skill_loader.py +0 -0
  132. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp/utils/usage_logger.py +0 -0
  133. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  134. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  135. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  136. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  137. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  138. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/tests/__init__.py +0 -0
  139. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/tests/test_constants.py +0 -0
  140. {ha_mcp_dev-7.6.0.dev659 → ha_mcp_dev-7.6.0.dev661}/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.6.0.dev659
3
+ Version: 7.6.0.dev661
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
@@ -38,7 +38,7 @@ Dynamic: license-file
38
38
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
39
39
 
40
40
  <p align="center">
41
- <img src="https://img.shields.io/badge/tools-84-blue" alt="95+ Tools">
41
+ <img src="https://img.shields.io/badge/tools-83-blue" alt="95+ Tools">
42
42
  <a href="https://github.com/homeassistant-ai/ha-mcp/releases"><img src="https://img.shields.io/github/v/release/homeassistant-ai/ha-mcp" alt="Release"></a>
43
43
  <a href="https://github.com/homeassistant-ai/ha-mcp/actions/workflows/e2e-tests.yml"><img src="https://img.shields.io/github/actions/workflow/status/homeassistant-ai/ha-mcp/e2e-tests.yml?branch=master&label=E2E%20Tests" alt="E2E Tests"></a>
44
44
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -208,7 +208,7 @@ Spend less time configuring, more time enjoying your smart home.
208
208
  <details>
209
209
  <!-- TOOLS_TABLE_START -->
210
210
 
211
- <summary><b>Complete Tool List (84 tools)</b></summary>
211
+ <summary><b>Complete Tool List (83 tools)</b></summary>
212
212
 
213
213
  | Category | Tools |
214
214
  |----------|-------|
@@ -233,7 +233,7 @@ Spend less time configuring, more time enjoying your smart home.
233
233
  | **Labels & Categories** | `ha_config_get_category`, `ha_config_get_label`, `ha_config_remove_category`, `ha_config_remove_label`, `ha_config_set_category`, `ha_config_set_label` |
234
234
  | **Scenes** | `ha_config_get_scene`, `ha_config_remove_scene`, `ha_config_set_scene` |
235
235
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
236
- | **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
236
+ | **Search & Discovery** | `ha_get_overview`, `ha_get_state`, `ha_search` |
237
237
  | **Service & Device Control** | `ha_bulk_control`, `ha_call_event`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
238
238
  | **System** | `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_backup`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
239
239
  | **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
@@ -8,7 +8,7 @@
8
8
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
9
9
 
10
10
  <p align="center">
11
- <img src="https://img.shields.io/badge/tools-84-blue" alt="95+ Tools">
11
+ <img src="https://img.shields.io/badge/tools-83-blue" alt="95+ Tools">
12
12
  <a href="https://github.com/homeassistant-ai/ha-mcp/releases"><img src="https://img.shields.io/github/v/release/homeassistant-ai/ha-mcp" alt="Release"></a>
13
13
  <a href="https://github.com/homeassistant-ai/ha-mcp/actions/workflows/e2e-tests.yml"><img src="https://img.shields.io/github/actions/workflow/status/homeassistant-ai/ha-mcp/e2e-tests.yml?branch=master&label=E2E%20Tests" alt="E2E Tests"></a>
14
14
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -178,7 +178,7 @@ Spend less time configuring, more time enjoying your smart home.
178
178
  <details>
179
179
  <!-- TOOLS_TABLE_START -->
180
180
 
181
- <summary><b>Complete Tool List (84 tools)</b></summary>
181
+ <summary><b>Complete Tool List (83 tools)</b></summary>
182
182
 
183
183
  | Category | Tools |
184
184
  |----------|-------|
@@ -203,7 +203,7 @@ Spend less time configuring, more time enjoying your smart home.
203
203
  | **Labels & Categories** | `ha_config_get_category`, `ha_config_get_label`, `ha_config_remove_category`, `ha_config_remove_label`, `ha_config_set_category`, `ha_config_set_label` |
204
204
  | **Scenes** | `ha_config_get_scene`, `ha_config_remove_scene`, `ha_config_set_scene` |
205
205
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
206
- | **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
206
+ | **Search & Discovery** | `ha_get_overview`, `ha_get_state`, `ha_search` |
207
207
  | **Service & Device Control** | `ha_bulk_control`, `ha_call_event`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
208
208
  | **System** | `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_backup`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
209
209
  | **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "7.6.0.dev659"
7
+ version = "7.6.0.dev661"
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"
@@ -134,7 +134,7 @@ DEFAULT_SUGGESTIONS: dict[ErrorCode, list[str]] = {
134
134
  "Create a new token with required permissions",
135
135
  ],
136
136
  ErrorCode.ENTITY_NOT_FOUND: [
137
- "Use ha_search_entities() to find correct entity ID",
137
+ "Use ha_search() to find correct entity ID",
138
138
  "Verify the entity exists in Home Assistant",
139
139
  "Check for typos in the entity ID",
140
140
  ],
@@ -145,7 +145,7 @@ DEFAULT_SUGGESTIONS: dict[ErrorCode, list[str]] = {
145
145
  ],
146
146
  ErrorCode.ENTITY_INVALID_ID: [
147
147
  "Entity ID must be in format: domain.name",
148
- "Use ha_search_entities() to find valid entity IDs",
148
+ "Use ha_search() to find valid entity IDs",
149
149
  ],
150
150
  ErrorCode.ENTITY_DOMAIN_MISMATCH: [
151
151
  "Cannot change entity to a different domain",
@@ -241,7 +241,7 @@ def create_error_response(
241
241
  "code": "ENTITY_NOT_FOUND",
242
242
  "message": "Entity light.nonexistent not found",
243
243
  "details": "No entity with this ID exists in Home Assistant",
244
- "suggestion": "Use ha_search_entities() to find correct entity ID"
244
+ "suggestion": "Use ha_search() to find correct entity ID"
245
245
  },
246
246
  "entity_id": "light.nonexistent"
247
247
  }
@@ -453,7 +453,7 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
453
453
  "Once you know a tool name, call it directly \u2014 no need to search "
454
454
  "again.\n\n"
455
455
  "If using proxies, call with TWO top-level params:\n"
456
- ' ha_call_read_tool(name="ha_search_entities", arguments={"query": "..."})\n'
456
+ ' ha_call_read_tool(name="ha_search", arguments={"query": "..."})\n'
457
457
  " Do NOT nest name/arguments inside the arguments param.\n"
458
458
  " Call proxy tools SEQUENTIALLY, not in parallel.\n\n"
459
459
  "ALWAYS search before assuming a capability is unavailable. "
@@ -467,11 +467,12 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
467
467
  # (no semantic matching). Original tool docstrings stay unchanged;
468
468
  # these keywords are appended by the transform at list-tools time.
469
469
  _SEARCH_KEYWORDS: ClassVar[dict[str, str]] = {
470
- # s02: "find entities" → ha_search_entities should outrank ha_deep_search
471
- "ha_search_entities": (
472
- "find entities lookup discover search lights sensors switches "
470
+ # s02: "find entities or configs" → ha_search outranks more specific tools
471
+ "ha_search": (
472
+ "find entities configs lookup discover search lights sensors switches "
473
473
  "covers climate fans media_player binary_sensor device_tracker "
474
- "person weather automation script helper input_boolean input_number"
474
+ "person weather automation script helper input_boolean input_number "
475
+ "automations scripts scenes helpers dashboards"
475
476
  ),
476
477
  # s07: "get/read automation" → ha_config_get_automation should outrank set
477
478
  "ha_config_get_automation": (
@@ -488,7 +489,7 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
488
489
  "integration statistics trend random filter tod "
489
490
  "generic_thermostat switch_as_x generic_hygrostat"
490
491
  ),
491
- # Boost tools that compete with ha_deep_search for common queries
492
+ # Boost tools that compete with ha_search for common queries
492
493
  "ha_config_get_script": (
493
494
  "read inspect fetch view existing script config sequence "
494
495
  "actions get show detail"
@@ -607,7 +608,7 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
607
608
  "zone, person, tag. Flow-based helpers (template, group, "
608
609
  "utility_meter, derivative, statistics, trend, threshold, "
609
610
  "filter, switch_as_x, etc.) cannot be listed through this "
610
- "tool — use ha_search_entities or ha_deep_search.\n\n"
611
+ "tool — use ha_search.\n\n"
611
612
  "For per-type schemas and decision guidance, see "
612
613
  "ha_get_skill_guide."
613
614
  ),
@@ -655,7 +656,7 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
655
656
  "Execute a Home Assistant service to control entities or "
656
657
  "trigger automations. Calls `<domain>.<service>` "
657
658
  "(e.g., light.turn_on, climate.set_temperature). Use "
658
- "ha_search_entities to find entity IDs and ha_get_state "
659
+ "ha_search to find entity IDs and ha_get_state "
659
660
  "to read current values before changing them.\n\n"
660
661
  "For service-parameter details and per-domain guidance, "
661
662
  "see ha_get_skill_guide."
@@ -685,15 +686,7 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
685
686
  # enable_tool_search=True, because they are tuned specifically for the
686
687
  # categorized search transform and replacing the base description would
687
688
  # unnecessarily trim context for other clients.
688
- _SEARCH_DESCRIPTION_OVERRIDES: ClassVar[dict[str, str]] = {
689
- "ha_deep_search": (
690
- "Search INSIDE automation, script, and helper YAML configurations. "
691
- "Use ONLY when you need to find where a specific service call, "
692
- "entity reference, or config field appears within existing "
693
- "automation/script/helper definitions. "
694
- "NOT for finding entities or discovering tools."
695
- ),
696
- }
689
+ _SEARCH_DESCRIPTION_OVERRIDES: ClassVar[dict[str, str]] = {}
697
690
 
698
691
  def _apply_lite_docstrings(self) -> None:
699
692
  """Swap heavy tool descriptions for shorter variants if enabled.
@@ -2174,8 +2174,8 @@ function renderPolicyCard(toolName, rule) {
2174
2174
  // is meaningful UX shorthand (eq/neq/in/not_in/contains).
2175
2175
  // Silently coerce to op=exists so the row reads as
2176
2176
  // "args.* exists" and the rule actually gates on presence
2177
- // rather than storing a useless null-match.
2178
- op = 'exists';
2177
+ // rather than storing a useless null-match. predicate is what gets
2178
+ // persisted, so set it directly (the local `op` is not read again).
2179
2179
  predicate.op = 'exists';
2180
2180
  } else {
2181
2181
  predicate.value = parsed.value;
@@ -83,12 +83,12 @@ logger = logging.getLogger(__name__)
83
83
  # Tools that are always enabled regardless of saved config — the server
84
84
  # strips them out of any disable list before applying. Three of these
85
85
  # overlap with DEFAULT_PINNED_TOOLS in transforms/categorized_search.py
86
- # (ha_search_entities, ha_get_overview, ha_report_issue); ha_get_state
86
+ # (ha_search, ha_get_overview, ha_report_issue); ha_get_state
87
87
  # is mandatory but not pinned-by-default because it is reachable via the
88
88
  # ha_call_read_tool proxy when tool search is on. Keep these lists in
89
89
  # sync where it matters and divergent where it matters — don't merge them.
90
90
  MANDATORY_TOOLS: set[str] = {
91
- "ha_search_entities",
91
+ "ha_search",
92
92
  "ha_get_overview",
93
93
  "ha_get_state",
94
94
  "ha_report_issue",