ha-mcp-dev 7.1.0.dev310__tar.gz → 7.2.0.dev313__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 (100) hide show
  1. {ha_mcp_dev-7.1.0.dev310/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.2.0.dev313}/PKG-INFO +5 -5
  2. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/README.md +4 -4
  3. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/pyproject.toml +1 -1
  4. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/__init__.py +1 -1
  5. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/helpers.py +14 -0
  6. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_registry.py +320 -332
  7. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_service.py +151 -84
  8. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313/src/ha_mcp_dev.egg-info}/PKG-INFO +5 -5
  9. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/LICENSE +0 -0
  10. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/MANIFEST.in +0 -0
  11. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/setup.cfg +0 -0
  12. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/__main__.py +0 -0
  13. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/_pypi_marker +0 -0
  14. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/auth/__init__.py +0 -0
  15. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/auth/consent_form.py +0 -0
  16. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/auth/provider.py +0 -0
  17. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/client/__init__.py +0 -0
  18. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/client/rest_client.py +0 -0
  19. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/client/websocket_client.py +0 -0
  20. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/client/websocket_listener.py +0 -0
  21. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/config.py +0 -0
  22. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/errors.py +0 -0
  23. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/py.typed +0 -0
  24. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  25. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  26. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  27. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  28. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  29. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  30. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  31. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  32. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  33. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  34. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  35. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  36. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  37. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  38. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  39. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  40. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  41. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  42. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  43. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  44. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/server.py +0 -0
  45. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/smoke_test.py +0 -0
  46. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/__init__.py +0 -0
  47. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/backup.py +0 -0
  48. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  49. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/device_control.py +0 -0
  50. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/enhanced.py +0 -0
  51. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/registry.py +0 -0
  52. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/smart_search.py +0 -0
  53. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_addons.py +0 -0
  54. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_areas.py +0 -0
  55. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  56. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  57. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_calendar.py +0 -0
  58. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_camera.py +0 -0
  59. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_categories.py +0 -0
  60. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  61. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  62. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  63. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  64. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  65. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_entities.py +0 -0
  66. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  67. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_groups.py +0 -0
  68. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_hacs.py +0 -0
  69. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_history.py +0 -0
  70. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_integrations.py +0 -0
  71. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_labels.py +0 -0
  72. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  73. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_resources.py +0 -0
  74. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_search.py +0 -0
  75. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_services.py +0 -0
  76. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_system.py +0 -0
  77. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_todo.py +0 -0
  78. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_traces.py +0 -0
  79. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_updates.py +0 -0
  80. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_utility.py +0 -0
  81. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  82. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  83. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/tools_zones.py +0 -0
  84. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/tools/util_helpers.py +0 -0
  85. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/transforms/__init__.py +0 -0
  86. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/transforms/categorized_search.py +0 -0
  87. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/utils/__init__.py +0 -0
  88. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/utils/domain_handlers.py +0 -0
  89. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  90. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/utils/operation_manager.py +0 -0
  91. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/utils/python_sandbox.py +0 -0
  92. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp/utils/usage_logger.py +0 -0
  93. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  94. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  95. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  96. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  97. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  98. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/tests/__init__.py +0 -0
  99. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/tests/test_constants.py +0 -0
  100. {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.2.0.dev313}/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.1.0.dev310
3
+ Version: 7.2.0.dev313
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
@@ -37,7 +37,7 @@ Dynamic: license-file
37
37
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
38
38
 
39
39
  <p align="center">
40
- <img src="https://img.shields.io/badge/tools-94-blue" alt="95+ Tools">
40
+ <img src="https://img.shields.io/badge/tools-92-blue" alt="95+ Tools">
41
41
  <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>
42
42
  <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>
43
43
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -160,7 +160,7 @@ Spend less time configuring, more time enjoying your smart home.
160
160
  <details>
161
161
  <!-- TOOLS_TABLE_START -->
162
162
 
163
- <summary><b>Complete Tool List (94 tools)</b></summary>
163
+ <summary><b>Complete Tool List (92 tools)</b></summary>
164
164
 
165
165
  | Category | Tools |
166
166
  |----------|-------|
@@ -171,7 +171,7 @@ Spend less time configuring, more time enjoying your smart home.
171
171
  | **Calendar** | `ha_config_get_calendar_events`, `ha_config_remove_calendar_event`, `ha_config_set_calendar_event` |
172
172
  | **Camera** | `ha_get_camera_image` |
173
173
  | **Dashboards** | `ha_config_delete_dashboard_resource`, `ha_config_delete_dashboard`, `ha_config_get_dashboard`, `ha_config_list_dashboard_resources`, `ha_config_set_dashboard_resource`, `ha_config_set_dashboard`, `ha_dashboard_find_card` |
174
- | **Device Registry** | `ha_get_device`, `ha_remove_device`, `ha_rename_entity_and_device`, `ha_rename_entity`, `ha_update_device` |
174
+ | **Device Registry** | `ha_get_device`, `ha_remove_device`, `ha_rename_entity`, `ha_update_device` |
175
175
  | **Entity Registry** | `ha_get_entity_exposure`, `ha_get_entity`, `ha_set_entity` |
176
176
  | **Files** | `ha_delete_file`, `ha_list_files`, `ha_read_file`, `ha_write_file` |
