ha-mcp-dev 9.1.1.dev3380__tar.gz → 9.1.1.dev3382__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-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/PKG-INFO +2 -2
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/README.md +1 -1
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/pyproject.toml +1 -1
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/pyproject.toml.orig +1 -1
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/renamed_tools.py +77 -1
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server_tool_text.py +5 -4
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/en.json +6 -6
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings.html +12 -6
- ha_mcp_dev-9.1.1.dev3382/src/ha_mcp/tools/renamed_tool_middleware.py +117 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_bug_report.py +22 -24
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/validation_middleware.py +94 -42
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/categorized_search.py +14 -2
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/usage_logger.py +22 -1
- ha_mcp_dev-9.1.1.dev3380/src/ha_mcp/tools/renamed_tool_middleware.py +0 -89
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/LICENSE +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_rich_compat.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/requirements.txt +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/version.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/app_discovery.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/iss_stamp.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/oidc_compat.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_calendar.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_dashboards.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_diff.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_entities.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_entity_ids.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_helper_target.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_integrations.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_manager.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_tags.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_todo.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_zones.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/browser_landing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/admin_routes.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/config_entry_read.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/error_log_journald.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/event_listeners.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/models.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/supervisor_client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/websocket_state.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_backup.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_meta.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_overrides.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_registry.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_settings.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/ha_request_queue.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/hacs_auto_refresh.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/http_transport.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/image_info.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/ipv6_lan_guard.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/listen_sockets.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/llm_exposure.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/log_filters.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/mcp_client_context.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/approval_queue.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/decision_pin.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/decisions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/editing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/evaluator.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/events.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/handlers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/middleware.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/model.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/mrtr.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/persistence.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/server_channels.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/value_sources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/read_only.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/redaction.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server_instructions.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server_lifespan.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_i18n.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_persistence.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_theme.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/README.md +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/az.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/de.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/es.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/it.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings.css +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/storage_helper_types.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/strict_bps.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tool_catalog.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tool_dispatch.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/area_messages.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/auto_backup.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/automation_errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/automation_registry_details.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_access.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_on_demand.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_snapshot.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/best_practice_result.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/best_practice_variables.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/blueprint_sources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/blueprint_write.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_sources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_templates.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bulk_selector.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/coercion.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_api.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_automation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_config_entries.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_config_reads.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_devices.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_helper_collections.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_registries.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_todo.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_backup.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_identity.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_file_visibility.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/create.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/update.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_write_errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_write_helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/core_contract.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dev_backup.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/device_enrichment.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/energy_preferences.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_registration.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_removal.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_update_fields.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/error_log_parsing.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/event_call.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/event_listener_fields.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/flow_translations.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/hacs_backend.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/hacs_registration.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/helper_flows.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/history_response.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/ignored_entries.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_entry_state.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_schema.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_common.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources_fault.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/matter.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/thread.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/zigbee.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/zwave.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/recorder_errors.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/resource_codec.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/resource_patch.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/response_helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/scene_discovery.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/component.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/entities.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/legacy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/modes.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/overview.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/response.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/state.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/server_version.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_base.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/statistics_calendar.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/statistics_helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/statistics_resets.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/system_restart.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tool_hints.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_addons.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_code.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_dev.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_energy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_integrations.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_logs.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_radio.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_security_policy.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_themes.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_utility.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/update_categories.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/util_helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/ws_waiters.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/compact_params.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/component_helpers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/component_search.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/write_tool_note.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transport_security.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/update_check.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/config_write_lock.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/dashboard_patch.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/data_paths.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/entity_membership.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/mcp_client_host.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/registry_update_lock.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/skill_loader.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/__init__.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/config_files.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/enforcement.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/model.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/persistence.py +0 -0
- {ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/resolver.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ha-mcp-dev
|
|
3
|
-
Version: 9.1.1.
|
|
3
|
+
Version: 9.1.1.dev3382
|
|
4
4
|
Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
|
|
5
5
|
Keywords: mcp,home-assistant,ai,automation,smart-home
|
|
6
6
|
Author: Julien
|
|
@@ -442,7 +442,7 @@ A `ha_manage_*` tool combines several operations, so it is reachable from more t
|
|
|
442
442
|
|
|
443
443
|
Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
|
|
444
444
|
|
|
445
|
-
> 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; or
|
|
445
|
+
> 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; disconnect and reconnect a Claude Desktop custom connector; refresh the tools list of a claude.ai connector; or quit and reopen Claude Desktop for a server in `claude_desktop_config.json`), then start a new conversation. If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
|
|
446
446
|
|
|
447
447
|
For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
|
|
448
448
|
|
|
@@ -381,7 +381,7 @@ A `ha_manage_*` tool combines several operations, so it is reachable from more t
|
|
|
381
381
|
|
|
382
382
|
Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
|
|
383
383
|
|
|
384
|
-
> 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; or
|
|
384
|
+
> 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; disconnect and reconnect a Claude Desktop custom connector; refresh the tools list of a claude.ai connector; or quit and reopen Claude Desktop for a server in `claude_desktop_config.json`), then start a new conversation. If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
|
|
385
385
|
|
|
386
386
|
For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
|
|
387
387
|
|
|
@@ -4,7 +4,7 @@ build-backend = "uv_build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ha-mcp-dev"
|
|
7
|
-
version = "9.1.1.
|
|
7
|
+
version = "9.1.1.dev3382"
|
|
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 = "9.1.1.
|
|
7
|
+
version = "9.1.1.dev3382"
|
|
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
|
|
@@ -18,11 +18,16 @@ readers pick the more restrictive one (``rename_retired_keys``'s ``prefer``).
|
|
|
18
18
|
And a call on a retired name carries the old signature, which the merged tool
|
|
19
19
|
cannot dispatch without the ``action`` it never had —
|
|
20
20
|
``adapt_retired_arguments`` fills that in.
|
|
21
|
+
|
|
22
|
+
A parameter can move the same way a tool does. ``RENAMED_PARAMETERS`` keeps
|
|
23
|
+
the old parameter name callable for a client that has not re-listed, and
|
|
24
|
+
``CLIENT_TOOL_LIST_REFRESH_STEPS`` is what such a client's user has to do.
|
|
21
25
|
"""
|
|
22
26
|
|
|
23
27
|
from __future__ import annotations
|
|
24
28
|
|
|
25
|
-
|
|
29
|
+
import json
|
|
30
|
+
from collections.abc import Callable, Mapping, Sequence
|
|
26
31
|
from typing import Any
|
|
27
32
|
|
|
28
33
|
# Retired tool name -> the name that serves it today.
|
|
@@ -37,6 +42,24 @@ RENAMED_TOOLS: dict[str, str] = {
|
|
|
37
42
|
"ha_import_blueprint": "ha_manage_blueprints",
|
|
38
43
|
}
|
|
39
44
|
|
|
45
|
+
# Current tool name -> retired parameter name -> the name that serves it today.
|
|
46
|
+
# Only a pure rename belongs here: the value keeps its meaning and its format.
|
|
47
|
+
RENAMED_PARAMETERS: dict[str, dict[str, str]] = {
|
|
48
|
+
"ha_config_get_automation": {"identifier": "entity_id"},
|
|
49
|
+
"ha_config_set_automation": {"identifier": "entity_id"},
|
|
50
|
+
"ha_config_remove_automation": {"identifier": "entity_id"},
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# How each client re-fetches the tool list, for every text that tells an agent
|
|
54
|
+
# its list is stale. Steps are separated by ";" and carry none inside.
|
|
55
|
+
CLIENT_TOOL_LIST_REFRESH_STEPS = (
|
|
56
|
+
"Claude Desktop custom connector: disconnect and reconnect it; "
|
|
57
|
+
"server in claude_desktop_config.json: quit and reopen Claude Desktop; "
|
|
58
|
+
"claude.ai: refresh the connector's tools list; Claude Code: /mcp, "
|
|
59
|
+
"reconnect; ChatGPT: open Settings, then the plugin settings, select the "
|
|
60
|
+
"connector and click Refresh tools"
|
|
61
|
+
)
|
|
62
|
+
|
|
40
63
|
|
|
41
64
|
def current_tool_name(name: str) -> str:
|
|
42
65
|
"""The name a tool answers to today, given any name it has had."""
|
|
@@ -101,3 +124,56 @@ def adapt_retired_arguments(
|
|
|
101
124
|
if adapter is None:
|
|
102
125
|
return dict(arguments) if arguments is not None else None
|
|
103
126
|
return adapter(dict(arguments or {}))
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def retired_parameters_used(
|
|
130
|
+
name: str, arguments: Mapping[str, Any] | None
|
|
131
|
+
) -> dict[str, str]:
|
|
132
|
+
"""The retired parameter names a call on ``name`` carries, with their current names.
|
|
133
|
+
|
|
134
|
+
A retired name sent together with its current name is left out: that
|
|
135
|
+
caller knows the current signature, so the stray argument is rejected like
|
|
136
|
+
any other unknown one instead of replacing the value sent under the
|
|
137
|
+
current name.
|
|
138
|
+
"""
|
|
139
|
+
renames = RENAMED_PARAMETERS.get(name)
|
|
140
|
+
if not renames or not arguments:
|
|
141
|
+
return {}
|
|
142
|
+
return {
|
|
143
|
+
old: new
|
|
144
|
+
for old, new in renames.items()
|
|
145
|
+
if old in arguments and new not in arguments
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def add_stale_list_warning(result: Any, renames: Sequence[tuple[str, str]]) -> None:
|
|
150
|
+
"""Tell the caller of a call served through an old name that its list is stale.
|
|
151
|
+
|
|
152
|
+
``renames`` holds each old name with its current one. The warning joins the
|
|
153
|
+
result's top-level ``warnings`` in both representations: the structured
|
|
154
|
+
content and the JSON text a client without it reads.
|
|
155
|
+
"""
|
|
156
|
+
listed = ", ".join(f"`{old}` is now `{new}`" for old, new in renames)
|
|
157
|
+
warning = (
|
|
158
|
+
f"This call used a name from before an ha-mcp update ({listed}). It "
|
|
159
|
+
"was served, but your tool list is a stale copy. Ask the user to "
|
|
160
|
+
f"refresh it ({CLIENT_TOOL_LIST_REFRESH_STEPS}), then start a new "
|
|
161
|
+
"conversation."
|
|
162
|
+
)
|
|
163
|
+
structured = getattr(result, "structured_content", None)
|
|
164
|
+
if isinstance(structured, dict):
|
|
165
|
+
result.structured_content = {
|
|
166
|
+
**structured,
|
|
167
|
+
"warnings": [*(structured.get("warnings") or []), warning],
|
|
168
|
+
}
|
|
169
|
+
for block in getattr(result, "content", None) or []:
|
|
170
|
+
text = getattr(block, "text", None)
|
|
171
|
+
if not isinstance(text, str):
|
|
172
|
+
continue
|
|
173
|
+
try:
|
|
174
|
+
parsed = json.loads(text)
|
|
175
|
+
except json.JSONDecodeError:
|
|
176
|
+
continue
|
|
177
|
+
if isinstance(parsed, dict):
|
|
178
|
+
parsed["warnings"] = [*(parsed.get("warnings") or []), warning]
|
|
179
|
+
block.text = json.dumps(parsed)
|
|
@@ -480,10 +480,11 @@ LITE_DOCSTRINGS: dict[str, str] = {
|
|
|
480
480
|
"The response carries the full workflow in its `instructions` "
|
|
481
481
|
"field (duplicate check, the mandatory anonymisation step, and "
|
|
482
482
|
"how to file the issue), plus "
|
|
483
|
-
'`missing_tool_hint` for the "a tool I expected is missing" '
|
|
484
|
-
"
|
|
485
|
-
"
|
|
486
|
-
"
|
|
483
|
+
'`missing_tool_hint` for the "a tool I expected is missing" or '
|
|
484
|
+
'"a tool rejects as unknown a parameter my tool list shows" case, '
|
|
485
|
+
"which is usually a stale client tool list rather than a bug. Read "
|
|
486
|
+
"`instructions` before presenting anything to the user; "
|
|
487
|
+
"ha_get_skill_guide does not cover issue reporting."
|
|
487
488
|
),
|
|
488
489
|
}
|
|
489
490
|
|
{ha_mcp_dev-9.1.1.dev3380 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/en.json
RENAMED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"tabs.policies": "Tool Security Policies",
|
|
28
28
|
"tabs.visibility": "Entity Visibility",
|
|
29
29
|
"tabs.accessibility": "Accessibility",
|
|
30
|
-
"notice.restart_required": "⚠ Changes saved. Restart HA-MCP for them to take effect. On next startup, HA-MCP fully removes disabled tools from the MCP tool list. Then reconnect or refresh the MCP server in your AI client (e.g. refresh tool list on claude.ai,
|
|
30
|
+
"notice.restart_required": "⚠ Changes saved. Restart HA-MCP for them to take effect. On next startup, HA-MCP fully removes disabled tools from the MCP tool list. Then reconnect or refresh the MCP server in your AI client (e.g. refresh tool list on claude.ai; in ChatGPT open Settings, then the plugin settings, select the connector and click Refresh tools; disconnect and reconnect a Claude Desktop custom connector; or quit and reopen Claude Desktop for a server in claude_desktop_config.json) so it reloads the tool list, then start a new conversation. Restarting the app (add-on) or Home Assistant does NOT refresh your client's cached tool list. ChatGPT sometimes keeps serving its cached tool list even after the connector is removed and re-added — if tools are still missing, delete the connector and create a new one under a different name.",
|
|
31
31
|
"notice.shared_settings": "Server-wide features (Tool Search, YAML config editing, filesystem tools, etc.) appear in both the <strong>Server Settings</strong> tab and the app (add-on) Configuration page; they're the same settings either way. Either surface stays in sync with the other after the app (add-on) restarts. Changes require HA-MCP to be restarted.",
|
|
32
32
|
"notice.env_pins": "Tools listed in the <code>DISABLED_TOOLS</code> or <code>PINNED_TOOLS</code> env vars are locked read-only; unset the env var to edit them here. Pin toggles only take effect when Tool Search is enabled (Server Settings tab or app (add-on) Configuration page).",
|
|
33
33
|
"actions.restart_addon": "Restart app (add-on)",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"tools.read_only.help": "Turns off all write tools and blocks every tool from making write or destructive calls. Mixed read/write tools (backups, Apps (add-ons), energy preferences, voice pipelines, and code mode when enabled) stay available with their write operations blocked.",
|
|
40
40
|
"tools.read_only.unknown": "Could not read server settings. Read Only Mode status unknown; this view may not reflect what the server enforces.",
|
|
41
41
|
"tools.search": "Search tools...",
|
|
42
|
-
"server.auto_save_notice": "Settings on this tab save automatically. Changes take effect only after you restart HA-MCP (applies them server-side) and reconnect or refresh the MCP server in your AI client (reloads the tool list), e.g. refresh tool list on claude.ai,
|
|
42
|
+
"server.auto_save_notice": "Settings on this tab save automatically. Changes take effect only after you restart HA-MCP (applies them server-side) and reconnect or refresh the MCP server in your AI client (reloads the tool list), e.g. refresh tool list on claude.ai; in ChatGPT open Settings, then the plugin settings, select the connector and click Refresh tools; disconnect and reconnect a Claude Desktop custom connector; or quit and reopen Claude Desktop for a server in claude_desktop_config.json; then start a new conversation. ChatGPT sometimes keeps serving its cached tool list even after the connector is removed and re-added — if tools are still missing, delete the connector and create a new one under a different name.",
|
|
43
43
|
"server.sections.search": "Search & matching",
|
|
44
44
|
"server.sections.operations": "Operations",
|
|
45
45
|
"server.sections.tool_surface": "Tool surface",
|
|
@@ -221,10 +221,10 @@
|
|
|
221
221
|
"common.range_or_value": "Range {min}–{max}, or {value}.",
|
|
222
222
|
"common.restart_required": "Restart required.",
|
|
223
223
|
"common.none": "(none)",
|
|
224
|
-
"notice.restart.addon": "⚠ Changes saved. Click \"Restart app (add-on)\" for them to take effect. Disabled tools will be removed from the MCP tool list on next startup. Then refresh the tool list in your AI client; restarting the App alone does not refresh the client's cached list.",
|
|
225
|
-
"notice.restart.embedded": "⚠ Changes saved. Click \"Restart HA-MCP Server\" to reload the in-process integration. Then refresh the MCP tool list in your AI client.",
|
|
226
|
-
"notice.restart.sidecar": "⚠ Changes saved. Fully quit and reopen your MCP client for them to take effect. Disabled tools will be removed from the MCP tool list on next startup.",
|
|
227
|
-
"notice.restart.standalone": "⚠ Changes saved. Restart the ha-mcp process, then refresh the MCP tool list in your AI client.",
|
|
224
|
+
"notice.restart.addon": "⚠ Changes saved. Click \"Restart app (add-on)\" for them to take effect. Disabled tools will be removed from the MCP tool list on next startup. Then refresh the tool list in your AI client (for a Claude Desktop custom connector, disconnect and reconnect it; for a server in claude_desktop_config.json, quit and reopen Claude Desktop) and start a new conversation; restarting the App alone does not refresh the client's cached list.",
|
|
225
|
+
"notice.restart.embedded": "⚠ Changes saved. Click \"Restart HA-MCP Server\" to reload the in-process integration. Then refresh the MCP tool list in your AI client (for a Claude Desktop custom connector, disconnect and reconnect it; for a server in claude_desktop_config.json, quit and reopen Claude Desktop) and start a new conversation.",
|
|
226
|
+
"notice.restart.sidecar": "⚠ Changes saved. Fully quit and reopen your MCP client for them to take effect. Disabled tools will be removed from the MCP tool list on next startup. Then start a new conversation.",
|
|
227
|
+
"notice.restart.standalone": "⚠ Changes saved. Restart the ha-mcp process, then refresh the MCP tool list in your AI client (for a Claude Desktop custom connector, disconnect and reconnect it; for a server in claude_desktop_config.json, quit and reopen Claude Desktop) and start a new conversation.",
|
|
228
228
|
"server.sidecar.confirm_disable": "⚠ PERMANENTLY disable the settings server?\n\nThis stops the server and writes a marker that prevents it from starting again. To restore access, delete ~/.ha-mcp/settings_ui_disabled and unset HA_MCP_DISABLE_SETTINGS_UI. Continue?",
|
|
229
229
|
"tools.empty": "No tools found. The sidecar reads ~/.ha-mcp/tool_metadata.json. If it is missing or empty, restart your MCP client. See ~/.ha-mcp/sidecar.log for details.",
|
|
230
230
|
"tools.group_count": "{enabled}/{total} enabled",
|
|
@@ -173,10 +173,13 @@
|
|
|
173
173
|
⚠ Changes saved. Restart HA-MCP for them to take effect. On next
|
|
174
174
|
startup, HA-MCP fully removes disabled tools from the MCP tool list.
|
|
175
175
|
Then reconnect or refresh the MCP server in your AI client (e.g.
|
|
176
|
-
refresh tool list on claude.ai,
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
176
|
+
refresh tool list on claude.ai; in ChatGPT open Settings, then the
|
|
177
|
+
plugin settings, select the connector and click Refresh tools;
|
|
178
|
+
disconnect and reconnect a Claude Desktop custom connector; or quit
|
|
179
|
+
and reopen Claude Desktop for a server in claude_desktop_config.json)
|
|
180
|
+
so it reloads the tool list, then start a new conversation. Restarting
|
|
181
|
+
the App (add-on) or Home Assistant does NOT refresh your client's
|
|
182
|
+
cached tool list.
|
|
180
183
|
</span>
|
|
181
184
|
<button class="restart-btn" id="restartBtn" style="display:none" data-i18n="actions.restart_addon">Restart App (add-on)</button>
|
|
182
185
|
</div>
|
|
@@ -232,8 +235,11 @@
|
|
|
232
235
|
Settings on this tab save automatically. Changes take effect only after
|
|
233
236
|
you restart the App (add-on) (applies them server-side) and reconnect or
|
|
234
237
|
refresh the MCP server in your AI client (reloads the tool list), e.g.
|
|
235
|
-
refresh tool list on claude.ai
|
|
236
|
-
|
|
238
|
+
refresh tool list on claude.ai; in ChatGPT open Settings, then the
|
|
239
|
+
plugin settings, select the connector and click Refresh tools;
|
|
240
|
+
disconnect and reconnect a Claude Desktop custom connector; or quit
|
|
241
|
+
and reopen Claude Desktop for a server in claude_desktop_config.json;
|
|
242
|
+
then start a new conversation.
|
|
237
243
|
</div>
|
|
238
244
|
</div>
|
|
239
245
|
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""FastMCP middleware: keep retired tool and parameter names callable.
|
|
2
|
+
|
|
3
|
+
Home Assistant 2026.2 renamed add-ons to apps, and this server's two add-on
|
|
4
|
+
tools moved with it (``ha_get_addon`` -> ``ha_get_app``, ``ha_manage_addon``
|
|
5
|
+
-> ``ha_manage_app``). Renaming a tool or one of its parameters is not a
|
|
6
|
+
breaking change here — clients resolve tools by name at runtime and re-list
|
|
7
|
+
after a server update — but a client that has not re-listed yet would get a
|
|
8
|
+
bare "Unknown tool", or an unknown-parameter rejection, until it does.
|
|
9
|
+
|
|
10
|
+
This middleware closes that window without paying for it in the catalog. It
|
|
11
|
+
runs before FastMCP resolves the name and validates the arguments
|
|
12
|
+
(``call_tool`` builds the middleware context first and its ``call_next``
|
|
13
|
+
re-reads ``context.message``), so rewriting the name or an argument key here
|
|
14
|
+
dispatches the call to the current tool. The old names are never registered
|
|
15
|
+
or declared, so they stay out of ``tools/list`` and cost no tokens.
|
|
16
|
+
|
|
17
|
+
The call is served, so nothing else tells that client its list is stale: the
|
|
18
|
+
result carries a warning with the refresh steps, and the server log records
|
|
19
|
+
the first use of each old name.
|
|
20
|
+
|
|
21
|
+
Registering the old name as a second, disabled tool would not work:
|
|
22
|
+
``get_tool`` filters on ``is_enabled`` and ``call_tool`` then raises
|
|
23
|
+
``NotFoundError``, so a disabled tool is unlisted *and* uncallable.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
from __future__ import annotations
|
|
27
|
+
|
|
28
|
+
import logging
|
|
29
|
+
from typing import Any
|
|
30
|
+
|
|
31
|
+
from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
|
|
32
|
+
CallNext,
|
|
33
|
+
Middleware,
|
|
34
|
+
MiddlewareContext,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
from ..renamed_tools import (
|
|
38
|
+
RENAMED_TOOLS,
|
|
39
|
+
adapt_retired_arguments,
|
|
40
|
+
add_stale_list_warning,
|
|
41
|
+
retired_parameters_used,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
logger = logging.getLogger(__name__)
|
|
45
|
+
|
|
46
|
+
__all__ = ["RENAMED_TOOLS", "RenamedToolAliasMiddleware"]
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class RenamedToolAliasMiddleware(Middleware):
|
|
50
|
+
"""Dispatch a call on a retired tool or parameter name to its current name.
|
|
51
|
+
|
|
52
|
+
Installed first in the chain so every later middleware — read-only
|
|
53
|
+
exemptions, policy gating, redaction — sees the current names it is keyed
|
|
54
|
+
on, rather than an alias it would not recognise.
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
def __init__(self) -> None:
|
|
58
|
+
# Which retired names have been logged at INFO already, so the first
|
|
59
|
+
# call on each is audible and the rest stay at DEBUG. An operator
|
|
60
|
+
# otherwise has no way to know a client is still calling the old name —
|
|
61
|
+
# the one observation that could ever justify retiring this alias —
|
|
62
|
+
# while a per-call INFO line would be noise for a tool called in a
|
|
63
|
+
# loop. Log de-duplication only: no dispatch decision reads it, and a
|
|
64
|
+
# restart simply announces each name once more.
|
|
65
|
+
self._announced: set[str] = set()
|
|
66
|
+
|
|
67
|
+
def _announce(self, key: str, old: str, new: str) -> None:
|
|
68
|
+
if key in self._announced:
|
|
69
|
+
logger.debug(
|
|
70
|
+
"%s was renamed to %s; dispatching the call to the current name",
|
|
71
|
+
old,
|
|
72
|
+
new,
|
|
73
|
+
)
|
|
74
|
+
return
|
|
75
|
+
self._announced.add(key)
|
|
76
|
+
logger.info(
|
|
77
|
+
"A client called %s, which was renamed to %s; dispatching to the "
|
|
78
|
+
"current name. Old names stay callable, but a client that re-lists "
|
|
79
|
+
"its tools after a server update will not need this.",
|
|
80
|
+
old,
|
|
81
|
+
new,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
async def on_call_tool(
|
|
85
|
+
self, context: MiddlewareContext, call_next: CallNext
|
|
86
|
+
) -> Any:
|
|
87
|
+
called = context.message.name
|
|
88
|
+
name = RENAMED_TOOLS.get(called, called)
|
|
89
|
+
arguments = context.message.arguments
|
|
90
|
+
renames: list[tuple[str, str]] = []
|
|
91
|
+
if name != called:
|
|
92
|
+
self._announce(called, called, name)
|
|
93
|
+
renames.append((called, name))
|
|
94
|
+
# A consolidated tool needs the ``action`` the retired signature
|
|
95
|
+
# never carried; a plain rename forwards the arguments as they are.
|
|
96
|
+
arguments = adapt_retired_arguments(called, arguments)
|
|
97
|
+
retired_parameters = retired_parameters_used(name, arguments)
|
|
98
|
+
if retired_parameters:
|
|
99
|
+
arguments = {
|
|
100
|
+
retired_parameters.get(key, key): value
|
|
101
|
+
for key, value in (arguments or {}).items()
|
|
102
|
+
}
|
|
103
|
+
for old, new in retired_parameters.items():
|
|
104
|
+
self._announce(f"{name}.{old}", f"{name}({old}=...)", new)
|
|
105
|
+
renames.append((old, new))
|
|
106
|
+
if not renames:
|
|
107
|
+
return await call_next(context)
|
|
108
|
+
|
|
109
|
+
result = await call_next(
|
|
110
|
+
context.copy(
|
|
111
|
+
message=context.message.model_copy(
|
|
112
|
+
update={"name": name, "arguments": arguments}
|
|
113
|
+
)
|
|
114
|
+
)
|
|
115
|
+
)
|
|
116
|
+
add_stale_list_warning(result, renames)
|
|
117
|
+
return result
|
|
@@ -34,6 +34,7 @@ from ..mcp_client_context import (
|
|
|
34
34
|
extract_client_info,
|
|
35
35
|
protocol_version,
|
|
36
36
|
)
|
|
37
|
+
from ..renamed_tools import CLIENT_TOOL_LIST_REFRESH_STEPS
|
|
37
38
|
from ..utils.mcp_client_host import detect_client_host
|
|
38
39
|
from ..utils.usage_logger import (
|
|
39
40
|
AVG_LOG_ENTRIES_PER_TOOL,
|
|
@@ -95,22 +96,19 @@ _TITLE_PREFIXES = {
|
|
|
95
96
|
# GitHub refuses a longer issue title.
|
|
96
97
|
_ISSUE_TITLE_MAX_CHARS = 256
|
|
97
98
|
|
|
98
|
-
#
|
|
99
|
-
#
|
|
100
|
-
#
|
|
101
|
-
#
|
|
102
|
-
# it was a server bug. A stale client-side tool list is the single most likely
|
|
103
|
-
# cause of a missing tool and must be ruled out before filing.
|
|
99
|
+
# #1804 (missing tool) and #2968 / #2978 (renamed parameter) were filed as
|
|
100
|
+
# server bugs; a stale client tool list caused #1804 and #2968 and is the
|
|
101
|
+
# likely cause of #2978, so the hint has the agent rule it out before filing.
|
|
102
|
+
# The name predates the parameter case and stays: it is a response key.
|
|
104
103
|
MISSING_TOOL_HINT = (
|
|
105
|
-
"MISSING
|
|
106
|
-
"
|
|
107
|
-
"bug. MCP clients cache the tool list
|
|
108
|
-
"
|
|
109
|
-
"saying a tool is 'enabled' do NOT mean the client
|
|
110
|
-
"user to refresh
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"tool is still missing after a refresh."
|
|
104
|
+
"MISSING TOOL OR UNKNOWN PARAMETER? A tool you expected is not in your tool "
|
|
105
|
+
"list, or a tool rejects as unknown a parameter your tool list shows: very "
|
|
106
|
+
"likely NOT a bug. MCP clients cache the tool list, so they miss newly "
|
|
107
|
+
"enabled tools and keep showing parameter names an ha-mcp update renamed; "
|
|
108
|
+
"server logs saying a tool is 'enabled' do NOT mean the client loaded it. "
|
|
109
|
+
f"Ask the user to refresh first ({CLIENT_TOOL_LIST_REFRESH_STEPS}), then "
|
|
110
|
+
"start a new conversation. Only file a bug if the problem remains after a "
|
|
111
|
+
"refresh."
|
|
114
112
|
)
|
|
115
113
|
|
|
116
114
|
# Known Claude Desktop bugs that present as ha-mcp failures. Both live in
|
|
@@ -793,8 +791,8 @@ class BugReportTools:
|
|
|
793
791
|
before showing anything to the user: it covers the missing-tool and
|
|
794
792
|
known-client pre-checks, the duplicate check, the mandatory
|
|
795
793
|
anonymisation step, and how to file the issue. Check
|
|
796
|
-
`missing_tool_hint` FIRST when
|
|
797
|
-
|
|
794
|
+
`missing_tool_hint` FIRST when a tool is missing or rejects as unknown
|
|
795
|
+
a parameter your tool list shows: a stale list (not a bug) is the usual cause.
|
|
798
796
|
"""
|
|
799
797
|
# Validate fields= before anything is collected: the projection at the
|
|
800
798
|
# end was the only parse, outside any ValueError handler, so a
|
|
@@ -993,13 +991,13 @@ class BugReportTools:
|
|
|
993
991
|
"known_client_issues_hint": KNOWN_CLIENT_ISSUES_HINT,
|
|
994
992
|
"instructions": (
|
|
995
993
|
"WORKFLOW FOR FILING A REPORT:\n\n"
|
|
996
|
-
"0. **PRE-CHECK —
|
|
997
|
-
"
|
|
998
|
-
"
|
|
999
|
-
"
|
|
1000
|
-
"client tool list (not a server
|
|
1001
|
-
"reconnecting the MCP connection.
|
|
1002
|
-
"if the
|
|
994
|
+
"0. **PRE-CHECK — missing tool or unknown parameter?** If the "
|
|
995
|
+
"user's issue is that a tool they expected is missing, cannot be "
|
|
996
|
+
"called or rejects as unknown a parameter the client's tool list "
|
|
997
|
+
"shows, DO NOT file a bug yet. See the `missing_tool_hint` field: "
|
|
998
|
+
"the likely cause is a stale MCP client tool list (not a server "
|
|
999
|
+
"bug), fixed by refreshing or reconnecting the MCP connection. "
|
|
1000
|
+
"Only continue if the problem remains after the user refreshes.\n\n"
|
|
1003
1001
|
"0b. **PRE-CHECK — is it a known Claude Desktop bug?** A write "
|
|
1004
1002
|
"tool that hangs to a 4-minute timeout, or every call failing "
|
|
1005
1003
|
"with 'expected nonoptional, received undefined', is a client "
|