ha-mcp-dev 8.7.0.dev3056__tar.gz → 8.7.0.dev3060__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (785) hide show
  1. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow.py +49 -0
  5. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_identity.py +35 -0
  6. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_reconfigure.py +3 -32
  7. ha_mcp_dev-8.7.0.dev3060/src/ha_mcp/tools/integration_entry_state.py +118 -0
  8. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/integration_reconfigure.py +4 -2
  9. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_dev.py +1 -5
  10. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_filesystem.py +1 -3
  11. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_integrations.py +37 -110
  12. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_service.py +5 -8
  13. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/LICENSE +0 -0
  14. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/README.md +0 -0
  15. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/__init__.py +0 -0
  16. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/__main__.py +0 -0
  17. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_pypi_marker +0 -0
  18. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_rich_compat.py +0 -0
  19. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/__init__.py +0 -0
  20. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  21. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  22. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  23. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  24. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  25. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  26. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  27. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  28. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  29. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  30. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  31. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  32. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  33. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  34. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  35. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  36. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  37. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  38. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  39. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  40. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  41. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  42. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  43. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  44. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  45. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  46. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  47. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  48. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  49. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  50. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  51. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  52. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  53. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  54. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  55. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  56. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  57. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  58. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  59. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  60. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  61. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  62. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  63. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  64. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  65. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  66. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  67. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  68. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  69. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  70. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  71. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  72. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  73. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  74. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  75. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  76. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  77. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  78. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  79. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  80. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  81. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  82. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  83. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  84. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  85. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  86. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  87. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  88. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  89. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  90. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  91. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  92. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  93. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  94. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  95. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  96. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  97. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  98. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  99. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  100. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  101. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  102. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  103. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  104. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  105. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  106. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  107. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  108. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  109. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  110. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  111. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  112. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  113. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  114. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  115. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  116. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  117. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  118. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  119. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  120. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  121. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  122. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  123. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  124. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  125. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  126. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  127. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  128. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  129. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  130. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  131. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  132. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  133. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  134. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  135. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  136. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  137. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  138. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  139. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  140. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  141. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  142. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  143. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  144. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  145. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  146. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  147. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  148. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  149. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  150. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  151. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  152. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  153. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  154. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  155. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  156. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  157. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  158. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  159. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  160. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  161. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  162. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  163. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  164. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  165. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  166. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  167. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  168. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  169. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  170. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  171. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  172. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  173. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  174. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  175. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  176. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  177. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  178. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  179. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  180. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  181. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  182. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  183. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  184. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  185. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  186. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  187. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  188. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  189. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  190. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  191. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  192. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  193. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  194. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  195. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  196. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  197. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  198. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  199. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  200. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  201. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  202. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  203. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  204. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  205. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  206. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  207. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  208. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  209. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  210. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  211. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  212. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  213. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  214. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  215. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  216. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  217. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  218. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  219. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  220. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  221. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  222. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  223. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  224. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  225. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  226. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  227. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  228. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  229. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  230. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  231. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  232. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  233. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  234. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  235. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  236. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  237. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  238. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  239. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  240. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  241. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  242. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  243. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  244. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  245. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  246. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  247. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  248. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  249. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  250. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  251. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  252. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  253. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  254. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  255. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  256. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  257. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  258. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  259. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  260. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  261. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  262. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  263. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  264. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  265. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  266. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  267. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  268. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  269. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  270. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  271. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  272. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  273. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  274. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  275. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  276. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  277. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  278. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  279. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  280. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  281. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  282. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  283. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  284. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  285. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  286. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  287. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  288. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  289. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  290. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  291. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  292. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  293. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  294. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  295. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  296. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  297. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  298. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  299. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  300. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  301. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  302. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  303. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  304. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  305. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  306. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  307. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  308. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  309. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  310. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  311. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  312. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  313. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  314. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  315. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  316. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  317. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  318. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  319. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  320. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  321. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  322. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  323. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  324. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  325. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  326. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  327. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  328. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  329. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  330. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  331. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  332. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  333. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  334. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  335. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  336. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  337. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  338. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  339. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  340. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  341. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  342. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  343. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  344. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  345. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  346. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  347. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  348. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  349. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  350. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  351. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  352. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  353. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  354. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  355. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  356. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  357. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  358. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  359. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  360. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  361. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  362. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  363. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  364. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  365. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  366. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  367. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  368. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  369. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  370. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  371. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  372. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  373. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  374. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  375. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  376. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  377. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  378. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  379. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  380. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  381. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  382. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  383. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  384. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  385. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  386. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  387. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  388. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  389. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  390. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  391. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  392. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  393. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  394. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  395. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  396. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  397. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  398. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  399. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  400. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  401. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  402. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  403. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  404. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  405. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  406. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  407. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  408. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  409. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  410. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  411. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  412. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  413. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  414. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  415. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  416. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  417. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  418. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  419. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  420. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  421. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  422. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  423. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  424. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  425. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  426. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  427. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  428. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  429. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  430. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  431. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  432. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  433. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  434. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/requirements.txt +0 -0
  435. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  436. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  437. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  438. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  439. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  440. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  441. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  442. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  443. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  444. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  445. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  446. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  447. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  448. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  449. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  450. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  451. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  452. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  453. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  454. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  455. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  456. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  457. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  458. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  459. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  460. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  461. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  462. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  463. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  464. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  465. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  466. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  467. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  468. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  469. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  470. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  471. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  472. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  473. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  474. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  475. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  476. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  477. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  478. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  479. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  480. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  481. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  482. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  483. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  484. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  485. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  486. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  487. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  488. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  489. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  490. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  491. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/_version.py +0 -0
  492. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/app_discovery.py +0 -0
  493. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/__init__.py +0 -0
  494. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/consent_form.py +0 -0
  495. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/oidc_compat.py +0 -0
  496. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/auth/provider.py +0 -0
  497. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_diff.py +0 -0
  498. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_entity_ids.py +0 -0
  499. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_integrations.py +0 -0
  500. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_manager.py +0 -0
  501. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/backup_tags.py +0 -0
  502. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/browser_landing.py +0 -0
  503. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/__init__.py +0 -0
  504. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/admin_routes.py +0 -0
  505. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/rest_client.py +0 -0
  506. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/supervisor_client.py +0 -0
  507. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/websocket_client.py +0 -0
  508. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/client/websocket_listener.py +0 -0
  509. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config.py +0 -0
  510. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_backup.py +0 -0
  511. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_meta.py +0 -0
  512. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_overrides.py +0 -0
  513. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_registry.py +0 -0
  514. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/config_settings.py +0 -0
  515. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  516. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  517. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  518. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  519. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  520. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  521. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/errors.py +0 -0
  522. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/ha_request_queue.py +0 -0
  523. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  524. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/http_transport.py +0 -0
  525. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/image_info.py +0 -0
  526. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/llm_exposure.py +0 -0
  527. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/log_filters.py +0 -0
  528. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/__init__.py +0 -0
  529. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/approval_queue.py +0 -0
  530. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/decision_pin.py +0 -0
  531. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/decisions.py +0 -0
  532. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/editing.py +0 -0
  533. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/evaluator.py +0 -0
  534. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/events.py +0 -0
  535. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/handlers.py +0 -0
  536. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/middleware.py +0 -0
  537. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/model.py +0 -0
  538. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/mrtr.py +0 -0
  539. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/persistence.py +0 -0
  540. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/server_channels.py +0 -0
  541. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/policy/value_sources.py +0 -0
  542. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/py.typed +0 -0
  543. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/read_only.py +0 -0
  544. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/redaction.py +0 -0
  545. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/renamed_tools.py +0 -0
  546. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  547. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  548. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  549. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  550. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  551. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  552. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  553. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  554. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  555. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  556. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  557. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  558. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  559. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  560. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  561. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  562. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  563. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server.py +0 -0
  564. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server_instructions.py +0 -0
  565. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server_lifespan.py +0 -0
  566. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/server_tool_text.py +0 -0
  567. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/__init__.py +0 -0
  568. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  569. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  570. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  571. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  572. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  573. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  574. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  575. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  576. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  577. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  578. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_theme.py +0 -0
  579. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  580. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  581. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  582. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  583. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  584. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  585. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  586. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  587. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  588. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  589. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  590. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  591. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  592. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  593. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  594. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  595. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  596. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  597. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings.css +0 -0
  598. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings.html +0 -0
  599. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  600. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  601. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  602. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  603. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  604. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  605. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  606. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  607. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  608. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/smoke_test.py +0 -0
  609. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  610. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/strict_bps.py +0 -0
  611. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tool_dispatch.py +0 -0
  612. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/__init__.py +0 -0
  613. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/area_messages.py +0 -0
  614. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/auto_backup.py +0 -0
  615. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/backup.py +0 -0
  616. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/backup_access.py +0 -0
  617. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  618. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  619. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/best_practice_result.py +0 -0
  620. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  621. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  622. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  623. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/blueprint_write.py +0 -0
  624. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/bug_report_config.py +0 -0
  625. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  626. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/bulk_selector.py +0 -0
  627. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/coercion.py +0 -0
  628. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_api.py +0 -0
  629. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_config_entries.py +0 -0
  630. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_config_reads.py +0 -0
  631. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  632. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_devices.py +0 -0
  633. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  634. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_registries.py +0 -0
  635. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  636. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  637. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  638. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  639. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  640. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  641. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  642. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  643. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  644. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  645. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  646. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  647. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  648. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  649. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  650. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  651. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  652. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  653. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  654. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_write_errors.py +0 -0
  655. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  656. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/core_contract.py +0 -0
  657. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  658. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  659. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  660. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/dev_backup.py +0 -0
  661. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/device_control.py +0 -0
  662. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/device_enrichment.py +0 -0
  663. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  664. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/energy_preferences.py +0 -0
  665. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  666. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/entity_registration.py +0 -0
  667. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  668. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  669. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  670. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/hacs_registration.py +0 -0
  671. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/helper_flows.py +0 -0
  672. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/helpers.py +0 -0
  673. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/history_response.py +0 -0
  674. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_common.py +0 -0
  675. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_sources.py +0 -0
  676. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  677. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  678. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/__init__.py +0 -0
  679. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/base.py +0 -0
  680. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/matter.py +0 -0
  681. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/thread.py +0 -0
  682. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  683. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/zwave.py +0 -0
  684. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  685. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/recorder_errors.py +0 -0
  686. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/reference_validator.py +0 -0
  687. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/registry.py +0 -0
  688. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  689. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/response_helpers.py +0 -0
  690. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/scene_discovery.py +0 -0
  691. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/__init__.py +0 -0
  692. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/base.py +0 -0
  693. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/component.py +0 -0
  694. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/entities.py +0 -0
  695. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/legacy.py +0 -0
  696. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/modes.py +0 -0
  697. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/overview.py +0 -0
  698. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/response.py +0 -0
  699. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/search/state.py +0 -0
  700. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  701. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  702. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  703. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  704. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  705. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  706. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  707. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  708. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  709. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  710. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  711. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/statistics_resets.py +0 -0
  712. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/system_restart.py +0 -0
  713. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tool_hints.py +0 -0
  714. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  715. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_addons.py +0 -0
  716. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_areas.py +0 -0
  717. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  718. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  719. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  720. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_calendar.py +0 -0
  721. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_camera.py +0 -0
  722. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_categories.py +0 -0
  723. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_code.py +0 -0
  724. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  725. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  726. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  727. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  728. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  729. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  730. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_energy.py +0 -0
  731. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_entities.py +0 -0
  732. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_groups.py +0 -0
  733. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_hacs.py +0 -0
  734. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_history.py +0 -0
  735. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_labels.py +0 -0
  736. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_logs.py +0 -0
  737. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_radio.py +0 -0
  738. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_registry.py +0 -0
  739. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_resources.py +0 -0
  740. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_search.py +0 -0
  741. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  742. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_services.py +0 -0
  743. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_system.py +0 -0
  744. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_themes.py +0 -0
  745. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_todo.py +0 -0
  746. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_traces.py +0 -0
  747. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_updates.py +0 -0
  748. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_utility.py +0 -0
  749. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  750. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  751. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  752. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/tools_zones.py +0 -0
  753. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/util_helpers.py +0 -0
  754. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/validation_middleware.py +0 -0
  755. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/tools/ws_waiters.py +0 -0
  756. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/__init__.py +0 -0
  757. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/categorized_search.py +0 -0
  758. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/compact_params.py +0 -0
  759. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/component_helpers.py +0 -0
  760. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/component_search.py +0 -0
  761. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  762. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  763. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/transport_security.py +0 -0
  764. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/update_check.py +0 -0
  765. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/__init__.py +0 -0
  766. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/config_hash.py +0 -0
  767. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/config_write_lock.py +0 -0
  768. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  769. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/data_paths.py +0 -0
  770. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  771. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/domain_handlers.py +0 -0
  772. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/entity_membership.py +0 -0
  773. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  774. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  775. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  776. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/operation_manager.py +0 -0
  777. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/python_sandbox.py +0 -0
  778. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  779. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/skill_loader.py +0 -0
  780. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/utils/usage_logger.py +0 -0
  781. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/__init__.py +0 -0
  782. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/enforcement.py +0 -0
  783. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/model.py +0 -0
  784. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/src/ha_mcp/visibility/persistence.py +0 -0
  785. {ha_mcp_dev-8.7.0.dev3056 → ha_mcp_dev-8.7.0.dev3060}/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: 8.7.0.dev3056
