ha-mcp-dev 7.12.3.dev1932__tar.gz → 7.12.3.dev1937__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.12.3.dev1932/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.12.3.dev1937}/PKG-INFO +1 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/pyproject.toml +1 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/server.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_tools_meta.py +10 -2
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/backup.py +5 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_addons.py +2 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_areas.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_blueprints.py +6 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_bug_report.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_calendar.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_camera.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_categories.py +7 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_code.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_automations.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_dashboards.py +11 -2
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_helpers.py +6 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_scenes.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_scripts.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_dashboard_screenshot.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_dev.py +10 -2
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_energy.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_entities.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_filesystem.py +33 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_groups.py +7 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_hacs.py +2 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_history.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_integrations.py +7 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_labels.py +7 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_mcp_component.py +5 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_radio.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_registry.py +7 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_resources.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_search.py +3 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_service.py +16 -3
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_services.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_system.py +11 -2
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_themes.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_todo.py +12 -2
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_traces.py +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_utility.py +2 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_voice_assistant.py +2 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_yaml_config.py +1 -0
- ha_mcp_dev-7.12.3.dev1937/src/ha_mcp/tools/tools_yaml_read.py +336 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_zones.py +12 -2
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/transforms/categorized_search.py +7 -7
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/LICENSE +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/README.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/setup.cfg +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/settings.js +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/visibility/resolver.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/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.12.3.
|
|
7
|
+
version = "7.12.3.dev1937"
|
|
8
8
|
description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
# Upper bound widened to <3.15 so the package installs on Home Assistant's
|
|
@@ -1349,6 +1349,7 @@ class HomeAssistantSmartMCPServer(EnhancedToolsMixin):
|
|
|
1349
1349
|
name=SKILL_TOOL_NAME,
|
|
1350
1350
|
description=tool_description,
|
|
1351
1351
|
annotations={
|
|
1352
|
+
"openWorldHint": False,
|
|
1352
1353
|
"readOnlyHint": True,
|
|
1353
1354
|
"idempotentHint": True,
|
|
1354
1355
|
"title": "Get Home Assistant Best Practices Skill Guide",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/settings_ui/_tools_meta.py
RENAMED
|
@@ -89,8 +89,9 @@ TRANSFORM_GENERATED_TOOLS: dict[str, ToolStub] = {}
|
|
|
89
89
|
# won't appear in local_provider._list_tools(), so we inject stub entries
|
|
90
90
|
# into the settings UI so users discover the tool exists and how to enable
|
|
91
91
|
# it. Keep this dict in sync with the ``"beta"`` tag added to each tool's
|
|
92
|
-
# source file (tools_yaml_config.py,
|
|
93
|
-
# tools_code.py) — a future rename or removal needs to
|
|
92
|
+
# source file (tools_yaml_config.py, tools_yaml_read.py, tools_filesystem.py,
|
|
93
|
+
# tools_mcp_component.py, tools_code.py) — a future rename or removal needs to
|
|
94
|
+
# land in both places.
|
|
94
95
|
FEATURE_GATED_TOOLS: dict[str, ToolStub] = {
|
|
95
96
|
"ha_config_set_yaml": {
|
|
96
97
|
"title": "Set YAML Config",
|
|
@@ -99,6 +100,13 @@ FEATURE_GATED_TOOLS: dict[str, ToolStub] = {
|
|
|
99
100
|
"disabled_by": "enable_yaml_config_editing",
|
|
100
101
|
"destructiveHint": True,
|
|
101
102
|
},
|
|
103
|
+
"ha_config_get_yaml": {
|
|
104
|
+
"title": "Read YAML Config Fragment",
|
|
105
|
+
"primary_tag": "System",
|
|
106
|
+
"description": "Read the YAML fragment under a key in a config file, or find which file defines it.",
|
|
107
|
+
"disabled_by": "enable_filesystem_tools",
|
|
108
|
+
"readOnlyHint": True,
|
|
109
|
+
},
|
|
102
110
|
"ha_manage_custom_tool": {
|
|
103
111
|
"title": "Custom Tool",
|
|
104
112
|
"primary_tag": "System",
|
|
@@ -1054,7 +1054,11 @@ def register_backup_tools(
|
|
|
1054
1054
|
@mcp.tool(
|
|
1055
1055
|
description=manage_backup_description,
|
|
1056
1056
|
tags={"System"},
|
|
1057
|
-
annotations={
|
|
1057
|
+
annotations={
|
|
1058
|
+
"openWorldHint": False,
|
|
1059
|
+
"destructiveHint": True,
|
|
1060
|
+
"title": "Manage Backups",
|
|
1061
|
+
},
|
|
1058
1062
|
)
|
|
1059
1063
|
@log_tool_usage
|
|
1060
1064
|
async def ha_manage_backup(
|
|
@@ -2572,6 +2572,7 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
2572
2572
|
@mcp.tool(
|
|
2573
2573
|
tags={"Add-ons"},
|
|
2574
2574
|
annotations={
|
|
2575
|
+
"openWorldHint": True,
|
|
2575
2576
|
"idempotentHint": True,
|
|
2576
2577
|
"readOnlyHint": True,
|
|
2577
2578
|
"title": "Get Add-ons",
|
|
@@ -2660,6 +2661,7 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
2660
2661
|
@mcp.tool(
|
|
2661
2662
|
tags={"Add-ons"},
|
|
2662
2663
|
annotations={
|
|
2664
|
+
"openWorldHint": True,
|
|
2663
2665
|
"destructiveHint": True,
|
|
2664
2666
|
"idempotentHint": False,
|
|
2665
2667
|
"readOnlyHint": False,
|
|
@@ -139,6 +139,7 @@ class AreaTools:
|
|
|
139
139
|
name="ha_list_floors_areas",
|
|
140
140
|
tags={"Areas & Floors"},
|
|
141
141
|
annotations={
|
|
142
|
+
"openWorldHint": False,
|
|
142
143
|
"idempotentHint": True,
|
|
143
144
|
"readOnlyHint": True,
|
|
144
145
|
"title": "List Floors and Areas",
|
|
@@ -390,6 +391,7 @@ class AreaTools:
|
|
|
390
391
|
name="ha_set_area_or_floor",
|
|
391
392
|
tags={"Areas & Floors"},
|
|
392
393
|
annotations={
|
|
394
|
+
"openWorldHint": False,
|
|
393
395
|
"destructiveHint": True,
|
|
394
396
|
"title": "Create or Update Area or Floor",
|
|
395
397
|
},
|
|
@@ -640,6 +642,7 @@ class AreaTools:
|
|
|
640
642
|
name="ha_remove_area_or_floor",
|
|
641
643
|
tags={"Areas & Floors"},
|
|
642
644
|
annotations={
|
|
645
|
+
"openWorldHint": False,
|
|
643
646
|
"destructiveHint": True,
|
|
644
647
|
"idempotentHint": True,
|
|
645
648
|
"title": "Remove Area or Floor",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_blueprints.py
RENAMED
|
@@ -76,6 +76,7 @@ class BlueprintTools:
|
|
|
76
76
|
name="ha_get_blueprint",
|
|
77
77
|
tags={"Blueprints"},
|
|
78
78
|
annotations={
|
|
79
|
+
"openWorldHint": True,
|
|
79
80
|
"idempotentHint": True,
|
|
80
81
|
"readOnlyHint": True,
|
|
81
82
|
"title": "Get Blueprint",
|
|
@@ -224,7 +225,11 @@ class BlueprintTools:
|
|
|
224
225
|
@tool(
|
|
225
226
|
name="ha_import_blueprint",
|
|
226
227
|
tags={"Blueprints"},
|
|
227
|
-
annotations={
|
|
228
|
+
annotations={
|
|
229
|
+
"openWorldHint": True,
|
|
230
|
+
"destructiveHint": True,
|
|
231
|
+
"title": "Import Blueprint",
|
|
232
|
+
},
|
|
228
233
|
)
|
|
229
234
|
@log_tool_usage
|
|
230
235
|
async def ha_import_blueprint(
|
|
@@ -43,6 +43,7 @@ class CalendarTools:
|
|
|
43
43
|
name="ha_config_get_calendar_events",
|
|
44
44
|
tags={"Calendar"},
|
|
45
45
|
annotations={
|
|
46
|
+
"openWorldHint": False,
|
|
46
47
|
"idempotentHint": True,
|
|
47
48
|
"readOnlyHint": True,
|
|
48
49
|
"title": "Get Calendar Events",
|
|
@@ -282,6 +283,7 @@ class CalendarTools:
|
|
|
282
283
|
name="ha_config_set_calendar_event",
|
|
283
284
|
tags={"Calendar"},
|
|
284
285
|
annotations={
|
|
286
|
+
"openWorldHint": False,
|
|
285
287
|
"destructiveHint": True,
|
|
286
288
|
"title": "Create or Update Calendar Event",
|
|
287
289
|
},
|
|
@@ -426,6 +428,7 @@ class CalendarTools:
|
|
|
426
428
|
name="ha_config_remove_calendar_event",
|
|
427
429
|
tags={"Calendar"},
|
|
428
430
|
annotations={
|
|
431
|
+
"openWorldHint": False,
|
|
429
432
|
"destructiveHint": True,
|
|
430
433
|
"idempotentHint": True,
|
|
431
434
|
"title": "Remove Calendar Event",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_categories.py
RENAMED
|
@@ -38,6 +38,7 @@ class CategoryTools:
|
|
|
38
38
|
name="ha_config_get_category",
|
|
39
39
|
tags={"Labels & Categories"},
|
|
40
40
|
annotations={
|
|
41
|
+
"openWorldHint": False,
|
|
41
42
|
"idempotentHint": True,
|
|
42
43
|
"readOnlyHint": True,
|
|
43
44
|
"title": "Get Category",
|
|
@@ -170,7 +171,11 @@ class CategoryTools:
|
|
|
170
171
|
@tool(
|
|
171
172
|
name="ha_config_set_category",
|
|
172
173
|
tags={"Labels & Categories"},
|
|
173
|
-
annotations={
|
|
174
|
+
annotations={
|
|
175
|
+
"openWorldHint": False,
|
|
176
|
+
"destructiveHint": True,
|
|
177
|
+
"title": "Create or Update Category",
|
|
178
|
+
},
|
|
174
179
|
)
|
|
175
180
|
@with_auto_backup(
|
|
176
181
|
domain="category",
|
|
@@ -313,6 +318,7 @@ class CategoryTools:
|
|
|
313
318
|
name="ha_config_remove_category",
|
|
314
319
|
tags={"Labels & Categories"},
|
|
315
320
|
annotations={
|
|
321
|
+
"openWorldHint": False,
|
|
316
322
|
"destructiveHint": True,
|
|
317
323
|
"idempotentHint": True,
|
|
318
324
|
"title": "Remove Category",
|
|
@@ -1289,6 +1289,7 @@ def register_code_tools(mcp: Any, client: Any, **kwargs: Any) -> None:
|
|
|
1289
1289
|
@mcp.tool(
|
|
1290
1290
|
tags={"System", "beta"},
|
|
1291
1291
|
annotations={
|
|
1292
|
+
"openWorldHint": False,
|
|
1292
1293
|
"title": "Custom Tool",
|
|
1293
1294
|
"destructiveHint": True,
|
|
1294
1295
|
"idempotentHint": False,
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_automations.py
RENAMED
|
@@ -340,6 +340,7 @@ class AutomationConfigTools:
|
|
|
340
340
|
name="ha_config_get_automation",
|
|
341
341
|
tags={"Automations"},
|
|
342
342
|
annotations={
|
|
343
|
+
"openWorldHint": False,
|
|
343
344
|
"idempotentHint": True,
|
|
344
345
|
"readOnlyHint": True,
|
|
345
346
|
"title": "Get Automation Config",
|
|
@@ -450,6 +451,7 @@ class AutomationConfigTools:
|
|
|
450
451
|
name="ha_config_set_automation",
|
|
451
452
|
tags={"Automations"},
|
|
452
453
|
annotations={
|
|
454
|
+
"openWorldHint": False,
|
|
453
455
|
"destructiveHint": True,
|
|
454
456
|
"title": "Create or Update Automation",
|
|
455
457
|
},
|
|
@@ -1291,6 +1293,7 @@ class AutomationConfigTools:
|
|
|
1291
1293
|
name="ha_config_remove_automation",
|
|
1292
1294
|
tags={"Automations"},
|
|
1293
1295
|
annotations={
|
|
1296
|
+
"openWorldHint": False,
|
|
1294
1297
|
"destructiveHint": True,
|
|
1295
1298
|
"idempotentHint": True,
|
|
1296
1299
|
"title": "Remove Automation",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_dashboards.py
RENAMED
|
@@ -1259,6 +1259,7 @@ class DashboardConfigTools:
|
|
|
1259
1259
|
name="ha_config_get_dashboard",
|
|
1260
1260
|
tags={"Dashboards"},
|
|
1261
1261
|
annotations={
|
|
1262
|
+
"openWorldHint": False,
|
|
1262
1263
|
"destructiveHint": False,
|
|
1263
1264
|
"idempotentHint": True,
|
|
1264
1265
|
"title": "Get Dashboard",
|
|
@@ -1815,7 +1816,11 @@ class DashboardConfigTools:
|
|
|
1815
1816
|
@tool(
|
|
1816
1817
|
name="ha_config_set_dashboard",
|
|
1817
1818
|
tags={"Dashboards"},
|
|
1818
|
-
annotations={
|
|
1819
|
+
annotations={
|
|
1820
|
+
"openWorldHint": False,
|
|
1821
|
+
"destructiveHint": True,
|
|
1822
|
+
"title": "Create or Update Dashboard",
|
|
1823
|
+
},
|
|
1819
1824
|
)
|
|
1820
1825
|
@with_auto_backup(domain="dashboard", id_param="url_path")
|
|
1821
1826
|
@log_tool_usage
|
|
@@ -2743,7 +2748,11 @@ class DashboardConfigTools:
|
|
|
2743
2748
|
@tool(
|
|
2744
2749
|
name="ha_config_delete_dashboard",
|
|
2745
2750
|
tags={"Dashboards"},
|
|
2746
|
-
annotations={
|
|
2751
|
+
annotations={
|
|
2752
|
+
"openWorldHint": False,
|
|
2753
|
+
"destructiveHint": True,
|
|
2754
|
+
"title": "Delete Dashboard",
|
|
2755
|
+
},
|
|
2747
2756
|
)
|
|
2748
2757
|
@with_auto_backup(domain="dashboard", id_param="url_path")
|
|
2749
2758
|
@log_tool_usage
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_helpers.py
RENAMED
|
@@ -3608,6 +3608,7 @@ class HelperConfigTools:
|
|
|
3608
3608
|
name="ha_config_list_helpers",
|
|
3609
3609
|
tags={"Helper Entities"},
|
|
3610
3610
|
annotations={
|
|
3611
|
+
"openWorldHint": False,
|
|
3611
3612
|
"idempotentHint": True,
|
|
3612
3613
|
"readOnlyHint": True,
|
|
3613
3614
|
"title": "List Helpers",
|
|
@@ -4021,7 +4022,11 @@ class HelperConfigTools:
|
|
|
4021
4022
|
@tool(
|
|
4022
4023
|
name="ha_config_set_helper",
|
|
4023
4024
|
tags={"Helper Entities"},
|
|
4024
|
-
annotations={
|
|
4025
|
+
annotations={
|
|
4026
|
+
"openWorldHint": False,
|
|
4027
|
+
"destructiveHint": True,
|
|
4028
|
+
"title": "Create or Update Helper",
|
|
4029
|
+
},
|
|
4025
4030
|
)
|
|
4026
4031
|
@with_auto_backup(
|
|
4027
4032
|
domain_fn=lambda kw: f"helper_{kw.get('helper_type', 'unknown')}",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_scenes.py
RENAMED
|
@@ -204,6 +204,7 @@ class ConfigSceneTools:
|
|
|
204
204
|
name="ha_config_get_scene",
|
|
205
205
|
tags={"Scenes"},
|
|
206
206
|
annotations={
|
|
207
|
+
"openWorldHint": False,
|
|
207
208
|
"idempotentHint": True,
|
|
208
209
|
"readOnlyHint": True,
|
|
209
210
|
"title": "Get Scene Config",
|
|
@@ -453,6 +454,7 @@ class ConfigSceneTools:
|
|
|
453
454
|
name="ha_config_set_scene",
|
|
454
455
|
tags={"Scenes"},
|
|
455
456
|
annotations={
|
|
457
|
+
"openWorldHint": False,
|
|
456
458
|
"destructiveHint": True,
|
|
457
459
|
"title": "Create or Update Scene",
|
|
458
460
|
},
|
|
@@ -976,6 +978,7 @@ class ConfigSceneTools:
|
|
|
976
978
|
name="ha_config_remove_scene",
|
|
977
979
|
tags={"Scenes"},
|
|
978
980
|
annotations={
|
|
981
|
+
"openWorldHint": False,
|
|
979
982
|
"destructiveHint": True,
|
|
980
983
|
"idempotentHint": True,
|
|
981
984
|
"title": "Remove Scene",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_config_scripts.py
RENAMED
|
@@ -99,6 +99,7 @@ class ConfigScriptTools:
|
|
|
99
99
|
name="ha_config_get_script",
|
|
100
100
|
tags={"Scripts"},
|
|
101
101
|
annotations={
|
|
102
|
+
"openWorldHint": False,
|
|
102
103
|
"idempotentHint": True,
|
|
103
104
|
"readOnlyHint": True,
|
|
104
105
|
"title": "Get Script Config",
|
|
@@ -409,6 +410,7 @@ class ConfigScriptTools:
|
|
|
409
410
|
name="ha_config_set_script",
|
|
410
411
|
tags={"Scripts"},
|
|
411
412
|
annotations={
|
|
413
|
+
"openWorldHint": False,
|
|
412
414
|
"destructiveHint": True,
|
|
413
415
|
"title": "Create or Update Script",
|
|
414
416
|
},
|
|
@@ -860,6 +862,7 @@ class ConfigScriptTools:
|
|
|
860
862
|
name="ha_config_remove_script",
|
|
861
863
|
tags={"Scripts"},
|
|
862
864
|
annotations={
|
|
865
|
+
"openWorldHint": False,
|
|
863
866
|
"destructiveHint": True,
|
|
864
867
|
"idempotentHint": True,
|
|
865
868
|
"title": "Remove Script",
|
|
@@ -456,7 +456,11 @@ class DevTools:
|
|
|
456
456
|
@tool(
|
|
457
457
|
name="ha_dev_manage_settings",
|
|
458
458
|
tags={"Developer"},
|
|
459
|
-
annotations={
|
|
459
|
+
annotations={
|
|
460
|
+
"openWorldHint": False,
|
|
461
|
+
"title": "Manage Server Settings (dev)",
|
|
462
|
+
"destructiveHint": True,
|
|
463
|
+
},
|
|
460
464
|
)
|
|
461
465
|
@log_tool_usage
|
|
462
466
|
async def ha_dev_manage_settings(
|
|
@@ -698,7 +702,11 @@ class DevTools:
|
|
|
698
702
|
@tool(
|
|
699
703
|
name="ha_dev_manage_server",
|
|
700
704
|
tags={"Developer"},
|
|
701
|
-
annotations={
|
|
705
|
+
annotations={
|
|
706
|
+
"openWorldHint": True,
|
|
707
|
+
"title": "Manage MCP Server (dev)",
|
|
708
|
+
"destructiveHint": True,
|
|
709
|
+
},
|
|
702
710
|
)
|
|
703
711
|
@log_tool_usage
|
|
704
712
|
async def ha_dev_manage_server(
|
|
@@ -1388,6 +1388,7 @@ class EntityTools:
|
|
|
1388
1388
|
name="ha_set_entity",
|
|
1389
1389
|
tags={"Entity Registry"},
|
|
1390
1390
|
annotations={
|
|
1391
|
+
"openWorldHint": False,
|
|
1391
1392
|
"destructiveHint": True,
|
|
1392
1393
|
"idempotentHint": True,
|
|
1393
1394
|
"title": "Set Entity",
|
|
@@ -1723,6 +1724,7 @@ class EntityTools:
|
|
|
1723
1724
|
name="ha_get_entity",
|
|
1724
1725
|
tags={"Entity Registry"},
|
|
1725
1726
|
annotations={
|
|
1727
|
+
"openWorldHint": False,
|
|
1726
1728
|
"readOnlyHint": True,
|
|
1727
1729
|
"idempotentHint": True,
|
|
1728
1730
|
"title": "Get Entity",
|
|
@@ -2014,6 +2016,7 @@ class EntityTools:
|
|
|
2014
2016
|
name="ha_remove_entity",
|
|
2015
2017
|
tags={"Entity Registry"},
|
|
2016
2018
|
annotations={
|
|
2019
|
+
"openWorldHint": False,
|
|
2017
2020
|
"destructiveHint": True,
|
|
2018
2021
|
"idempotentHint": True,
|
|
2019
2022
|
"title": "Remove Entity",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_filesystem.py
RENAMED
|
@@ -74,7 +74,14 @@ CALLER_TOKEN_BOOTSTRAP_SERVICE = "get_caller_token"
|
|
|
74
74
|
# ENABLE_YAML_EDIT_CONFIRM, default on); a <0.11.0 component's strict
|
|
75
75
|
# (PREVENT_EXTRA) schema rejects the unknown arg with a raw voluptuous
|
|
76
76
|
# error — the gate surfaces an actionable "update" prompt instead.
|
|
77
|
-
|
|
77
|
+
# 1.1.0: the YAML fragment read (#1788) needs two component behaviours that a
|
|
78
|
+
# <1.1.0 component reports no differently from a missing key. ``list_files``
|
|
79
|
+
# only now honours the configured packages folder, so ha_config_get_yaml's
|
|
80
|
+
# glob/discovery would otherwise come back "Path not allowed" instead of
|
|
81
|
+
# enumerating packages; and ``include_parsed`` on ``read_file`` is a new arg
|
|
82
|
+
# that an older strict (PREVENT_EXTRA) schema rejects with a raw voluptuous
|
|
83
|
+
# error. The gate turns both into the actionable "update" prompt.
|
|
84
|
+
MIN_COMPONENT_VERSION = "1.1.0"
|
|
78
85
|
|
|
79
86
|
|
|
80
87
|
def _version_tuple(version: str) -> tuple[int, ...]:
|
|
@@ -371,6 +378,7 @@ class FilesystemTools:
|
|
|
371
378
|
name="ha_list_files",
|
|
372
379
|
tags={"Files", "beta"},
|
|
373
380
|
annotations={
|
|
381
|
+
"openWorldHint": False,
|
|
374
382
|
"readOnlyHint": True,
|
|
375
383
|
"title": "List Files",
|
|
376
384
|
},
|
|
@@ -478,6 +486,7 @@ class FilesystemTools:
|
|
|
478
486
|
name="ha_read_file",
|
|
479
487
|
tags={"Files", "beta"},
|
|
480
488
|
annotations={
|
|
489
|
+
"openWorldHint": False,
|
|
481
490
|
"readOnlyHint": True,
|
|
482
491
|
"title": "Read File",
|
|
483
492
|
},
|
|
@@ -509,6 +518,19 @@ class FilesystemTools:
|
|
|
509
518
|
),
|
|
510
519
|
),
|
|
511
520
|
] = None,
|
|
521
|
+
yaml_path: Annotated[
|
|
522
|
+
str | None,
|
|
523
|
+
Field(
|
|
524
|
+
default=None,
|
|
525
|
+
description=(
|
|
526
|
+
"Dotted YAML key path (e.g. 'alert2', 'mqtt.sensor'). When "
|
|
527
|
+
"set, the response also carries 'subtree': the round-trip "
|
|
528
|
+
"text of just that key's value. To look a key up across "
|
|
529
|
+
"packages/*.yaml, or to get it as structured data, use "
|
|
530
|
+
"ha_config_get_yaml instead."
|
|
531
|
+
),
|
|
532
|
+
),
|
|
533
|
+
] = None,
|
|
512
534
|
) -> dict[str, Any]:
|
|
513
535
|
"""Read a file from the Home Assistant config directory.
|
|
514
536
|
|
|
@@ -539,6 +561,9 @@ class FilesystemTools:
|
|
|
539
561
|
- size: File size in bytes
|
|
540
562
|
- modified: Last modification timestamp
|
|
541
563
|
- path: The file path that was read
|
|
564
|
+
- subtree: Round-trip text of the `yaml_path` key, when that arg is set
|
|
565
|
+
(null when the key is absent). Comments and HA tags (`!secret`,
|
|
566
|
+
`!include`) survive as written — a `!secret` is never resolved.
|
|
542
567
|
|
|
543
568
|
**Example:**
|
|
544
569
|
```python
|
|
@@ -547,6 +572,9 @@ class FilesystemTools:
|
|
|
547
572
|
|
|
548
573
|
# Read last 100 lines of log
|
|
549
574
|
result = ha_read_file(path="home-assistant.log", tail_lines=100)
|
|
575
|
+
|
|
576
|
+
# Read just the alert2 block out of a package file
|
|
577
|
+
result = ha_read_file(path="packages/alert2.yaml", yaml_path="alert2")
|
|
550
578
|
```
|
|
551
579
|
"""
|
|
552
580
|
try:
|
|
@@ -557,6 +585,8 @@ class FilesystemTools:
|
|
|
557
585
|
service_data: dict[str, Any] = {"path": path}
|
|
558
586
|
if tail_lines is not None:
|
|
559
587
|
service_data["tail_lines"] = tail_lines
|
|
588
|
+
if yaml_path is not None:
|
|
589
|
+
service_data["yaml_path"] = yaml_path
|
|
560
590
|
|
|
561
591
|
# Call the custom component service
|
|
562
592
|
result = await call_mcp_tools_service(
|
|
@@ -593,6 +623,7 @@ class FilesystemTools:
|
|
|
593
623
|
name="ha_write_file",
|
|
594
624
|
tags={"Files", "beta"},
|
|
595
625
|
annotations={
|
|
626
|
+
"openWorldHint": False,
|
|
596
627
|
"destructiveHint": True,
|
|
597
628
|
"title": "Write File",
|
|
598
629
|
},
|
|
@@ -735,6 +766,7 @@ class FilesystemTools:
|
|
|
735
766
|
name="ha_delete_file",
|
|
736
767
|
tags={"Files", "beta"},
|
|
737
768
|
annotations={
|
|
769
|
+
"openWorldHint": False,
|
|
738
770
|
"destructiveHint": True,
|
|
739
771
|
"title": "Delete File",
|
|
740
772
|
},
|
|
@@ -136,6 +136,7 @@ class GroupTools:
|
|
|
136
136
|
name="ha_config_list_groups",
|
|
137
137
|
tags={"Groups"},
|
|
138
138
|
annotations={
|
|
139
|
+
"openWorldHint": False,
|
|
139
140
|
"idempotentHint": True,
|
|
140
141
|
"readOnlyHint": True,
|
|
141
142
|
"title": "List Groups",
|
|
@@ -210,7 +211,11 @@ class GroupTools:
|
|
|
210
211
|
@tool(
|
|
211
212
|
name="ha_config_set_group",
|
|
212
213
|
tags={"Groups"},
|
|
213
|
-
annotations={
|
|
214
|
+
annotations={
|
|
215
|
+
"openWorldHint": False,
|
|
216
|
+
"destructiveHint": True,
|
|
217
|
+
"title": "Create or Update Group",
|
|
218
|
+
},
|
|
214
219
|
)
|
|
215
220
|
@with_auto_backup(domain="group", id_param="object_id")
|
|
216
221
|
@log_tool_usage
|
|
@@ -390,6 +395,7 @@ class GroupTools:
|
|
|
390
395
|
name="ha_config_remove_group",
|
|
391
396
|
tags={"Groups"},
|
|
392
397
|
annotations={
|
|
398
|
+
"openWorldHint": False,
|
|
393
399
|
"destructiveHint": True,
|
|
394
400
|
"idempotentHint": True,
|
|
395
401
|
"title": "Remove Group",
|
|
@@ -111,6 +111,7 @@ class HacsTools:
|
|
|
111
111
|
name="ha_get_hacs_info",
|
|
112
112
|
tags={"HACS"},
|
|
113
113
|
annotations={
|
|
114
|
+
"openWorldHint": True,
|
|
114
115
|
"idempotentHint": True,
|
|
115
116
|
"readOnlyHint": True,
|
|
116
117
|
"title": "Get HACS Info",
|
|
@@ -214,6 +215,7 @@ class HacsTools:
|
|
|
214
215
|
name="ha_manage_hacs",
|
|
215
216
|
tags={"HACS"},
|
|
216
217
|
annotations={
|
|
218
|
+
"openWorldHint": True,
|
|
217
219
|
"destructiveHint": True,
|
|
218
220
|
"title": "Manage HACS",
|
|
219
221
|
},
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_integrations.py
RENAMED
|
@@ -292,6 +292,7 @@ class IntegrationTools:
|
|
|
292
292
|
name="ha_get_integration",
|
|
293
293
|
tags={"Integrations"},
|
|
294
294
|
annotations={
|
|
295
|
+
"openWorldHint": False,
|
|
295
296
|
"idempotentHint": True,
|
|
296
297
|
"readOnlyHint": True,
|
|
297
298
|
"title": "Get Integration",
|
|
@@ -1188,7 +1189,11 @@ class IntegrationTools:
|
|
|
1188
1189
|
@tool(
|
|
1189
1190
|
name="ha_set_integration",
|
|
1190
1191
|
tags={"Integrations"},
|
|
1191
|
-
annotations={
|
|
1192
|
+
annotations={
|
|
1193
|
+
"openWorldHint": False,
|
|
1194
|
+
"destructiveHint": True,
|
|
1195
|
+
"title": "Set Integration",
|
|
1196
|
+
},
|
|
1192
1197
|
)
|
|
1193
1198
|
@with_auto_backup(domain="integration", id_param="entry_id")
|
|
1194
1199
|
@log_tool_usage
|
|
@@ -1412,6 +1417,7 @@ class IntegrationTools:
|
|
|
1412
1417
|
name="ha_remove_helpers_integrations",
|
|
1413
1418
|
tags={"Helper Entities", "Integrations"},
|
|
1414
1419
|
annotations={
|
|
1420
|
+
"openWorldHint": False,
|
|
1415
1421
|
"destructiveHint": True,
|
|
1416
1422
|
"idempotentHint": True,
|
|
1417
1423
|
"title": "Remove Helper or Integration",
|
|
@@ -35,6 +35,7 @@ class LabelTools:
|
|
|
35
35
|
name="ha_config_get_label",
|
|
36
36
|
tags={"Labels & Categories"},
|
|
37
37
|
annotations={
|
|
38
|
+
"openWorldHint": False,
|
|
38
39
|
"idempotentHint": True,
|
|
39
40
|
"readOnlyHint": True,
|
|
40
41
|
"title": "Get Label",
|
|
@@ -151,7 +152,11 @@ class LabelTools:
|
|
|
151
152
|
@tool(
|
|
152
153
|
name="ha_config_set_label",
|
|
153
154
|
tags={"Labels & Categories"},
|
|
154
|
-
annotations={
|
|
155
|
+
annotations={
|
|
156
|
+
"openWorldHint": False,
|
|
157
|
+
"destructiveHint": True,
|
|
158
|
+
"title": "Create or Update Label",
|
|
159
|
+
},
|
|
155
160
|
)
|
|
156
161
|
@with_auto_backup(domain="label", id_param="label_id")
|
|
157
162
|
@log_tool_usage
|
|
@@ -289,6 +294,7 @@ class LabelTools:
|
|
|
289
294
|
name="ha_config_remove_label",
|
|
290
295
|
tags={"Labels & Categories"},
|
|
291
296
|
annotations={
|
|
297
|
+
"openWorldHint": False,
|
|
292
298
|
"destructiveHint": True,
|
|
293
299
|
"idempotentHint": True,
|
|
294
300
|
"title": "Remove Label",
|
{ha_mcp_dev-7.12.3.dev1932 → ha_mcp_dev-7.12.3.dev1937}/src/ha_mcp/tools/tools_mcp_component.py
RENAMED
|
@@ -253,7 +253,11 @@ class McpComponentTools:
|
|
|
253
253
|
@tool(
|
|
254
254
|
name="ha_install_mcp_tools",
|
|
255
255
|
tags={"Utilities", "beta"},
|
|
256
|
-
annotations={
|
|
256
|
+
annotations={
|
|
257
|
+
"openWorldHint": True,
|
|
258
|
+
"destructiveHint": True,
|
|
259
|
+
"title": "Install MCP Tools Component",
|
|
260
|
+
},
|
|
257
261
|
)
|
|
258
262
|
@log_tool_usage
|
|
259
263
|
async def ha_install_mcp_tools(
|
|
@@ -90,6 +90,7 @@ class RadioTools:
|
|
|
90
90
|
name="ha_manage_radio",
|
|
91
91
|
tags={"Radio Management", "Z-Wave", "Zigbee", "Matter", "Thread"},
|
|
92
92
|
annotations={
|
|
93
|
+
"openWorldHint": False,
|
|
93
94
|
"destructiveHint": True,
|
|
94
95
|
"idempotentHint": False,
|
|
95
96
|
"title": "Manage Radios (Z-Wave / Zigbee / Matter / Thread)",
|