ha-mcp-dev 7.9.0.dev753__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.dev753/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.9.0.dev754}/PKG-INFO +1 -1
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/pyproject.toml +1 -1
- {ha_mcp_dev-7.9.0.dev753 → 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.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/AGENTS.md +2 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +2 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/README.md +3 -1
- {ha_mcp_dev-7.9.0.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → ha_mcp_dev-7.9.0.dev754/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/SOURCES.txt +2 -0
- ha_mcp_dev-7.9.0.dev753/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -21
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/LICENSE +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/README.md +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/setup.cfg +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.9.0.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.9.0.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → 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.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → ha_mcp_dev-7.9.0.dev754}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.9.0.dev753 → 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"
|
|
@@ -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.dev753 → 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.dev753 → 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.dev753 → 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 | — |
|