ha-mcp-dev 9.1.0.dev3242__tar.gz → 9.1.0.dev3249__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 (821) hide show
  1. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/PKG-INFO +7 -6
  2. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/README.md +6 -5
  3. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/pyproject.toml +1 -1
  4. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/pyproject.toml.orig +1 -1
  5. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_settings.py +7 -0
  6. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/errors.py +4 -1
  7. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/hacs_auto_refresh.py +65 -24
  8. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +2 -1
  9. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/en.json +2 -0
  10. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/listing.py +14 -6
  11. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_card_describe.py +4 -1
  12. ha_mcp_dev-9.1.0.dev3249/src/ha_mcp/tools/entity_expose_batch.py +67 -0
  13. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/error_log_parsing.py +48 -21
  14. ha_mcp_dev-9.1.0.dev3249/src/ha_mcp/tools/hacs_backend.py +243 -0
  15. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/hacs_registration.py +39 -65
  16. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources_fault.py +1 -1
  17. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_bug_report.py +1 -1
  18. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_helpers.py +3 -3
  19. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_entities.py +30 -58
  20. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_filesystem.py +4 -4
  21. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_hacs.py +180 -177
  22. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_resources.py +5 -5
  23. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_themes.py +1 -1
  24. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_updates.py +10 -42
  25. ha_mcp_dev-9.1.0.dev3249/src/ha_mcp/tools/update_categories.py +61 -0
  26. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/update_check.py +2 -1
  27. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/LICENSE +0 -0
  28. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/__init__.py +0 -0
  29. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/__main__.py +0 -0
  30. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_pypi_marker +0 -0
  31. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_rich_compat.py +0 -0
  32. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/__init__.py +0 -0
  33. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  34. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  35. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  36. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  37. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  38. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  39. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  40. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  41. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  42. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  43. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  44. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  45. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  46. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  47. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  48. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  49. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  50. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  51. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  52. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  53. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  54. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  55. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  56. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  57. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  58. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  59. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  60. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  61. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  62. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  63. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  64. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  65. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  66. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  67. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  68. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  69. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  70. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  71. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  72. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  73. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  74. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  75. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  76. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  77. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  78. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  79. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  80. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  81. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  82. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  83. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  84. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  85. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  86. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  87. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  88. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  89. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  90. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  91. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  92. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  93. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  94. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  95. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  96. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  97. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  98. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  99. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  100. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  101. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  102. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  103. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  104. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  105. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  106. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  107. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  108. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  109. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  110. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  111. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  112. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  113. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  114. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  115. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  116. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  117. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  118. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  119. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  120. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  121. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  122. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  123. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  124. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  125. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  126. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  127. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  128. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  129. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  130. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  131. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  132. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  133. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  134. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  135. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  136. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  137. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  138. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  139. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  140. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  141. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  142. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  143. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  144. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  145. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  146. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  147. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  148. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  149. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  150. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  151. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  152. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  153. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  154. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  155. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  156. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  157. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  158. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  159. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  160. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  161. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  162. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  163. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  164. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  165. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  166. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  167. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  168. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  169. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  170. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  171. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  172. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  173. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  174. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  175. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  176. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  177. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  178. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  179. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  180. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  181. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  182. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  183. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  184. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  185. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  186. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  187. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  188. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  189. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  190. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  191. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  192. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  193. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  194. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  195. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  196. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  197. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  198. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  199. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  200. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  201. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  202. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  203. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  204. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  205. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  206. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  207. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  208. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  209. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  210. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  211. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  212. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  213. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  214. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  215. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  216. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  217. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  218. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  219. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  220. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  221. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  222. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  223. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  224. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  225. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  226. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  227. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  228. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  229. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  230. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  231. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  232. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  233. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  234. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  235. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  236. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  237. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  238. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  239. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  240. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  241. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  242. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  243. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  244. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  245. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  246. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  247. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  248. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  249. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  250. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  251. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  252. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  253. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  254. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  255. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  256. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  257. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  258. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  259. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  260. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  261. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  262. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  263. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  264. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  265. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  266. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  267. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  268. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  269. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  270. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  271. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  272. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  273. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  274. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  275. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  276. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  277. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  278. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  279. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  280. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  281. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  282. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  283. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  284. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  285. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  286. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  287. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  288. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  289. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  290. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  291. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  292. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  293. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  294. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  295. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  296. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  297. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  298. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  299. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  300. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  301. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  302. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  303. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  304. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  305. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  306. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  307. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  308. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  309. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  310. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  311. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  312. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  313. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  314. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  315. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  316. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  317. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  318. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  319. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  320. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  321. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  322. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  323. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  324. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  325. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  326. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  327. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  328. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  329. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  330. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  331. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  332. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  333. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  334. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  335. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  336. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  337. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  338. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  339. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  340. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  341. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  342. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  343. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  344. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  345. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  346. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  347. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  348. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  349. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  350. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  351. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  352. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  353. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  354. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  355. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  356. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  357. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  358. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  359. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  360. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  361. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  362. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  363. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  364. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  365. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  366. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  367. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  368. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  369. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  370. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  371. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  372. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  373. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  374. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  375. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  376. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  377. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  378. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  379. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  380. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  381. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  382. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  383. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  384. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  385. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  386. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  387. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  388. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  389. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  390. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  391. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  392. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  393. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  394. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  395. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  396. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  397. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  398. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  399. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  400. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  401. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  402. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  403. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  404. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  405. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  406. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  407. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  408. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  409. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  410. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  411. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  412. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  413. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  414. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  415. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  416. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  417. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  418. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  419. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  420. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  421. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  422. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  423. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  424. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  425. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  426. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  427. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  428. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  429. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  430. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  431. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  432. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  433. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  434. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  435. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  436. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  437. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  438. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  439. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  440. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  441. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  442. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  443. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  444. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  445. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  446. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  447. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  448. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  449. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  450. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  451. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  452. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  453. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  454. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  455. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  456. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/requirements.txt +0 -0
  457. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  458. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  459. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  460. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  461. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  462. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  463. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  464. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  465. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  466. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  467. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  468. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  469. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  470. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  471. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  472. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  473. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  474. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  475. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  476. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  477. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  478. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  479. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  480. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  481. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  482. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  483. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  484. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  485. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  486. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  487. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  488. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  489. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  490. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  491. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  492. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  493. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  494. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  495. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  496. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  497. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  498. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  499. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  500. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  501. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  502. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  503. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  504. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  505. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  506. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  507. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  508. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  509. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  510. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  511. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  512. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  513. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/_version.py +0 -0
  514. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/app_discovery.py +0 -0
  515. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/__init__.py +0 -0
  516. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/consent_form.py +0 -0
  517. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/iss_stamp.py +0 -0
  518. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/oidc_compat.py +0 -0
  519. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/auth/provider.py +0 -0
  520. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_dashboards.py +0 -0
  521. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_diff.py +0 -0
  522. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_entities.py +0 -0
  523. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_entity_ids.py +0 -0
  524. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_helper_target.py +0 -0
  525. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_integrations.py +0 -0
  526. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_manager.py +0 -0
  527. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_tags.py +0 -0
  528. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/backup_zones.py +0 -0
  529. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/browser_landing.py +0 -0
  530. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/__init__.py +0 -0
  531. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/admin_routes.py +0 -0
  532. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/error_log_journald.py +0 -0
  533. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/models.py +0 -0
  534. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/rest_client.py +0 -0
  535. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/supervisor_client.py +0 -0
  536. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/websocket_client.py +0 -0
  537. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/client/websocket_listener.py +0 -0
  538. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config.py +0 -0
  539. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_backup.py +0 -0
  540. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_meta.py +0 -0
  541. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_overrides.py +0 -0
  542. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/config_registry.py +0 -0
  543. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  544. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  545. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  546. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  547. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  548. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  549. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  550. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/ha_request_queue.py +0 -0
  551. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/http_transport.py +0 -0
  552. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/image_info.py +0 -0
  553. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/llm_exposure.py +0 -0
  554. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/log_filters.py +0 -0
  555. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/mcp_client_context.py +0 -0
  556. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/__init__.py +0 -0
  557. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/approval_queue.py +0 -0
  558. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/decision_pin.py +0 -0
  559. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/decisions.py +0 -0
  560. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/editing.py +0 -0
  561. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/evaluator.py +0 -0
  562. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/events.py +0 -0
  563. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/handlers.py +0 -0
  564. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/middleware.py +0 -0
  565. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/model.py +0 -0
  566. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/mrtr.py +0 -0
  567. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/persistence.py +0 -0
  568. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/server_channels.py +0 -0
  569. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/policy/value_sources.py +0 -0
  570. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/py.typed +0 -0
  571. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/read_only.py +0 -0
  572. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/redaction.py +0 -0
  573. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/renamed_tools.py +0 -0
  574. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  575. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  576. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  577. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  578. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  579. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  580. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  581. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  582. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  583. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  584. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  585. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  586. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  587. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  588. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  589. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  590. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  591. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server.py +0 -0
  592. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server_instructions.py +0 -0
  593. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server_lifespan.py +0 -0
  594. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/server_tool_text.py +0 -0
  595. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/__init__.py +0 -0
  596. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  597. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  598. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  599. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  600. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  601. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  602. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  603. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  604. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  605. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  606. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_theme.py +0 -0
  607. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  608. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  609. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  610. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  611. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  612. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  613. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  614. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  615. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  616. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  617. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  618. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  619. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  620. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  621. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  622. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  623. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  624. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings.css +0 -0
  625. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings.html +0 -0
  626. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  627. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  628. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  629. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  630. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  631. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  632. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  633. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  634. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  635. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  636. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/smoke_test.py +0 -0
  637. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  638. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/storage_helper_types.py +0 -0
  639. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/strict_bps.py +0 -0
  640. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tool_dispatch.py +0 -0
  641. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/__init__.py +0 -0
  642. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  643. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/area_messages.py +0 -0
  644. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/auto_backup.py +0 -0
  645. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup.py +0 -0
  646. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_access.py +0 -0
  647. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  648. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  649. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  650. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  651. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/best_practice_result.py +0 -0
  652. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  653. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  654. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  655. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/blueprint_write.py +0 -0
  656. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/bug_report_config.py +0 -0
  657. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  658. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/bulk_selector.py +0 -0
  659. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/coercion.py +0 -0
  660. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_api.py +0 -0
  661. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_config_entries.py +0 -0
  662. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_config_reads.py +0 -0
  663. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  664. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_devices.py +0 -0
  665. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  666. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_registries.py +0 -0
  667. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  668. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  669. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  670. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  671. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  672. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  673. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  674. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  675. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  676. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  677. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  678. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  679. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  680. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  681. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  682. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  683. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  684. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  685. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  686. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  687. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  688. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  689. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  690. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_write_errors.py +0 -0
  691. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  692. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/core_contract.py +0 -0
  693. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  694. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  695. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  696. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/dev_backup.py +0 -0
  697. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/device_control.py +0 -0
  698. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/device_enrichment.py +0 -0
  699. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  700. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/energy_preferences.py +0 -0
  701. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  702. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_registration.py +0 -0
  703. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_removal.py +0 -0
  704. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  705. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  706. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/helper_flows.py +0 -0
  707. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/helpers.py +0 -0
  708. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/history_response.py +0 -0
  709. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  710. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  711. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_common.py +0 -0
  712. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources.py +0 -0
  713. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  714. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  715. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/__init__.py +0 -0
  716. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/base.py +0 -0
  717. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/matter.py +0 -0
  718. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/thread.py +0 -0
  719. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  720. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/zwave.py +0 -0
  721. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  722. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/recorder_errors.py +0 -0
  723. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/reference_validator.py +0 -0
  724. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/registry.py +0 -0
  725. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  726. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/response_helpers.py +0 -0
  727. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/scene_discovery.py +0 -0
  728. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/__init__.py +0 -0
  729. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/base.py +0 -0
  730. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/component.py +0 -0
  731. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/entities.py +0 -0
  732. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/legacy.py +0 -0
  733. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/modes.py +0 -0
  734. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/overview.py +0 -0
  735. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/response.py +0 -0
  736. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/search/state.py +0 -0
  737. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/server_version.py +0 -0
  738. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  739. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  740. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  741. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  742. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  743. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  744. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  745. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  746. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  747. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  748. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  749. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  750. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/statistics_resets.py +0 -0
  751. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/system_restart.py +0 -0
  752. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tool_hints.py +0 -0
  753. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  754. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_addons.py +0 -0
  755. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_areas.py +0 -0
  756. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  757. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  758. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_calendar.py +0 -0
  759. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_camera.py +0 -0
  760. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_categories.py +0 -0
  761. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_code.py +0 -0
  762. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  763. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  764. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  765. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  766. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  767. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_dev.py +0 -0
  768. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_energy.py +0 -0
  769. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_groups.py +0 -0
  770. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_history.py +0 -0
  771. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_integrations.py +0 -0
  772. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_labels.py +0 -0
  773. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_logs.py +0 -0
  774. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_radio.py +0 -0
  775. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_registry.py +0 -0
  776. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_search.py +0 -0
  777. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  778. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_service.py +0 -0
  779. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_services.py +0 -0
  780. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_system.py +0 -0
  781. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_todo.py +0 -0
  782. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_traces.py +0 -0
  783. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_utility.py +0 -0
  784. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  785. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  786. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  787. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/tools_zones.py +0 -0
  788. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/util_helpers.py +0 -0
  789. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/validation_middleware.py +0 -0
  790. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/tools/ws_waiters.py +0 -0
  791. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/__init__.py +0 -0
  792. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/categorized_search.py +0 -0
  793. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/compact_params.py +0 -0
  794. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/component_helpers.py +0 -0
  795. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/component_search.py +0 -0
  796. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  797. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  798. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/transport_security.py +0 -0
  799. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/__init__.py +0 -0
  800. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/config_hash.py +0 -0
  801. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/config_write_lock.py +0 -0
  802. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  803. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/data_paths.py +0 -0
  804. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  805. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/domain_handlers.py +0 -0
  806. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/entity_membership.py +0 -0
  807. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  808. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  809. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  810. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/operation_manager.py +0 -0
  811. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/python_sandbox.py +0 -0
  812. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  813. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/skill_loader.py +0 -0
  814. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/utils/usage_logger.py +0 -0
  815. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/__init__.py +0 -0
  816. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/config_files.py +0 -0
  817. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/enforcement.py +0 -0
  818. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  819. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/model.py +0 -0
  820. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/persistence.py +0 -0
  821. {ha_mcp_dev-9.1.0.dev3242 → ha_mcp_dev-9.1.0.dev3249}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.1.0.dev3242
