ha-mcp-dev 8.7.0.dev3059__tar.gz → 8.7.0.dev3060__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-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/PKG-INFO +1 -1
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/pyproject.toml +1 -1
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow.py +49 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_identity.py +35 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_reconfigure.py +3 -32
- ha_mcp_dev-8.7.0.dev3060/src/ha_mcp/tools/integration_entry_state.py +118 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/integration_reconfigure.py +4 -2
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_dev.py +1 -5
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_filesystem.py +1 -3
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_integrations.py +37 -110
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_service.py +5 -8
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_settings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/renamed_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server_tool_text.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/en.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings.html +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/validation_middleware.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.7.0.
|
|
7
|
+
version = "8.7.0.dev3060"
|
|
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.15"
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "8.7.0.
|
|
7
|
+
version = "8.7.0.dev3060"
|
|
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
|
|
@@ -756,6 +756,52 @@ async def config_entry_of_domain(
|
|
|
756
756
|
return config_entry
|
|
757
757
|
|
|
758
758
|
|
|
759
|
+
COMPONENT_DOMAIN = "ha_mcp_tools"
|
|
760
|
+
|
|
761
|
+
COMPONENT_ENTRY_SUGGESTIONS: tuple[str, ...] = (
|
|
762
|
+
"Manage it in the Home Assistant UI: Settings > Devices & services > "
|
|
763
|
+
+ "HA-MCP Custom Component (Configure for options; the entry's menu for "
|
|
764
|
+
+ "enable/disable, delete and debug logging).",
|
|
765
|
+
"Server settings and updates: with developer mode on, "
|
|
766
|
+
+ "ha_dev_manage_settings / ha_dev_manage_server.",
|
|
767
|
+
)
|
|
768
|
+
|
|
769
|
+
|
|
770
|
+
def is_component_domain(domain: object) -> bool:
|
|
771
|
+
"""Whether ``domain`` names ha-mcp's own ``ha_mcp_tools`` integration.
|
|
772
|
+
|
|
773
|
+
Core's integration lookup (config flows, log levels) is case-sensitive
|
|
774
|
+
today, so there a mixed-case or padded domain fails downstream anyway and
|
|
775
|
+
the normalisation is defence in depth. Core's service registry does
|
|
776
|
+
lowercase a domain, which is why ha_call_service's guard needs it.
|
|
777
|
+
"""
|
|
778
|
+
return isinstance(domain, str) and domain.strip().lower() == COMPONENT_DOMAIN
|
|
779
|
+
|
|
780
|
+
|
|
781
|
+
def refuse_component_entry(
|
|
782
|
+
domain: object, *, action: str, entry_id: str | None = None
|
|
783
|
+
) -> None:
|
|
784
|
+
"""Refuse ``action`` on a config entry of ha-mcp's own custom component.
|
|
785
|
+
|
|
786
|
+
Writing one of those entries reloads or alters the server answering the
|
|
787
|
+
call. The HA UI owns them, and the ``ha_dev_*`` tools defer writes that
|
|
788
|
+
would reload the running server (embedded mode), so the generic
|
|
789
|
+
integration tools must not become a bypass.
|
|
790
|
+
"""
|
|
791
|
+
if not is_component_domain(domain):
|
|
792
|
+
return
|
|
793
|
+
raise_tool_error(
|
|
794
|
+
create_error_response(
|
|
795
|
+
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
796
|
+
f"Cannot {action} ha-mcp's own '{COMPONENT_DOMAIN}' integration "
|
|
797
|
+
"with this tool: its config entries are the server's own and are "
|
|
798
|
+
"not managed through the generic integration tools.",
|
|
799
|
+
suggestions=list(COMPONENT_ENTRY_SUGGESTIONS),
|
|
800
|
+
context={"entry_id": entry_id, "domain": domain},
|
|
801
|
+
)
|
|
802
|
+
)
|
|
803
|
+
|
|
804
|
+
|
|
759
805
|
async def _update_config_entry_options(
|
|
760
806
|
client: Any,
|
|
761
807
|
entry_id: str,
|
|
@@ -767,6 +813,9 @@ async def _update_config_entry_options(
|
|
|
767
813
|
_reject_redaction_sentinels(config_dict)
|
|
768
814
|
config_entry = await config_entry_of_domain(client, entry_id, expected_domain)
|
|
769
815
|
actual_domain = config_entry.get("domain")
|
|
816
|
+
refuse_component_entry(
|
|
817
|
+
actual_domain, action="change the options of", entry_id=entry_id
|
|
818
|
+
)
|
|
770
819
|
|
|
771
820
|
flow_result = await client.start_options_flow(entry_id)
|
|
772
821
|
flow_id = flow_result.get("flow_id")
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_identity.py
RENAMED
|
@@ -9,6 +9,9 @@ against after.
|
|
|
9
9
|
|
|
10
10
|
Every read here raises rather than producing a half-filled identity: an empty
|
|
11
11
|
list means "the entry has none", never "we could not tell".
|
|
12
|
+
|
|
13
|
+
The manual rollback metadata a reconfigure reports alongside that identity is
|
|
14
|
+
built here too.
|
|
12
15
|
"""
|
|
13
16
|
|
|
14
17
|
import logging
|
|
@@ -508,3 +511,35 @@ def _verify_reconfigure_identity_fields(
|
|
|
508
511
|
expected=expected_identity,
|
|
509
512
|
status=ReconfigureStatus.APPLIED_IDENTITY_MISMATCH,
|
|
510
513
|
)
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
def build_reconfigure_rollback_metadata(
|
|
517
|
+
entry_id: str,
|
|
518
|
+
domain: str,
|
|
519
|
+
) -> dict[str, Any]:
|
|
520
|
+
"""Describe the manual rollback path for an existing config entry.
|
|
521
|
+
|
|
522
|
+
The snapshot the auto-backup layer captures is Home Assistant's config
|
|
523
|
+
entry fragment (``config_entries/get`` over WebSocket, which serializes
|
|
524
|
+
``ConfigEntry.as_json_fragment``). That fragment carries no ``data`` key,
|
|
525
|
+
so the entry's connection settings are not in it: the snapshot is audit
|
|
526
|
+
evidence, not an automatic endpoint rollback. An operator must repeat the
|
|
527
|
+
official reconfigure flow with the known previous values.
|
|
528
|
+
"""
|
|
529
|
+
return {
|
|
530
|
+
"strategy": "official_reconfigure_flow",
|
|
531
|
+
"automatic": False,
|
|
532
|
+
"operator_action_required": True,
|
|
533
|
+
"manual_required": True,
|
|
534
|
+
"manual_reason": "previous_config_unavailable",
|
|
535
|
+
"entry_id": entry_id,
|
|
536
|
+
"domain": domain,
|
|
537
|
+
"previous_config": None,
|
|
538
|
+
"backup_scope": "edits",
|
|
539
|
+
"backup_restore_supported": False,
|
|
540
|
+
"backup_restore_note": (
|
|
541
|
+
"The generic integration snapshot is audit evidence only; its shared "
|
|
542
|
+
"restore handler does not restore connection settings. Use the official "
|
|
543
|
+
"reconfigure flow instead."
|
|
544
|
+
),
|
|
545
|
+
}
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_reconfigure.py
RENAMED
|
@@ -24,6 +24,7 @@ from .component_config_entries import fetch_domain_unique_ids
|
|
|
24
24
|
from .config_entry_flow import (
|
|
25
25
|
_abort_flow_best_effort,
|
|
26
26
|
_reject_redaction_sentinels,
|
|
27
|
+
refuse_component_entry,
|
|
27
28
|
)
|
|
28
29
|
from .config_entry_flow_walker import (
|
|
29
30
|
POST_COMMIT_STATUSES,
|
|
@@ -40,6 +41,7 @@ from .config_entry_identity import (
|
|
|
40
41
|
_validated_config_entry_rows,
|
|
41
42
|
_verification_state,
|
|
42
43
|
_verify_reconfigure_identity_fields,
|
|
44
|
+
build_reconfigure_rollback_metadata,
|
|
43
45
|
cross_domain_warnings,
|
|
44
46
|
)
|
|
45
47
|
from .config_entry_reload_watch import (
|
|
@@ -70,38 +72,6 @@ class PreparedReconfigure:
|
|
|
70
72
|
warnings: list[str] = field(default_factory=list)
|
|
71
73
|
|
|
72
74
|
|
|
73
|
-
def build_reconfigure_rollback_metadata(
|
|
74
|
-
entry_id: str,
|
|
75
|
-
domain: str,
|
|
76
|
-
) -> dict[str, Any]:
|
|
77
|
-
"""Describe the manual rollback path for an existing config entry.
|
|
78
|
-
|
|
79
|
-
The snapshot the auto-backup layer captures is Home Assistant's config
|
|
80
|
-
entry fragment (``config_entries/get`` over WebSocket, which serializes
|
|
81
|
-
``ConfigEntry.as_json_fragment``). That fragment carries no ``data`` key,
|
|
82
|
-
so the entry's connection settings are not in it: the snapshot is audit
|
|
83
|
-
evidence, not an automatic endpoint rollback. An operator must repeat the
|
|
84
|
-
official reconfigure flow with the known previous values.
|
|
85
|
-
"""
|
|
86
|
-
return {
|
|
87
|
-
"strategy": "official_reconfigure_flow",
|
|
88
|
-
"automatic": False,
|
|
89
|
-
"operator_action_required": True,
|
|
90
|
-
"manual_required": True,
|
|
91
|
-
"manual_reason": "previous_config_unavailable",
|
|
92
|
-
"entry_id": entry_id,
|
|
93
|
-
"domain": domain,
|
|
94
|
-
"previous_config": None,
|
|
95
|
-
"backup_scope": "edits",
|
|
96
|
-
"backup_restore_supported": False,
|
|
97
|
-
"backup_restore_note": (
|
|
98
|
-
"The generic integration snapshot is audit evidence only; its shared "
|
|
99
|
-
"restore handler does not restore connection settings. Use the official "
|
|
100
|
-
"reconfigure flow instead."
|
|
101
|
-
),
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
|
|
105
75
|
def _raise_post_commit_verification_error(
|
|
106
76
|
error: ToolError,
|
|
107
77
|
*,
|
|
@@ -420,6 +390,7 @@ async def prepare_reconfigure_request(
|
|
|
420
390
|
context={"entry_id": validated_entry_id, "entry": entry},
|
|
421
391
|
)
|
|
422
392
|
)
|
|
393
|
+
refuse_component_entry(domain, action="reconfigure", entry_id=validated_entry_id)
|
|
423
394
|
if not entry.get("supports_reconfigure", False):
|
|
424
395
|
raise_tool_error(
|
|
425
396
|
create_error_response(
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""The enable/disable and log-level modes of ``ha_set_integration``.
|
|
2
|
+
|
|
3
|
+
Neither runs a config flow: each sends one mutating WebSocket command after
|
|
4
|
+
the own-entry check (enable/disable and log level by entry look the entry up
|
|
5
|
+
first), and both refuse ha-mcp's own ``ha_mcp_tools`` entries.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
from ..errors import ErrorCode, create_error_response
|
|
11
|
+
from .config_entry_flow import refuse_component_entry
|
|
12
|
+
from .helpers import raise_tool_error, ws_failure_code
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
async def set_log_level(
|
|
16
|
+
client: Any,
|
|
17
|
+
entry_id: str | None,
|
|
18
|
+
domain: str | None,
|
|
19
|
+
log_level: str,
|
|
20
|
+
*,
|
|
21
|
+
other_modes: bool,
|
|
22
|
+
) -> dict[str, Any]:
|
|
23
|
+
"""Set an integration's log level through ``logger/integration_log_level``."""
|
|
24
|
+
if other_modes or (domain is None) == (entry_id is None):
|
|
25
|
+
raise_tool_error(
|
|
26
|
+
create_error_response(
|
|
27
|
+
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
28
|
+
"log_level takes exactly one of 'domain' or 'entry_id' and "
|
|
29
|
+
"cannot be combined with config, enabled or reconfigure",
|
|
30
|
+
suggestions=[
|
|
31
|
+
"Example: ha_set_integration(domain='zha', log_level='DEBUG')",
|
|
32
|
+
],
|
|
33
|
+
context={"entry_id": entry_id, "domain": domain},
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
if entry_id is not None:
|
|
37
|
+
entry = await client.get_config_entry(entry_id)
|
|
38
|
+
domain = entry.get("domain")
|
|
39
|
+
refuse_component_entry(domain, action="set the log level of", entry_id=entry_id)
|
|
40
|
+
result = await client.send_websocket_message(
|
|
41
|
+
{
|
|
42
|
+
"type": "logger/integration_log_level",
|
|
43
|
+
"integration": domain,
|
|
44
|
+
# NOTSET is what the UI's Disable debug logging sends.
|
|
45
|
+
"level": "NOTSET" if log_level == "DEFAULT" else log_level,
|
|
46
|
+
"persistence": "once",
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
if not result.get("success"):
|
|
50
|
+
raise_tool_error(
|
|
51
|
+
create_error_response(
|
|
52
|
+
ws_failure_code(result),
|
|
53
|
+
f"Failed to set the log level for '{domain}': "
|
|
54
|
+
f"{result.get('error') or 'unknown error'}",
|
|
55
|
+
context={"domain": domain, "entry_id": entry_id},
|
|
56
|
+
)
|
|
57
|
+
)
|
|
58
|
+
return {
|
|
59
|
+
"success": True,
|
|
60
|
+
"action": "set_log_level",
|
|
61
|
+
"domain": domain,
|
|
62
|
+
"log_level": log_level,
|
|
63
|
+
"note": (
|
|
64
|
+
"Override cleared: the integration now logs at the inherited "
|
|
65
|
+
"default level; a level set for it in configuration.yaml returns "
|
|
66
|
+
"after the next restart."
|
|
67
|
+
if log_level == "DEFAULT"
|
|
68
|
+
else "Applies now and through the next Home Assistant restart."
|
|
69
|
+
),
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
async def set_entry_enabled(
|
|
74
|
+
client: Any, entry_id: str, enabled: bool
|
|
75
|
+
) -> dict[str, Any]:
|
|
76
|
+
"""Enable or disable a config entry via ``config_entries/disable``."""
|
|
77
|
+
entry = await client.get_config_entry(entry_id)
|
|
78
|
+
refuse_component_entry(
|
|
79
|
+
entry.get("domain"), action="enable or disable", entry_id=entry_id
|
|
80
|
+
)
|
|
81
|
+
message = {
|
|
82
|
+
"type": "config_entries/disable",
|
|
83
|
+
"entry_id": entry_id,
|
|
84
|
+
"disabled_by": None if enabled else "user",
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
result = await client.send_websocket_message(message)
|
|
88
|
+
|
|
89
|
+
if not result.get("success"):
|
|
90
|
+
error_msg = result.get("error", {})
|
|
91
|
+
if isinstance(error_msg, dict):
|
|
92
|
+
error_msg = error_msg.get("message", str(error_msg))
|
|
93
|
+
raise_tool_error(
|
|
94
|
+
create_error_response(
|
|
95
|
+
ErrorCode.SERVICE_CALL_FAILED,
|
|
96
|
+
f"Failed to {'enable' if enabled else 'disable'} integration: {error_msg}",
|
|
97
|
+
context={"entry_id": entry_id},
|
|
98
|
+
)
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
require_restart = (result.get("result") or {}).get("require_restart", False)
|
|
102
|
+
|
|
103
|
+
if require_restart:
|
|
104
|
+
note = "Home Assistant restart required for changes to take effect."
|
|
105
|
+
else:
|
|
106
|
+
note = (
|
|
107
|
+
"Integration has been loaded."
|
|
108
|
+
if enabled
|
|
109
|
+
else "Integration has been unloaded."
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
"success": True,
|
|
114
|
+
"message": f"Integration {'enabled' if enabled else 'disabled'} successfully",
|
|
115
|
+
"entry_id": entry_id,
|
|
116
|
+
"require_restart": require_restart,
|
|
117
|
+
"note": note,
|
|
118
|
+
}
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/integration_reconfigure.py
RENAMED
|
@@ -21,10 +21,12 @@ from ..errors import ErrorCode, create_error_response
|
|
|
21
21
|
from ..utils.config_hash import compute_config_hash
|
|
22
22
|
from .auto_backup import with_auto_backup
|
|
23
23
|
from .config_entry_flow_walker import ReconfigureStatus
|
|
24
|
-
from .config_entry_identity import
|
|
24
|
+
from .config_entry_identity import (
|
|
25
|
+
ReconfigureIdentity,
|
|
26
|
+
build_reconfigure_rollback_metadata,
|
|
27
|
+
)
|
|
25
28
|
from .config_entry_reconfigure import (
|
|
26
29
|
PreparedReconfigure,
|
|
27
|
-
build_reconfigure_rollback_metadata,
|
|
28
30
|
prepare_reconfigure_request,
|
|
29
31
|
reconfigure_config_entry,
|
|
30
32
|
)
|
|
@@ -39,6 +39,7 @@ from .component_api import (
|
|
|
39
39
|
invalidate_caps,
|
|
40
40
|
is_unknown_command,
|
|
41
41
|
)
|
|
42
|
+
from .config_entry_flow import COMPONENT_DOMAIN
|
|
42
43
|
from .config_entry_flow_form import _MISSING_DEFAULT, _step_owned_submission_value
|
|
43
44
|
from .helpers import (
|
|
44
45
|
exception_to_structured_error,
|
|
@@ -54,11 +55,6 @@ logger = logging.getLogger(__name__)
|
|
|
54
55
|
# section of the web settings UI (Server Settings tab, bottom).
|
|
55
56
|
FEATURE_FLAG = "HAMCP_ENABLE_DEV_MODE"
|
|
56
57
|
|
|
57
|
-
# Domain of the ha_mcp_tools custom component. Its "server" config entry
|
|
58
|
-
# runs the ha-mcp server in-process inside HA and exposes channel /
|
|
59
|
-
# pip-spec options that ha_dev_manage_server drives.
|
|
60
|
-
COMPONENT_DOMAIN = "ha_mcp_tools"
|
|
61
|
-
|
|
62
58
|
# The component's own in-process command for locating its "server" config
|
|
63
59
|
# entry (see ``_fetch_server_entry_via_component``) — replaces probing every
|
|
64
60
|
# ha_mcp_tools-domain entry's options-flow schema from the outside.
|
|
@@ -30,6 +30,7 @@ from ha_mcp._vendor.fastmcp.tools import tool
|
|
|
30
30
|
from ..errors import ErrorCode, create_error_response
|
|
31
31
|
from .auto_backup import with_auto_backup
|
|
32
32
|
from .component_api import ComponentCaps, get_component_caps
|
|
33
|
+
from .config_entry_flow import COMPONENT_DOMAIN as MCP_TOOLS_DOMAIN
|
|
33
34
|
from .helpers import (
|
|
34
35
|
exception_to_structured_error,
|
|
35
36
|
log_tool_usage,
|
|
@@ -44,9 +45,6 @@ logger = logging.getLogger(__name__)
|
|
|
44
45
|
# Feature flag - disabled by default for safety
|
|
45
46
|
FEATURE_FLAG = "HAMCP_ENABLE_FILESYSTEM_TOOLS"
|
|
46
47
|
|
|
47
|
-
# Domain for the custom component
|
|
48
|
-
MCP_TOOLS_DOMAIN = "ha_mcp_tools"
|
|
49
|
-
|
|
50
48
|
# Caller-token auth (mirrors custom_components/ha_mcp_tools).
|
|
51
49
|
# The custom component's handlers reject every call that doesn't present
|
|
52
50
|
# this field with the matching token. ha-mcp fetches the token once via
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_integrations.py
RENAMED
|
@@ -47,7 +47,11 @@ from .config_entry_backup import (
|
|
|
47
47
|
resolve_config_entry_backup_domain,
|
|
48
48
|
skip_unless_flow_helper,
|
|
49
49
|
)
|
|
50
|
-
from .config_entry_flow import
|
|
50
|
+
from .config_entry_flow import (
|
|
51
|
+
create_config_entry,
|
|
52
|
+
refuse_component_entry,
|
|
53
|
+
update_config_entry_options,
|
|
54
|
+
)
|
|
51
55
|
from .config_entry_flow_form import iter_schema_fields
|
|
52
56
|
from .config_helpers.registry import _get_entities_for_config_entry
|
|
53
57
|
from .config_helpers.schemas import SIMPLE_HELPER_TYPES, StorageHelperType
|
|
@@ -69,6 +73,7 @@ from .helpers import (
|
|
|
69
73
|
validate_identifier_not_empty,
|
|
70
74
|
ws_failure_code,
|
|
71
75
|
)
|
|
76
|
+
from .integration_entry_state import set_entry_enabled, set_log_level
|
|
72
77
|
from .integration_reconfigure import (
|
|
73
78
|
ReconfigureRunner,
|
|
74
79
|
reject_reconfigure_only_parameters,
|
|
@@ -1844,6 +1849,9 @@ class IntegrationTools:
|
|
|
1844
1849
|
- Config subentries: use
|
|
1845
1850
|
ha_config_set_helper(helper_type='config_subentry').
|
|
1846
1851
|
- Removing an entry: use ha_remove_helpers_integrations.
|
|
1852
|
+
- ha-mcp's own ha_mcp_tools entries are refused: manage them in the HA
|
|
1853
|
+
UI, or (server settings, developer mode on) ha_dev_manage_settings /
|
|
1854
|
+
ha_dev_manage_server.
|
|
1847
1855
|
|
|
1848
1856
|
Use ha_get_integration() to find entry IDs, and
|
|
1849
1857
|
ha_get_integration(entry_id=..., include_schema=True) to inspect the
|
|
@@ -1876,7 +1884,8 @@ class IntegrationTools:
|
|
|
1876
1884
|
expected_mac=expected_mac,
|
|
1877
1885
|
expected_entity_ids=expected_entity_ids,
|
|
1878
1886
|
)
|
|
1879
|
-
return await
|
|
1887
|
+
return await set_log_level(
|
|
1888
|
+
self._client,
|
|
1880
1889
|
entry_id,
|
|
1881
1890
|
domain,
|
|
1882
1891
|
log_level,
|
|
@@ -1918,6 +1927,7 @@ class IntegrationTools:
|
|
|
1918
1927
|
"'local_calendar'",
|
|
1919
1928
|
],
|
|
1920
1929
|
)
|
|
1930
|
+
refuse_component_entry(domain, action="add an entry for")
|
|
1921
1931
|
return await create_config_entry(self._client, domain, config or {})
|
|
1922
1932
|
|
|
1923
1933
|
if entry_id is None:
|
|
@@ -1944,7 +1954,7 @@ class IntegrationTools:
|
|
|
1944
1954
|
)
|
|
1945
1955
|
|
|
1946
1956
|
if enabled is not None:
|
|
1947
|
-
return await self.
|
|
1957
|
+
return await set_entry_enabled(self._client, entry_id, enabled)
|
|
1948
1958
|
|
|
1949
1959
|
if config is not None:
|
|
1950
1960
|
# Options mode: drive the entry's options flow.
|
|
@@ -1992,103 +2002,6 @@ class IntegrationTools:
|
|
|
1992
2002
|
error_context["domain"] = domain
|
|
1993
2003
|
return error_context
|
|
1994
2004
|
|
|
1995
|
-
async def _set_log_level(
|
|
1996
|
-
self,
|
|
1997
|
-
entry_id: str | None,
|
|
1998
|
-
domain: str | None,
|
|
1999
|
-
log_level: str,
|
|
2000
|
-
*,
|
|
2001
|
-
other_modes: bool,
|
|
2002
|
-
) -> dict[str, Any]:
|
|
2003
|
-
"""Set an integration's log level through ``logger/integration_log_level``."""
|
|
2004
|
-
if other_modes or (domain is None) == (entry_id is None):
|
|
2005
|
-
raise_tool_error(
|
|
2006
|
-
create_error_response(
|
|
2007
|
-
ErrorCode.VALIDATION_INVALID_PARAMETER,
|
|
2008
|
-
"log_level takes exactly one of 'domain' or 'entry_id' and "
|
|
2009
|
-
"cannot be combined with config, enabled or reconfigure",
|
|
2010
|
-
suggestions=[
|
|
2011
|
-
"Example: ha_set_integration(domain='zha', log_level='DEBUG')",
|
|
2012
|
-
],
|
|
2013
|
-
context={"entry_id": entry_id, "domain": domain},
|
|
2014
|
-
)
|
|
2015
|
-
)
|
|
2016
|
-
if entry_id is not None:
|
|
2017
|
-
entry = await self._client.get_config_entry(entry_id)
|
|
2018
|
-
domain = entry.get("domain")
|
|
2019
|
-
result = await self._client.send_websocket_message(
|
|
2020
|
-
{
|
|
2021
|
-
"type": "logger/integration_log_level",
|
|
2022
|
-
"integration": domain,
|
|
2023
|
-
# NOTSET is what the UI's Disable debug logging sends.
|
|
2024
|
-
"level": "NOTSET" if log_level == "DEFAULT" else log_level,
|
|
2025
|
-
"persistence": "once",
|
|
2026
|
-
}
|
|
2027
|
-
)
|
|
2028
|
-
if not result.get("success"):
|
|
2029
|
-
raise_tool_error(
|
|
2030
|
-
create_error_response(
|
|
2031
|
-
ws_failure_code(result),
|
|
2032
|
-
f"Failed to set the log level for '{domain}': "
|
|
2033
|
-
f"{result.get('error') or 'unknown error'}",
|
|
2034
|
-
context={"domain": domain, "entry_id": entry_id},
|
|
2035
|
-
)
|
|
2036
|
-
)
|
|
2037
|
-
return {
|
|
2038
|
-
"success": True,
|
|
2039
|
-
"action": "set_log_level",
|
|
2040
|
-
"domain": domain,
|
|
2041
|
-
"log_level": log_level,
|
|
2042
|
-
"note": (
|
|
2043
|
-
"Override cleared: the integration now logs at the inherited "
|
|
2044
|
-
"default level; a level set for it in configuration.yaml returns "
|
|
2045
|
-
"after the next restart."
|
|
2046
|
-
if log_level == "DEFAULT"
|
|
2047
|
-
else "Applies now and through the next Home Assistant restart."
|
|
2048
|
-
),
|
|
2049
|
-
}
|
|
2050
|
-
|
|
2051
|
-
async def _set_entry_enabled(self, entry_id: str, enabled: bool) -> dict[str, Any]:
|
|
2052
|
-
"""Enable or disable a config entry via ``config_entries/disable``."""
|
|
2053
|
-
message = {
|
|
2054
|
-
"type": "config_entries/disable",
|
|
2055
|
-
"entry_id": entry_id,
|
|
2056
|
-
"disabled_by": None if enabled else "user",
|
|
2057
|
-
}
|
|
2058
|
-
|
|
2059
|
-
result = await self._client.send_websocket_message(message)
|
|
2060
|
-
|
|
2061
|
-
if not result.get("success"):
|
|
2062
|
-
error_msg = result.get("error", {})
|
|
2063
|
-
if isinstance(error_msg, dict):
|
|
2064
|
-
error_msg = error_msg.get("message", str(error_msg))
|
|
2065
|
-
raise_tool_error(
|
|
2066
|
-
create_error_response(
|
|
2067
|
-
ErrorCode.SERVICE_CALL_FAILED,
|
|
2068
|
-
f"Failed to {'enable' if enabled else 'disable'} integration: {error_msg}",
|
|
2069
|
-
context={"entry_id": entry_id},
|
|
2070
|
-
)
|
|
2071
|
-
)
|
|
2072
|
-
|
|
2073
|
-
require_restart = (result.get("result") or {}).get("require_restart", False)
|
|
2074
|
-
|
|
2075
|
-
if require_restart:
|
|
2076
|
-
note = "Home Assistant restart required for changes to take effect."
|
|
2077
|
-
else:
|
|
2078
|
-
note = (
|
|
2079
|
-
"Integration has been loaded."
|
|
2080
|
-
if enabled
|
|
2081
|
-
else "Integration has been unloaded."
|
|
2082
|
-
)
|
|
2083
|
-
|
|
2084
|
-
return {
|
|
2085
|
-
"success": True,
|
|
2086
|
-
"message": f"Integration {'enabled' if enabled else 'disabled'} successfully",
|
|
2087
|
-
"entry_id": entry_id,
|
|
2088
|
-
"require_restart": require_restart,
|
|
2089
|
-
"note": note,
|
|
2090
|
-
}
|
|
2091
|
-
|
|
2092
2005
|
@tool(
|
|
2093
2006
|
name="ha_remove_helpers_integrations",
|
|
2094
2007
|
tags={"Helper Entities", "Integrations"},
|
|
@@ -2174,6 +2087,9 @@ class IntegrationTools:
|
|
|
2174
2087
|
config entry) — use `ha_remove_entity` instead.
|
|
2175
2088
|
- YAML-configured helpers — they have no storage backend. Edit the
|
|
2176
2089
|
YAML file and reload the relevant integration.
|
|
2090
|
+
- ha-mcp's own ha_mcp_tools entries are refused: manage them in the HA
|
|
2091
|
+
UI, or (server settings, developer mode on) ha_dev_manage_settings /
|
|
2092
|
+
ha_dev_manage_server.
|
|
2177
2093
|
|
|
2178
2094
|
ROUTING:
|
|
2179
2095
|
- SIMPLE helper_type (input_button, input_boolean, input_select,
|
|
@@ -2344,8 +2260,18 @@ class IntegrationTools:
|
|
|
2344
2260
|
|
|
2345
2261
|
# === Path 3: Direct config entry delete (any integration) ===
|
|
2346
2262
|
async def _delete_direct_entry(self, entry_id: str) -> dict[str, Any]:
|
|
2347
|
-
"""Delete a config entry directly via the REST delete API.
|
|
2263
|
+
"""Delete a config entry directly via the REST delete API.
|
|
2264
|
+
|
|
2265
|
+
Looks the entry up first and refuses ha-mcp's own ``ha_mcp_tools``
|
|
2266
|
+
entries before any DELETE is sent.
|
|
2267
|
+
"""
|
|
2348
2268
|
try:
|
|
2269
|
+
entry = await self._client.get_config_entry(entry_id)
|
|
2270
|
+
refuse_component_entry(
|
|
2271
|
+
entry.get("domain"),
|
|
2272
|
+
action="delete a config entry of",
|
|
2273
|
+
entry_id=entry_id,
|
|
2274
|
+
)
|
|
2349
2275
|
result = await self._client.delete_config_entry(entry_id)
|
|
2350
2276
|
require_restart = result.get("require_restart", False)
|
|
2351
2277
|
return {
|
|
@@ -2366,15 +2292,16 @@ class IntegrationTools:
|
|
|
2366
2292
|
except ToolError:
|
|
2367
2293
|
raise
|
|
2368
2294
|
except HomeAssistantAPIError as e:
|
|
2369
|
-
#
|
|
2370
|
-
#
|
|
2371
|
-
#
|
|
2372
|
-
#
|
|
2373
|
-
#
|
|
2374
|
-
#
|
|
2375
|
-
#
|
|
2376
|
-
#
|
|
2377
|
-
#
|
|
2295
|
+
# A missing entry surfaces as HomeAssistantAPIError with
|
|
2296
|
+
# status_code=404 from the own-entry lookup
|
|
2297
|
+
# (RestClient.get_config_entry), before any DELETE is sent, or
|
|
2298
|
+
# from the DELETE itself when the entry vanished in between
|
|
2299
|
+
# (RestClient.delete_config_entry). Surface it as
|
|
2300
|
+
# RESOURCE_NOT_FOUND so callers can distinguish an absent target
|
|
2301
|
+
# from a real failure; the typo case (agent passed the wrong
|
|
2302
|
+
# entry_id) is the failure mode that "absent → success" would
|
|
2303
|
+
# silently mask. Non-404 API errors are real failures and bubble
|
|
2304
|
+
# through exception_to_structured_error below.
|
|
2378
2305
|
if e.status_code == 404:
|
|
2379
2306
|
raise_tool_error(
|
|
2380
2307
|
create_error_response(
|
|
@@ -49,6 +49,7 @@ from .component_api import (
|
|
|
49
49
|
invalidate_caps,
|
|
50
50
|
is_unknown_command,
|
|
51
51
|
)
|
|
52
|
+
from .config_entry_flow import is_component_domain
|
|
52
53
|
from .helpers import (
|
|
53
54
|
exception_to_structured_error,
|
|
54
55
|
log_tool_usage,
|
|
@@ -805,14 +806,10 @@ class ServiceTools:
|
|
|
805
806
|
)
|
|
806
807
|
)
|
|
807
808
|
# ha_mcp_tools.* services are restricted to the ha-mcp server's dedicated
|
|
808
|
-
# wrappers (which inject the required caller token)
|
|
809
|
-
#
|
|
810
|
-
#
|
|
811
|
-
|
|
812
|
-
# ServiceRegistry.async_call), so normalise here to make sure a mixed-case
|
|
813
|
-
# `HA_MCP_TOOLS` can't slip past this exact-string check and still resolve
|
|
814
|
-
# downstream.
|
|
815
|
-
if domain.strip().lower() == "ha_mcp_tools":
|
|
809
|
+
# wrappers (which inject the required caller token); forwarding to that
|
|
810
|
+
# domain would bypass them. is_component_domain normalises case because
|
|
811
|
+
# HA core's service registry lowercases the domain on fallback lookup.
|
|
812
|
+
if is_component_domain(domain):
|
|
816
813
|
raise_tool_error(
|
|
817
814
|
create_validation_error(
|
|
818
815
|
(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256
RENAMED
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_install_hints.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_warnings.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/app.py
RENAMED
|
File without changes
|
{ha_mcp_dev-8.7.0.dev3059 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/approval.py
RENAMED
|
File without changes
|