ha-mcp-dev 7.9.0.dev740__tar.gz → 7.9.0.dev742__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 (152) hide show
  1. {ha_mcp_dev-7.9.0.dev740/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.9.0.dev742}/PKG-INFO +4 -3
  2. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/README.md +3 -2
  3. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/pyproject.toml +1 -1
  4. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/read_only.py +34 -2
  5. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742/src/ha_mcp_dev.egg-info}/PKG-INFO +4 -3
  6. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/LICENSE +0 -0
  7. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/MANIFEST.in +0 -0
  8. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/backup_manager.py +0 -0
  17. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/client/__init__.py +0 -0
  18. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/client/rest_client.py +0 -0
  19. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/client/supervisor_client.py +0 -0
  20. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/client/websocket_client.py +0 -0
  21. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/client/websocket_listener.py +0 -0
  22. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/config.py +0 -0
  23. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  24. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  25. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  26. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/errors.py +0 -0
  27. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/__init__.py +0 -0
  28. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/approval_queue.py +0 -0
  29. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/evaluator.py +0 -0
  30. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/handlers.py +0 -0
  31. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/middleware.py +0 -0
  32. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/model.py +0 -0
  33. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/persistence.py +0 -0
  34. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/policy/value_sources.py +0 -0
  35. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/py.typed +0 -0
  36. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  37. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  38. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  39. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  40. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  41. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  42. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  43. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  44. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  45. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  46. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  47. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  48. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  49. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  50. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  51. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  52. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  53. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  54. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  55. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  56. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  57. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  58. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/server.py +0 -0
  59. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/settings_ui/__init__.py +0 -0
  60. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/settings_ui/settings.css +0 -0
  61. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/settings_ui/settings.html +0 -0
  62. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/settings_ui/settings.js +0 -0
  63. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/smoke_test.py +0 -0
  64. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  65. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/__init__.py +0 -0
  66. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/auto_backup.py +0 -0
  67. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/backup.py +0 -0
  68. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  69. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  70. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/device_control.py +0 -0
  71. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/enhanced.py +0 -0
  72. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/helpers.py +0 -0
  73. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/radio/__init__.py +0 -0
  74. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/radio/base.py +0 -0
  75. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/radio/matter.py +0 -0
  76. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/radio/thread.py +0 -0
  77. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  78. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/radio/zwave.py +0 -0
  79. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/reference_validator.py +0 -0
  80. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/registry.py +0 -0
  81. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  82. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  83. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  84. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  85. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  86. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  87. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  88. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  89. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  90. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  91. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_addons.py +0 -0
  92. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_areas.py +0 -0
  93. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  94. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  95. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_calendar.py +0 -0
  96. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_camera.py +0 -0
  97. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_categories.py +0 -0
  98. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_code.py +0 -0
  99. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  100. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  101. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  102. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  103. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  104. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  105. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_energy.py +0 -0
  106. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_entities.py +0 -0
  107. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  108. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_groups.py +0 -0
  109. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_hacs.py +0 -0
  110. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_history.py +0 -0
  111. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_integrations.py +0 -0
  112. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_labels.py +0 -0
  113. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  114. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_radio.py +0 -0
  115. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_registry.py +0 -0
  116. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_resources.py +0 -0
  117. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_search.py +0 -0
  118. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_service.py +0 -0
  119. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_services.py +0 -0
  120. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_system.py +0 -0
  121. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_themes.py +0 -0
  122. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_todo.py +0 -0
  123. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_traces.py +0 -0
  124. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_updates.py +0 -0
  125. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_utility.py +0 -0
  126. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  127. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  128. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/tools_zones.py +0 -0
  129. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/util_helpers.py +0 -0
  130. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/tools/validation_middleware.py +0 -0
  131. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/transforms/__init__.py +0 -0
  132. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/transforms/categorized_search.py +0 -0
  133. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  134. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/update_check.py +0 -0
  135. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/__init__.py +0 -0
  136. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/config_hash.py +0 -0
  137. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/data_paths.py +0 -0
  138. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/domain_handlers.py +0 -0
  139. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  140. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  141. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/operation_manager.py +0 -0
  142. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/python_sandbox.py +0 -0
  143. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/skill_loader.py +0 -0
  144. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp/utils/usage_logger.py +0 -0
  145. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  146. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  147. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  148. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  149. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  150. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/tests/__init__.py +0 -0
  151. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/tests/test_constants.py +0 -0
  152. {ha_mcp_dev-7.9.0.dev740 → ha_mcp_dev-7.9.0.dev742}/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.dev740