3
+ Version: 9.1.0.dev3249
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
@@ -94,9 +94,9 @@ Description-Content-Type: text/markdown
94
94
 
95
95
  ## 🚀 Get Started
96
96
 
97
- The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS, runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
97
+ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS (the built-in Marketplace on Home Assistant 2026.11+), runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
98
98
 
99
- **Add it to Home Assistant via HACS (the preferred install):**
99
+ **Add it to Home Assistant via HACS or, on Home Assistant 2026.11+, the Marketplace (the preferred install):**
100
100
 
101
101
  [![Add HA-MCP to HACS](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
102
102
 
@@ -104,7 +104,8 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
104
104
 
105
105
  > The setup below is for version 9.0.0 (October 28, 2026) and later; earlier versions show a shorter setup form without the administrator account step.
106
106
 
107
- 1. Install the **HA-MCP Custom Component** from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
107
+ 1. Install the **HA-MCP Custom Component**. On **Home Assistant 2026.10 or older**, from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
108
+ On **Home Assistant 2026.11 or newer**, HACS is built in as the **Marketplace**: open **Settings → Marketplace** and accept its first-run warning, then **Connect GitHub** (a device sign-in). Adding a custom repository needs it, and until HA-MCP is in the Marketplace catalog it is also what makes the Marketplace check HA-MCP for updates in the background; without it, **Refresh information** on HA-MCP's Marketplace page checks by hand. Then click the badge above, or open the **Add from link** tab and add `https://github.com/homeassistant-ai/ha-mcp` as an **Integration**, and **Install**.
108
109
  Already installed from the earlier `homeassistant-ai/ha-mcp-integration` repository? It keeps receiving the same releases; nothing to change.
109
110
  2. **Restart Home Assistant.**
110
111
  3. Decide which administrator account the server acts as. Either create a long-lived access token on your own account (your profile → **Security** → **Long-lived access tokens** → **Create token**; it works from anywhere if it leaks, and the server's changes show under your name), or, safer, create an account just for HA-MCP under **Settings → People → Add person** with **Allow login**, **Local access only** and **Administrator** on. Never use your own login for the second option.
@@ -118,7 +119,7 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
118
119
  - **Local only?** Leave remote access disabled at setup (or turn off **Remote access via webhook** in the entry options) — no webhook is registered at all, while the direct port and sidebar panel keep working.
119
120
  - **Settings panel:** while the server runs, an admin-only **HA-MCP** panel appears in the Home Assistant sidebar for managing tools, feature flags, backups, and themes.
120
121
  - **Optional authentication:** set **Authentication mode** to `ha_auth` to require a Home Assistant account sign-in instead of using the secret URL as the credential.
121
- - **Manual install (no HACS):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
122
+ - **Manual install (no HACS or Marketplace):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
122
123
 
123
124
  The component's second entry type, the **File & YAML services entry** (**HA-MCP File & YAML Tools**), is only needed if you enable ha-mcp's opt-in file and YAML editing tools (feature flags, off by default) — skip it otherwise; you can add it later at any time. It works with any server type (in-process, app, Docker, or stdio).
124
125
 
@@ -374,7 +375,7 @@ Install the **HA-MCP File & YAML Tools** entry from the same **HA-MCP Custom Com
374
375
 
375
376
  [![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
376
377
 
377
- To add manually: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
378
+ To add manually on Home Assistant 2026.10 or older: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. On 2026.11 or newer: in **Marketplace**, accept the first-run warning and **Connect GitHub**, then **Add from link** > `https://github.com/homeassistant-ai/ha-mcp` as an **Integration** > **Install**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
378
379
 
379
380
  After installing, restart Home Assistant, then open **Settings** > **Devices & Services** > **Add Integration**, search for **HA-MCP Custom Component**, and add the **HA-MCP File & YAML Tools** entry.
380
381
 
@@ -34,9 +34,9 @@
34
34
 
35
35
  ## 🚀 Get Started
36
36
 
37
- The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS, runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
37
+ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It installs into Home Assistant through HACS (the built-in Marketplace on Home Assistant 2026.11+), runs the full server **in-process**, and works on **every** Home Assistant installation type — Home Assistant OS, Supervised, Container, and Core — with full feature parity. It is the easiest setup in every case: setup asks for an administrator access token and how clients may connect.
38
38
 
39
- **Add it to Home Assistant via HACS (the preferred install):**
39
+ **Add it to Home Assistant via HACS or, on Home Assistant 2026.11+, the Marketplace (the preferred install):**
40
40
 
41
41
  [![Add HA-MCP to HACS](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
42
42
 
@@ -44,7 +44,8 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
44
44
 
45
45
  > The setup below is for version 9.0.0 (October 28, 2026) and later; earlier versions show a shorter setup form without the administrator account step.
46
46
 
47
- 1. Install the **HA-MCP Custom Component** from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
47
+ 1. Install the **HA-MCP Custom Component**. On **Home Assistant 2026.10 or older**, from HACS — click the badge above, or in HACS open **Integrations → ⋮ → Custom repositories**, add `https://github.com/homeassistant-ai/ha-mcp` (category: **Integration**), then **Download**.
48
+ On **Home Assistant 2026.11 or newer**, HACS is built in as the **Marketplace**: open **Settings → Marketplace** and accept its first-run warning, then **Connect GitHub** (a device sign-in). Adding a custom repository needs it, and until HA-MCP is in the Marketplace catalog it is also what makes the Marketplace check HA-MCP for updates in the background; without it, **Refresh information** on HA-MCP's Marketplace page checks by hand. Then click the badge above, or open the **Add from link** tab and add `https://github.com/homeassistant-ai/ha-mcp` as an **Integration**, and **Install**.
48
49
  Already installed from the earlier `homeassistant-ai/ha-mcp-integration` repository? It keeps receiving the same releases; nothing to change.
49
50
  2. **Restart Home Assistant.**
50
51
  3. Decide which administrator account the server acts as. Either create a long-lived access token on your own account (your profile → **Security** → **Long-lived access tokens** → **Create token**; it works from anywhere if it leaks, and the server's changes show under your name), or, safer, create an account just for HA-MCP under **Settings → People → Add person** with **Allow login**, **Local access only** and **Administrator** on. Never use your own login for the second option.
@@ -58,7 +59,7 @@ The recommended way to run ha-mcp is the **HA-MCP Custom Component**. It install
58
59
  - **Local only?** Leave remote access disabled at setup (or turn off **Remote access via webhook** in the entry options) — no webhook is registered at all, while the direct port and sidebar panel keep working.
59
60
  - **Settings panel:** while the server runs, an admin-only **HA-MCP** panel appears in the Home Assistant sidebar for managing tools, feature flags, backups, and themes.
60
61
  - **Optional authentication:** set **Authentication mode** to `ha_auth` to require a Home Assistant account sign-in instead of using the secret URL as the credential.
61
- - **Manual install (no HACS):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
62
+ - **Manual install (no HACS or Marketplace):** copy `custom_components/ha_mcp_tools/` from this repository into your Home Assistant `config/custom_components/` directory, then restart and add the integration as above.
62
63
 
63
64
  The component's second entry type, the **File & YAML services entry** (**HA-MCP File & YAML Tools**), is only needed if you enable ha-mcp's opt-in file and YAML editing tools (feature flags, off by default) — skip it otherwise; you can add it later at any time. It works with any server type (in-process, app, Docker, or stdio).
64
65
 
@@ -314,7 +315,7 @@ Install the **HA-MCP File & YAML Tools** entry from the same **HA-MCP Custom Com
314
315
 
315
316
  [![Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.](https://my.home-assistant.io/badges/hacs_repository.svg)](https://my.home-assistant.io/redirect/hacs_repository/?owner=homeassistant-ai&repository=ha-mcp&category=integration)
316
317
 
317
- To add manually: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
318
+ To add manually on Home Assistant 2026.10 or older: open **HACS** > **Integrations** > three-dot menu > **Custom repositories** > add `https://github.com/homeassistant-ai/ha-mcp` (category: Integration) > **Download**. On 2026.11 or newer: in **Marketplace**, accept the first-run warning and **Connect GitHub**, then **Add from link** > `https://github.com/homeassistant-ai/ha-mcp` as an **Integration** > **Install**. Or copy `custom_components/ha_mcp_tools/` from this repository into your HA `config/custom_components/` directory.
318
319
 
319
320
  After installing, restart Home Assistant, then open **Settings** > **Devices & Services** > **Add Integration**, search for **HA-MCP Custom Component**, and add the **HA-MCP File & YAML Tools** entry.
320
321
 
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.0.dev3242"
7
+ version = "9.1.0.dev3249"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.0.dev3242"
7
+ version = "9.1.0.dev3249"
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
@@ -231,6 +231,13 @@ class Settings(BaseSettings):
231
231
  bool, Setting(surface="advanced", section="operations")
232
232
  ] = Field(False, alias="HAMCP_ENABLE_HISTORY_QUERY_GUARDRAILS")
233
233
 
234
+ # Opt-in: ask HACS / the Marketplace to refresh the component's repository
235
+ # at startup after a server update (hacs_auto_refresh). An install that ran
236
+ # the refresh before it became opt-in has it turned on once, on its behalf.
237
+ hacs_refresh_after_update: Annotated[
238
+ bool, Setting(surface="advanced", section="operations")
239
+ ] = Field(False, alias="HAMCP_HACS_REFRESH_AFTER_UPDATE")
240
+
234
241
  # Optional process-wide outer tool-call concurrency. Zero preserves the
235
242
  # existing unlimited behavior; constrained installs can opt into queuing.
236
243
  ha_tool_concurrency: Annotated[
@@ -249,7 +249,10 @@ DEFAULT_SUGGESTIONS: dict[ErrorCode, list[str]] = {
249
249
  "Report this issue if it persists",
250
250
  ],
251
251
  ErrorCode.COMPONENT_NOT_INSTALLED: [
252
- "Install the required custom component via HACS",
252
+ (
253
+ "Install the required custom component via HACS (the Marketplace on "
254
+ "Home Assistant 2026.11+)"
255
+ ),
253
256
  "Restart Home Assistant after installation",
254
257
  ],
255
258
  }
@@ -1,16 +1,23 @@
1
- """Ask HACS to surface the paired component update after a server update.
1
+ """Ask HACS to surface the paired component update after a server update (opt-in).
2
2
 
3
3
  HACS refreshes a *custom* repository's release data from GitHub only about
4
- every 48 hours, and the ha_mcp_tools component ships in lockstep with each
5
- server release — so a freshly updated server can sit for two days next to a
6
- component update HACS has not noticed yet. This module closes that gap for
7
- add-on, Docker, pip and stdio installs. The embedded server is skipped: the
8
- component manages its updates.
4
+ every 48 hours, and the Marketplace that replaces it in Home Assistant 2026.11
5
+ only when a GitHub account is connected. The ha_mcp_tools component ships in
6
+ lockstep with each server release, so a component update can go unnoticed for
7
+ days, or for good. This module closes that gap for every install, the embedded
8
+ server included. It goes away once ha-mcp is in the default catalog, which the
9
+ Marketplace refreshes every 6 hours.
9
10
 
10
11
  On startup, when the server version changed since the last recorded nudge (the
11
- just-updated case) or a newer release is pending, it sends HACS's "Update
12
- information" refresh (``hacs/repository/refresh``) over the existing admin
13
- WebSocket for every INSTALLED candidate repository entry.
12
+ just-updated case) or a newer release is pending, it sends the store's "Update
13
+ information" refresh (``marketplace/repository/refresh``, or
14
+ ``hacs/repository/refresh`` before 2026.11) over the existing admin WebSocket
15
+ for every INSTALLED candidate repository entry. Nothing is installed: the user
16
+ still updates from the update entity.
17
+
18
+ It is opt-in (``hacs_refresh_after_update``). An install whose nudge completed
19
+ a pass before it became opt-in has a marker file and no explicit choice; the
20
+ setting is turned on for it once, so its behavior does not change.
14
21
 
15
22
  Fully advisory: every failure degrades to a debug log and nothing here can
16
23
  fault startup. A marker file in the data dir records the state the last
@@ -24,19 +31,21 @@ import asyncio
24
31
  import hashlib
25
32
  import json
26
33
  import logging
34
+ import os
27
35
  from collections.abc import AsyncIterator
28
36
  from contextlib import asynccontextmanager, suppress
29
37
  from pathlib import Path
30
38
  from typing import Any
31
39
 
32
40
  from ._vendor import websockets
33
- from ._version import get_version, is_embedded
41
+ from ._version import get_version
34
42
  from .client.rest_client import (
35
43
  HomeAssistantCommandError,
36
44
  HomeAssistantCommandTimeout,
37
45
  HomeAssistantConnectionError,
38
46
  )
39
47
  from .config import OAUTH_MODE_TOKEN, get_global_settings
48
+ from .config_overrides import _read_feature_flag_override_file
40
49
  from .update_check import UpdateInfo, get_update_info, is_update_check_disabled
41
50
  from .utils.data_paths import get_data_dir
42
51
 
@@ -123,18 +132,23 @@ async def _refresh_installed_candidates() -> dict[str, Any] | None:
123
132
  or None when the outcome could not be determined.
124
133
  """
125
134
  from .client.websocket_client import get_websocket_client
135
+ from .tools.hacs_backend import STORE_APIS
126
136
  from .tools.hacs_registration import send_hacs_repository_refresh
127
137
 
128
138
  ws_client = await get_websocket_client()
129
- try:
130
- response = await ws_client.send_command("hacs/repositories/list")
131
- except HomeAssistantCommandError as err:
132
- # HACS not installed at all — HA rejects its commands as unknown. Same
133
- # detection as ``_assert_hacs_available`` in tools/tools_hacs.py. Any
134
- # other command failure is a real error: let the retry loop see it.
135
- if err.code == "unknown_command" or "unknown command" in str(err).lower():
136
- return {"hacs": "absent", "refreshed": []}
137
- raise
139
+ for api in STORE_APIS:
140
+ try:
141
+ response = await ws_client.send_command(api.command("list"))
142
+ except HomeAssistantCommandError as err:
143
+ # A store that is not installed answers as an unknown command; any
144
+ # other failure (the Marketplace still loading included) is real:
145
+ # let the retry loop see it.
146
+ if err.code == "unknown_command" or "unknown command" in str(err).lower():
147
+ continue
148
+ raise
149
+ break
150
+ else:
151
+ return {"hacs": "absent", "refreshed": []}
138
152
 
139
153
  wanted = {name.lower() for name in CANDIDATE_REPO_FULL_NAMES}
140
154
  refreshed: list[str] = []
@@ -148,7 +162,7 @@ async def _refresh_installed_candidates() -> dict[str, Any] | None:
148
162
  continue
149
163
  attempted += 1
150
164
  try:
151
- await send_hacs_repository_refresh(ws_client, str(repo["id"]))
165
+ await send_hacs_repository_refresh(ws_client, str(repo["id"]), api)
152
166
  except Exception as err: # noqa: BLE001
153
167
  # Both entries read installed only when someone downloaded the
154
168
  # mirror without removing the legacy record — HACS guards against
@@ -199,12 +213,34 @@ async def _refresh_with_retries() -> dict[str, Any] | None:
199
213
  return absent_result
200
214
 
201
215
 
216
+ SETTING = "hacs_refresh_after_update"
217
+ SETTING_ENV = "HAMCP_HACS_REFRESH_AFTER_UPDATE"
218
+
219
+
220
+ async def _opted_in(settings: Any, marker: dict[str, Any] | None) -> bool:
221
+ """Whether the nudge is on; an install that already ran it keeps it."""
222
+ if getattr(settings, SETTING):
223
+ return True
224
+ explicit = os.environ.get(SETTING_ENV) is not None or SETTING in (
225
+ await asyncio.to_thread(_read_feature_flag_override_file)
226
+ )
227
+ if explicit or marker is None:
228
+ return False
229
+ from .settings_ui._handlers_advanced import _write_advanced_overrides_file
230
+
231
+ if await _write_advanced_overrides_file({SETTING: True}) is not None:
232
+ logger.warning("Could not save %s=true; it stays on for this run", SETTING)
233
+ setattr(settings, SETTING, True)
234
+ logger.info(
235
+ "HACS auto-refresh is opt-in now; it stays on for this install, which "
236
+ "already used it (turn it off under Advanced settings)"
237
+ )
238
+ return True
239
+
240
+
202
241
  async def maybe_refresh_hacs_after_update() -> None:
203
242
  """Nudge HACS once per startup when the update picture changed."""
204
243
  try:
205
- if is_embedded():
206
- # The component manages the embedded server's updates.
207
- return
208
244
  if is_update_check_disabled():
209
245
  return
210
246
 
@@ -215,11 +251,16 @@ async def maybe_refresh_hacs_after_update() -> None:
215
251
  return
216
252
  ha_url = settings.homeassistant_url
217
253
 
254
+ marker = await asyncio.to_thread(_read_marker, ha_url)
255
+ if not await _opted_in(settings, marker):
256
+ # Per-boot DEBUG line: the add-on lane proves scheduling with it.
257
+ logger.debug("HACS auto-refresh: off (%s is opt-in)", SETTING_ENV)
258
+ return
259
+
218
260
  current = get_version()
219
261
  # Normally a cache hit — the startup banner warms the lru_cache — but
220
262
  # offloaded anyway so a cold call can never touch the event loop.
221
263
  info = await asyncio.to_thread(get_update_info)
222
- marker = await asyncio.to_thread(_read_marker, ha_url)
223
264
  if not _nudge_due(current, info, marker):
224
265
  # DEBUG, not INFO: the not-due return is the per-conversation
225
266
  # stdio hot path and must stay quiet at default levels. The line
@@ -61,7 +61,8 @@ async def _component_command(
61
61
  if not component_supports(caps, CAPABILITY):
62
62
  raise _Unavailable(
63
63
  "This HA-MCP component cannot edit the callback list. Update the "
64
- "HA-MCP integration in HACS."
64
+ "HA-MCP integration in HACS (the Marketplace on Home Assistant "
65
+ "2026.11+)."
65
66
  )
66
67
  ws = await get_websocket_client(
67
68
  url=client.base_url,
@@ -472,6 +472,8 @@
472
472
  "advanced.individual_fetch_batch_size.help": "Concurrent per-ID config fetches. Lower toward 1 on serial HA servers.",
473
473
  "advanced.enable_history_query_guardrails.label": "History query guardrails",
474
474
  "advanced.enable_history_query_guardrails.help": "Reject recorder queries that exceed conservative entity and time-range budgets. Disabled by default.",
475
+ "advanced.hacs_refresh_after_update.label": "Refresh the component in HACS after an update",
476
+ "advanced.hacs_refresh_after_update.help": "At startup after a server update, ask HACS (the Marketplace on Home Assistant 2026.11+) to re-check the HA-MCP Custom Component repository, so its matching update shows right away instead of at the next 48-hour check. Off by default; installs that already did this keep it on.",
475
477
  "advanced.ha_tool_concurrency.label": "Home Assistant tool concurrency",
476
478
  "advanced.ha_tool_concurrency.help": "Optional limit on outer Home Assistant tool calls across all sessions. Internal REST, WebSocket, and per-tool fan-out concurrency is unchanged. 0 keeps unlimited behavior. A call waiting for capacity fails after 60 seconds.",
477
479
  "advanced.dashboard_screenshot_engine_url.label": "Dashboard screenshot engine URL",
@@ -66,6 +66,14 @@ def listed_items(listed: Any) -> list[Any]:
66
66
  return listed if isinstance(listed, list) else []
67
67
 
68
68
 
69
+ def _outside_storage(rec: dict[str, Any]) -> bool:
70
+ """A component record of a helper ``<type>/list`` does not list (a YAML
71
+ helper, the home zone): the component sends it with a null storage id."""
72
+ return rec.get("kind") == "collection" and (
73
+ "storage_id" in rec and rec["storage_id"] is None
74
+ )
75
+
76
+
69
77
  def _shape_collection_helper_record(rec: dict[str, Any]) -> dict[str, Any]:
70
78
  """Map one component collection-helper record onto the legacy list record.
71
79
 
@@ -205,7 +213,7 @@ def _shape_component_helpers_response(
205
213
  for rec in records:
206
214
  if not isinstance(rec, dict):
207
215
  continue
208
- if (rec.get("kind") == "flow") != want_flow:
216
+ if (rec.get("kind") == "flow") != want_flow or _outside_storage(rec):
209
217
  continue
210
218
  helpers.append(
211
219
  _shape_flow_helper_record(rec)
@@ -228,8 +236,8 @@ def _component_covers(result: dict[str, Any], helper_type: str) -> bool:
228
236
  """Whether a helpers_list response authoritatively enumerated ``helper_type``.
229
237
 
230
238
  The component reports ``covered_types``: the helper types its response could
231
- actually see. A type outside that list (e.g. ``tag`` — tags have no state
232
- entity, so the component's from-states scan can't enumerate them) must NOT
239
+ actually see. A type outside that list (e.g. ``person`` or ``tag``, whose
240
+ ``<type>/list`` adds more than the stored items) must NOT
233
241
  be trusted as "none exist". A response with no ``covered_types`` at all (an
234
242
  older component) is treated conservatively as covering nothing, so the
235
243
  caller falls back rather than trusting a possibly-partial list.
@@ -290,8 +298,8 @@ async def shape_all_helpers_response(
290
298
  collection → ``_shape_collection_helper_record``) and stamped with its
291
299
  own ``helper_type`` so records of different types stay distinguishable in
292
300
  the flat list. Respecting ``covered_types`` (mirroring the single-type
293
- path): a simple type the component could not enumerate from the state
294
- machine — ``tag`` has no state entity — is fetched per-type via its
301
+ path): a simple type the component did not cover — ``person`` and ``tag``
302
+ — is fetched per-type via its
295
303
  legacy ``{type}/list`` (``legacy_list``) and merged, so ``all`` never silently drops it.
296
304
 
297
305
  ``flow_types`` is Core's current set of helper flow types; one the component
@@ -301,7 +309,7 @@ async def shape_all_helpers_response(
301
309
  records = raw if isinstance(raw, list) else []
302
310
  helpers: list[dict[str, Any]] = []
303
311
  for rec in records:
304
- if not isinstance(rec, dict):
312
+ if not isinstance(rec, dict) or _outside_storage(rec):
305
313
  continue
306
314
  if rec.get("kind") == "flow":
307
315
  helpers.append(_shape_flow_helper_record(rec))
@@ -120,7 +120,10 @@ async def describe_card_response(client: Any, card_type: str | None) -> dict[str
120
120
  "Describing card types needs the ha_mcp_tools custom component "
121
121
  "with dashboard card support.",
122
122
  suggestions=[
123
- "Install or update the HA-MCP Custom Component through HACS",
123
+ (
124
+ "Install or update the HA-MCP Custom Component through "
125
+ "HACS (the Marketplace on Home Assistant 2026.11+)"
126
+ ),
124
127
  "Restart Home Assistant after the update completes",
125
128
  ],
126
129
  context={"action": "describe", "card_type": card_type},
@@ -0,0 +1,67 @@
1
+ """Bulk ``homeassistant/expose_entity`` calls for ``ha_set_entity``."""
2
+
3
+ import logging
4
+ from collections.abc import Callable
5
+ from typing import Any
6
+
7
+ logger = logging.getLogger(__name__)
8
+
9
+
10
+ def changed_entity_ids(reply: dict[str, Any]) -> set[str] | None:
11
+ """The entities Core reports it changed, or None before Core 2026.11."""
12
+ result = reply.get("result")
13
+ if isinstance(result, dict) and isinstance(result.get("changed_entity_ids"), list):
14
+ return set(result["changed_entity_ids"])
15
+ return None
16
+
17
+
18
+ async def apply_bulk_expose(
19
+ client: Any,
20
+ entity_ids: list[str],
21
+ parsed_expose_to: dict[str, bool],
22
+ extract_error: Callable[[dict[str, Any]], str],
23
+ ) -> tuple[str | None, set[str] | None]:
24
+ """Expose/hide many entities in one homeassistant/expose_entity call per set.
25
+
26
+ The command's schema accepts the full entity_ids list, so bulk exposure
27
+ needs at most two WS calls (one for the assistants being turned on, one
28
+ for those being turned off) regardless of entity count — not one per
29
+ entity. Returns (error, changed): error is None on success, or the message
30
+ of the first failing set, which applies to every id in the list. changed
31
+ holds the ids Core reports it changed, or None when Core does not report
32
+ them (before 2026.11).
33
+ """
34
+ expose_true = [a for a, v in parsed_expose_to.items() if v]
35
+ expose_false = [a for a, v in parsed_expose_to.items() if not v]
36
+ applied: list[str] = []
37
+ changed: set[str] | None = set()
38
+ for assistants, should_expose in [(expose_true, True), (expose_false, False)]:
39
+ if not assistants:
40
+ continue
41
+ logger.info(
42
+ f"{'Exposing' if should_expose else 'Hiding'} {len(entity_ids)} "
43
+ f"entities {'to' if should_expose else 'from'} {assistants}"
44
+ )
45
+ result = await client.send_websocket_message(
46
+ {
47
+ "type": "homeassistant/expose_entity",
48
+ "assistants": assistants,
49
+ "entity_ids": entity_ids,
50
+ "should_expose": should_expose,
51
+ }
52
+ )
53
+ if not result.get("success"):
54
+ error = extract_error(result)
55
+ if applied:
56
+ # The earlier assistant group already changed — say so, or
57
+ # the all-failed report implies no exposure was touched.
58
+ error = (
59
+ f"{error} (note: expose changes for "
60
+ f"{', '.join(applied)} were already applied before "
61
+ "this failure)"
62
+ )
63
+ return error, None
64
+ applied.extend(assistants)
65
+ reported = changed_entity_ids(result)
66
+ changed = None if reported is None or changed is None else changed | reported
67
+ return None, changed
@@ -16,7 +16,9 @@ the client or tool plumbing.
16
16
  """
17
17
 
18
18
  import re
19
+ from collections.abc import Callable
19
20
  from dataclasses import dataclass
21
+ from datetime import UTC, datetime, timezone
20
22
  from typing import Any, Literal, NamedTuple
21
23
 
22
24
  from ..client.error_log_journald import cursor_token
@@ -33,9 +35,9 @@ from .log_common import (
33
35
  # The thread field is matched lazily instead of as `\([^)]*\)`: since Python 3.10
34
36
  # an unnamed thread is called "Thread-1 (target_fn)", so the field itself can
35
37
  # contain parentheses, and a class that cannot cross them drops every line those
36
- # threads log.
38
+ # threads log. Core 2026.11+ appends the local UTC offset ("…10:15:23.456-04:00").
37
39
  _HA_LOG_LINE_RE = re.compile(
38
- r"^(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?)"
40
+ r"^(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:?\d{2})?)"
39
41
  r"\s+(DEBUG|INFO|WARNING|ERROR|CRITICAL)"
40
42
  r"\s+\(.*?\)"
41
43
  r"\s+\[([^\]]+)\]"
@@ -83,13 +85,11 @@ def _strip_ansi(text: str) -> str:
83
85
  def _normalize_timestamp(timestamp: str) -> str:
84
86
  """Put a matched timestamp on one date/time separator.
85
87
 
86
- Every timestamp comparison downstream is lexicographic — the covered
87
- window, an issue's ``first_seen``/``last_seen`` bounds, and the recency
88
- tiebreaker. ``_HA_LOG_LINE_RE`` accepts both the space and the ``T`` form
89
- (case-insensitively), and ``" "`` sorts below every digit while ``"T"``
90
- sorts above them, so a stream mixing the two forms would corrupt all three
91
- at once. HA core emits the space form, so normalize onto that: real logs
92
- come out byte-identical and only the ISO-8601 variant is rewritten.
88
+ ``_HA_LOG_LINE_RE`` accepts both the space and the ``T`` form
89
+ (case-insensitively); one form keeps a recurring issue's reported
90
+ timestamps uniform. HA core emits the space form, so normalize onto that:
91
+ real logs come out byte-identical and only the ISO-8601 variant is
92
+ rewritten. Comparisons go through ``_instant_order``.
93
93
 
94
94
  The date is fixed-width in the pattern (``\\d{4}-\\d{2}-\\d{2}``), so the
95
95
  separator is always at index 10 — replacing by position also covers the
@@ -98,6 +98,30 @@ def _normalize_timestamp(timestamp: str) -> str:
98
98
  return timestamp[:10] + " " + timestamp[11:]
99
99
 
100
100
 
101
+ def _instant_order(stamps: list[str]) -> Callable[[str], datetime]:
102
+ """Order timestamps by instant, not text.
103
+
104
+ Core 2026.11+ stamps carry the UTC offset, so the repeated hour when
105
+ daylight saving ends sorts wrong as text. Offset-less stamps (older Core,
106
+ or the lines before an upgrade) take the window's first offset: the zone
107
+ outlives a restart.
108
+ """
109
+ offset = next(
110
+ (o for s in stamps if (o := datetime.fromisoformat(s).utcoffset()) is not None),
111
+ None,
112
+ )
113
+
114
+ def key(stamp: str) -> datetime:
115
+ parsed = datetime.fromisoformat(stamp)
116
+ if parsed.tzinfo is None:
117
+ if offset is None:
118
+ return parsed
119
+ parsed = parsed.replace(tzinfo=timezone(offset))
120
+ return parsed.astimezone(UTC).replace(tzinfo=None)
121
+
122
+ return key
123
+
124
+
101
125
  def _get_component_prefix(logger_name: str) -> str:
102
126
  """Extract the component prefix (first N dotted segments) of a logger name.
103
127
 
@@ -141,6 +165,7 @@ class _ExtractedLines(NamedTuple):
141
165
  blank: int
142
166
  window_start: str | None
143
167
  window_end: str | None
168
+ order: Callable[[str], datetime]
144
169
 
145
170
 
146
171
  def _extract_log_entries(
@@ -159,8 +184,7 @@ def _extract_log_entries(
159
184
  matched = 0
160
185
  unparseable = 0
161
186
  blank = 0
162
- window_start: str | None = None
163
- window_end: str | None = None
187
+ stamps: list[str] = []
164
188
  needle = search.lower() if search else None
165
189
 
166
190
  for line in lines:
@@ -180,12 +204,9 @@ def _extract_log_entries(
180
204
  matched += 1
181
205
  timestamp, log_level, logger_name, message = match.groups()
182
206
  timestamp = _normalize_timestamp(timestamp)
183
- # Widen the covered window on every parseable line, filtered or not:
207
+ # The covered window spans every parseable line, filtered or not:
184
208
  # it describes the log slice that was read, not the summary's contents.
185
- if window_start is None or timestamp < window_start:
186
- window_start = timestamp
187
- if window_end is None or timestamp > window_end:
188
- window_end = timestamp
209
+ stamps.append(timestamp)
189
210
  log_level = log_level.upper()
190
211
  if level and log_level != level:
191
212
  continue
@@ -207,13 +228,15 @@ def _extract_log_entries(
207
228
  }
208
229
  )
209
230
 
231
+ order = _instant_order(stamps)
210
232
  return _ExtractedLines(
211
233
  entries=entries,
212
234
  matched=matched,
213
235
  unparseable=unparseable,
214
236
  blank=blank,
215
- window_start=window_start,
216
- window_end=window_end,
237
+ window_start=min(stamps, key=order, default=None),
238
+ window_end=max(stamps, key=order, default=None),
239
+ order=order,
217
240
  )
218
241
 
219
242
 
@@ -440,8 +463,12 @@ def _parse_error_log_structured(
440
463
  # Bounds, not last-write-wins: a log whose lines are not perfectly
441
464
  # ordered would otherwise drag last_seen backwards, which also
442
465
  # misplaces the issue in the recency tiebreaker below.
443
- record["first_seen"] = min(record["first_seen"], entry["timestamp"])
444
- record["last_seen"] = max(record["last_seen"], entry["timestamp"])
466
+ record["first_seen"] = min(
467
+ record["first_seen"], entry["timestamp"], key=extracted.order
468
+ )
469
+ record["last_seen"] = max(
470
+ record["last_seen"], entry["timestamp"], key=extracted.order
471
+ )
445
472
 
446
473
  # Count first, then severity, then recency. Python's sort is stable, so
447
474
  # count alone would return the *oldest* of a tied run — and on a log whose
@@ -452,7 +479,7 @@ def _parse_error_log_structured(
452
479
  key=lambda i: (
453
480
  i["count"],
454
481
  _LEVEL_SEVERITY.get(i["level"], 0),
455
- i["last_seen"],
482
+ extracted.order(i["last_seen"]),
456
483
  ),
457
484
  reverse=True,
458
485
  )