177
177
  | **Groups** | `ha_config_list_groups`, `ha_config_remove_group`, `ha_config_set_group` |
@@ -182,7 +182,7 @@ Spend less time configuring, more time enjoying your smart home.
182
182
  | **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` |
183
183
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
184
184
  | **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_get_states`, `ha_search_entities` |
185
- | **Service & Device Control** | `ha_bulk_control`, `ha_call_service`, `ha_get_bulk_status`, `ha_get_operation_status`, `ha_list_services` |
185
+ | **Service & Device Control** | `ha_bulk_control`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
186
186
  | **System** | `ha_backup_create`, `ha_backup_restore`, `ha_check_config`, `ha_config_set_yaml`, `ha_get_system_health`, `ha_get_updates`, `ha_reload_core`, `ha_restart` |
187
187
  | **Todo Lists** | `ha_add_todo_item`, `ha_get_todo`, `ha_remove_todo_item`, `ha_update_todo_item` |
188
188
  | **Utilities** | `ha_eval_template`, `ha_install_mcp_tools`, `ha_report_issue` |
@@ -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-94-blue" alt="95+ Tools">
11
+ <img src="https://img.shields.io/badge/tools-92-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>
@@ -131,7 +131,7 @@ Spend less time configuring, more time enjoying your smart home.
131
131
  <details>
132
132
  <!-- TOOLS_TABLE_START -->
133
133
 
134
- <summary><b>Complete Tool List (94 tools)</b></summary>
134
+ <summary><b>Complete Tool List (92 tools)</b></summary>
135
135
 
136
136
  | Category | Tools |
137
137
  |----------|-------|
@@ -142,7 +142,7 @@ Spend less time configuring, more time enjoying your smart home.
142
142
  | **Calendar** | `ha_config_get_calendar_events`, `ha_config_remove_calendar_event`, `ha_config_set_calendar_event` |
143
143
  | **Camera** | `ha_get_camera_image` |
144
144
  | **Dashboards** | `ha_config_delete_dashboard_resource`, `ha_config_delete_dashboard`, `ha_config_get_dashboard`, `ha_config_list_dashboard_resources`, `ha_config_set_dashboard_resource`, `ha_config_set_dashboard`, `ha_dashboard_find_card` |
145
- | **Device Registry** | `ha_get_device`, `ha_remove_device`, `ha_rename_entity_and_device`, `ha_rename_entity`, `ha_update_device` |
145
+ | **Device Registry** | `ha_get_device`, `ha_remove_device`, `ha_rename_entity`, `ha_update_device` |
146
146
  | **Entity Registry** | `ha_get_entity_exposure`, `ha_get_entity`, `ha_set_entity` |
147
147
  | **Files** | `ha_delete_file`, `ha_list_files`, `ha_read_file`, `ha_write_file` |
148
148
  | **Groups** | `ha_config_list_groups`, `ha_config_remove_group`, `ha_config_set_group` |
@@ -153,7 +153,7 @@ Spend less time configuring, more time enjoying your smart home.
153
153
  | **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` |
154
154
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
155
155
  | **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_get_states`, `ha_search_entities` |
156
- | **Service & Device Control** | `ha_bulk_control`, `ha_call_service`, `ha_get_bulk_status`, `ha_get_operation_status`, `ha_list_services` |
156
+ | **Service & Device Control** | `ha_bulk_control`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
157
157
  | **System** | `ha_backup_create`, `ha_backup_restore`, `ha_check_config`, `ha_config_set_yaml`, `ha_get_system_health`, `ha_get_updates`, `ha_reload_core`, `ha_restart` |
158
158
  | **Todo Lists** | `ha_add_todo_item`, `ha_get_todo`, `ha_remove_todo_item`, `ha_update_todo_item` |
159
159
  | **Utilities** | `ha_eval_template`, `ha_install_mcp_tools`, `ha_report_issue` |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "7.1.0.dev310"
7
+ version = "7.2.0.dev313"
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"
@@ -5,7 +5,7 @@ A Model Context Protocol server that provides complete control over Home Assista
5
5
  through REST API and WebSocket integration with 20+ enhanced tools.
6
6
  """
7
7
 
8
- __version__ = "7.1.0"
8
+ __version__ = "7.2.0"
9
9
  __author__ = "Julien"
10
10
  __license__ = "MIT"
11
11
 
@@ -60,6 +60,20 @@ def raise_tool_error(error_response: dict[str, Any]) -> NoReturn:
60
60
  raise ToolError(json.dumps(error_response, indent=2, default=str))
61
61
 
62
62
 
63
+ def extract_tool_error_message(te: ToolError) -> str:
64
+ """Extract a human-readable error message from a ToolError.
65
+
66
+ Pairs with raise_tool_error() which serializes error dicts as JSON.
67
+ Falls back to str(te) if the message is not valid JSON.
68
+ """
69
+ try:
70
+ error_data = json.loads(str(te))
71
+ msg = error_data.get("error", {}).get("message", str(te))
72
+ return str(msg)
73
+ except (json.JSONDecodeError, TypeError, AttributeError):
74
+ return str(te)
75
+
76
+
63
77
  async def get_connected_ws_client(
64
78
  base_url: str, token: str
65
79
  ) -> tuple[HomeAssistantWebSocketClient | None, dict[str, Any] | None]: