ha-mcp-dev 7.9.0.dev752__tar.gz → 7.9.0.dev754__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.9.0.dev752/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.9.0.dev754}/PKG-INFO +1 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/pyproject.toml +1 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/config.py +13 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +1 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/AGENTS.md +2 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +2 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/README.md +3 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +24 -17
- ha_mcp_dev-7.9.0.dev754/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +537 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +358 -9
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +182 -15
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +120 -7
- ha_mcp_dev-7.9.0.dev754/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +92 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +7 -6
- ha_mcp_dev-7.9.0.dev754/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +28 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/server.py +3 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/settings.js +14 -7
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/auto_backup.py +12 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_filesystem.py +7 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_yaml_config.py +77 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/SOURCES.txt +2 -0
- ha_mcp_dev-7.9.0.dev752/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -21
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/LICENSE +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/README.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/setup.cfg +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/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.9.0.
|
|
7
|
+
version = "7.9.0.dev754"
|
|
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"
|
|
@@ -155,6 +155,17 @@ class Settings(BaseSettings):
|
|
|
155
155
|
# files. Disabled by default; only for YAML-only features with no UI/API path.
|
|
156
156
|
enable_yaml_config_editing: bool = Field(False, alias="ENABLE_YAML_CONFIG_EDITING")
|
|
157
157
|
|
|
158
|
+
# Two-step confirmation for ha_config_set_yaml (#1720). When on (the
|
|
159
|
+
# default), the first edit call returns a unified diff preview plus a
|
|
160
|
+
# confirm token and writes NOTHING; the edit lands only when repeated
|
|
161
|
+
# with that token. Sub-toggle of enable_yaml_config_editing (nested
|
|
162
|
+
# beneath it in the UI). Default ON deliberately: the diff preview is
|
|
163
|
+
# what lets the calling agent catch collateral changes before they
|
|
164
|
+
# reach disk. Listed in BETA_FEATURE_FIELDS purely for the addon-mode
|
|
165
|
+
# override path; the master-off cascade forcing it False is moot
|
|
166
|
+
# because the yaml tool itself is unregistered then.
|
|
167
|
+
enable_yaml_edit_confirm: bool = Field(True, alias="ENABLE_YAML_EDIT_CONFIRM")
|
|
168
|
+
|
|
158
169
|
# Per-key gates for ``automation`` / ``script`` / ``scene`` under
|
|
159
170
|
# ``packages/*.yaml``. The custom component accepts these three
|
|
160
171
|
# PACKAGES_ONLY_YAML_KEYS unconditionally; ha-mcp's UI exposes a
|
|
@@ -604,6 +615,7 @@ FEATURE_FLAG_FIELDS: tuple[FeatureFlagField, ...] = (
|
|
|
604
615
|
# are name-disjoint per _validate_registries()).
|
|
605
616
|
FeatureFlagField("enable_mandatory_bps", "ENABLE_MANDATORY_BPS", bool),
|
|
606
617
|
FeatureFlagField("enable_yaml_config_editing", "ENABLE_YAML_CONFIG_EDITING", bool),
|
|
618
|
+
FeatureFlagField("enable_yaml_edit_confirm", "ENABLE_YAML_EDIT_CONFIRM", bool),
|
|
607
619
|
# Per-key sub-gates beneath enable_yaml_config_editing. Nested in
|
|
608
620
|
# the UI, dimmed when the parent is off. Also listed in
|
|
609
621
|
# BETA_FEATURE_FIELDS so they follow the same master-gate +
|
|
@@ -660,6 +672,7 @@ _FEATURE_FLAG_INT_BOUNDS: dict[str, tuple[int, int]] = {
|
|
|
660
672
|
# gate, never by the per-field iteration.
|
|
661
673
|
BETA_FEATURE_FIELDS: tuple[str, ...] = (
|
|
662
674
|
"enable_yaml_config_editing",
|
|
675
|
+
"enable_yaml_edit_confirm", # Default-ON safety sub-toggle; see field comment.
|
|
663
676
|
# Per-key sub-gates of enable_yaml_config_editing. Included here so
|
|
664
677
|
# they ride the same master gate + addon-mode override path as the
|
|
665
678
|
# other beta flags. Without this, the addon-mode short-circuit in
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "home-assistant-skills",
|
|
3
3
|
"owner": {
|
|
4
4
|
"name": "homeassistant-ai",
|
|
5
|
-
"email": ""
|
|
5
|
+
"email": "homeassistant-mcp@qc-h.net"
|
|
6
6
|
},
|
|
7
7
|
"metadata": {
|
|
8
8
|
"description": "Agent skills for Home Assistant: best practices for automations, helpers, templates, device control, and dashboards",
|
{ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/AGENTS.md
RENAMED
|
@@ -30,6 +30,8 @@ description: >
|
|
|
30
30
|
Constraints from CONTRIBUTING.md:
|
|
31
31
|
- Max **500 lines** per SKILL.md
|
|
32
32
|
- `metadata.version` must be `0` on new skills (do not edit manually)
|
|
33
|
+
- `name` must match `[a-z0-9-]+` and be ≤64 characters
|
|
34
|
+
- `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
|
|
33
35
|
- Reference files must be **one level deep** only (e.g. `references/example.yaml`)
|
|
34
36
|
- Use **forward slashes** in all file paths
|
|
35
37
|
- Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
|
{ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/CLAUDE.md
RENAMED
|
@@ -30,6 +30,8 @@ description: >
|
|
|
30
30
|
Constraints from CONTRIBUTING.md:
|
|
31
31
|
- Max **500 lines** per SKILL.md
|
|
32
32
|
- `metadata.version` must be `0` on new skills (do not edit manually)
|
|
33
|
+
- `name` must match `[a-z0-9-]+` and be ≤64 characters
|
|
34
|
+
- `description` frontmatter must be **≤1024 characters** (CI enforces this via `skills-ref validate`)
|
|
33
35
|
- Reference files must be **one level deep** only (e.g. `references/example.yaml`)
|
|
34
36
|
- Use **forward slashes** in all file paths
|
|
35
37
|
- Optional subdirectories: `references/` (additional docs), `scripts/` (utility scripts), `assets/` (static resources)
|
{ha_mcp_dev-7.9.0.dev752 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/README.md
RENAMED
|
@@ -31,7 +31,7 @@ Run each command separately inside Claude Code:
|
|
|
31
31
|
/plugin marketplace add homeassistant-ai/skills
|
|
32
32
|
```
|
|
33
33
|
```
|
|
34
|
-
/plugin install home-assistant-skills@
|
|
34
|
+
/plugin install home-assistant-skills@home-assistant-skills
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
Run `/reload-plugins` or restart Claude Code for the skill to take effect.
|
|
@@ -57,10 +57,12 @@ The `home-assistant-best-practices` skill includes:
|
|
|
57
57
|
| `references/template-guidelines.md` | When to use templates, when to avoid them, and sensor best practices |
|
|
58
58
|
| `references/yaml-only-integrations.md` | YAML-only integration types, post-edit actions (reload vs restart) |
|
|
59
59
|
| `references/device-control.md` | Service calls, entity_id vs device_id, Zigbee buttons |
|
|
60
|
+
| `references/scenes.md` | Scene authoring: config shape, snapshot/restore, snapshot-vs-script distinction |
|
|
60
61
|
| `references/dashboard-guide.md` | Dashboard layout, view types, sections, custom cards, CSS styling |
|
|
61
62
|
| `references/dashboard-cards.md` | Card type lookup and card-specific documentation |
|
|
62
63
|
| `references/domain-docs.md` | Integration and domain documentation for service calls, entity attributes |
|
|
63
64
|
| `references/examples.yaml` | Compound examples combining multiple best practices |
|
|
65
|
+
| `references/appdaemon.md` | AppDaemon apps: when to use vs. native HA, app structure, service calls, scheduling, error handling, safe refactoring impact |
|
|
64
66
|
|
|
65
67
|
## Contributing
|
|
66
68
|
|
|
@@ -1,27 +1,28 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: home-assistant-best-practices
|
|
3
3
|
description: >
|
|
4
|
-
Best practices for HA automations, helpers, scripts,
|
|
4
|
+
Best practices for HA automations, helpers, scripts, controls, and dashboards.
|
|
5
5
|
|
|
6
6
|
TRIGGER THIS SKILL WHEN:
|
|
7
|
-
- Creating
|
|
7
|
+
- Creating or editing automations, scripts, scenes, or dashboards
|
|
8
8
|
- Choosing between template sensors and built-in helpers
|
|
9
|
-
-
|
|
10
|
-
- Setting up Zigbee button/remote automations
|
|
9
|
+
- Restructuring triggers, conditions, or automation modes
|
|
10
|
+
- Setting up Zigbee button/remote automations
|
|
11
11
|
- Renaming entities or migrating device_id to entity_id
|
|
12
|
-
- Configuring dashboard cards or
|
|
13
|
-
- Looking up card types or domain
|
|
12
|
+
- Configuring dashboard cards or selecting helpers
|
|
13
|
+
- Looking up card types or domain docs
|
|
14
|
+
- Writing or reviewing AppDaemon apps
|
|
14
15
|
|
|
15
16
|
SYMPTOMS:
|
|
16
|
-
- Agent uses Jinja2 templates where native
|
|
17
|
+
- Agent uses Jinja2 templates where native options exist
|
|
17
18
|
- Agent uses device_id instead of entity_id
|
|
18
|
-
- Agent
|
|
19
|
-
-
|
|
20
|
-
- Agent hard-codes values or
|
|
21
|
-
- Agent edits
|
|
22
|
-
- Agent tells user to edit configuration.yaml for UI
|
|
19
|
+
- Agent changes entity IDs without checking consumers
|
|
20
|
+
- Wrong automation mode
|
|
21
|
+
- Agent hard-codes values or uses raw sensor over helper
|
|
22
|
+
- Agent edits .storage, writes YAML, or generates YAML snippets
|
|
23
|
+
- Agent tells user to edit configuration.yaml for UI integrations
|
|
23
24
|
metadata:
|
|
24
|
-
version:
|
|
25
|
+
version: 12
|
|
25
26
|
---
|
|
26
27
|
|
|
27
28
|
# Home Assistant Best Practices
|
|
@@ -88,7 +89,7 @@ See `references/device-control.md#zigbee-buttonremote-patterns`.
|
|
|
88
89
|
## Critical Anti-Patterns
|
|
89
90
|
|
|
90
91
|
| Anti-pattern | Use instead | Why | Reference |
|
|
91
|
-
|
|
92
|
+
|--------------|-------------|-----|-----------|
|
|
92
93
|
| `condition: template` with `float > 25` | `condition: numeric_state` | Validated at load, not runtime | `references/automation-patterns.md#native-conditions` |
|
|
93
94
|
| `wait_template: "{{ is_state(...) }}"` | `wait_for_trigger` with state trigger | Event-driven, not polling; waits for *change* (see `references/safe-refactoring.md#trigger-restructuring` for semantic differences) | `references/automation-patterns.md#wait-actions` |
|
|
94
95
|
| `device_id` in triggers | `entity_id` (or `device_ieee` for ZHA) | device_id breaks on re-add | `references/device-control.md#entity-id-vs-device-id` |
|
|
@@ -108,6 +109,10 @@ See `references/device-control.md#zigbee-buttonremote-patterns`.
|
|
|
108
109
|
| `vacuum.send_command` with vendor room IDs | `vacuum.clean_area` with HA `area_id` (if segments are mapped) | Uses native HA areas, works across integrations — but requires segment-to-area mapping in entity settings first | `references/device-control.md#vacuum-control` |
|
|
109
110
|
| Using `color_temp` (mireds) in light service calls | Use `color_temp_kelvin` | The `color_temp` parameter was removed in 2026.3; only Kelvin is supported | `references/device-control.md#lights` |
|
|
110
111
|
| Person/Device Tracker `entered_home`/`left_home` device triggers or `is_home`/`is_not_home` conditions | `state` trigger `to: home` / `to: not_home`, or `state` condition | These were removed in 2026.5 — state triggers and conditions are the correct replacements | `references/automation-patterns.md#presence-and-person-triggers-and-conditions-removed-in-20265` |
|
|
112
|
+
| Registering callbacks or calling `self.turn_on()`/`self.get_state()` in `__init__()` | Register everything in `initialize()` | Plugin connection not established during `__init__` — calls fail silently | `references/appdaemon.md#app-structure-and-lifecycle` |
|
|
113
|
+
| Calling `run_in` on repeated triggers without cancelling the previous handle | `cancel_timer(self._off_handle)` before each new `run_in` | Every trigger stacks an independent timer — devices toggle unpredictably | `references/appdaemon.md#scheduling-and-timers` |
|
|
114
|
+
| Storing persistent state in instance variables | Use HA `input_number`, `input_boolean`, or `input_text` helpers | Instance variables reset on app reload or daemon restart | `references/appdaemon.md#state-management-and-inter-app-communication` |
|
|
115
|
+
| Hardcoding entity IDs inside the class body | Pass entity IDs via `self.args` in `apps.yaml` | Hardcoded IDs prevent reuse and require code edits per installation | `references/appdaemon.md#appsyaml-configuration` |
|
|
111
116
|
|
|
112
117
|
---
|
|
113
118
|
|
|
@@ -118,12 +123,14 @@ Read these when you need detailed information:
|
|
|
118
123
|
| File | When to read | Key sections |
|
|
119
124
|
|------|--------------|--------------|
|
|
120
125
|
| `references/safe-refactoring.md` | Renaming entities, replacing helpers, restructuring automations, or any modification to existing config | `#universal-workflow`, `#entity-renames`, `#helper-replacements`, `#trigger-restructuring`, `#config-entry-data--blind-spots-for-entity-registry-renames`, `#storage-mode-dashboards-storagelovelace` |
|
|
121
|
-
| `references/automation-patterns.md` | Writing triggers, conditions, waits, or choosing automation modes; disabling automations | `#native-conditions`, `#trigger-types`, `#wait-actions`, `#automation-modes`, `#continue-on-error`, `#repeat-actions`, `#ifthen-vs-choose`, `#trigger-ids`, `#disabling-automations` |
|
|
122
|
-
| `references/helper-selection.md` | Deciding whether to use a built-in helper vs template sensor | `#menu-based-helpers`, `#numeric-aggregation`, `#rate-and-change`, `#time-based-tracking`, `#counting-and-timing`, `#scheduling`, `#entity-grouping`, `#data-smoothing`, `#random-values`, `#climate-control`, `#domain-conversion`, `#template-helpers`, `#decision-matrix` |
|
|
126
|
+
| `references/automation-patterns.md` | Writing triggers, conditions, waits, variables, or choosing automation modes; capturing action responses; documenting/annotating steps; disabling automations | `#native-conditions`, `#trigger-types`, `#wait-actions`, `#automation-modes`, `#continue-on-error`, `#stopping-a-sequence`, `#variables`, `#capturing-action-responses`, `#repeat-actions`, `#ifthen-vs-choose`, `#parallel-actions`, `#trigger-ids`, `#documenting-automations--scripts`, `#disabling-automations` |
|
|
127
|
+
| `references/helper-selection.md` | Deciding whether to use a built-in helper vs template sensor | `#how-helpers-are-created`, `#menu-based-helpers`, `#numeric-aggregation`, `#rate-and-change`, `#time-based-tracking`, `#counting-and-timing`, `#scheduling`, `#entity-grouping`, `#probabilistic-inference`, `#data-smoothing`, `#random-values`, `#climate-control`, `#domain-conversion`, `#template-helpers`, `#decision-matrix` |
|
|
123
128
|
| `references/template-guidelines.md` | Confirming templates ARE appropriate for a use case | `#when-templates-are-appropriate`, `#when-to-avoid-templates`, `#template-sensor-best-practices`, `#common-patterns`, `#error-handling` |
|
|
124
129
|
| `references/yaml-only-integrations.md` | Creating or editing YAML-only integrations that have no config flow (e.g. `command_line`, platform-based `mqtt`, `rest`) | `#yaml-only-integration-types`, `#post-edit-actions` |
|
|
125
130
|
| `references/device-control.md` | Writing service calls, Zigbee button automations, or using target: | `#entity-id-vs-device-id`, `#service-calls-best-practices`, `#zigbee-buttonremote-patterns`, `#domain-specific-patterns` |
|
|
126
|
-
| `references/
|
|
131
|
+
| `references/scenes.md` | Authoring or activating scenes; snapshot/restore patterns; snapshot-vs-script distinction | `#scene-config-shape`, `#activating-a-scene`, `#snapshot--restore-scenecreate`, `#apply-states-without-storing-sceneapply` |
|
|
132
|
+
| `references/dashboard-guide.md` | Designing or modifying Lovelace dashboards — layout, view types, strategies, sections, cards, badges, CSS styling, HACS | `#dashboard-structure`, `#view-types`, `#dashboard-strategies`, `#built-in-cards`, `#features`, `#badges`, `#custom-cards`, `#css-styling`, `#common-pitfalls` |
|
|
127
133
|
| `references/dashboard-cards.md` | Looking up available card types or fetching card-specific documentation | — |
|
|
128
134
|
| `references/domain-docs.md` | Looking up integration or domain documentation for service calls, entity attributes, or configuration | — |
|
|
129
135
|
| `references/examples.yaml` | Need compound examples combining multiple best practices | — |
|
|
136
|
+
| `references/appdaemon.md` | AppDaemon apps: when to use vs. native HA, app structure, service calls, scheduling, error handling, safe refactoring impact | — |
|