3
+ Version: 8.7.0.dev3060
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
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.7.0.dev3056"
7
+ version = "8.7.0.dev3060"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.7.0.dev3056"
7
+ version = "8.7.0.dev3060"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  # Upper bound widened to <3.15 so the package installs on Home Assistant's
@@ -756,6 +756,52 @@ async def config_entry_of_domain(
756
756
  return config_entry
757
757
 
758
758
 
759
+ COMPONENT_DOMAIN = "ha_mcp_tools"
760
+
761
+ COMPONENT_ENTRY_SUGGESTIONS: tuple[str, ...] = (
762
+ "Manage it in the Home Assistant UI: Settings > Devices & services > "
763
+ + "HA-MCP Custom Component (Configure for options; the entry's menu for "
764
+ + "enable/disable, delete and debug logging).",
765
+ "Server settings and updates: with developer mode on, "
766
+ + "ha_dev_manage_settings / ha_dev_manage_server.",
767
+ )
768
+
769
+
770
+ def is_component_domain(domain: object) -> bool:
771
+ """Whether ``domain`` names ha-mcp's own ``ha_mcp_tools`` integration.
772
+
773
+ Core's integration lookup (config flows, log levels) is case-sensitive
774
+ today, so there a mixed-case or padded domain fails downstream anyway and
775
+ the normalisation is defence in depth. Core's service registry does
776
+ lowercase a domain, which is why ha_call_service's guard needs it.
777
+ """
778
+ return isinstance(domain, str) and domain.strip().lower() == COMPONENT_DOMAIN
779
+
780
+
781
+ def refuse_component_entry(
782
+ domain: object, *, action: str, entry_id: str | None = None
783
+ ) -> None:
784
+ """Refuse ``action`` on a config entry of ha-mcp's own custom component.
785
+
786
+ Writing one of those entries reloads or alters the server answering the
787
+ call. The HA UI owns them, and the ``ha_dev_*`` tools defer writes that
788
+ would reload the running server (embedded mode), so the generic
789
+ integration tools must not become a bypass.
790
+ """
791
+ if not is_component_domain(domain):
792
+ return
793
+ raise_tool_error(
794
+ create_error_response(
795
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
796
+ f"Cannot {action} ha-mcp's own '{COMPONENT_DOMAIN}' integration "
797
+ "with this tool: its config entries are the server's own and are "
798
+ "not managed through the generic integration tools.",
799
+ suggestions=list(COMPONENT_ENTRY_SUGGESTIONS),
800
+ context={"entry_id": entry_id, "domain": domain},
801
+ )
802
+ )
803
+
804
+
759
805
  async def _update_config_entry_options(
760
806
  client: Any,
761
807
  entry_id: str,
@@ -767,6 +813,9 @@ async def _update_config_entry_options(
767
813
  _reject_redaction_sentinels(config_dict)
768
814
  config_entry = await config_entry_of_domain(client, entry_id, expected_domain)
769
815
  actual_domain = config_entry.get("domain")
816
+ refuse_component_entry(
817
+ actual_domain, action="change the options of", entry_id=entry_id
818
+ )
770
819
 
771
820
  flow_result = await client.start_options_flow(entry_id)
772
821
  flow_id = flow_result.get("flow_id")
@@ -9,6 +9,9 @@ against after.
9
9
 
10
10
  Every read here raises rather than producing a half-filled identity: an empty
11
11
  list means "the entry has none", never "we could not tell".
12
+
13
+ The manual rollback metadata a reconfigure reports alongside that identity is
14
+ built here too.
12
15
  """
13
16
 
14
17
  import logging
@@ -508,3 +511,35 @@ def _verify_reconfigure_identity_fields(
508
511
  expected=expected_identity,
509
512
  status=ReconfigureStatus.APPLIED_IDENTITY_MISMATCH,
510
513
  )
514
+
515
+
516
+ def build_reconfigure_rollback_metadata(
517
+ entry_id: str,
518
+ domain: str,
519
+ ) -> dict[str, Any]:
520
+ """Describe the manual rollback path for an existing config entry.
521
+
522
+ The snapshot the auto-backup layer captures is Home Assistant's config
523
+ entry fragment (``config_entries/get`` over WebSocket, which serializes
524
+ ``ConfigEntry.as_json_fragment``). That fragment carries no ``data`` key,
525
+ so the entry's connection settings are not in it: the snapshot is audit
526
+ evidence, not an automatic endpoint rollback. An operator must repeat the
527
+ official reconfigure flow with the known previous values.
528
+ """
529
+ return {
530
+ "strategy": "official_reconfigure_flow",
531
+ "automatic": False,
532
+ "operator_action_required": True,
533
+ "manual_required": True,
534
+ "manual_reason": "previous_config_unavailable",
535
+ "entry_id": entry_id,
536
+ "domain": domain,
537
+ "previous_config": None,
538
+ "backup_scope": "edits",
539
+ "backup_restore_supported": False,
540
+ "backup_restore_note": (
541
+ "The generic integration snapshot is audit evidence only; its shared "
542
+ "restore handler does not restore connection settings. Use the official "
543
+ "reconfigure flow instead."
544
+ ),
545
+ }
@@ -24,6 +24,7 @@ from .component_config_entries import fetch_domain_unique_ids
24
24
  from .config_entry_flow import (
25
25
  _abort_flow_best_effort,
26
26
  _reject_redaction_sentinels,
27
+ refuse_component_entry,
27
28
  )
28
29
  from .config_entry_flow_walker import (
29
30
  POST_COMMIT_STATUSES,
@@ -40,6 +41,7 @@ from .config_entry_identity import (
40
41
  _validated_config_entry_rows,
41
42
  _verification_state,
42
43
  _verify_reconfigure_identity_fields,
44
+ build_reconfigure_rollback_metadata,
43
45
  cross_domain_warnings,
44
46
  )
45
47
  from .config_entry_reload_watch import (
@@ -70,38 +72,6 @@ class PreparedReconfigure:
70
72
  warnings: list[str] = field(default_factory=list)
71
73
 
72
74
 
73
- def build_reconfigure_rollback_metadata(
74
- entry_id: str,
75
- domain: str,
76
- ) -> dict[str, Any]:
77
- """Describe the manual rollback path for an existing config entry.
78
-
79
- The snapshot the auto-backup layer captures is Home Assistant's config
80
- entry fragment (``config_entries/get`` over WebSocket, which serializes
81
- ``ConfigEntry.as_json_fragment``). That fragment carries no ``data`` key,
82
- so the entry's connection settings are not in it: the snapshot is audit
83
- evidence, not an automatic endpoint rollback. An operator must repeat the
84
- official reconfigure flow with the known previous values.
85
- """
86
- return {
87
- "strategy": "official_reconfigure_flow",
88
- "automatic": False,
89
- "operator_action_required": True,
90
- "manual_required": True,
91
- "manual_reason": "previous_config_unavailable",
92
- "entry_id": entry_id,
93
- "domain": domain,
94
- "previous_config": None,
95
- "backup_scope": "edits",
96
- "backup_restore_supported": False,
97
- "backup_restore_note": (
98
- "The generic integration snapshot is audit evidence only; its shared "
99
- "restore handler does not restore connection settings. Use the official "
100
- "reconfigure flow instead."
101
- ),
102
- }
103
-
104
-
105
75
  def _raise_post_commit_verification_error(
106
76
  error: ToolError,
107
77
  *,
@@ -420,6 +390,7 @@ async def prepare_reconfigure_request(
420
390
  context={"entry_id": validated_entry_id, "entry": entry},
421
391
  )
422
392
  )
393
+ refuse_component_entry(domain, action="reconfigure", entry_id=validated_entry_id)
423
394
  if not entry.get("supports_reconfigure", False):
424
395
  raise_tool_error(
425
396
  create_error_response(
@@ -0,0 +1,118 @@
1
+ """The enable/disable and log-level modes of ``ha_set_integration``.
2
+
3
+ Neither runs a config flow: each sends one mutating WebSocket command after
4
+ the own-entry check (enable/disable and log level by entry look the entry up
5
+ first), and both refuse ha-mcp's own ``ha_mcp_tools`` entries.
6
+ """
7
+
8
+ from typing import Any
9
+
10
+ from ..errors import ErrorCode, create_error_response
11
+ from .config_entry_flow import refuse_component_entry
12
+ from .helpers import raise_tool_error, ws_failure_code
13
+
14
+
15
+ async def set_log_level(
16
+ client: Any,
17
+ entry_id: str | None,
18
+ domain: str | None,
19
+ log_level: str,
20
+ *,
21
+ other_modes: bool,
22
+ ) -> dict[str, Any]:
23
+ """Set an integration's log level through ``logger/integration_log_level``."""
24
+ if other_modes or (domain is None) == (entry_id is None):
25
+ raise_tool_error(
26
+ create_error_response(
27
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
28
+ "log_level takes exactly one of 'domain' or 'entry_id' and "
29
+ "cannot be combined with config, enabled or reconfigure",
30
+ suggestions=[
31
+ "Example: ha_set_integration(domain='zha', log_level='DEBUG')",
32
+ ],
33
+ context={"entry_id": entry_id, "domain": domain},
34
+ )
35
+ )
36
+ if entry_id is not None:
37
+ entry = await client.get_config_entry(entry_id)
38
+ domain = entry.get("domain")
39
+ refuse_component_entry(domain, action="set the log level of", entry_id=entry_id)
40
+ result = await client.send_websocket_message(
41
+ {
42
+ "type": "logger/integration_log_level",
43
+ "integration": domain,
44
+ # NOTSET is what the UI's Disable debug logging sends.
45
+ "level": "NOTSET" if log_level == "DEFAULT" else log_level,
46
+ "persistence": "once",
47
+ }
48
+ )
49
+ if not result.get("success"):
50
+ raise_tool_error(
51
+ create_error_response(
52
+ ws_failure_code(result),
53
+ f"Failed to set the log level for '{domain}': "
54
+ f"{result.get('error') or 'unknown error'}",
55
+ context={"domain": domain, "entry_id": entry_id},
56
+ )
57
+ )
58
+ return {
59
+ "success": True,
60
+ "action": "set_log_level",
61
+ "domain": domain,
62
+ "log_level": log_level,
63
+ "note": (
64
+ "Override cleared: the integration now logs at the inherited "
65
+ "default level; a level set for it in configuration.yaml returns "
66
+ "after the next restart."
67
+ if log_level == "DEFAULT"
68
+ else "Applies now and through the next Home Assistant restart."
69
+ ),
70
+ }
71
+
72
+
73
+ async def set_entry_enabled(
74
+ client: Any, entry_id: str, enabled: bool
75
+ ) -> dict[str, Any]:
76
+ """Enable or disable a config entry via ``config_entries/disable``."""
77
+ entry = await client.get_config_entry(entry_id)
78
+ refuse_component_entry(
79
+ entry.get("domain"), action="enable or disable", entry_id=entry_id
80
+ )
81
+ message = {
82
+ "type": "config_entries/disable",
83
+ "entry_id": entry_id,
84
+ "disabled_by": None if enabled else "user",
85
+ }
86
+
87
+ result = await client.send_websocket_message(message)
88
+
89
+ if not result.get("success"):
90
+ error_msg = result.get("error", {})
91
+ if isinstance(error_msg, dict):
92
+ error_msg = error_msg.get("message", str(error_msg))
93
+ raise_tool_error(
94
+ create_error_response(
95
+ ErrorCode.SERVICE_CALL_FAILED,
96
+ f"Failed to {'enable' if enabled else 'disable'} integration: {error_msg}",
97
+ context={"entry_id": entry_id},
98
+ )
99
+ )
100
+
101
+ require_restart = (result.get("result") or {}).get("require_restart", False)
102
+
103
+ if require_restart:
104
+ note = "Home Assistant restart required for changes to take effect."
105
+ else:
106
+ note = (
107
+ "Integration has been loaded."
108
+ if enabled
109
+ else "Integration has been unloaded."
110
+ )
111
+
112
+ return {
113
+ "success": True,
114
+ "message": f"Integration {'enabled' if enabled else 'disabled'} successfully",
115
+ "entry_id": entry_id,
116
+ "require_restart": require_restart,
117
+ "note": note,
118
+ }
@@ -21,10 +21,12 @@ from ..errors import ErrorCode, create_error_response
21
21
  from ..utils.config_hash import compute_config_hash
22
22
  from .auto_backup import with_auto_backup
23
23
  from .config_entry_flow_walker import ReconfigureStatus
24
- from .config_entry_identity import ReconfigureIdentity
24
+ from .config_entry_identity import (
25
+ ReconfigureIdentity,
26
+ build_reconfigure_rollback_metadata,
27
+ )
25
28
  from .config_entry_reconfigure import (
26
29
  PreparedReconfigure,
27
- build_reconfigure_rollback_metadata,
28
30
  prepare_reconfigure_request,
29
31
  reconfigure_config_entry,
30
32
  )
@@ -39,6 +39,7 @@ from .component_api import (
39
39
  invalidate_caps,
40
40
  is_unknown_command,
41
41
  )
42
+ from .config_entry_flow import COMPONENT_DOMAIN
42
43
  from .config_entry_flow_form import _MISSING_DEFAULT, _step_owned_submission_value
43
44
  from .helpers import (
44
45
  exception_to_structured_error,
@@ -54,11 +55,6 @@ logger = logging.getLogger(__name__)
54
55
  # section of the web settings UI (Server Settings tab, bottom).
55
56
  FEATURE_FLAG = "HAMCP_ENABLE_DEV_MODE"
56
57
 
57
- # Domain of the ha_mcp_tools custom component. Its "server" config entry
58
- # runs the ha-mcp server in-process inside HA and exposes channel /
59
- # pip-spec options that ha_dev_manage_server drives.
60
- COMPONENT_DOMAIN = "ha_mcp_tools"
61
-
62
58
  # The component's own in-process command for locating its "server" config
63
59
  # entry (see ``_fetch_server_entry_via_component``) — replaces probing every
64
60
  # ha_mcp_tools-domain entry's options-flow schema from the outside.
@@ -30,6 +30,7 @@ from ha_mcp._vendor.fastmcp.tools import tool
30
30
  from ..errors import ErrorCode, create_error_response
31
31
  from .auto_backup import with_auto_backup
32
32
  from .component_api import ComponentCaps, get_component_caps
33
+ from .config_entry_flow import COMPONENT_DOMAIN as MCP_TOOLS_DOMAIN
33
34
  from .helpers import (
34
35
  exception_to_structured_error,
35
36
  log_tool_usage,
@@ -44,9 +45,6 @@ logger = logging.getLogger(__name__)
44
45
  # Feature flag - disabled by default for safety
45
46
  FEATURE_FLAG = "HAMCP_ENABLE_FILESYSTEM_TOOLS"
46
47
 
47
- # Domain for the custom component
48
- MCP_TOOLS_DOMAIN = "ha_mcp_tools"
49
-
50
48
  # Caller-token auth (mirrors custom_components/ha_mcp_tools).
51
49
  # The custom component's handlers reject every call that doesn't present
52
50
  # this field with the matching token. ha-mcp fetches the token once via
@@ -47,7 +47,11 @@ from .config_entry_backup import (
47
47
  resolve_config_entry_backup_domain,
48
48
  skip_unless_flow_helper,
49
49
  )
50
- from .config_entry_flow import create_config_entry, update_config_entry_options
50
+ from .config_entry_flow import (
51
+ create_config_entry,
52
+ refuse_component_entry,
53
+ update_config_entry_options,
54
+ )
51
55
  from .config_entry_flow_form import iter_schema_fields
52
56
  from .config_helpers.registry import _get_entities_for_config_entry
53
57
  from .config_helpers.schemas import SIMPLE_HELPER_TYPES, StorageHelperType
@@ -69,6 +73,7 @@ from .helpers import (
69
73
  validate_identifier_not_empty,
70
74
  ws_failure_code,
71
75
  )
76
+ from .integration_entry_state import set_entry_enabled, set_log_level
72
77
  from .integration_reconfigure import (
73
78
  ReconfigureRunner,
74
79
  reject_reconfigure_only_parameters,
@@ -1844,6 +1849,9 @@ class IntegrationTools:
1844
1849
  - Config subentries: use
1845
1850
  ha_config_set_helper(helper_type='config_subentry').
1846
1851
  - Removing an entry: use ha_remove_helpers_integrations.
1852
+ - ha-mcp's own ha_mcp_tools entries are refused: manage them in the HA
1853
+ UI, or (server settings, developer mode on) ha_dev_manage_settings /
1854
+ ha_dev_manage_server.
1847
1855
 
1848
1856
  Use ha_get_integration() to find entry IDs, and
1849
1857
  ha_get_integration(entry_id=..., include_schema=True) to inspect the
@@ -1876,7 +1884,8 @@ class IntegrationTools:
1876
1884
  expected_mac=expected_mac,
1877
1885
  expected_entity_ids=expected_entity_ids,
1878
1886
  )
1879
- return await self._set_log_level(
1887
+ return await set_log_level(
1888
+ self._client,
1880
1889
  entry_id,
1881
1890
  domain,
1882
1891
  log_level,
@@ -1918,6 +1927,7 @@ class IntegrationTools:
1918
1927
  "'local_calendar'",
1919
1928
  ],
1920
1929
  )
1930
+ refuse_component_entry(domain, action="add an entry for")
1921
1931
  return await create_config_entry(self._client, domain, config or {})
1922
1932
 
1923
1933
  if entry_id is None:
@@ -1944,7 +1954,7 @@ class IntegrationTools:
1944
1954
  )
1945
1955
 
1946
1956
  if enabled is not None:
1947
- return await self._set_entry_enabled(entry_id, enabled)
1957
+ return await set_entry_enabled(self._client, entry_id, enabled)
1948
1958
 
1949
1959
  if config is not None:
1950
1960
  # Options mode: drive the entry's options flow.
@@ -1992,103 +2002,6 @@ class IntegrationTools:
1992
2002
  error_context["domain"] = domain
1993
2003
  return error_context
1994
2004
 
1995
- async def _set_log_level(
1996
- self,
1997
- entry_id: str | None,
1998
- domain: str | None,
1999
- log_level: str,
2000
- *,
2001
- other_modes: bool,
2002
- ) -> dict[str, Any]:
2003
- """Set an integration's log level through ``logger/integration_log_level``."""
2004
- if other_modes or (domain is None) == (entry_id is None):
2005
- raise_tool_error(
2006
- create_error_response(
2007
- ErrorCode.VALIDATION_INVALID_PARAMETER,
2008
- "log_level takes exactly one of 'domain' or 'entry_id' and "
2009
- "cannot be combined with config, enabled or reconfigure",
2010
- suggestions=[
2011
- "Example: ha_set_integration(domain='zha', log_level='DEBUG')",
2012
- ],
2013
- context={"entry_id": entry_id, "domain": domain},
2014
- )
2015
- )
2016
- if entry_id is not None:
2017
- entry = await self._client.get_config_entry(entry_id)
2018
- domain = entry.get("domain")
2019
- result = await self._client.send_websocket_message(
2020
- {
2021
- "type": "logger/integration_log_level",
2022
- "integration": domain,
2023
- # NOTSET is what the UI's Disable debug logging sends.
2024
- "level": "NOTSET" if log_level == "DEFAULT" else log_level,
2025
- "persistence": "once",
2026
- }
2027
- )
2028
- if not result.get("success"):
2029
- raise_tool_error(
2030
- create_error_response(
2031
- ws_failure_code(result),
2032
- f"Failed to set the log level for '{domain}': "
2033
- f"{result.get('error') or 'unknown error'}",
2034
- context={"domain": domain, "entry_id": entry_id},
2035
- )
2036
- )
2037
- return {
2038
- "success": True,
2039
- "action": "set_log_level",
2040
- "domain": domain,
2041
- "log_level": log_level,
2042
- "note": (
2043
- "Override cleared: the integration now logs at the inherited "
2044
- "default level; a level set for it in configuration.yaml returns "
2045
- "after the next restart."
2046
- if log_level == "DEFAULT"
2047
- else "Applies now and through the next Home Assistant restart."
2048
- ),
2049
- }
2050
-
2051
- async def _set_entry_enabled(self, entry_id: str, enabled: bool) -> dict[str, Any]:
2052
- """Enable or disable a config entry via ``config_entries/disable``."""
2053
- message = {
2054
- "type": "config_entries/disable",
2055
- "entry_id": entry_id,
2056
- "disabled_by": None if enabled else "user",
2057
- }
2058
-
2059
- result = await self._client.send_websocket_message(message)
2060
-
2061
- if not result.get("success"):
2062
- error_msg = result.get("error", {})
2063
- if isinstance(error_msg, dict):
2064
- error_msg = error_msg.get("message", str(error_msg))
2065
- raise_tool_error(
2066
- create_error_response(
2067
- ErrorCode.SERVICE_CALL_FAILED,
2068
- f"Failed to {'enable' if enabled else 'disable'} integration: {error_msg}",
2069
- context={"entry_id": entry_id},
2070
- )
2071
- )
2072
-
2073
- require_restart = (result.get("result") or {}).get("require_restart", False)
2074
-
2075
- if require_restart:
2076
- note = "Home Assistant restart required for changes to take effect."
2077
- else:
2078
- note = (
2079
- "Integration has been loaded."
2080
- if enabled
2081
- else "Integration has been unloaded."
2082
- )
2083
-
2084
- return {
2085
- "success": True,
2086
- "message": f"Integration {'enabled' if enabled else 'disabled'} successfully",
2087
- "entry_id": entry_id,
2088
- "require_restart": require_restart,
2089
- "note": note,
2090
- }
2091
-
2092
2005
  @tool(
2093
2006
  name="ha_remove_helpers_integrations",
2094
2007
  tags={"Helper Entities", "Integrations"},
@@ -2174,6 +2087,9 @@ class IntegrationTools:
2174
2087
  config entry) — use `ha_remove_entity` instead.
2175
2088
  - YAML-configured helpers — they have no storage backend. Edit the
2176
2089
  YAML file and reload the relevant integration.
2090
+ - ha-mcp's own ha_mcp_tools entries are refused: manage them in the HA
2091
+ UI, or (server settings, developer mode on) ha_dev_manage_settings /
2092
+ ha_dev_manage_server.
2177
2093
 
2178
2094
  ROUTING:
2179
2095
  - SIMPLE helper_type (input_button, input_boolean, input_select,
@@ -2344,8 +2260,18 @@ class IntegrationTools:
2344
2260
 
2345
2261
  # === Path 3: Direct config entry delete (any integration) ===
2346
2262
  async def _delete_direct_entry(self, entry_id: str) -> dict[str, Any]:
2347
- """Delete a config entry directly via the REST delete API."""
2263
+ """Delete a config entry directly via the REST delete API.
2264
+
2265
+ Looks the entry up first and refuses ha-mcp's own ``ha_mcp_tools``
2266
+ entries before any DELETE is sent.
2267
+ """
2348
2268
  try:
2269
+ entry = await self._client.get_config_entry(entry_id)
2270
+ refuse_component_entry(
2271
+ entry.get("domain"),
2272
+ action="delete a config entry of",
2273
+ entry_id=entry_id,
2274
+ )
2349
2275
  result = await self._client.delete_config_entry(entry_id)
2350
2276
  require_restart = result.get("require_restart", False)
2351
2277
  return {
@@ -2366,15 +2292,16 @@ class IntegrationTools:
2366
2292
  except ToolError:
2367
2293
  raise
2368
2294
  except HomeAssistantAPIError as e:
2369
- # HA returns 404 for missing config entries (see
2370
- # RestClient.delete_config_entry — the REST DELETE on a
2371
- # nonexistent entry surfaces as HomeAssistantAPIError with
2372
- # status_code=404). Surface as RESOURCE_NOT_FOUND so callers
2373
- # can distinguish absent target from real failures; the typo
2374
- # case (agent passed the wrong entry_id) is the failure mode
2375
- # that "absent → success" would silently mask. Non-404 API
2376
- # errors are real failures and bubble through
2377
- # exception_to_structured_error below.
2295
+ # A missing entry surfaces as HomeAssistantAPIError with
2296
+ # status_code=404 from the own-entry lookup
2297
+ # (RestClient.get_config_entry), before any DELETE is sent, or
2298
+ # from the DELETE itself when the entry vanished in between
2299
+ # (RestClient.delete_config_entry). Surface it as
2300
+ # RESOURCE_NOT_FOUND so callers can distinguish an absent target
2301
+ # from a real failure; the typo case (agent passed the wrong
2302
+ # entry_id) is the failure mode that "absent → success" would
2303
+ # silently mask. Non-404 API errors are real failures and bubble
2304
+ # through exception_to_structured_error below.
2378
2305
  if e.status_code == 404:
2379
2306
  raise_tool_error(
2380
2307
  create_error_response(
@@ -49,6 +49,7 @@ from .component_api import (
49
49
  invalidate_caps,
50
50
  is_unknown_command,
51
51
  )
52
+ from .config_entry_flow import is_component_domain
52
53
  from .helpers import (
53
54
  exception_to_structured_error,
54
55
  log_tool_usage,
@@ -805,14 +806,10 @@ class ServiceTools:
805
806
  )
806
807
  )
807
808
  # ha_mcp_tools.* services are restricted to the ha-mcp server's dedicated
808
- # wrappers (which inject the required caller token). Block ha_call_service
809
- # from forwarding to that domain — it would otherwise be a bypass path
810
- # around the dedicated tools. HA core's service registry lowercases the
811
- # domain on fallback lookup (homeassistant/core.py
812
- # ServiceRegistry.async_call), so normalise here to make sure a mixed-case
813
- # `HA_MCP_TOOLS` can't slip past this exact-string check and still resolve
814
- # downstream.
815
- if domain.strip().lower() == "ha_mcp_tools":
809
+ # wrappers (which inject the required caller token); forwarding to that
810
+ # domain would bypass them. is_component_domain normalises case because
811
+ # HA core's service registry lowercases the domain on fallback lookup.
812
+ if is_component_domain(domain):
816
813
  raise_tool_error(
817
814
  create_validation_error(
818
815
  (