3
+ Version: 7.9.0.dev742
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
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
41
41
 
42
42
  <p align="center">
43
- <img src="https://img.shields.io/badge/tools-84-blue" alt="95+ Tools">
43
+ <img src="https://img.shields.io/badge/tools-85-blue" alt="95+ Tools">
44
44
  <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>
45
45
  <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>
46
46
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -211,7 +211,7 @@ Spend less time configuring, more time enjoying your smart home.
211
211
  <details>
212
212
  <!-- TOOLS_TABLE_START -->
213
213
 
214
- <summary><b>Complete Tool List (84 tools)</b></summary>
214
+ <summary><b>Complete Tool List (85 tools)</b></summary>
215
215
 
216
216
  | Category | Tools |
217
217
  |----------|-------|
@@ -234,6 +234,7 @@ Spend less time configuring, more time enjoying your smart home.
234
234
  | **History & Statistics** | `ha_get_automation_traces`, `ha_get_history`, `ha_get_logs` |
235
235
  | **Integrations** | `ha_get_integration`, `ha_get_system_health`, `ha_set_integration_enabled` |
236
236
  | **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` |
237
+ | **Matter** | `ha_manage_radio` |
237
238
  | **Scenes** | `ha_config_get_scene`, `ha_config_remove_scene`, `ha_config_set_scene` |
238
239
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
239
240
  | **Search & Discovery** | `ha_get_overview`, `ha_get_state`, `ha_search` |
@@ -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-85-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>
@@ -179,7 +179,7 @@ Spend less time configuring, more time enjoying your smart home.
179
179
  <details>
180
180
  <!-- TOOLS_TABLE_START -->
181
181
 
182
- <summary><b>Complete Tool List (84 tools)</b></summary>
182
+ <summary><b>Complete Tool List (85 tools)</b></summary>
183
183
 
184
184
  | Category | Tools |
185
185
  |----------|-------|
@@ -202,6 +202,7 @@ Spend less time configuring, more time enjoying your smart home.
202
202
  | **History & Statistics** | `ha_get_automation_traces`, `ha_get_history`, `ha_get_logs` |
203
203
  | **Integrations** | `ha_get_integration`, `ha_get_system_health`, `ha_set_integration_enabled` |
204
204
  | **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` |
205
+ | **Matter** | `ha_manage_radio` |
205
206
  | **Scenes** | `ha_config_get_scene`, `ha_config_remove_scene`, `ha_config_set_scene` |
206
207
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
207
208
  | **Search & Discovery** | `ha_get_overview`, `ha_get_state`, `ha_search` |
@@ -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.dev740"
7
+ version = "7.9.0.dev742"
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"
@@ -131,12 +131,37 @@ def _custom_tool_write(args: dict[str, Any]) -> str | None:
131
131
  return "sandbox code execution"
132
132
 
133
133
 
