ha-mcp-dev 7.8.1.dev716__tar.gz → 7.8.1.dev717__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.8.1.dev716/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.8.1.dev717}/PKG-INFO +1 -1
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/pyproject.toml +1 -1
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/read_only.py +2 -2
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_addons.py +39 -12
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/LICENSE +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/README.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/setup.cfg +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/settings.css +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/settings.js +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/settings_ui.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/tests/test_env_manager.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "7.8.1.
|
|
7
|
+
version = "7.8.1.dev717"
|
|
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"
|
|
@@ -93,8 +93,8 @@ def _addon_write(args: dict[str, Any]) -> str | None:
|
|
|
93
93
|
return "array_patch modification"
|
|
94
94
|
if args.get("websocket"):
|
|
95
95
|
# A WebSocket session's initial message can command mutations
|
|
96
|
-
# (e.g. ESPHome /compile
|
|
97
|
-
# as a read — fail closed.
|
|
96
|
+
# (e.g. an ESPHome firmware/compile or devices/update_config command),
|
|
97
|
+
# so it is not statically classifiable as a read — fail closed.
|
|
98
98
|
return "WebSocket proxy session"
|
|
99
99
|
method = str(args.get("method") or "GET").strip().upper()
|
|
100
100
|
if method != "GET":
|
|
@@ -958,7 +958,7 @@ async def _call_addon_ws(
|
|
|
958
958
|
Args:
|
|
959
959
|
client: Home Assistant REST client
|
|
960
960
|
slug: Add-on slug (e.g., "<prefix>_esphome")
|
|
961
|
-
path: WebSocket endpoint path (e.g., "/
|
|
961
|
+
path: WebSocket endpoint path (e.g., "/ws" for the ESPHome dashboard's command channel)
|
|
962
962
|
body: Message to send after connecting (JSON-encoded if dict, raw if string)
|
|
963
963
|
timeout: Max seconds to wait for messages (default 60)
|
|
964
964
|
debug: Include diagnostic info
|
|
@@ -2622,7 +2622,7 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
2622
2622
|
body: Annotated[
|
|
2623
2623
|
dict[str, Any] | str | None,
|
|
2624
2624
|
Field(
|
|
2625
|
-
description="Proxy mode only. Request body for POST/PUT/PATCH. Pass a JSON object or JSON string.",
|
|
2625
|
+
description="Proxy mode only. Request body for POST/PUT/PATCH — or, with websocket=True, the initial WebSocket message. Pass a JSON object or JSON string.",
|
|
2626
2626
|
default=None,
|
|
2627
2627
|
),
|
|
2628
2628
|
] = None,
|
|
@@ -2658,17 +2658,20 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
2658
2658
|
websocket: Annotated[
|
|
2659
2659
|
bool,
|
|
2660
2660
|
Field(
|
|
2661
|
-
description="Proxy mode only. Use WebSocket instead of HTTP
|
|
2662
|
-
"(e.g
|
|
2663
|
-
"
|
|
2661
|
+
description="Proxy mode only. Use WebSocket instead of HTTP — for an add-on's "
|
|
2662
|
+
"WebSocket API (e.g. the ESPHome dashboard's '/ws' command channel; see the "
|
|
2663
|
+
"docstring's ESPHome section). Sends 'body' as the initial message, collects "
|
|
2664
|
+
"responses. Default: false.",
|
|
2664
2665
|
default=False,
|
|
2665
2666
|
),
|
|
2666
2667
|
] = False,
|
|
2667
2668
|
wait_for_close: Annotated[
|
|
2668
2669
|
bool,
|
|
2669
2670
|
Field(
|
|
2670
|
-
description="Proxy mode only. WebSocket: True: wait for server to close
|
|
2671
|
-
"
|
|
2671
|
+
description="Proxy mode only. WebSocket: True: wait for the server to close the stream "
|
|
2672
|
+
"(run-to-completion ops like an ESPHome compile/validate). False: return after the first "
|
|
2673
|
+
"response batch — use for a one-shot command/response or a bounded log capture on a channel "
|
|
2674
|
+
"that stays open (e.g. ESPHome '/ws'). Default: true.",
|
|
2672
2675
|
default=True,
|
|
2673
2676
|
),
|
|
2674
2677
|
] = True,
|
|
@@ -2839,6 +2842,29 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
2839
2842
|
share Home Assistant's container network (i.e. only the HAOS addon).
|
|
2840
2843
|
Use ha_get_addon(slug="...") to discover available ports and endpoints.
|
|
2841
2844
|
|
|
2845
|
+
**ESPHome Device Builder dashboard (current rewrite):** config and log
|
|
2846
|
+
access is a WebSocket JSON-command API, NOT REST. The legacy endpoints
|
|
2847
|
+
are gone — `GET /edit?configuration=` now returns the dashboard SPA, and
|
|
2848
|
+
the old `/compile` `/validate` `/logs` WebSocket paths (which took
|
|
2849
|
+
`{"type": "spawn", ...}` bodies) reject the upgrade (HTTP 200). Use
|
|
2850
|
+
instead:
|
|
2851
|
+
- HTTP `GET /devices` → JSON list of configured devices; each entry's
|
|
2852
|
+
`configuration` field is the YAML filename to pass below.
|
|
2853
|
+
- WebSocket `path="/ws"` with body
|
|
2854
|
+
`{"command": "<cmd>", "message_id": "1", "args": {...}}`. The server
|
|
2855
|
+
sends a `server_info` message first, then one reply per `message_id`.
|
|
2856
|
+
Wire-confirmed commands: `devices/get_config` `{configuration}` → raw
|
|
2857
|
+
YAML (in the reply's `result`); `devices/logs` (stream)
|
|
2858
|
+
`{configuration, port: "OTA"}` → live device logs. Also exposed by the
|
|
2859
|
+
dashboard frontend (command/arg names not wire-tested here):
|
|
2860
|
+
`devices/update_config` `{configuration, content}` → save,
|
|
2861
|
+
`devices/validate`, `firmware/compile`.
|
|
2862
|
+
- The `/ws` channel stays open, so for a one-shot read or a bounded log
|
|
2863
|
+
capture pass `wait_for_close=False` with `message_limit` (and
|
|
2864
|
+
`message_offset` to skip the server_info / config-banner preamble).
|
|
2865
|
+
Reach the dashboard through Ingress — omit `port`; direct `port=` does
|
|
2866
|
+
not route to it.
|
|
2867
|
+
|
|
2842
2868
|
**Array-patch mode** (when path AND array_patch are provided):
|
|
2843
2869
|
Atomic "GET array, mutate, POST array" workflow for addon APIs whose write
|
|
2844
2870
|
contract is "send the whole resource collection back". Operations are applied
|
|
@@ -2847,8 +2873,8 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
2847
2873
|
full array. Designed for Node-RED /flows and similar endpoints.
|
|
2848
2874
|
|
|
2849
2875
|
**Response shaping (proxy mode):**
|
|
2850
|
-
- WebSocket streams can be noisy (
|
|
2851
|
-
config
|
|
2876
|
+
- WebSocket streams can be noisy (e.g. the ESPHome dashboard's devices/logs
|
|
2877
|
+
dumps the device's full config banner on connect). By default, `summarize=True` collapses long runs of
|
|
2852
2878
|
non-signal messages into short elision markers; INFO/WARNING/ERROR/exit
|
|
2853
2879
|
lines always pass through. Pagination via `message_offset` / `message_limit`
|
|
2854
2880
|
works on the raw collected list before summarize runs.
|
|
@@ -2881,9 +2907,10 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
2881
2907
|
- Set boot mode: ha_manage_addon(slug="...", boot="manual")
|
|
2882
2908
|
- Call HTTP API: ha_manage_addon(slug="...", path="/api/events")
|
|
2883
2909
|
- Direct port: ha_manage_addon(slug="...", path="/flows", port=1880)
|
|
2884
|
-
-
|
|
2885
|
-
-
|
|
2886
|
-
-
|
|
2910
|
+
- ESPHome list devices (HTTP): ha_manage_addon(slug="<prefix>_esphome", path="/devices")
|
|
2911
|
+
- ESPHome read a device's YAML (WS one-shot): ha_manage_addon(slug="<prefix>_esphome", path="/ws", websocket=True, wait_for_close=False, message_limit=2, body={"command": "devices/get_config", "message_id": "1", "args": {"configuration": "device.yaml"}})
|
|
2912
|
+
- ESPHome live logs (WS, bounded): ha_manage_addon(slug="<prefix>_esphome", path="/ws", websocket=True, wait_for_close=False, message_limit=60, body={"command": "devices/logs", "message_id": "1", "args": {"configuration": "device.yaml", "port": "OTA"}})
|
|
2913
|
+
- Filter WS errors only: ha_manage_addon(slug="...", path="/ws", websocket=True, python_transform="response = [m for m in response if 'ERROR' in str(m) or 'WARN' in str(m)]")
|
|
2887
2914
|
- HTTP subset: ha_manage_addon(slug="...", path="/flows", python_transform="response = [f['id'] for f in response]")
|
|
2888
2915
|
- Array-patch (Node-RED, rename a node):
|
|
2889
2916
|
ha_manage_addon(
|
|
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.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/dashboard_screenshot/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/dashboard_screenshot/capture.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/dashboard_screenshot/provision.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
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/resources/skills-vendor/LICENSE
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/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
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_entities.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_overview.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_scenes.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/smart_search/_scoring.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tool_search_hint_middleware.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
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/tools_dashboard_screenshot.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
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/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.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/tools/validation_middleware.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp/transforms/categorized_search.py
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/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
|
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/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.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/src/ha_mcp_dev.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{ha_mcp_dev-7.8.1.dev716 → ha_mcp_dev-7.8.1.dev717}/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
|