ha-mcp-dev 8.7.0.dev3047__tar.gz → 8.7.0.dev3053__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 (784) hide show
  1. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_meta.py +2 -0
  5. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_registry.py +6 -0
  6. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_settings.py +14 -0
  7. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/server.py +10 -168
  8. ha_mcp_dev-8.7.0.dev3053/src/ha_mcp/server_instructions.py +141 -0
  9. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/server_tool_text.py +9 -2
  10. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_advanced.py +3 -1
  11. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_tools_meta.py +2 -1
  12. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/az.json +2 -0
  13. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/cs.json +2 -0
  14. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/de.json +2 -0
  15. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/en.json +2 -0
  16. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/eo.json +2 -0
  17. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/es.json +2 -0
  18. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/fr.json +2 -0
  19. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/it.json +2 -0
  20. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/ko.json +2 -0
  21. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/nl.json +2 -0
  22. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/pl.json +2 -0
  23. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/ru.json +2 -0
  24. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/sv.json +2 -0
  25. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/zh-Hans.json +2 -0
  26. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/zh-Hant.json +2 -0
  27. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +2 -0
  28. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/bug_report_config.py +6 -0
  29. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_dev.py +35 -36
  30. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/categorized_search.py +2 -1
  31. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/skill_loader.py +26 -0
  32. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/LICENSE +0 -0
  33. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/README.md +0 -0
  34. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/__init__.py +0 -0
  35. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/__main__.py +0 -0
  36. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_pypi_marker +0 -0
  37. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_rich_compat.py +0 -0
  38. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/__init__.py +0 -0
  39. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  40. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  41. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  42. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  43. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  44. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  45. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  46. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  47. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  48. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  49. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  50. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  51. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  52. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  53. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  54. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  55. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  56. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  57. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  58. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  59. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  60. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  61. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  62. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  63. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  64. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  65. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  66. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  67. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  68. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  69. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  70. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  71. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  72. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  73. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  74. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  75. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  76. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  77. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  78. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  79. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  80. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  81. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  82. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  83. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  84. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  85. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  86. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  87. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  88. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  89. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  90. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  91. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  92. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  93. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  94. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  95. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  96. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  97. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  98. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  99. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  100. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  101. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  102. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  103. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  104. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  105. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  106. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  107. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  108. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  109. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  110. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  111. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  112. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  113. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  114. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  115. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  116. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  117. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  118. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  119. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  120. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  121. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  122. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  123. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  124. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  125. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  126. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  127. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  128. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  129. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  130. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  131. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  132. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  133. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  134. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  135. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  136. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  137. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  138. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  139. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  140. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  141. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  142. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  143. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  144. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  145. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  146. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  147. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  148. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  149. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  150. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  151. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  152. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  153. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  154. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  155. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  156. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  157. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  158. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  159. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  160. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  161. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  162. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  163. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  164. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  165. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  166. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  167. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  168. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  169. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  170. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  171. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  172. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  173. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  174. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  175. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  176. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  177. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  178. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  179. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  180. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  181. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  182. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  183. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  184. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  185. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  186. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  187. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  188. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  189. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  190. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  191. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  192. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  193. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  194. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  195. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  196. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  197. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  198. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  199. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  200. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  201. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  202. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  203. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  204. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  205. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  206. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  207. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  208. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  209. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  210. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  211. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  212. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  213. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  214. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  215. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  216. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  217. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  218. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  219. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  220. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  221. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  222. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  223. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  224. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  225. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  226. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  227. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  228. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  229. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  230. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  231. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  232. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  233. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  234. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  235. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  236. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  237. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  238. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  239. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  240. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  241. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  242. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  243. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  244. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  245. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  246. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  247. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  248. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  249. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  250. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  251. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  252. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  253. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  254. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  255. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  256. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  257. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  258. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  259. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  260. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  261. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  262. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  263. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  264. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  265. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  266. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  267. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  268. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  269. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  270. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  271. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  272. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  273. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  274. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  275. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  276. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  277. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  278. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  279. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  280. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  281. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  282. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  283. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  284. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  285. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  286. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  287. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  288. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  289. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  290. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  291. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  292. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  293. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  294. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  295. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  296. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  297. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  298. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  299. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  300. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  301. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  302. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  303. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  304. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  305. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  306. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  307. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  308. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  309. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  310. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  311. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  312. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  313. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  314. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  315. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  316. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  317. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  318. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  319. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  320. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  321. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  322. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  323. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  324. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  325. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  326. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  327. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  328. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  329. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  330. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  331. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  332. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  333. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  334. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  335. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  336. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  337. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  338. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  339. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  340. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  341. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  342. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  343. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  344. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  345. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  346. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  347. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  348. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  349. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  350. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  351. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  352. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  353. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  354. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  355. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  356. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  357. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  358. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  359. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  360. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  361. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  362. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  363. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  364. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  365. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  366. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  367. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  368. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  369. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  370. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  371. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  372. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  373. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  374. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  375. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  376. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  377. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  378. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  379. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  380. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  381. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  382. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  383. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  384. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  385. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  386. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  387. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  388. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  389. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  390. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  391. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  392. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  393. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  394. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  395. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  396. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  397. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  398. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  399. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  400. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  401. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  402. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  403. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  404. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  405. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  406. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  407. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  408. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  409. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  410. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  411. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  412. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  413. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  414. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  415. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  416. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  417. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  418. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  419. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  420. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  421. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  422. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  423. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  424. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  425. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  426. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  427. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  428. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  429. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  430. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  431. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  432. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  433. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  434. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  435. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  436. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  437. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  438. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  439. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  440. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  441. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  442. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  443. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  444. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  445. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  446. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  447. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  448. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  449. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  450. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  451. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  452. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  453. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/requirements.txt +0 -0
  454. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  455. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  456. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  457. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  458. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  459. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  460. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  461. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  462. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  463. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  464. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  465. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  466. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  467. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  468. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  469. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  470. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  471. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  472. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  473. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  474. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  475. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  476. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  477. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  478. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  479. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  480. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  481. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  482. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  483. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  484. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  485. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  486. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  487. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  488. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  489. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  490. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  491. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  492. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  493. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  494. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  495. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  496. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  497. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  498. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  499. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  500. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  501. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  502. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  503. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  504. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  505. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  506. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  507. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  508. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  509. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  510. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/_version.py +0 -0
  511. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/app_discovery.py +0 -0
  512. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/__init__.py +0 -0
  513. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/consent_form.py +0 -0
  514. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/oidc_compat.py +0 -0
  515. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/auth/provider.py +0 -0
  516. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_diff.py +0 -0
  517. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_entity_ids.py +0 -0
  518. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_integrations.py +0 -0
  519. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_manager.py +0 -0
  520. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/backup_tags.py +0 -0
  521. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/browser_landing.py +0 -0
  522. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/__init__.py +0 -0
  523. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/admin_routes.py +0 -0
  524. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/rest_client.py +0 -0
  525. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/supervisor_client.py +0 -0
  526. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/websocket_client.py +0 -0
  527. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/client/websocket_listener.py +0 -0
  528. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config.py +0 -0
  529. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_backup.py +0 -0
  530. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/config_overrides.py +0 -0
  531. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  532. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  533. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  534. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  535. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  536. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  537. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/errors.py +0 -0
  538. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/ha_request_queue.py +0 -0
  539. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  540. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/http_transport.py +0 -0
  541. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/image_info.py +0 -0
  542. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/llm_exposure.py +0 -0
  543. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/log_filters.py +0 -0
  544. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/__init__.py +0 -0
  545. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/approval_queue.py +0 -0
  546. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/decision_pin.py +0 -0
  547. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/decisions.py +0 -0
  548. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/editing.py +0 -0
  549. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/evaluator.py +0 -0
  550. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/events.py +0 -0
  551. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/handlers.py +0 -0
  552. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/middleware.py +0 -0
  553. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/model.py +0 -0
  554. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/mrtr.py +0 -0
  555. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/persistence.py +0 -0
  556. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/server_channels.py +0 -0
  557. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/policy/value_sources.py +0 -0
  558. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/py.typed +0 -0
  559. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/read_only.py +0 -0
  560. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/redaction.py +0 -0
  561. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/renamed_tools.py +0 -0
  562. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  563. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  564. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  565. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  566. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  567. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  568. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  569. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  570. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  571. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  572. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  573. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  574. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  575. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  576. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  577. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  578. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  579. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/server_lifespan.py +0 -0
  580. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/__init__.py +0 -0
  581. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  582. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  583. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  584. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  585. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  586. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  587. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  588. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  589. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  590. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/_theme.py +0 -0
  591. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  592. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  593. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings.css +0 -0
  594. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings.html +0 -0
  595. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  596. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  597. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  598. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  599. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  600. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  601. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  602. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  603. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/smoke_test.py +0 -0
  604. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  605. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/strict_bps.py +0 -0
  606. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tool_dispatch.py +0 -0
  607. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/__init__.py +0 -0
  608. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/area_messages.py +0 -0
  609. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/auto_backup.py +0 -0
  610. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/backup.py +0 -0
  611. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/backup_access.py +0 -0
  612. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  613. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  614. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/best_practice_result.py +0 -0
  615. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  616. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  617. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  618. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/blueprint_write.py +0 -0
  619. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  620. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/bulk_selector.py +0 -0
  621. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/coercion.py +0 -0
  622. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_api.py +0 -0
  623. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_config_entries.py +0 -0
  624. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_config_reads.py +0 -0
  625. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  626. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_devices.py +0 -0
  627. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  628. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_registries.py +0 -0
  629. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  630. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  631. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  632. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  633. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  634. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  635. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  636. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  637. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  638. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  639. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  640. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  641. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  642. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  643. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  644. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  645. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  646. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  647. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  648. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  649. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  650. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  651. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_write_errors.py +0 -0
  652. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  653. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/core_contract.py +0 -0
  654. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  655. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  656. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  657. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/dev_backup.py +0 -0
  658. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/device_control.py +0 -0
  659. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/device_enrichment.py +0 -0
  660. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  661. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/energy_preferences.py +0 -0
  662. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  663. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/entity_registration.py +0 -0
  664. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  665. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  666. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  667. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/hacs_registration.py +0 -0
  668. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/helper_flows.py +0 -0
  669. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/helpers.py +0 -0
  670. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/history_response.py +0 -0
  671. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  672. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_common.py +0 -0
  673. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_sources.py +0 -0
  674. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  675. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  676. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/__init__.py +0 -0
  677. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/base.py +0 -0
  678. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/matter.py +0 -0
  679. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/thread.py +0 -0
  680. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  681. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/zwave.py +0 -0
  682. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  683. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/recorder_errors.py +0 -0
  684. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/reference_validator.py +0 -0
  685. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/registry.py +0 -0
  686. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  687. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/response_helpers.py +0 -0
  688. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/scene_discovery.py +0 -0
  689. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/__init__.py +0 -0
  690. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/base.py +0 -0
  691. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/component.py +0 -0
  692. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/entities.py +0 -0
  693. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/legacy.py +0 -0
  694. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/modes.py +0 -0
  695. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/overview.py +0 -0
  696. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/response.py +0 -0
  697. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/search/state.py +0 -0
  698. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  699. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  700. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  701. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  702. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  703. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  704. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  705. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  706. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  707. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  708. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  709. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/statistics_resets.py +0 -0
  710. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/system_restart.py +0 -0
  711. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tool_hints.py +0 -0
  712. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  713. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_addons.py +0 -0
  714. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_areas.py +0 -0
  715. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  716. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  717. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  718. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_calendar.py +0 -0
  719. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_camera.py +0 -0
  720. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_categories.py +0 -0
  721. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_code.py +0 -0
  722. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  723. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  724. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  725. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  726. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  727. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  728. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_energy.py +0 -0
  729. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_entities.py +0 -0
  730. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  731. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_groups.py +0 -0
  732. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_hacs.py +0 -0
  733. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_history.py +0 -0
  734. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_integrations.py +0 -0
  735. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_labels.py +0 -0
  736. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_logs.py +0 -0
  737. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_radio.py +0 -0
  738. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_registry.py +0 -0
  739. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_resources.py +0 -0
  740. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_search.py +0 -0
  741. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  742. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_service.py +0 -0
  743. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_services.py +0 -0
  744. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_system.py +0 -0
  745. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_themes.py +0 -0
  746. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_todo.py +0 -0
  747. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_traces.py +0 -0
  748. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_updates.py +0 -0
  749. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_utility.py +0 -0
  750. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  751. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  752. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  753. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/tools_zones.py +0 -0
  754. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/util_helpers.py +0 -0
  755. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/validation_middleware.py +0 -0
  756. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/tools/ws_waiters.py +0 -0
  757. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/__init__.py +0 -0
  758. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/compact_params.py +0 -0
  759. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/component_helpers.py +0 -0
  760. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/component_search.py +0 -0
  761. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  762. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  763. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/transport_security.py +0 -0
  764. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/update_check.py +0 -0
  765. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/__init__.py +0 -0
  766. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/config_hash.py +0 -0
  767. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/config_write_lock.py +0 -0
  768. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  769. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/data_paths.py +0 -0
  770. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  771. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/domain_handlers.py +0 -0
  772. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/entity_membership.py +0 -0
  773. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  774. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  775. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  776. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/operation_manager.py +0 -0
  777. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/python_sandbox.py +0 -0
  778. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  779. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/utils/usage_logger.py +0 -0
  780. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/__init__.py +0 -0
  781. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/enforcement.py +0 -0
  782. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/model.py +0 -0
  783. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/src/ha_mcp/visibility/persistence.py +0 -0
  784. {ha_mcp_dev-8.7.0.dev3047 → ha_mcp_dev-8.7.0.dev3053}/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.dev3047
