ha-mcp-dev 7.1.0.dev310__tar.gz → 7.1.0.dev311__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.
- {ha_mcp_dev-7.1.0.dev310/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.1.0.dev311}/PKG-INFO +5 -5
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/README.md +4 -4
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/pyproject.toml +1 -1
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/helpers.py +14 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_registry.py +320 -332
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_service.py +151 -84
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311/src/ha_mcp_dev.egg-info}/PKG-INFO +5 -5
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/LICENSE +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/setup.cfg +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.1.0.dev310 → ha_mcp_dev-7.1.0.dev311}/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.
|
|
3
|
+
Version: 7.1.0.dev311
|
|
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-
|
|
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 (
|
|
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`, `
|
|
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`, `
|
|
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-
|
|
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 (
|
|
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`, `
|
|
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`, `
|
|
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.
|
|
7
|
+
version = "7.1.0.dev311"
|
|
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"
|
|
@@ -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]:
|