134
+ def _radio_write(args: dict[str, Any]) -> str | None:
135
+ action = args.get("action")
136
+ # Reads (allowed): per-node diagnostics, the integration/network summary,
137
+ # the active reachability probe, a single Zigbee cluster-attribute read, and
138
+ # the Thread dataset listing. Everything else is a write — commission/add,
139
+ # remove, reinterview, firmware, fabric/credential/channel/network changes,
140
+ # plus the two actions that LOOK read-ish but are not: zigbee network_backup
141
+ # (creates a backup artifact + key material, like ha_manage_backup's blocked
142
+ # snapshot create) and thread discover_routers (kicks off a long-running
143
+ # mDNS scan). A missing action fails closed.
144
+ if action in (
145
+ "diagnostics",
146
+ "network_status",
147
+ "ping",
148
+ "cluster_read",
149
+ "list_datasets",
150
+ ):
151
+ return None
152
+ return f"action={action!r}"
153
+
154
+
134
155
  # Mixed read/write tools whose read surface has no pure-read duplicate
135
156
  # (verified per tool: ha_get_addon cannot proxy-read addon-internal
136
157
  # APIs; energy prefs and assist pipelines are reachable only through
137
158
  # these tools; edit-backup listing exists nowhere else; the saved-tools
138
- # cache is only listable here). Everything NOT in this table and not
139
- # ``readOnlyHint=True`` is hidden and blocked outright.
159
+ # cache is only listable here; ha_manage_radio's 'ping' probe, 'cluster_read'
160
+ # and 'list_datasets' have no pure-read duplicate elsewhere, while its
161
+ # 'diagnostics'/'network_status' reads mirror ha_get_device /
162
+ # ha_get_system_health but stay reachable here mid-management). Everything
163
+ # NOT in this table and not ``readOnlyHint=True`` is hidden and blocked
164
+ # outright.
140
165
  #
141
166
  # ``MANDATORY_TOOLS`` (settings_ui/__init__.py) intentionally needs no special
142
167
  # case here: every mandatory tool is either ``readOnlyHint=True`` or
@@ -168,6 +193,13 @@ READ_ONLY_EXEMPT_TOOLS: dict[str, ReadOnlyExemption] = {
168
193
  _custom_tool_write,
169
194
  "listing saved tools (list_saved=True)",
170
195
  ),
196
+ "ha_manage_radio": ReadOnlyExemption(
197
+ _radio_write,
198
+ "node diagnostics ('diagnostics'), the integration/network summary "
199
+ "('network_status'), the active reachability probe ('ping'), a Zigbee "
200
+ "cluster-attribute read ('cluster_read'), and the Thread dataset "
201
+ "listing ('list_datasets')",
202
+ ),
171
203
  }
172
204
 
173
205
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.9.0.dev740
3
+ Version: 7.9.0.dev742
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
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
41
41
 
42
42
  <p align="center">
43
- <img src="https://img.shields.io/badge/tools-84-blue" alt="95+ Tools">
43
+ <img src="https://img.shields.io/badge/tools-85-blue" alt="95+ Tools">
44
44
  <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>
45
45
  <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>
46
46
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -211,7 +211,7 @@ Spend less time configuring, more time enjoying your smart home.
211
211
  <details>
212
212
  <!-- TOOLS_TABLE_START -->
213
213
 
214
- <summary><b>Complete Tool List (84 tools)</b></summary>
214
+ <summary><b>Complete Tool List (85 tools)</b></summary>
215
215
 
216
216
  | Category | Tools |
217
217
  |----------|-------|
@@ -234,6 +234,7 @@ Spend less time configuring, more time enjoying your smart home.
234
234
  | **History & Statistics** | `ha_get_automation_traces`, `ha_get_history`, `ha_get_logs` |
235
235
  | **Integrations** | `ha_get_integration`, `ha_get_system_health`, `ha_set_integration_enabled` |
236
236
  | **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` |
237
+ | **Matter** | `ha_manage_radio` |
237
238
  | **Scenes** | `ha_config_get_scene`, `ha_config_remove_scene`, `ha_config_set_scene` |
238
239
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
239
240
  | **Search & Discovery** | `ha_get_overview`, `ha_get_state`, `ha_search` |