ha-mcp-dev 7.6.0.dev634__tar.gz → 7.6.0.dev635__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.6.0.dev634/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.6.0.dev635}/PKG-INFO +4 -4
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/README.md +3 -3
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/pyproject.toml +1 -1
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/settings_ui.py +21 -17
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635/src/ha_mcp_dev.egg-info}/PKG-INFO +4 -4
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/LICENSE +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/setup.cfg +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/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.
|
|
3
|
+
Version: 7.6.0.dev635
|
|
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-
|
|
41
|
+
<img src="https://img.shields.io/badge/tools-84-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>
|
|
@@ -181,7 +181,7 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
181
181
|
<details>
|
|
182
182
|
<!-- TOOLS_TABLE_START -->
|
|
183
183
|
|
|
184
|
-
<summary><b>Complete Tool List (
|
|
184
|
+
<summary><b>Complete Tool List (84 tools)</b></summary>
|
|
185
185
|
|
|
186
186
|
| Category | Tools |
|
|
187
187
|
|----------|-------|
|
|
@@ -198,7 +198,7 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
198
198
|
| **Entity Registry** | `ha_get_entity_exposure`, `ha_get_entity`, `ha_remove_entity`, `ha_set_entity` |
|
|
199
199
|
| **Files** | `ha_delete_file` *(beta)*, `ha_list_files` *(beta)*, `ha_read_file` *(beta)*, `ha_write_file` *(beta)* |
|
|
200
200
|
| **Groups** | `ha_config_list_groups`, `ha_config_remove_group`, `ha_config_set_group` |
|
|
201
|
-
| **HACS** | `
|
|
201
|
+
| **HACS** | `ha_get_hacs_info`, `ha_manage_hacs` |
|
|
202
202
|
| **Helper Entities** | `ha_config_list_helpers`, `ha_config_set_helper`, `ha_remove_helpers_integrations` |
|
|
203
203
|
| **History & Statistics** | `ha_get_automation_traces`, `ha_get_history`, `ha_get_logs` |
|
|
204
204
|
| **Integrations** | `ha_get_integration`, `ha_get_system_health`, `ha_set_integration_enabled` |
|
|
@@ -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-84-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>
|
|
@@ -151,7 +151,7 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
151
151
|
<details>
|
|
152
152
|
<!-- TOOLS_TABLE_START -->
|
|
153
153
|
|
|
154
|
-
<summary><b>Complete Tool List (
|
|
154
|
+
<summary><b>Complete Tool List (84 tools)</b></summary>
|
|
155
155
|
|
|
156
156
|
| Category | Tools |
|
|
157
157
|
|----------|-------|
|
|
@@ -168,7 +168,7 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
168
168
|
| **Entity Registry** | `ha_get_entity_exposure`, `ha_get_entity`, `ha_remove_entity`, `ha_set_entity` |
|
|
169
169
|
| **Files** | `ha_delete_file` *(beta)*, `ha_list_files` *(beta)*, `ha_read_file` *(beta)*, `ha_write_file` *(beta)* |
|
|
170
170
|
| **Groups** | `ha_config_list_groups`, `ha_config_remove_group`, `ha_config_set_group` |
|
|
171
|
-
| **HACS** | `
|
|
171
|
+
| **HACS** | `ha_get_hacs_info`, `ha_manage_hacs` |
|
|
172
172
|
| **Helper Entities** | `ha_config_list_helpers`, `ha_config_set_helper`, `ha_remove_helpers_integrations` |
|
|
173
173
|
| **History & Statistics** | `ha_get_automation_traces`, `ha_get_history`, `ha_get_logs` |
|
|
174
174
|
| **Integrations** | `ha_get_integration`, `ha_get_system_health`, `ha_set_integration_enabled` |
|
|
@@ -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.
|
|
7
|
+
version = "7.6.0.dev635"
|
|
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"
|
|
@@ -1618,7 +1618,7 @@ function render() {
|
|
|
1618
1618
|
`<span class="group-count">${groupEnabled}/${tools.length} enabled</span>` +
|
|
1619
1619
|
`</div>` +
|
|
1620
1620
|
`<label class="switch group-master" title="Enable/disable all tools in this group">` +
|
|
1621
|
-
`<input type="checkbox" ${anyEnabled ? 'checked' : ''} ${toggleable.length === 0 ? 'disabled' : ''}>` +
|
|
1621
|
+
`<input type="checkbox" name="tool-group:${escapeHtml(tag)}" ${anyEnabled ? 'checked' : ''} ${toggleable.length === 0 ? 'disabled' : ''}>` +
|
|
1622
1622
|
`<span class="slider"></span>` +
|
|
1623
1623
|
`</label>`;
|
|
1624
1624
|
|
|
@@ -1722,20 +1722,20 @@ function render() {
|
|
|
1722
1722
|
`</div>` +
|
|
1723
1723
|
`<div class="tool-toggles">` +
|
|
1724
1724
|
`<div class="toggle-group">` +
|
|
1725
|
-
`<label class="switch"><input type="checkbox" data-tool="${escapeHtml(t.name)}" data-field="enabled" ` +
|
|
1725
|
+
`<label class="switch"><input type="checkbox" name="tool:${escapeHtml(t.name)}:enabled" data-tool="${escapeHtml(t.name)}" data-field="enabled" ` +
|
|
1726
1726
|
`${isEnabled ? 'checked' : ''} ${lockEnabled ? 'disabled' : ''}>` +
|
|
1727
1727
|
`<span class="slider"></span></label>` +
|
|
1728
1728
|
`<span>enabled</span>` +
|
|
1729
1729
|
`</div>` +
|
|
1730
1730
|
`<div class="toggle-group ${!isEnabled ? 'disabled-toggle' : ''}">` +
|
|
1731
|
-
`<label class="switch"><input type="checkbox" data-tool="${escapeHtml(t.name)}" data-field="pinned" ` +
|
|
1731
|
+
`<label class="switch"><input type="checkbox" name="tool:${escapeHtml(t.name)}:pinned" data-tool="${escapeHtml(t.name)}" data-field="pinned" ` +
|
|
1732
1732
|
`${isPinned ? 'checked' : ''} ${lockPinned ? 'disabled' : ''}>` +
|
|
1733
1733
|
`<span class="slider"></span></label>` +
|
|
1734
1734
|
`<span>pinned</span>` +
|
|
1735
1735
|
`</div>` +
|
|
1736
1736
|
`<div class="toggle-group ${(policyState.enabled && isEnabled) ? '' : 'disabled-toggle'}" ` +
|
|
1737
1737
|
`title="${policyState.enabled ? '' : 'Enable Tool Security Policies in addon config first.'}">` +
|
|
1738
|
-
`<label class="switch"><input type="checkbox" data-tool="${escapeHtml(t.name)}" data-field="gated" ` +
|
|
1738
|
+
`<label class="switch"><input type="checkbox" name="tool:${escapeHtml(t.name)}:gated" data-tool="${escapeHtml(t.name)}" data-field="gated" ` +
|
|
1739
1739
|
`${policyState.gatedTools.has(t.name) ? 'checked' : ''} ` +
|
|
1740
1740
|
`${(policyState.enabled && isEnabled) ? '' : 'disabled'}>` +
|
|
1741
1741
|
`<span class="slider"></span></label>` +
|
|
@@ -1926,16 +1926,16 @@ function renderBackupConfig() {
|
|
|
1926
1926
|
row.className = 'backup-field';
|
|
1927
1927
|
let controlHtml;
|
|
1928
1928
|
if (typeof f.value === 'boolean') {
|
|
1929
|
-
controlHtml = `<input type="checkbox" data-field="${escapeHtml(f.field)}" ${f.value ? 'checked' : ''} ${f.editable ? '' : 'disabled'}>`;
|
|
1929
|
+
controlHtml = `<input type="checkbox" name="backup:${escapeHtml(f.field)}" data-field="${escapeHtml(f.field)}" ${f.value ? 'checked' : ''} ${f.editable ? '' : 'disabled'}>`;
|
|
1930
1930
|
} else if (typeof f.value === 'string') {
|
|
1931
1931
|
// Path / freeform string fields (auto_backup_dir).
|
|
1932
|
-
controlHtml = `<input type="text" data-field="${escapeHtml(f.field)}" value="${escapeHtml(String(f.value ?? ''))}" ${f.editable ? '' : 'disabled'}>`;
|
|
1932
|
+
controlHtml = `<input type="text" name="backup:${escapeHtml(f.field)}" data-field="${escapeHtml(f.field)}" value="${escapeHtml(String(f.value ?? ''))}" ${f.editable ? '' : 'disabled'}>`;
|
|
1933
1933
|
} else {
|
|
1934
1934
|
let min = 1;
|
|
1935
1935
|
let max = 10000;
|
|
1936
1936
|
if (f.field === 'auto_backup_throttle_minutes') { min = 0; max = 1440; }
|
|
1937
1937
|
else if (f.field === 'auto_backup_calendar_lookahead_days') { min = 1; max = 365; }
|
|
1938
|
-
controlHtml = `<input type="number" data-field="${escapeHtml(f.field)}" value="${Number(f.value)}" min="${min}" max="${max}" ${f.editable ? '' : 'disabled'}>`;
|
|
1938
|
+
controlHtml = `<input type="number" name="backup:${escapeHtml(f.field)}" data-field="${escapeHtml(f.field)}" value="${Number(f.value)}" min="${min}" max="${max}" ${f.editable ? '' : 'disabled'}>`;
|
|
1939
1939
|
}
|
|
1940
1940
|
let originMsg;
|
|
1941
1941
|
if (f.origin === 'env') {
|
|
@@ -2396,6 +2396,7 @@ function renderFeatureFlags(flags) {
|
|
|
2396
2396
|
label.className = 'switch';
|
|
2397
2397
|
const input = document.createElement('input');
|
|
2398
2398
|
input.type = 'checkbox';
|
|
2399
|
+
input.name = 'feature:' + fieldName;
|
|
2399
2400
|
input.checked = !!f.value;
|
|
2400
2401
|
input.disabled = !f.editable || lockedByMaster;
|
|
2401
2402
|
input.addEventListener('change', () => {
|
|
@@ -2444,6 +2445,7 @@ function renderFeatureFlags(flags) {
|
|
|
2444
2445
|
} else if (f.type === 'int') {
|
|
2445
2446
|
const input = document.createElement('input');
|
|
2446
2447
|
input.type = 'number';
|
|
2448
|
+
input.name = 'feature:' + fieldName;
|
|
2447
2449
|
input.value = f.value;
|
|
2448
2450
|
if (typeof f.min === 'number') input.min = f.min;
|
|
2449
2451
|
if (typeof f.max === 'number') input.max = f.max;
|
|
@@ -2514,6 +2516,7 @@ function renderYamlPackagesSubRows(flags, parentEl, masterOn, parentOn) {
|
|
|
2514
2516
|
label.className = 'switch';
|
|
2515
2517
|
const input = document.createElement('input');
|
|
2516
2518
|
input.type = 'checkbox';
|
|
2519
|
+
input.name = 'feature:' + fieldName;
|
|
2517
2520
|
input.checked = !!f.value;
|
|
2518
2521
|
input.disabled = !f.editable || lockedByGate;
|
|
2519
2522
|
input.addEventListener('change', () => {
|
|
@@ -2605,6 +2608,7 @@ function renderCodeModeSubRows(parentEl, masterOn, codeModeOn) {
|
|
|
2605
2608
|
}
|
|
2606
2609
|
inputEl.disabled = disabled;
|
|
2607
2610
|
inputEl.dataset.advField = f.field;
|
|
2611
|
+
inputEl.name = 'adv:' + f.field;
|
|
2608
2612
|
inputEl.addEventListener('change', () => {
|
|
2609
2613
|
let v;
|
|
2610
2614
|
if (f.type === 'int') v = parseInt(inputEl.value, 10);
|
|
@@ -2817,15 +2821,15 @@ function renderPolicyCard(toolName, rule) {
|
|
|
2817
2821
|
'<div class="policy-predicate-form" style="display:none;">' +
|
|
2818
2822
|
'<div class="policy-form-row">' +
|
|
2819
2823
|
'<label class="policy-form-label">Argument:</label>' +
|
|
2820
|
-
'<select class="policy-predicate-path-select">' +
|
|
2824
|
+
'<select name="policy:predicate-path" class="policy-predicate-path-select">' +
|
|
2821
2825
|
'<option value="">(loading...)</option>' +
|
|
2822
2826
|
'</select>' +
|
|
2823
|
-
'<input type="text" class="policy-predicate-path-custom" ' +
|
|
2827
|
+
'<input type="text" name="policy:predicate-path-custom" class="policy-predicate-path-custom" ' +
|
|
2824
2828
|
'placeholder="e.g. args.color_temp" style="display:none">' +
|
|
2825
2829
|
'</div>' +
|
|
2826
2830
|
'<div class="policy-form-row">' +
|
|
2827
2831
|
'<label class="policy-form-label">Match when:</label>' +
|
|
2828
|
-
'<select class="policy-predicate-op">' +
|
|
2832
|
+
'<select name="policy:predicate-op" class="policy-predicate-op">' +
|
|
2829
2833
|
'<option value="exists">is present (any value)</option>' +
|
|
2830
2834
|
'<option value="eq">equals</option>' +
|
|
2831
2835
|
'<option value="neq">does NOT equal</option>' +
|
|
@@ -2850,7 +2854,7 @@ function renderPolicyCard(toolName, rule) {
|
|
|
2850
2854
|
'</div>' +
|
|
2851
2855
|
'<div class="policy-rule-lifetime">' +
|
|
2852
2856
|
'<label>Remember approval for:' +
|
|
2853
|
-
'<input type="number" min="0" max="1440" class="policy-remember-minutes" ' +
|
|
2857
|
+
'<input type="number" name="policy:remember-minutes" min="0" max="1440" class="policy-remember-minutes" ' +
|
|
2854
2858
|
'value="' + (rule.remember_minutes || 0) + '">' +
|
|
2855
2859
|
'minutes (0 = single-shot)' +
|
|
2856
2860
|
'</label>' +
|
|
@@ -3084,7 +3088,7 @@ function renderPolicyCard(toolName, rule) {
|
|
|
3084
3088
|
const existingArr = Array.isArray(existingValue)
|
|
3085
3089
|
? existingValue
|
|
3086
3090
|
: (existingValue !== undefined && existingValue !== null ? [existingValue] : []);
|
|
3087
|
-
let html = '<select class="policy-predicate-value-control"' +
|
|
3091
|
+
let html = '<select name="policy:predicate-value" class="policy-predicate-value-control"' +
|
|
3088
3092
|
(isMulti ? ' multiple size="6" style="min-width:220px"' : '') +
|
|
3089
3093
|
'>';
|
|
3090
3094
|
if (!isMulti) {
|
|
@@ -3114,7 +3118,7 @@ function renderPolicyCard(toolName, rule) {
|
|
|
3114
3118
|
const initial = (existingValue === undefined || existingValue === null)
|
|
3115
3119
|
? ''
|
|
3116
3120
|
: JSON.stringify(existingValue);
|
|
3117
|
-
valueSlotEl.innerHTML = '<input type="text" ' +
|
|
3121
|
+
valueSlotEl.innerHTML = '<input type="text" name="policy:predicate-value" ' +
|
|
3118
3122
|
'class="policy-predicate-value-control policy-predicate-value" ' +
|
|
3119
3123
|
'placeholder="' + escapeHtml(placeholder) + '" ' +
|
|
3120
3124
|
'value="' + escapeHtml(initial) + '">';
|
|
@@ -3643,22 +3647,22 @@ function renderAdvancedSection(containerId, fields) {
|
|
|
3643
3647
|
const meta = ADVANCED_FIELD_META[f.field] || { label: f.field, help: '' };
|
|
3644
3648
|
let controlHtml;
|
|
3645
3649
|
if (f.choices) {
|
|
3646
|
-
controlHtml = `<select data-adv-field="${escapeHtml(f.field)}" ${f.editable ? '' : 'disabled'}>` +
|
|
3650
|
+
controlHtml = `<select name="adv:${escapeHtml(f.field)}" data-adv-field="${escapeHtml(f.field)}" ${f.editable ? '' : 'disabled'}>` +
|
|
3647
3651
|
f.choices.map(c =>
|
|
3648
3652
|
`<option value="${escapeHtml(c)}" ${String(f.value) === c ? 'selected' : ''}>${escapeHtml(c)}</option>`
|
|
3649
3653
|
).join('') +
|
|
3650
3654
|
'</select>';
|
|
3651
3655
|
} else if (f.type === 'bool') {
|
|
3652
|
-
controlHtml = `<input type="checkbox" data-adv-field="${escapeHtml(f.field)}" ${f.value ? 'checked' : ''} ${f.editable ? '' : 'disabled'}>`;
|
|
3656
|
+
controlHtml = `<input type="checkbox" name="adv:${escapeHtml(f.field)}" data-adv-field="${escapeHtml(f.field)}" ${f.value ? 'checked' : ''} ${f.editable ? '' : 'disabled'}>`;
|
|
3653
3657
|
} else if (f.type === 'int' || f.type === 'float') {
|
|
3654
|
-
controlHtml = `<input type="number" data-adv-field="${escapeHtml(f.field)}" value="${Number(f.value)}" ` +
|
|
3658
|
+
controlHtml = `<input type="number" name="adv:${escapeHtml(f.field)}" data-adv-field="${escapeHtml(f.field)}" value="${Number(f.value)}" ` +
|
|
3655
3659
|
(f.min !== undefined ? `min="${f.min}" ` : '') +
|
|
3656
3660
|
(f.max !== undefined ? `max="${f.max}" ` : '') +
|
|
3657
3661
|
(f.type === 'float' ? 'step="0.1" ' : '') +
|
|
3658
3662
|
(f.editable ? '' : 'disabled') + '>';
|
|
3659
3663
|
} else {
|
|
3660
3664
|
// str
|
|
3661
|
-
controlHtml = `<input type="text" data-adv-field="${escapeHtml(f.field)}" value="${escapeHtml(String(f.value ?? ''))}" ${f.editable ? '' : 'disabled'}>`;
|
|
3665
|
+
controlHtml = `<input type="text" name="adv:${escapeHtml(f.field)}" data-adv-field="${escapeHtml(f.field)}" value="${escapeHtml(String(f.value ?? ''))}" ${f.editable ? '' : 'disabled'}>`;
|
|
3662
3666
|
}
|
|
3663
3667
|
let originMsg = '';
|
|
3664
3668
|
if (f.origin === 'env') {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ha-mcp-dev
|
|
3
|
-
Version: 7.6.0.
|
|
3
|
+
Version: 7.6.0.dev635
|
|
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-
|
|
41
|
+
<img src="https://img.shields.io/badge/tools-84-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>
|
|
@@ -181,7 +181,7 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
181
181
|
<details>
|
|
182
182
|
<!-- TOOLS_TABLE_START -->
|
|
183
183
|
|
|
184
|
-
<summary><b>Complete Tool List (
|
|
184
|
+
<summary><b>Complete Tool List (84 tools)</b></summary>
|
|
185
185
|
|
|
186
186
|
| Category | Tools |
|
|
187
187
|
|----------|-------|
|
|
@@ -198,7 +198,7 @@ Spend less time configuring, more time enjoying your smart home.
|
|
|
198
198
|
| **Entity Registry** | `ha_get_entity_exposure`, `ha_get_entity`, `ha_remove_entity`, `ha_set_entity` |
|
|
199
199
|
| **Files** | `ha_delete_file` *(beta)*, `ha_list_files` *(beta)*, `ha_read_file` *(beta)*, `ha_write_file` *(beta)* |
|
|
200
200
|
| **Groups** | `ha_config_list_groups`, `ha_config_remove_group`, `ha_config_set_group` |
|
|
201
|
-
| **HACS** | `
|
|
201
|
+
| **HACS** | `ha_get_hacs_info`, `ha_manage_hacs` |
|
|
202
202
|
| **Helper Entities** | `ha_config_list_helpers`, `ha_config_set_helper`, `ha_remove_helpers_integrations` |
|
|
203
203
|
| **History & Statistics** | `ha_get_automation_traces`, `ha_get_history`, `ha_get_logs` |
|
|
204
204
|
| **Integrations** | `ha_get_integration`, `ha_get_system_health`, `ha_set_integration_enabled` |
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/best_practice_checker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_entry_flow.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/tools_voice_assistant.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/tools/validation_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/transforms/lite_docstrings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp/utils/kill_signal_diagnostics.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.6.0.dev634 → ha_mcp_dev-7.6.0.dev635}/src/ha_mcp_dev.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|