3
+ Version: 8.7.0.dev3053
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.dev3047"
7
+ version = "8.7.0.dev3053"
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.dev3047"
7
+ version = "8.7.0.dev3053"
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
@@ -75,6 +75,8 @@ class Setting:
75
75
  range: tuple[float, float] | None = None
76
76
  off_value: int | None = None
77
77
  choices: tuple[str, ...] | None = None
78
+ # Free text whose line breaks matter; the UI edits it in a textarea.
79
+ multiline: bool = False
78
80
  # An env value that does not parse or is out of range logs a warning and
79
81
  # gives the default, instead of failing the settings validation.
80
82
  lenient: bool = False
@@ -19,6 +19,7 @@ from ha_mcp.config_settings import Settings
19
19
 
20
20
  __all__ = [
21
21
  "ADDON_SYNCED_ADVANCED_FIELDS",
22
+ "ADVANCED_MULTILINE",
22
23
  "ADVANCED_RESTART_REQUIRED",
23
24
  "ADVANCED_SETTINGS_FIELDS",
24
25
  "BACKUP_OVERRIDE_FIELDS",
@@ -244,6 +245,11 @@ _ADVANCED_SETTINGS_CHOICES: dict[str, tuple[str, ...]] = {
244
245
  if setting.choices is not None
245
246
  }
246
247
 
248
+ # Advanced string fields edited as multi-line text (renders as <textarea>).
249
+ ADVANCED_MULTILINE: frozenset[str] = frozenset(
250
+ name for name, _field, setting in _settings_of("advanced") if setting.multiline
251
+ )
252
+
247
253
  # Advanced fields that take effect only after a restart of the MCP server.
248
254
  ADVANCED_RESTART_REQUIRED: frozenset[str] = frozenset(
249
255
  name
@@ -280,6 +280,20 @@ class Settings(BaseSettings):
280
280
  Setting(surface="advanced", section="tools_surface", restart_required=True),
281
281
  ] = Field("all", alias="ENABLED_TOOL_MODULES")
282
282
 
283
+ # Free text appended to the MCP server instructions, so every client
284
+ # connecting to this installation gets the same user-defined guidance
285
+ # (e.g. where household notes live). Empty adds nothing.
286
+ custom_instructions: Annotated[
287
+ str,
288
+ Setting(
289
+ surface="advanced",
290
+ section="tools_surface",
291
+ app=_ALL_FLAVORS,
292
+ restart_required=True,
293
+ multiline=True,
294
+ ),
295
+ ] = Field("", alias="HAMCP_CUSTOM_INSTRUCTIONS")
296
+
283
297
  # Dashboard partial update tools (python_transform, find_card)
284
298
  # These are token-efficient alternatives to full config replacement.
285
299
  # Disable when using clients with programmatic tool use (future).
@@ -19,16 +19,19 @@ from pydantic import Field
19
19
  from .config import _PACKAGE_VERSION, get_global_settings
20
20
  from .errors import ErrorCode, create_error_response
21
21
  from .http_transport import HttpTransportFastMCP as FastMCP
22
+ from .server_instructions import (
23
+ build_skills_instructions,
24
+ compose_instructions,
25
+ skill_tool_hidden,
26
+ )
22
27
  from .server_lifespan import server_lifespan
23
28
  from .server_tool_text import (
24
- ISSUE_FILING_INSTRUCTIONS,
25
29
  LITE_DOCSTRING_DESTINATIONS,
26
30
  LITE_DOCSTRINGS,
27
- READ_ONLY_INSTRUCTIONS,
28
31
  SEARCH_KEYWORDS,
29
32
  SEARCH_TOOL_DESCRIPTION,
33
+ SKILL_TOOL_NAME,
30
34
  SKILL_USE_BEFORE_KEYWORDS,
31
- TOOL_DISCOVERY_INSTRUCTIONS,
32
35
  )
33
36
  from .tools.helpers import raise_tool_error
34
37
  from .tools.tool_hints import read_only_hints
@@ -46,12 +49,6 @@ if TYPE_CHECKING:
46
49
 
47
50
  logger = logging.getLogger(__name__)
48
51
 
49
- # Name of the consolidated skill tool. Defined as a module
50
- # constant so settings UI, instructions, tests, and pinning all agree on
51
- # one canonical string. 18 chars — well under the 40-char cap that
52
- # Cloudflare's MCP portal enforces (#1121).
53
- SKILL_TOOL_NAME = "ha_get_skill_guide"
54
-
55
52
  # Names this tool replaced in #1134. Appended to the catalog description
56
53
  # so agents trained on the prior catalog (or pasting old instructions)
57
54
  # see the redirect inside the tool itself, not just via BM25 keyword
@@ -319,147 +316,18 @@ class HomeAssistantSmartMCPServer:
319
316
 
320
317
  return get_skills_dir()
321
318
 
322
- def _skill_tool_hidden(self) -> bool:
323
- """True when ha_get_skill_guide will be absent from the catalog.
324
-
325
- The tool is user- or env-disableable only while strict-BPS mode
326
- is off (#1886) — apply_tool_visibility strips the disable
327
- otherwise. Consulted at instruction-build time so the skills
328
- header doesn't direct clients to a tool that is not being
329
- served. Fails toward False (mention the tool): a wrong mention
330
- costs one unknown-tool error, a wrong omission hides the only
331
- non-resource access path.
332
- """
333
- try:
334
- from .settings_ui._persistence import effective_tool_config
335
- from .settings_ui._tools_meta import effective_mandatory_tools
336
-
337
- states = effective_tool_config().get("tools", {})
338
- return states.get(
339
- SKILL_TOOL_NAME
340
- ) == "disabled" and SKILL_TOOL_NAME not in effective_mandatory_tools(
341
- self.settings
342
- )
343
- except Exception:
344
- logger.debug("skill-tool visibility lookup failed", exc_info=True)
345
- return False
346
-
347
319
  def _build_instructions(self) -> str:
348
320
  """Compose the server instructions sent in the MCP initialize response."""
349
- sections: list[str] = []
350
- skills = self._build_skills_instructions()
351
- if skills:
352
- sections.append(skills)
353
-
354
- # Surface Read Only Mode in the startup instructions so clients
355
- # that show server instructions warn the model up front. Startup
356
- # state only — live flips are covered by the structured
357
- # READ_ONLY_MODE call errors and the ha_get_overview field.
358
- if self.settings.read_only_mode:
359
- sections.append(READ_ONLY_INSTRUCTIONS)
360
- sections.append(ISSUE_FILING_INSTRUCTIONS)
361
- return "\n\n".join(sections)
321
+ return compose_instructions(self._build_skills_instructions(), self.settings)
362
322
 
363
323
  def _build_skills_instructions(self) -> str | None:
364
- """Build server instructions from bundled skill frontmatter.
365
-
366
- Reads the description field from each SKILL.md's YAML frontmatter
367
- and includes it as-is in the server instructions. The description
368
- is authored for LLM consumption and should not be parsed or
369
- restructured by code.
370
-
371
- Returns None when no skills directory or no parseable skills are
372
- present, leaving instructions unchanged from the default (None).
373
- """
374
- skills_dir = self._get_skills_dir()
375
- if not skills_dir:
376
- return None
377
-
378
- try:
379
- entries = sorted(skills_dir.iterdir())
380
- except OSError as e:
381
- logger.warning("Could not read skills directory %s: %s", skills_dir, e)
382
- return None
383
-
384
- skill_blocks: list[str] = []
385
- for skill_dir in entries:
386
- main_file = skill_dir / "SKILL.md"
387
- if not skill_dir.is_dir() or not main_file.exists():
388
- continue
389
-
390
- block = self._build_skill_block(skill_dir.name, main_file)
391
- if block:
392
- skill_blocks.append(block)
393
-
394
- if not skill_blocks:
395
- return None
396
-
397
- if self._skill_tool_hidden():
398
- # The user disabled the skill tool (possible only outside
399
- # strict-BPS mode, #1886) — directing clients to it would
400
- # steer them into a tool that is not in the catalog. Their
401
- # stated fallback is a local skills install.
402
- access_method = (
403
- "Read the skill via MCP resources (resources/read with the "
404
- "skill:// URI) — if you can read these instructions, you "
405
- "should be able to access resources as well. If for any "
406
- "reason you cannot access MCP resources, refer to your "
407
- "locally installed copy of these skills instead (the "
408
- f"{SKILL_TOOL_NAME} fallback tool is disabled on this "
409
- "server)."
410
- )
411
- else:
412
- access_method = (
413
- "Read the skill via MCP resources (resources/read with the "
414
- "skill:// URI) — if you can read these instructions, you "
415
- "should be able to access resources as well. If for any "
416
- f"reason you cannot access MCP resources, call {SKILL_TOOL_NAME}() "
417
- "with no arguments as a fallback: it returns SKILL.md, then "
418
- "pass file='<path>' for a reference file. If you can access "
419
- "resources normally, do "
420
- "not waste time or tokens on that tool."
421
- )
422
-
423
- header = (
424
- "IMPORTANT: This server provides best-practice skills that MUST "
425
- "be consulted before performing matching actions. "
426
- "Read the SKILL.md for the matching skill "
427
- "\u2014 it contains a Reference Files table that maps tasks to "
428
- "specific reference files. You MUST read the referenced files "
429
- "that match your current task before proceeding. "
430
- "Do NOT load all reference files upfront "
431
- "\u2014 only the ones the table directs you to.\n\n"
432
- f"How to access: {access_method}\n"
324
+ """The skills section of the instructions, or None without skills."""
325
+ return build_skills_instructions(
326
+ self._get_skills_dir(), self.settings, skill_tool_hidden(self.settings)
433
327
  )
434
328
 
435
- instructions = header + "\n".join(skill_blocks)
436
-
437
- # Append tool search instructions when enabled
438
- if self.settings.enable_tool_search:
439
- instructions += TOOL_DISCOVERY_INSTRUCTIONS.format(
440
- pinned=", ".join(DEFAULT_PINNED_TOOLS)
441
- )
442
-
443
- return instructions
444
-
445
329
  _parse_skill_frontmatter = staticmethod(parse_skill_frontmatter)
446
330
 
447
- def _build_skill_block(self, skill_name: str, main_file: Path) -> str | None:
448
- """Build an instruction block for a single skill.
449
-
450
- Reads the description field from YAML frontmatter and includes it
451
- verbatim. The description is designed for LLM consumption and
452
- contains its own trigger conditions and symptom indicators.
453
- """
454
- frontmatter = self._parse_skill_frontmatter(main_file)
455
- if not frontmatter:
456
- return None
457
-
458
- description = frontmatter["description"]
459
- uri = f"skill://{skill_name}/SKILL.md"
460
-
461
- return f"\n### Skill: {skill_name} ({uri})\n{description.strip()}"
462
-
463
331
  def _apply_settings_visibility(self) -> None:
464
332
  """Apply persisted tool visibility from ``tool_config.json``.
465
333
 
@@ -1089,32 +957,6 @@ class HomeAssistantSmartMCPServer:
1089
957
  else:
1090
958
  logger.warning(message, *args)
1091
959
 
1092
- def _list_bundled_skills(
1093
- self, skills_dir: Path
1094
- ) -> list[tuple[str, Path, dict[str, Any]]]:
1095
- """Return parsed (name, dir, frontmatter) triples for valid bundled skills.
1096
-
1097
- Skips entries that aren't directories, lack ``SKILL.md``, or whose
1098
- frontmatter doesn't parse. Sorted by directory name for stable
1099
- ordering across clients.
1100
- """
1101
- try:
1102
- entries = sorted(skills_dir.iterdir())
1103
- except OSError as e:
1104
- logger.warning("Could not read skills directory %s: %s", skills_dir, e)
1105
- return []
1106
-
1107
- skills: list[tuple[str, Path, dict[str, Any]]] = []
1108
- for skill_dir in entries:
1109
- main_file = skill_dir / "SKILL.md"
1110
- if not skill_dir.is_dir() or not main_file.exists():
1111
- continue
1112
- frontmatter = self._parse_skill_frontmatter(main_file)
1113
- if not frontmatter:
1114
- continue
1115
- skills.append((skill_dir.name, skill_dir, frontmatter))
1116
- return skills
1117
-
1118
960
  def _register_skill_guide_tool(self, skills_dir: Path | None) -> int:
1119
961
  """Register the ``ha_get_skill_guide`` tool unconditionally.
1120
962
 
@@ -0,0 +1,141 @@
1
+ """The instructions the server sends in the MCP initialize response.
2
+
3
+ Sections, in order: the bundled best-practice skills with how to read them
4
+ (plus the tool-search note when that mode is on), the Read Only Mode
5
+ warning, the issue-filing rule, and the installation owner's
6
+ ``custom_instructions``. The skills header and access fallbacks are
7
+ defined here; the notices come from ``server_tool_text``.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import logging
13
+ from pathlib import Path
14
+ from typing import TYPE_CHECKING
15
+
16
+ from .server_tool_text import (
17
+ ISSUE_FILING_INSTRUCTIONS,
18
+ READ_ONLY_INSTRUCTIONS,
19
+ SKILL_TOOL_NAME,
20
+ TOOL_DISCOVERY_INSTRUCTIONS,
21
+ )
22
+ from .transforms import DEFAULT_PINNED_TOOLS
23
+ from .utils.skill_loader import list_skills
24
+
25
+ if TYPE_CHECKING:
26
+ from .config_settings import Settings
27
+
28
+ logger = logging.getLogger(__name__)
29
+
30
+ OWNER_HEADING = "## Instructions from this installation's owner"
31
+
32
+ _SKILLS_HEADER = (
33
+ "IMPORTANT: This server provides best-practice skills that MUST "
34
+ "be consulted before performing matching actions. "
35
+ "Read the SKILL.md for the matching skill "
36
+ "— it contains a Reference Files table that maps tasks to "
37
+ "specific reference files. You MUST read the referenced files "
38
+ "that match your current task before proceeding. "
39
+ "Do NOT load all reference files upfront "
40
+ "— only the ones the table directs you to.\n\n"
41
+ "How to access: {access_method}\n"
42
+ )
43
+
44
+ _RESOURCE_ACCESS = (
45
+ "Read the skill via MCP resources (resources/read with the "
46
+ "skill:// URI) — if you can read these instructions, you "
47
+ "should be able to access resources as well. "
48
+ )
49
+
50
+ # The user disabled the skill tool (possible only outside strict-BPS mode,
51
+ # #1886) — directing clients to it would steer them into a tool that is not
52
+ # in the catalog. Their stated fallback is a local skills install.
53
+ _LOCAL_SKILLS_FALLBACK = (
54
+ "If for any reason you cannot access MCP resources, refer to your "
55
+ "locally installed copy of these skills instead (the "
56
+ f"{SKILL_TOOL_NAME} fallback tool is disabled on this server)."
57
+ )
58
+
59
+ _SKILL_TOOL_FALLBACK = (
60
+ f"If for any reason you cannot access MCP resources, call {SKILL_TOOL_NAME}() "
61
+ "with no arguments as a fallback: it returns SKILL.md, then "
62
+ "pass file='<path>' for a reference file. If you can access "
63
+ "resources normally, do not waste time or tokens on that tool."
64
+ )
65
+
66
+
67
+ def skill_tool_hidden(settings: Settings) -> bool:
68
+ """True when ha_get_skill_guide will be absent from the catalog.
69
+
70
+ The tool is user- or env-disableable only while strict-BPS mode
71
+ is off (#1886) — apply_tool_visibility strips the disable
72
+ otherwise. Consulted at instruction-build time so the skills
73
+ header doesn't direct clients to a tool that is not being
74
+ served. Fails toward False (mention the tool): a wrong mention
75
+ costs one unknown-tool error, a wrong omission hides the only
76
+ non-resource access path.
77
+ """
78
+ try:
79
+ from .settings_ui._persistence import effective_tool_config
80
+ from .settings_ui._tools_meta import effective_mandatory_tools
81
+
82
+ states = effective_tool_config(settings).get("tools", {})
83
+ return states.get(
84
+ SKILL_TOOL_NAME
85
+ ) == "disabled" and SKILL_TOOL_NAME not in effective_mandatory_tools(settings)
86
+ except Exception:
87
+ logger.debug("skill-tool visibility lookup failed", exc_info=True)
88
+ return False
89
+
90
+
91
+ def skill_block(skill_name: str, description: str) -> str:
92
+ """One skill's entry: its resource URI and its LLM-authored description."""
93
+ uri = f"skill://{skill_name}/SKILL.md"
94
+ return f"\n### Skill: {skill_name} ({uri})\n{description.strip()}"
95
+
96
+
97
+ def build_skills_instructions(
98
+ skills_dir: Path | None, settings: Settings, tool_hidden: bool
99
+ ) -> str | None:
100
+ """Build the skills section from each bundled SKILL.md's frontmatter.
101
+
102
+ The description field is authored for LLM consumption and included
103
+ as-is, never parsed or restructured by code. Returns None when there is
104
+ no skills directory or no parseable skill; the instructions then start
105
+ with the notices.
106
+ """
107
+ skills = list_skills(skills_dir) if skills_dir else []
108
+ if not skills:
109
+ return None
110
+
111
+ fallback = _LOCAL_SKILLS_FALLBACK if tool_hidden else _SKILL_TOOL_FALLBACK
112
+ header = _SKILLS_HEADER.format(access_method=_RESOURCE_ACCESS + fallback)
113
+ instructions = header + "\n".join(
114
+ skill_block(name, frontmatter["description"])
115
+ for name, _dir, frontmatter in skills
116
+ )
117
+
118
+ if settings.enable_tool_search:
119
+ instructions += TOOL_DISCOVERY_INSTRUCTIONS.format(
120
+ pinned=", ".join(DEFAULT_PINNED_TOOLS)
121
+ )
122
+
123
+ return instructions
124
+
125
+
126
+ def compose_instructions(skills: str | None, settings: Settings) -> str:
127
+ """Join the skills section with the startup notices and the owner's text."""
128
+ sections = [skills] if skills else []
129
+ # Surface Read Only Mode in the startup instructions so clients
130
+ # that show server instructions warn the model up front. Startup
131
+ # state only — live flips are covered by the structured
132
+ # READ_ONLY_MODE call errors and the ha_get_overview field.
133
+ if settings.read_only_mode:
134
+ sections.append(READ_ONLY_INSTRUCTIONS)
135
+ sections.append(ISSUE_FILING_INSTRUCTIONS)
136
+ custom = settings.custom_instructions.strip()
137
+ if custom:
138
+ # Length only: the text itself is the owner's and may be personal.
139
+ logger.info("custom_instructions active (%d characters)", len(custom))
140
+ sections.append(f"{OWNER_HEADING}\n{custom}")
141
+ return "\n\n".join(sections)
@@ -1,12 +1,19 @@
1
1
  """Static text the server publishes about its tools.
2
2
 
3
3
  Holds the search tool description, the BM25 keyword boosts, the lite
4
- docstring variants with their destinations, and the skill keyword block.
5
- ``HomeAssistantSmartMCPServer`` exposes each one as a class attribute.
4
+ docstring variants with their destinations and the skill keyword block,
5
+ which ``HomeAssistantSmartMCPServer`` exposes as class attributes, plus the
6
+ skill tool's name and the instruction notices ``server_instructions`` uses.
6
7
  """
7
8
 
8
9
  from __future__ import annotations
9
10
 
11
+ # Name of the consolidated skill tool. Defined as a module constant so the
12
+ # tool registration, the instructions, the mandatory-tool set, the default
13
+ # pins and the tests agree on one canonical string. 18 chars — well under
14
+ # the 40-char cap that Cloudflare's MCP portal enforces (#1121).
15
+ SKILL_TOOL_NAME = "ha_get_skill_guide"
16
+
10
17
  # Description for the unified search tool
11
18
  SEARCH_TOOL_DESCRIPTION = (
12
19
  "Search ALL Home Assistant tools by ENGLISH keyword. Each hit is "
@@ -88,7 +88,7 @@ def _advanced_field_row(
88
88
  _ADVANCED_SETTINGS_SENTINELS,
89
89
  OAUTH_MODE_TOKEN,
90
90
  )
91
- from ..config_registry import ADVANCED_RESTART_REQUIRED
91
+ from ..config_registry import ADVANCED_MULTILINE, ADVANCED_RESTART_REQUIRED
92
92
 
93
93
  origin = _origin_for_advanced_field(env_name, overrides=overrides)
94
94
  value: Any = getattr(settings, fname, None)
@@ -122,6 +122,8 @@ def _advanced_field_row(
122
122
  choices = _ADVANCED_SETTINGS_CHOICES.get(fname)
123
123
  if choices is not None:
124
124
  row["choices"] = list(choices)
125
+ if fname in ADVANCED_MULTILINE:
126
+ row["multiline"] = True
125
127
  return row
126
128
 
127
129
 
@@ -18,6 +18,7 @@ import logging
18
18
  from collections.abc import Iterable
19
19
  from typing import TYPE_CHECKING, Any, NamedTuple, NotRequired, TypedDict
20
20
 
21
+ from ..server_tool_text import SKILL_TOOL_NAME
21
22
  from ..transforms import categorize_capability
22
23
 
23
24
  if TYPE_CHECKING:
@@ -116,7 +117,7 @@ MANDATORY_TOOLS: set[str] = {
116
117
  # _save_feature_flags) so each direction of the conflict gets an
117
118
  # actionable error.
118
119
  BPS_MANDATORY_TOOLS: set[str] = {
119
- "ha_get_skill_guide",
120
+ SKILL_TOOL_NAME,
120
121
  }
121
122
 
122
123
 
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Ekran görüntüsü mühərrikinin əsas URL-i. Supervisor vasitəsilə avtomatik aşkarlama üçün boş saxlayın. Dərhal tətbiq edilir.",
473
473
  "advanced.enable_websocket.label": "WebSocket-i aktivləşdir",
474
474
  "advanced.enable_websocket.help": "WebSocket statusunun izlənməsi. Deaktiv edilməsi sorğulamaya (polling) qayıdır və bir çox alətin işini zəiflədir.",
475
+ "advanced.custom_instructions.label": "Xüsusi server təlimatları",
476
+ "advanced.custom_instructions.help": "Qoşulan hər bir süni intellekt köməkçisinə MCP server təlimatlarının bir hissəsi olaraq göndərilən mətn — məsələn, ev qeydlərinin harada saxlandığı və onların nə vaxt oxunmalı və ya yenilənməli olduğu. Həmçinin bu alətlər dəstindən istifadə edən Home Assistant söhbət agentlərinin (Assist) sorğusunun bir hissəsidir. Onu bütün müştərilərinizə eyni vaxtda çatmalı olan təlimatlar üçün istifadə edin; onu qısa və məxfi məlumatlardan azad saxlayın. Heç nə əlavə etməmək üçün boş buraxın. Yenidən başladılmasını tələb edir; müştərilər yenidən qoşulduqda dəyişikliyi görürlər.",
475
477
  "advanced.enabled_tool_modules.label": "Aktiv alət modulları",
476
478
  "advanced.enabled_tool_modules.help": "Vergüllə ayrılmış modul adları və ya 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "İdarə panelinin qismən yenilənməsi alətləri",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Základní URL enginu pro snímky obrazovky. Ponechte prázdné pro automatické zjišťování Supervisor. Platí okamžitě.",
473
473
  "advanced.enable_websocket.label": "Povolit WebSocket",
474
474
  "advanced.enable_websocket.help": "Sledování stavu přes WebSocket. Vypnutí přepne na polling a omezí funkčnost mnoha nástrojů.",
475
+ "advanced.custom_instructions.label": "Vlastní instrukce serveru",
476
+ "advanced.custom_instructions.help": "Text odeslaný každému připojujícímu se AI asistentu jako součást instrukcí MCP serveru — například kde jsou uloženy poznámky domácnosti a kdy je číst nebo aktualizovat. Je také součástí promptu konverzačních agentů Home Assistant (Assist), kteří tuto sadu nástrojů používají. Použijte jej pro pokyny, které by měly zasáhnout všechny vaše klienti najednou; udržujte jej stručný a bez tajných údajů. Ponechte prázdné, pokud nechcete nic přidat. Vyžaduje restart; klienti uvidí změnu po opětovném připojení.",
475
477
  "advanced.enabled_tool_modules.label": "Povolené moduly nástrojů",
476
478
  "advanced.enabled_tool_modules.help": "Názvy modulů oddělené čárkami nebo 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Nástroje pro částečnou aktualizaci panelu",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Basis-URL der Screenshot-Engine. Lasse leer für Supervisor-Auto-Discovery. Wirkt sofort.",
473
473
  "advanced.enable_websocket.label": "WebSocket aktivieren",
474
474
  "advanced.enable_websocket.help": "WebSocket-Zustandsüberwachung. Das Deaktivieren fällt auf Polling zurück und beeinträchtigt viele Tools.",
475
+ "advanced.custom_instructions.label": "Eigene Server-Anweisungen",
476
+ "advanced.custom_instructions.help": "Text, den jeder verbundene KI-Assistent als Teil der MCP-Server-Anweisungen erhält – zum Beispiel, wo Notizen zum Haushalt liegen und wann sie gelesen oder aktualisiert werden sollen. Auch Teil des Prompts von Home-Assistant-Sprachassistenten (Assist), die dieses Toolset nutzen. Gedacht für Hinweise, die alle deine Clients auf einmal erreichen sollen; halte ihn kurz und ohne Geheimnisse. Leer lassen, um nichts hinzuzufügen. Erfordert einen Neustart; Clients sehen die Änderung nach dem erneuten Verbinden.",
475
477
  "advanced.enabled_tool_modules.label": "Aktivierte Tool-Module",
476
478
  "advanced.enabled_tool_modules.help": "Kommagetrennte Modulnamen oder 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Dashboard-Partial-Update-Tools",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Base URL of the screenshot engine. Leave blank for Supervisor auto-discovery. Applies immediately.",
473
473
  "advanced.enable_websocket.label": "Enable WebSocket",
474
474
  "advanced.enable_websocket.help": "WebSocket state monitoring. Disabling falls back to polling and degrades many tools.",
475
+ "advanced.custom_instructions.label": "Custom server instructions",
476
+ "advanced.custom_instructions.help": "Text sent to every AI assistant that connects, as part of the MCP server instructions — for example where household notes are kept and when to read or update them. Also part of the prompt of Home Assistant conversation agents (Assist) that use this toolset. Use it for guidance that should reach all your clients at once; keep it short and free of secrets. Leave empty to add nothing. Requires restart; clients see the change when they reconnect.",
475
477
  "advanced.enabled_tool_modules.label": "Enabled tool modules",
476
478
  "advanced.enabled_tool_modules.help": "Comma-separated module names, or 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Dashboard partial-update tools",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Baza URL de la ekrankopiga motoro. Lasu malplena por aŭtomata malkovro de Supervisor. Aplikiĝas tuj.",
473
473
  "advanced.enable_websocket.label": "Ebligi WebSocket",
474
474
  "advanced.enable_websocket.help": "Monitorado de WebSocket-stato. Malŝalto falas al balotado kaj malbonigas multajn ilojn.",
475
+ "advanced.custom_instructions.label": "Propraj servilaj instrukcioj",
476
+ "advanced.custom_instructions.help": "Teksto sendita al ĉiu AI-asistanto kiu konektiĝas, kiel parto de la instrukcioj de la serviloj MCP — ekzemple kie hejmaj notoj estas konservitaj kaj kiam legi aŭ ĝisdatigi ilin. Ankaŭ parto de la prompto de hejmaŭtomatigaj konversaciaj agentoj (Assist) de Home Assistant, kiuj uzas ĉi tiun ilaron. Uzu ĝin por gvidado, kiu devas atingi ĉiujn viajn klientojn samtempe; tenu ĝin mallonga kaj libera de sekretoj. Lasu malplena por aldoni nenion. Postulas relumon; klientoj vidas la ŝanĝon kiam ili rekonektiĝas.",
475
477
  "advanced.enabled_tool_modules.label": "Ebligitaj il-moduloj",
476
478
  "advanced.enabled_tool_modules.help": "Komo-dividitaj modulnomoj, aŭ 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Iloj por parta ĝisdatigo de panelo",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "URL base del motor de capturas. Déjalo vacío para la detección automática del Supervisor. Se aplica de inmediato.",
473
473
  "advanced.enable_websocket.label": "Activar WebSocket",
474
474
  "advanced.enable_websocket.help": "Monitoreo del estado por WebSocket. Si se desactiva, se recurre al sondeo (polling) y se degradan muchas herramientas.",
475
+ "advanced.custom_instructions.label": "Instrucciones personalizadas del servidor",
476
+ "advanced.custom_instructions.help": "Texto enviado a cada asistente de IA que se conecta, como parte de las instrucciones del servidor MCP (por ejemplo, dónde se guardan las notas del hogar y cuándo leerlas o actualizarlas). También forma parte del prompt de los agentes de conversación de Home Assistant (Assist) que utilizan este conjunto de herramientas. Úsalo para directrices que deban llegar a todos tus clientes a la vez; mantenlo breve y sin datos confidenciales. Déjalo vacío para no añadir nada. Requiere reinicio; los clientes verán el cambio cuando se reconecten.",
475
477
  "advanced.enabled_tool_modules.label": "Módulos de herramientas activados",
476
478
  "advanced.enabled_tool_modules.help": "Nombres de módulos separados por comas, o 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Herramientas de actualización parcial de paneles",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "URL de base du moteur de capture d'écran. Laissez vide pour la découverte automatique par le Supervisor. S'applique immédiatement.",
473
473
  "advanced.enable_websocket.label": "Activer WebSocket",
474
474
  "advanced.enable_websocket.help": "Surveillance de l'état via WebSocket. La désactivation bascule vers l'interrogation (polling) et dégrade de nombreux outils.",
475
+ "advanced.custom_instructions.label": "Instructions personnalisées du serveur",
476
+ "advanced.custom_instructions.help": "Texte envoyé à chaque assistant IA qui se connecte, dans le cadre des instructions du serveur MCP — par exemple, l'emplacement des notes du foyer et le moment de les lire ou de les mettre à jour. Fait également partie du prompt des agents de conversation Home Assistant (Assist) qui utilisent cet ensemble d'outils. Utilisez-le pour fournir des directives destinées à tous vos clients en même temps ; restez concis et évitez d'y inclure des secrets. Laissez vide pour ne rien ajouter. Nécessite un redémarrage ; les clients voient le changement lorsqu'ils se reconnectent.",
475
477
  "advanced.enabled_tool_modules.label": "Modules d'outils activés",
476
478
  "advanced.enabled_tool_modules.help": "Noms de modules séparés par des virgules, ou 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Outils de mise à jour partielle du tableau de bord",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "URL di base del motore per gli screenshot. Lascia vuoto per il rilevamento automatico tramite Supervisor. Ha effetto immediato.",
473
473
  "advanced.enable_websocket.label": "Attiva il WebSocket",
474
474
  "advanced.enable_websocket.help": "Monitoraggio dello stato tramite WebSocket. Se disabilitato, il sistema passa al polling e molte funzionalità degli strumenti si riducono.",
475
+ "advanced.custom_instructions.label": "Istruzioni personalizzate del server",
476
+ "advanced.custom_instructions.help": "Testo inviato a ogni assistente IA che si connette, come parte delle istruzioni del server MCP — ad esempio dove sono conservate le note della casa e quando leggerle o aggiornarle. Fa anche parte del prompt degli agenti di conversazione di Home Assistant (Assist) che utilizzano questo set di strumenti. Usalo per indicazioni che devono raggiungere tutti i client in una volta sola; tienilo breve e privo di segreti. Lascia vuoto per non aggiungere nulla. Richiede il riavvio; i client vedono la modifica quando si riconnettono.",
475
477
  "advanced.enabled_tool_modules.label": "Moduli di strumenti attivi",
476
478
  "advanced.enabled_tool_modules.help": "Nomi dei moduli separati da virgola o 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Strumenti di aggiornamento parziale delle dashboard",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "스크린샷 엔진의 기본 URL입니다. Supervisor 자동 검색을 쓰려면 비워 두세요. 즉시 적용됩니다.",
473
473
  "advanced.enable_websocket.label": "WebSocket 사용",
474
474
  "advanced.enable_websocket.help": "WebSocket 상태 모니터링. 비활성화하면 폴링으로 대체되며 많은 도구의 성능이 저하됩니다.",
475
+ "advanced.custom_instructions.label": "사용자 정의 서버 지침",
476
+ "advanced.custom_instructions.help": "MCP 서버 지침의 일부로 연결되는 모든 AI 어시스턴트에게 전송되는 텍스트입니다. 예를 들어 가족 메모가 보관되는 위치와 이를 읽거나 업데이트해야 하는 시기 등을 지정할 수 있습니다. 이 도구 세트를 사용하는 Home Assistant 대화 어시스턴트(Assist)의 프롬프트에도 포함됩니다. 모든 클라이언트에 한 번에 전달해야 하는 지침에 사용하고, 짧고 비밀 정보가 포함되지 않도록 유지하세요. 추가하지 않으려면 비워 두세요. 재시작이 필요하며, 클라이언트는 재연결할 때 변경 사항을 확인합니다.",
475
477
  "advanced.enabled_tool_modules.label": "사용할 도구 모듈",
476
478
  "advanced.enabled_tool_modules.help": "쉼표로 구분된 모듈 이름 또는 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "대시보드 부분 업데이트 도구",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Basis-URL van de screenshot engine. Laat leeg voor Supervisor auto-ontdekking. Wordt onmiddellijk toegepast.",
473
473
  "advanced.enable_websocket.label": "WebSocket inschakelen",
474
474
  "advanced.enable_websocket.help": "WebSocket-statusmonitoring. Uitschakelen valt terug op pollen en degradeert veel tools.",
475
+ "advanced.custom_instructions.label": "Aangepaste serverinstructies",
476
+ "advanced.custom_instructions.help": "Tekst die naar elke verbindende AI-assistent wordt verzonden als onderdeel van de MCP-serverinstructies — bijvoorbeeld waar huishoudelijke notities worden bewaard en wanneer je deze moet lezen of bijwerken. Maakt ook deel uit van de prompt van Home Assistant-gespreksagenten (Assist) die deze toolset gebruiken. Gebruik dit voor richtlijnen die al je clients tegelijk moeten bereiken; houd het kort en vrij van geheimen. Laat leeg om niets toe te voegen. Vereist een herstart; clients zien de wijziging wanneer ze opnieuw verbinden.",
475
477
  "advanced.enabled_tool_modules.label": "Ingeschakelde toolmodules",
476
478
  "advanced.enabled_tool_modules.help": "Door komma's gescheiden modulenamen, of 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Dashboard tools voor gedeeltelijke updates",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Bazowy adres URL silnika zrzutów ekranu. Pozostaw puste dla automatycznego wykrywania przez Supervisor. Obowiązuje natychmiast.",
473
473
  "advanced.enable_websocket.label": "Włącz WebSocket",
474
474
  "advanced.enable_websocket.help": "Monitorowanie stanu przez WebSocket. Wyłączenie powoduje powrót do odpytywania (polling) i obniża działanie wielu narzędzi.",
475
+ "advanced.custom_instructions.label": "Niestandardowe instrukcje serwera",
476
+ "advanced.custom_instructions.help": "Tekst wysyłany do każdego łączącego się asystenta AI jako część instrukcji serwera MCP – na przykład informacja o tym, gdzie przechowywane są notatki domowe oraz kiedy je czytać lub aktualizować. Jest to również część promptu agentów konwersacyjnych Home Assistant (Assist), którzy korzystają z tego zestawu narzędzi. Użyj tej opcji do wytycznych, które powinny dotrzeć do wszystkich Twoich klientów naraz; dbaj o to, aby tekst był krótki i nie zawierał poufnych danych. Pozostaw puste pole, aby niczego nie dodawać. Wymaga ponownego uruchomienia; klienci zobaczą zmianę po ponownym połączeniu.",
475
477
  "advanced.enabled_tool_modules.label": "Włączone moduły narzędzi",
476
478
  "advanced.enabled_tool_modules.help": "Nazwy modułów oddzielone przecinkami lub „all”.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Narzędzia do częściowej aktualizacji pulpitu nawigacyjnego",
@@ -472,6 +472,8 @@
472
472
  "advanced.dashboard_screenshot_engine_url.help": "Базовый URL движка. Оставьте пустым для автопоиска через Supervisor. Действует сразу.",
473
473
  "advanced.enable_websocket.label": "Включить WebSocket",
474
474
  "advanced.enable_websocket.help": "Мониторинг состояния через WebSocket. Отключение переключает на опрос и ухудшает работу многих инструментов.",
475
+ "advanced.custom_instructions.label": "Пользовательские инструкции сервера",
476
+ "advanced.custom_instructions.help": "Текст, отправляемый каждому подключающемуся ИИ-ассистенту в составе инструкций MCP-сервера — например, где хранятся заметки о доме и когда их читать или обновлять. Также входит в промпт голосовых ассистентов Home Assistant (Assist), использующих этот набор инструментов. Используйте для указаний, которые должны поступать сразу ко всем клиентам; пишите кратко и без конфиденциальных данных. Оставьте пустым, чтобы ничего не добавлять. Требуется перезапуск; клиенты увидят изменения при повторном подключении.",
475
477
  "advanced.enabled_tool_modules.label": "Включённые модули инструментов",
476
478
  "advanced.enabled_tool_modules.help": "Имена модулей через запятую или 'all'.",
477
479
  "advanced.enable_dashboard_partial_tools.label": "Инструменты частичного обновления панелей",