ha-mcp-dev 7.2.0.dev336__tar.gz → 7.2.0.dev338__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.2.0.dev336/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.2.0.dev338}/PKG-INFO +6 -6
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/README.md +5 -5
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/pyproject.toml +1 -1
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/__main__.py +16 -5
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/auth/provider.py +204 -312
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338/src/ha_mcp_dev.egg-info}/PKG-INFO +6 -6
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/LICENSE +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/setup.cfg +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.2.0.dev336 → ha_mcp_dev-7.2.0.dev338}/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.2.0.
|
|
3
|
+
Version: 7.2.0.dev338
|
|
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-88-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 (88 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_update_device` |
|
|
175
175
|
| **Entity Registry** | `ha_get_entity_exposure`, `ha_get_entity`, `ha_remove_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` |
|
|
@@ -181,10 +181,10 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
181
181
|
| **Integrations** | `ha_delete_config_entry`, `ha_get_integration`, `ha_set_integration_enabled` |
|
|
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
|
-
| **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `
|
|
184
|
+
| **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
|
|
185
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
|
-
| **Todo Lists** | `
|
|
187
|
+
| **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
|
|
188
188
|
| **Utilities** | `ha_eval_template`, `ha_install_mcp_tools`, `ha_report_issue` |
|
|
189
189
|
| **Zones** | `ha_get_zone`, `ha_remove_zone`, `ha_set_zone` |
|
|
190
190
|
|
|
@@ -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-88-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 (88 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_update_device` |
|
|
146
146
|
| **Entity Registry** | `ha_get_entity_exposure`, `ha_get_entity`, `ha_remove_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` |
|
|
@@ -152,10 +152,10 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
152
152
|
| **Integrations** | `ha_delete_config_entry`, `ha_get_integration`, `ha_set_integration_enabled` |
|
|
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
|
-
| **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `
|
|
155
|
+
| **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
|
|
156
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
|
-
| **Todo Lists** | `
|
|
158
|
+
| **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
|
|
159
159
|
| **Utilities** | `ha_eval_template`, `ha_install_mcp_tools`, `ha_report_issue` |
|
|
160
160
|
| **Zones** | `ha_get_zone`, `ha_remove_zone`, `ha_set_zone` |
|
|
161
161
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "7.2.0.
|
|
7
|
+
version = "7.2.0.dev338"
|
|
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"
|
|
@@ -61,7 +61,9 @@ class OAuthProxyClient:
|
|
|
61
61
|
claims = token.claims
|
|
62
62
|
|
|
63
63
|
if not claims or "ha_token" not in claims:
|
|
64
|
-
logger.error(
|
|
64
|
+
logger.error(
|
|
65
|
+
f"OAuth token missing HA credentials. Keys present: {list(claims.keys()) if claims else []}"
|
|
66
|
+
)
|
|
65
67
|
raise RuntimeError("No Home Assistant credentials in OAuth token claims")
|
|
66
68
|
|
|
67
69
|
ha_token = claims["ha_token"]
|
|
@@ -610,7 +612,9 @@ def register_browser_landing(mcp_instance: "FastMCP | _DeferredMCP", path: str)
|
|
|
610
612
|
path: The MCP endpoint path (e.g. "/mcp" or a secret path).
|
|
611
613
|
"""
|
|
612
614
|
if path in _registered_landing_paths:
|
|
613
|
-
logger.warning(
|
|
615
|
+
logger.warning(
|
|
616
|
+
"register_browser_landing: %r already registered, skipping", path
|
|
617
|
+
)
|
|
614
618
|
return
|
|
615
619
|
_registered_landing_paths.add(path)
|
|
616
620
|
|
|
@@ -710,6 +714,15 @@ def main_oauth() -> None:
|
|
|
710
714
|
Note: HOMEASSISTANT_TOKEN is NOT required in this mode.
|
|
711
715
|
Per-user tokens are collected via the OAuth consent form.
|
|
712
716
|
"""
|
|
717
|
+
# In OAuth mode, per-user tokens come from the consent form — no
|
|
718
|
+
# server-level HOMEASSISTANT_TOKEN is needed. Set the sentinel so
|
|
719
|
+
# Settings validation passes even when the env var is empty (e.g.
|
|
720
|
+
# Dockerfile sets HOMEASSISTANT_TOKEN=""). Fixes #886.
|
|
721
|
+
if not os.getenv("HOMEASSISTANT_TOKEN"):
|
|
722
|
+
from ha_mcp.config import OAUTH_MODE_TOKEN
|
|
723
|
+
|
|
724
|
+
os.environ["HOMEASSISTANT_TOKEN"] = OAUTH_MODE_TOKEN
|
|
725
|
+
|
|
713
726
|
# Configure logging for OAuth mode
|
|
714
727
|
log_level = os.getenv("LOG_LEVEL", "INFO").upper()
|
|
715
728
|
_setup_logging(log_level, force=True)
|
|
@@ -791,9 +804,7 @@ async def _run_oauth_server(ha_url: str, base_url: str, port: int, path: str) ->
|
|
|
791
804
|
f"Starting OAuth-enabled MCP server with {len(tools)} tools on {base_url}{path}"
|
|
792
805
|
)
|
|
793
806
|
|
|
794
|
-
await _run_with_shutdown(
|
|
795
|
-
mcp.run_async(**_http_run_kwargs("http", port, path))
|
|
796
|
-
)
|
|
807
|
+
await _run_with_shutdown(mcp.run_async(**_http_run_kwargs("http", port, path)))
|
|
797
808
|
|
|
798
809
|
|
|
799
810
|
if __name__ == "__main__":
|