ha-mcp-dev 9.0.1.dev3231__tar.gz → 9.0.1.dev3235__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 (817) hide show
  1. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/PKG-INFO +1 -1
  2. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/pyproject.toml +1 -1
  3. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/pyproject.toml.orig +1 -1
  4. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_dashboards.py +5 -2
  5. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_manager.py +2 -14
  6. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/dashboard_screenshot/paths.py +43 -15
  7. ha_mcp_dev-9.0.1.dev3235/src/ha_mcp/storage_helper_types.py +28 -0
  8. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -42
  9. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/create.py +0 -2
  10. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/schemas.py +6 -33
  11. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/update.py +11 -3
  12. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/dashboard_edit_errors.py +3 -2
  13. ha_mcp_dev-9.0.1.dev3235/src/ha_mcp/tools/dashboard_read_errors.py +123 -0
  14. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/entity_removal.py +52 -1
  15. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_deep.py +3 -10
  16. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_config_dashboards.py +95 -132
  17. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_entities.py +9 -41
  18. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/LICENSE +0 -0
  19. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/README.md +0 -0
  20. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/__init__.py +0 -0
  21. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/__main__.py +0 -0
  22. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_pypi_marker +0 -0
  23. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_rich_compat.py +0 -0
  24. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/__init__.py +0 -0
  25. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  26. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  27. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  28. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  29. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  30. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  31. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  32. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  33. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  34. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  35. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  36. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  37. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  38. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  39. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  40. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  41. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  42. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  43. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  44. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  45. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  46. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  47. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  48. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  49. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  50. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  51. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  52. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  53. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  54. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  55. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  56. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  57. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  58. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  59. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  60. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  61. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  62. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  63. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  64. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  65. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  66. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  67. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  68. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  69. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  70. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  71. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  72. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  73. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  74. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  75. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  76. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  77. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  78. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  79. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  80. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  81. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  82. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  83. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  84. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  85. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  86. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  87. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  88. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  89. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  90. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  91. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  92. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  93. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  94. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  95. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  96. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  97. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  98. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  99. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  100. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  101. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  102. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  103. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  104. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  105. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  106. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  107. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  108. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  109. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  110. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  111. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  112. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  113. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  114. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  115. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  116. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  117. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  118. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  119. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  120. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  121. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  122. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  123. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  124. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  125. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  126. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  127. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  128. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  129. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  130. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  131. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  132. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  133. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  134. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  135. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  136. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  137. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  138. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  139. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  140. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  141. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  142. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  143. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  144. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  145. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  146. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  147. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  148. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  149. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  150. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  151. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  152. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  153. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  154. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  155. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  156. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  157. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  158. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  159. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  160. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  161. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  162. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  163. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  164. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  165. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  166. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  167. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  168. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  169. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  170. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  171. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  172. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  173. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  174. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  175. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  176. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  177. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  178. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  179. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  180. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  181. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  182. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  183. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  184. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  185. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  186. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  187. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  188. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  189. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  190. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  191. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  192. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  193. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  194. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  195. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  196. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  197. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  198. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  199. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  200. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  201. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  202. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  203. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  204. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  205. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  206. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  207. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  208. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  209. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  210. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  211. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  212. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  213. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  214. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  215. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  216. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  217. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  218. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  219. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  220. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  221. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  222. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  223. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  224. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  225. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  226. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  227. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  228. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  229. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  230. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  231. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  232. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  233. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  234. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  235. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  236. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  237. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  238. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  239. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  240. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  241. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  242. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  243. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  244. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  245. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  246. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  247. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  248. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  249. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  250. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  251. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  252. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  253. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  254. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  255. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  256. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  257. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  258. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  259. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  260. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  261. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  262. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  263. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  264. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  265. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  266. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  267. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  268. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  269. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  270. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  271. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  272. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  273. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  274. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  275. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  276. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  277. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  278. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  279. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  280. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  281. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  282. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  283. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  284. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  285. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  286. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  287. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  288. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  289. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  290. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  291. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  292. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  293. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  294. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  295. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  296. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  297. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  298. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  299. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  300. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  301. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  302. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  303. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  304. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  305. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  306. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  307. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  308. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  309. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  310. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  311. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  312. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  313. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  314. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  315. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  316. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  317. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  318. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  319. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  320. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  321. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  322. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  323. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  324. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  325. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  326. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  327. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  328. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  329. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  330. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  331. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  332. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  333. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  334. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  335. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  336. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  337. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  338. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  339. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  340. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  341. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  342. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  343. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  344. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  345. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  346. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  347. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  348. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  349. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  350. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  351. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  352. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  353. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  354. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  355. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  356. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  357. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  358. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  359. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  360. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  361. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  362. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  363. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  364. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  365. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  366. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  367. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  368. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  369. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  370. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  371. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  372. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  373. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  374. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  375. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  376. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  377. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  378. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  379. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  380. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  381. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  382. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  383. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  384. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  385. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  386. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  387. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  388. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  389. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  390. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  391. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  392. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  393. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  394. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  395. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  396. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  397. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  398. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  399. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  400. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  401. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  402. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  403. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  404. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  405. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  406. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  407. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  408. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  409. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  410. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  411. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  412. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  413. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  414. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  415. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  416. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  417. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  418. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  419. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  420. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  421. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  422. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  423. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  424. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  425. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  426. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  427. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  428. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  429. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  430. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  431. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  432. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  433. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  434. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  435. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  436. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  437. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  438. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  439. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  440. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  441. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  442. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  443. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  444. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  445. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  446. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  447. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  448. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/requirements.txt +0 -0
  449. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  450. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  451. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  452. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  453. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  454. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  455. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  456. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  457. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  458. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  459. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  460. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  461. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  462. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  463. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  464. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  465. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  466. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  467. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  468. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  469. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  470. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  471. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  472. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  473. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  474. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  475. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  476. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  477. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  478. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  479. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  480. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  481. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  482. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  483. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  484. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  485. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  486. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  487. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  488. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  489. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  490. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  491. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  492. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  493. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  494. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  495. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  496. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  497. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  498. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  499. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  500. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  501. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  502. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  503. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  504. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  505. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/_version.py +0 -0
  506. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/app_discovery.py +0 -0
  507. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/auth/__init__.py +0 -0
  508. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/auth/consent_form.py +0 -0
  509. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/auth/iss_stamp.py +0 -0
  510. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/auth/oidc_compat.py +0 -0
  511. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/auth/provider.py +0 -0
  512. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_diff.py +0 -0
  513. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_entities.py +0 -0
  514. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_entity_ids.py +0 -0
  515. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_helper_target.py +0 -0
  516. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_integrations.py +0 -0
  517. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_tags.py +0 -0
  518. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/backup_zones.py +0 -0
  519. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/browser_landing.py +0 -0
  520. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/__init__.py +0 -0
  521. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/admin_routes.py +0 -0
  522. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/error_log_journald.py +0 -0
  523. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/models.py +0 -0
  524. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/rest_client.py +0 -0
  525. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/supervisor_client.py +0 -0
  526. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/websocket_client.py +0 -0
  527. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/client/websocket_listener.py +0 -0
  528. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/config.py +0 -0
  529. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/config_backup.py +0 -0
  530. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/config_meta.py +0 -0
  531. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/config_overrides.py +0 -0
  532. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/config_registry.py +0 -0
  533. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/config_settings.py +0 -0
  534. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  535. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  536. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  537. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  538. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  539. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/errors.py +0 -0
  540. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/ha_request_queue.py +0 -0
  541. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  542. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/http_transport.py +0 -0
  543. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/image_info.py +0 -0
  544. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/llm_exposure.py +0 -0
  545. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/log_filters.py +0 -0
  546. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/mcp_client_context.py +0 -0
  547. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/__init__.py +0 -0
  548. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/approval_queue.py +0 -0
  549. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/decision_pin.py +0 -0
  550. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/decisions.py +0 -0
  551. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/editing.py +0 -0
  552. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/evaluator.py +0 -0
  553. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/events.py +0 -0
  554. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/handlers.py +0 -0
  555. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/middleware.py +0 -0
  556. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/model.py +0 -0
  557. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/mrtr.py +0 -0
  558. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/persistence.py +0 -0
  559. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/server_channels.py +0 -0
  560. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/policy/value_sources.py +0 -0
  561. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/py.typed +0 -0
  562. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/read_only.py +0 -0
  563. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/redaction.py +0 -0
  564. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/renamed_tools.py +0 -0
  565. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  566. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  567. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  568. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  569. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  570. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  571. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  572. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  573. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  574. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  575. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  576. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  577. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  578. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  579. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  580. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  581. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  582. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/server.py +0 -0
  583. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/server_instructions.py +0 -0
  584. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/server_lifespan.py +0 -0
  585. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/server_tool_text.py +0 -0
  586. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/__init__.py +0 -0
  587. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  588. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  589. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  590. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  591. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  592. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  593. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  594. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  595. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  596. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  597. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  598. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_theme.py +0 -0
  599. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  600. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  601. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  602. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  603. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  604. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  605. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  606. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  607. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  608. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  609. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  610. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  611. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  612. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  613. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  614. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  615. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  616. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  617. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings.css +0 -0
  618. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings.html +0 -0
  619. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  620. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  621. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  622. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  623. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  624. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  625. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  626. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  627. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  628. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  629. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/smoke_test.py +0 -0
  630. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  631. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/strict_bps.py +0 -0
  632. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tool_dispatch.py +0 -0
  633. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/__init__.py +0 -0
  634. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  635. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/area_messages.py +0 -0
  636. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/auto_backup.py +0 -0
  637. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/backup.py +0 -0
  638. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/backup_access.py +0 -0
  639. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  640. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  641. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  642. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  643. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/best_practice_result.py +0 -0
  644. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  645. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  646. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  647. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/blueprint_write.py +0 -0
  648. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/bug_report_config.py +0 -0
  649. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  650. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/bulk_selector.py +0 -0
  651. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/coercion.py +0 -0
  652. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_api.py +0 -0
  653. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_config_entries.py +0 -0
  654. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_config_reads.py +0 -0
  655. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  656. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_devices.py +0 -0
  657. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  658. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_registries.py +0 -0
  659. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  660. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  661. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  662. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  663. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  664. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  665. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  666. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  667. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  668. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  669. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  670. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  671. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  672. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  673. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  674. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  675. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  676. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  677. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  678. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  679. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_write_errors.py +0 -0
  680. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  681. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/core_contract.py +0 -0
  682. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  683. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  684. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/dev_backup.py +0 -0
  685. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/device_control.py +0 -0
  686. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/device_enrichment.py +0 -0
  687. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  688. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/energy_preferences.py +0 -0
  689. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  690. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/entity_registration.py +0 -0
  691. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  692. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  693. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  694. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/hacs_registration.py +0 -0
  695. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/helper_flows.py +0 -0
  696. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/helpers.py +0 -0
  697. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/history_response.py +0 -0
  698. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  699. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  700. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/log_common.py +0 -0
  701. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/log_sources.py +0 -0
  702. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  703. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  704. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  705. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/radio/__init__.py +0 -0
  706. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/radio/base.py +0 -0
  707. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/radio/matter.py +0 -0
  708. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/radio/thread.py +0 -0
  709. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  710. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/radio/zwave.py +0 -0
  711. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  712. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/recorder_errors.py +0 -0
  713. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/reference_validator.py +0 -0
  714. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/registry.py +0 -0
  715. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  716. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/response_helpers.py +0 -0
  717. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/scene_discovery.py +0 -0
  718. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/__init__.py +0 -0
  719. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/base.py +0 -0
  720. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/component.py +0 -0
  721. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/entities.py +0 -0
  722. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/legacy.py +0 -0
  723. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/modes.py +0 -0
  724. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/overview.py +0 -0
  725. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/response.py +0 -0
  726. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/search/state.py +0 -0
  727. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/server_version.py +0 -0
  728. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  729. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  730. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  731. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  732. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  733. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  734. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  735. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  736. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  737. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  738. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  739. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/statistics_resets.py +0 -0
  740. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/system_restart.py +0 -0
  741. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tool_hints.py +0 -0
  742. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  743. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_addons.py +0 -0
  744. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_areas.py +0 -0
  745. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  746. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  747. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  748. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_calendar.py +0 -0
  749. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_camera.py +0 -0
  750. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_categories.py +0 -0
  751. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_code.py +0 -0
  752. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  753. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  754. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  755. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  756. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  757. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_dev.py +0 -0
  758. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_energy.py +0 -0
  759. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  760. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_groups.py +0 -0
  761. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_hacs.py +0 -0
  762. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_history.py +0 -0
  763. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_integrations.py +0 -0
  764. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_labels.py +0 -0
  765. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_logs.py +0 -0
  766. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_radio.py +0 -0
  767. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_registry.py +0 -0
  768. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_resources.py +0 -0
  769. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_search.py +0 -0
  770. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  771. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_service.py +0 -0
  772. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_services.py +0 -0
  773. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_system.py +0 -0
  774. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_themes.py +0 -0
  775. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_todo.py +0 -0
  776. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_traces.py +0 -0
  777. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_updates.py +0 -0
  778. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_utility.py +0 -0
  779. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  780. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  781. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  782. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/tools_zones.py +0 -0
  783. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/util_helpers.py +0 -0
  784. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/validation_middleware.py +0 -0
  785. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/tools/ws_waiters.py +0 -0
  786. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transforms/__init__.py +0 -0
  787. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transforms/categorized_search.py +0 -0
  788. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transforms/compact_params.py +0 -0
  789. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transforms/component_helpers.py +0 -0
  790. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transforms/component_search.py +0 -0
  791. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  792. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  793. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/transport_security.py +0 -0
  794. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/update_check.py +0 -0
  795. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/__init__.py +0 -0
  796. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/config_hash.py +0 -0
  797. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/config_write_lock.py +0 -0
  798. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  799. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/data_paths.py +0 -0
  800. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  801. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/domain_handlers.py +0 -0
  802. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/entity_membership.py +0 -0
  803. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  804. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  805. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  806. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/operation_manager.py +0 -0
  807. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/python_sandbox.py +0 -0
  808. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  809. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/skill_loader.py +0 -0
  810. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/utils/usage_logger.py +0 -0
  811. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/visibility/__init__.py +0 -0
  812. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/visibility/config_files.py +0 -0
  813. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/visibility/enforcement.py +0 -0
  814. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  815. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/visibility/model.py +0 -0
  816. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/src/ha_mcp/visibility/persistence.py +0 -0
  817. {ha_mcp_dev-9.0.1.dev3231 → ha_mcp_dev-9.0.1.dev3235}/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.0.1.dev3231
3
+ Version: 9.0.1.dev3235
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.0.1.dev3231"
7
+ version = "9.0.1.dev3235"
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.0.1.dev3231"
7
+ version = "9.0.1.dev3235"
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
@@ -70,6 +70,7 @@ async def fetch_dashboard(client: Any, entity_id: str) -> Any:
70
70
  """
71
71
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
72
72
 
73
+ from .tools.dashboard_read_errors import UNKNOWN_CONFIG_PREFIX
73
74
  from .tools.tools_config_dashboards import (
74
75
  _component_dashboard_config,
75
76
  _get_dashboard_config_internal,
@@ -108,7 +109,7 @@ async def fetch_dashboard(client: Any, entity_id: str) -> Any:
108
109
  # url_path ("Unknown config specified", also the create path), or
109
110
  # a dashboard whose config was never saved, which keeps its row.
110
111
  msg = str(err).lower()
111
- if "not_found" not in msg and "unknown config" not in msg:
112
+ if "not_found" not in msg and UNKNOWN_CONFIG_PREFIX.lower() not in msg:
112
113
  raise
113
114
  config = None
114
115
  if row is None:
@@ -134,10 +135,12 @@ async def _save(client: Any, url_path: str, config: Any) -> Any:
134
135
 
135
136
  async def _saved(client: Any, url_path: str, config: Any) -> bool:
136
137
  """Write; ``False`` when Core has no dashboard at ``url_path``."""
138
+ from .tools.dashboard_read_errors import CONFIG_NOT_FOUND_CODE
139
+
137
140
  try:
138
141
  await _save(client, url_path, config)
139
142
  except HomeAssistantCommandError as err:
140
- if err.code != "config_not_found":
143
+ if err.code != CONFIG_NOT_FOUND_CODE:
141
144
  raise
142
145
  return False
143
146
  return True
@@ -109,6 +109,7 @@ from .client.rest_client import (
109
109
  HomeAssistantConnectionError,
110
110
  HomeAssistantError,
111
111
  )
112
+ from .storage_helper_types import SIMPLE_HELPER_TYPES
112
113
  from .utils.data_paths import get_data_dir
113
114
  from .utils.registry_update_lock import registry_update_lock
114
115
 
@@ -2730,20 +2731,7 @@ async def _restore_device(client: Any, entity_id: str, config: Any) -> Any:
2730
2731
  # endpoints (fetch: backup_helper_target.py). The decorator
2731
2732
  # constructs the domain key as ``helper_<type>`` so files group naturally.
2732
2733
 
2733
- _HELPER_LIST_TYPES = {
2734
- "input_boolean",
2735
- "input_text",
2736
- "input_number",
2737
- "input_select",
2738
- "input_datetime",
2739
- "input_button",
2740
- "counter",
2741
- "timer",
2742
- "schedule",
2743
- "zone",
2744
- "person",
2745
- "tag",
2746
- }
2734
+ _HELPER_LIST_TYPES = SIMPLE_HELPER_TYPES
2747
2735
 
2748
2736
 
2749
2737
  async def _restore_helper(
@@ -12,13 +12,15 @@ from typing import Any, cast
12
12
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
13
13
 
14
14
  from ..errors import ErrorCode, create_error_response
15
+ from ..tools.dashboard_read_errors import (
16
+ CONFIG_NOT_FOUND_CODE,
17
+ NO_STORED_CONFIG_MESSAGES,
18
+ NO_STORED_CONFIG_NOTE,
19
+ UNKNOWN_CONFIG_PREFIX,
20
+ )
15
21
  from ..tools.helpers import raise_tool_error
16
22
  from .capture import _normalize_dashboard_path
17
23
 
18
- _UNKNOWN_CONFIG_PREFIX = "Unknown config specified:"
19
- _NO_CONFIG_MESSAGES = frozenset(
20
- {"No config found.", "Command failed: No config found."}
21
- )
22
24
  _JS_DECIMAL_NUMBER = re.compile(
23
25
  r"[+-]?(?:(?:\d+(?:\.\d*)?)|(?:\.\d+))(?:[eE][+-]?\d+)?\Z"
24
26
  )
@@ -264,8 +266,14 @@ def _fallback_view_target(
264
266
  )
265
267
 
266
268
 
267
- async def fetch_dashboard_render_config(client: Any, url_path: str) -> dict[str, Any]:
268
- """Fetch a Lovelace dashboard config for stable view-path resolution."""
269
+ async def fetch_dashboard_render_config(
270
+ client: Any, url_path: str
271
+ ) -> dict[str, Any] | None:
272
+ """Fetch a Lovelace dashboard config for stable view-path resolution.
273
+
274
+ ``None`` when Home Assistant holds no config for the dashboard, which the
275
+ frontend renders as its generated default view.
276
+ """
269
277
  base_path = dashboard_frontend_path(url_path)
270
278
  request: dict[str, Any] = {"type": "lovelace/config", "force": True}
271
279
  if base_path != "lovelace":
@@ -296,12 +304,13 @@ async def fetch_dashboard_render_config(client: Any, url_path: str) -> dict[str,
296
304
  else:
297
305
  error_code = ""
298
306
  message = str(error)
299
- missing_dashboard = (
300
- error_code == "config_not_found"
301
- or message.startswith(
302
- (_UNKNOWN_CONFIG_PREFIX, f"Command failed: {_UNKNOWN_CONFIG_PREFIX}")
307
+ if message in NO_STORED_CONFIG_MESSAGES:
308
+ return None
309
+ missing_dashboard = error_code == CONFIG_NOT_FOUND_CODE or message.startswith(
310
+ (
311
+ f"{UNKNOWN_CONFIG_PREFIX}:",
312
+ f"Command failed: {UNKNOWN_CONFIG_PREFIX}:",
303
313
  )
304
- or message in _NO_CONFIG_MESSAGES
305
314
  )
306
315
  if missing_dashboard:
307
316
  raise_tool_error(
@@ -502,14 +511,14 @@ async def _resolve_legacy_dashboard_target(
502
511
  raw_view = parts[1] if len(parts) > 1 else None
503
512
  numeric_index = _numeric_view_index(raw_view) if raw_view is not None else None
504
513
  return DashboardRenderTarget(
505
- url_path="lovelace",
514
+ url_path=dashboard_root,
506
515
  view_path=None,
507
516
  render_path=render_path,
508
517
  view_index=numeric_index,
509
518
  stable=False,
510
519
  warnings=(
511
- "Legacy built-in Lovelace routes are accepted without a stored "
512
- "dashboard config; the selected view cannot be verified.",
520
+ "Routes of a dashboard without a stored config are accepted; "
521
+ "the selected view cannot be verified.",
513
522
  ),
514
523
  )
515
524
  if len(parts) == 1:
@@ -667,6 +676,25 @@ async def resolve_dashboard_render_target(
667
676
  ),
668
677
  )
669
678
  config = await fetch_dashboard_render_config(client, url_path)
679
+ if config is None:
680
+ if view_path is not None:
681
+ raise_tool_error(
682
+ create_error_response(
683
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
684
+ NO_STORED_CONFIG_NOTE,
685
+ context={"url_path": url_path, "view_path": view_path},
686
+ suggestions=["Omit view_path: there are no static views"],
687
+ )
688
+ )
689
+ base_path = dashboard_frontend_path(url_path)
690
+ return DashboardRenderTarget(
691
+ url_path=base_path,
692
+ view_path=None,
693
+ render_path=base_path,
694
+ view_index=None,
695
+ stable=False,
696
+ warnings=(NO_STORED_CONFIG_NOTE,),
697
+ )
670
698
  return resolve_dashboard_view(url_path, config, view_path)
671
699
 
672
700
 
@@ -718,7 +746,7 @@ async def _numeric_view_warning(
718
746
  return []
719
747
  if config is None:
720
748
  config = await fetch_dashboard_render_config(client, url_path)
721
- views = config.get("views")
749
+ views = (config or {}).get("views")
722
750
  if not isinstance(views, list):
723
751
  return []
724
752
  view_index = index if matched_view_index is None else matched_view_index
@@ -0,0 +1,28 @@
1
+ """The storage-helper types the helper tools manage.
2
+
3
+ Kept outside ``ha_mcp.tools`` so ``backup_manager`` can import it: importing the
4
+ tools package from there would close the backup_manager -> tools -> auto_backup
5
+ cycle. The component keeps the same list (``helper_collections.py``).
6
+ """
7
+
8
+ from typing import Literal, get_args
9
+
10
+ # Managed via {type}/create and {type}/update WebSocket APIs (not Config Entry
11
+ # Flow). The helper tools' schemas spell them out as an enum. Any other value
12
+ # must be a helper flow type Core lists, checked at call time (``helper_flows``),
13
+ # except config_subentry and ha_config_list_helpers' "all".
14
+ StorageHelperType = Literal[
15
+ "input_button",
16
+ "input_boolean",
17
+ "input_select",
18
+ "input_number",
19
+ "input_text",
20
+ "input_datetime",
21
+ "counter",
22
+ "timer",
23
+ "schedule",
24
+ "zone",
25
+ "person",
26
+ "tag",
27
+ ]
28
+ SIMPLE_HELPER_TYPES: frozenset[str] = frozenset(get_args(StorageHelperType))
@@ -10,7 +10,6 @@ module only adds what Core does not do itself.
10
10
  from __future__ import annotations
11
11
 
12
12
  import uuid
13
- from collections.abc import Collection
14
13
  from typing import Any
15
14
 
16
15
  from ...errors import ErrorCode, create_error_response
@@ -122,44 +121,3 @@ def _reject(helper_type: str, message: str, **context: Any) -> None:
122
121
  context=_simple_helper_error_context(helper_type, **context),
123
122
  )
124
123
  )
125
-
126
-
127
- def check_core_gaps(
128
- helper_type: str, body: dict[str, Any], changed: Collection[str] | None = None
129
- ) -> None:
130
- """Reject the few unusable configurations Core accepts.
131
-
132
- Core enforces every other rule this tool used to check by hand; these three
133
- it stores as given, producing a counter or slider that cannot work. On an
134
- update ``changed`` names the caller's fields: a range Core already stores
135
- is judged only when one of its bounds or the step is among them, so a
136
- rename or an icon change of such a helper is not refused.
137
- """
138
- if helper_type not in ("counter", "input_number"):
139
- return
140
- low_key, high_key = _RANGE_KEYS.get(helper_type, _DEFAULT_RANGE_KEYS)
141
- if changed is not None and not {low_key, high_key, "step"} & set(changed):
142
- return
143
- low, high, step = body.get(low_key), body.get(high_key), body.get("step")
144
- if helper_type == "counter":
145
- if low is not None and high is not None and low >= high:
146
- _reject(
147
- helper_type,
148
- f"counter {low_key} ({low}) must be less than {high_key} ({high}).",
149
- **{low_key: low, high_key: high},
150
- )
151
- if step is not None and step <= 0:
152
- _reject(helper_type, f"counter step must be > 0 (got {step}).", step=step)
153
- if (
154
- step is not None
155
- and low is not None
156
- and high is not None
157
- and 0 < high - low < step
158
- ):
159
- _reject(
160
- helper_type,
161
- f"step ({step}) is larger than the range {low_key}..{high_key} "
162
- f"({high - low}); the control could not reach any value in between.",
163
- step=step,
164
- **{low_key: low, high_key: high},
165
- )
@@ -15,7 +15,6 @@ from ..config_write_helpers import apply_entity_category
15
15
  from ..helpers import raise_tool_error, ws_failure_code
16
16
  from ..ws_waiters import wait_for_entity_registered
17
17
  from .core_payload import (
18
- check_core_gaps,
19
18
  with_create_defaults,
20
19
  )
21
20
  from .icon_route import collection_icon
@@ -35,7 +34,6 @@ def _build_create_message(
35
34
  if icon:
36
35
  message["icon"] = icon
37
36
  message.update(with_create_defaults(helper_type, fields))
38
- check_core_gaps(helper_type, message)
39
37
  message["type"] = f"{helper_type}/create" # never a field's
40
38
  return message
41
39
 
@@ -1,8 +1,9 @@
1
1
  """Helper type constants, per-type field schemas and the helper response shape."""
2
2
 
3
3
  from contextvars import ContextVar
4
- from typing import Any, Literal, TypedDict, get_args
4
+ from typing import Any, TypedDict
5
5
 
6
+ from ...storage_helper_types import SIMPLE_HELPER_TYPES, StorageHelperType
6
7
  from ..config_write_helpers import attach_skill_content
7
8
 
8
9
  __all__ = [
@@ -40,26 +41,6 @@ def _attach_helper_skill(response: dict[str, Any], MandatoryBPS: bool) -> None:
40
41
  )
41
42
 
42
43
 
43
- # Simple helper types — managed via {type}/create and {type}/update WebSocket APIs
44
- # (not Config Entry Flow). The helper tools' schemas spell them out as an enum.
45
- # Any other value must be a helper flow type Core lists, checked at call time
46
- # (``helper_flows``), except config_subentry and ha_config_list_helpers' "all".
47
- StorageHelperType = Literal[
48
- "input_button",
49
- "input_boolean",
50
- "input_select",
51
- "input_number",
52
- "input_text",
53
- "input_datetime",
54
- "counter",
55
- "timer",
56
- "schedule",
57
- "zone",
58
- "person",
59
- "tag",
60
- ]
61
- SIMPLE_HELPER_TYPES: frozenset[str] = frozenset(get_args(StorageHelperType))
62
-
63
44
  # Stateful HA input helpers skip last-state restore when `initial` is stored in config
64
45
  # (including false/0). See input_boolean/input_number async_added_to_hass in HA core.
65
46
  _INITIAL_DISABLES_RESTORE_DESCRIPTION = (
@@ -197,9 +178,7 @@ SIMPLE_HELPER_SCHEMAS: dict[str, list[_HelperFieldSpec]] = {
197
178
  "name": "step",
198
179
  "required": False,
199
180
  "selector": {"number": {}},
200
- "description": (
201
- "Step/increment. Must be > 0 and ≤ (max-min). Default 1.0."
202
- ),
181
+ "description": "Step/increment. Must be > 0. Default 1.0.",
203
182
  },
204
183
  {
205
184
  "name": "unit_of_measurement",
@@ -329,7 +308,7 @@ SIMPLE_HELPER_SCHEMAS: dict[str, list[_HelperFieldSpec]] = {
329
308
  "name": "step",
330
309
  "required": False,
331
310
  "selector": {"number": {}},
332
- "description": "Increment. Must be > 0. Default 1.",
311
+ "description": "Whole-number increment, 0 or more. Default 1.",
333
312
  },
334
313
  {
335
314
  "name": "restore",
@@ -350,10 +329,7 @@ SIMPLE_HELPER_SCHEMAS: dict[str, list[_HelperFieldSpec]] = {
350
329
  "name": "duration",
351
330
  "required": False,
352
331
  "selector": {"text": {}},
353
- "description": (
354
- "Default duration as 'HH:MM:SS' or seconds. Default '00:00:00' "
355
- "(timer must be started with explicit duration)."
356
- ),
332
+ "description": "Default duration as 'HH:MM:SS' or seconds. Default '00:00:00'.",
357
333
  },
358
334
  {
359
335
  "name": "restore",
@@ -374,10 +350,7 @@ SIMPLE_HELPER_SCHEMAS: dict[str, list[_HelperFieldSpec]] = {
374
350
  "name": "monday",
375
351
  "required": False,
376
352
  "selector": {"object": {"multiple": True}},
377
- "description": (
378
- "List of {'from': 'HH:MM', 'to': 'HH:MM'} time ranges. At least "
379
- "one day across monday–sunday must contain a non-empty range."
380
- ),
353
+ "description": "List of {'from': 'HH:MM', 'to': 'HH:MM'} time ranges.",
381
354
  },
382
355
  {
383
356
  "name": "tuesday",
@@ -21,7 +21,7 @@ from ..component_helper_collections import (
21
21
  from ..config_write_helpers import apply_entity_category
22
22
  from ..helpers import raise_tool_error, ws_failure_code
23
23
  from ..ws_waiters import wait_for_entity_registered
24
- from .core_payload import check_core_gaps, merged_update
24
+ from .core_payload import merged_update
25
25
  from .icon_route import collection_icon
26
26
  from .listing import listed_items
27
27
  from .registry import _ws_error_msg
@@ -74,7 +74,6 @@ async def _execute_legacy_update(
74
74
  stored = await _stored_item(client, helper_type, entity_id, unique_id)
75
75
  item_icon = await collection_icon(client, helper_type, "update", icon)
76
76
  body = merged_update(helper_type, stored, name, item_icon, fields, entity_id)
77
- check_core_gaps(helper_type, body, changed=fields)
78
77
  result = await client.send_websocket_message(
79
78
  {**body, "type": f"{helper_type}/update", f"{helper_type}_id": unique_id}
80
79
  )
@@ -235,6 +234,16 @@ async def _execute_update_simple_helper(
235
234
  context=_simple_helper_error_context(helper_type),
236
235
  )
237
236
  )
237
+ # As create does: Core's zone schema stores a blank name, which the zone
238
+ # and person dialogs refuse.
239
+ if name is not None and not name.strip():
240
+ raise_tool_error(
241
+ create_error_response(
242
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
243
+ "name cannot be blank. Omit it to keep the current name.",
244
+ context=_simple_helper_error_context(helper_type),
245
+ )
246
+ )
238
247
 
239
248
  warnings: list[str] = []
240
249
  native = await _update_via_component(
@@ -346,7 +355,6 @@ async def _update_via_component(
346
355
  entity_id = item.get("entity_id") or helper_id
347
356
  item_icon = await collection_icon(client, helper_type, "update", icon)
348
357
  body = merged_update(helper_type, item["item"], name, item_icon, fields, entity_id)
349
- check_core_gaps(helper_type, body, changed=fields)
350
358
  registry = {
351
359
  key: value
352
360
  for key, value in (
@@ -8,6 +8,7 @@ from typing import Any, NoReturn
8
8
  from ha_mcp._vendor.fastmcp.exceptions import ToolError
9
9
 
10
10
  from ..errors import ErrorCode, create_error_response, get_error_code, get_error_message
11
+ from .dashboard_read_errors import CONFIG_NOT_FOUND_CODE
11
12
  from .helpers import extract_tool_error_message, raise_tool_error
12
13
 
13
14
  _MODE_SUGGESTIONS = [
@@ -115,7 +116,7 @@ def raise_dashboard_edit_fetch_error(
115
116
  data = None
116
117
  reason = (
117
118
  "not_found"
118
- if isinstance(data, dict) and data.get("ha_error_code") == "config_not_found"
119
+ if isinstance(data, dict) and data.get("ha_error_code") == CONFIG_NOT_FOUND_CODE
119
120
  else "load_failed"
120
121
  )
121
122
  raise_dashboard_edit_error(
@@ -137,7 +138,7 @@ def raise_known_dashboard_save_rejection(
137
138
  message = get_error_message(response) or "Dashboard save rejected"
138
139
  if code in {"unauthorized", "invalid_format"}:
139
140
  raise_dashboard_edit_error(url_path, code, message, False, action)
140
- if code == "config_not_found":
141
+ if code == CONFIG_NOT_FOUND_CODE:
141
142
  raise_dashboard_edit_error(url_path, "not_found", message, False, action)
142
143
  if code == "error" and message.removeprefix("Command failed: ") == "Not supported":
143
144
  raise_dashboard_edit_error(
@@ -0,0 +1,123 @@
1
+ """What a failed dashboard read or lookup means.
2
+
3
+ Core answers ``config_not_found`` for two causes
4
+ (``homeassistant/components/lovelace/websocket.py``, ``_handle_errors``): an
5
+ identifier it does not know ("Unknown config specified: <url_path>") and a
6
+ dashboard it holds but has no config for ("No config found."), which the
7
+ frontend shows as its generated default view. The second comes from Core's
8
+ ``ConfigNotFound`` (``lovelace/dashboard.py``): a storage dashboard with nothing
9
+ saved, a YAML dashboard whose file is missing, or any storage dashboard in
10
+ recovery mode. The code alone cannot tell the causes apart, so the message does.
11
+ If HA rewords either string, the lazy resolve stops firing and an empty
12
+ dashboard reads as a failure; re-verify them on major HA upgrades.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import json
18
+ from typing import Any, NoReturn
19
+
20
+ from ha_mcp._vendor.fastmcp.exceptions import ToolError
21
+
22
+ from ..errors import ErrorCode, create_error_response
23
+ from .helpers import extract_tool_error_message, raise_tool_error
24
+
25
+ UNKNOWN_CONFIG_PREFIX = "Unknown config specified"
26
+ # Bare (nested error shape) and with the "Command failed: " prefix that
27
+ # ``send_websocket_message``'s flat envelope adds. Matched exactly, unlike the
28
+ # unknown-identifier substring, so any other read failure stays a failure.
29
+ NO_STORED_CONFIG_MESSAGES = frozenset(
30
+ {"No config found.", "Command failed: No config found."}
31
+ )
32
+ CONFIG_NOT_FOUND_CODE = "config_not_found"
33
+ DASHBOARD_FETCH_FAILED_PREFIX = "Dashboard fetch failed: "
34
+
35
+ NO_STORED_CONFIG_NOTE = (
36
+ "Home Assistant has no config for this dashboard (a storage dashboard with "
37
+ "nothing saved yet, a YAML dashboard whose file is missing, or recovery "
38
+ "mode), so the frontend shows its generated default view."
39
+ )
40
+
41
+
42
+ def is_unknown_dashboard(error_msg: str) -> bool:
43
+ """Whether Core rejected the identifier itself (the lazy-resolve trigger)."""
44
+ return UNKNOWN_CONFIG_PREFIX in error_msg
45
+
46
+
47
+ def is_no_stored_config_error(exc: ToolError) -> bool:
48
+ """Whether ``_get_dashboard_config_internal``'s ToolError means no config."""
49
+ try:
50
+ error_data = json.loads(str(exc))
51
+ except (json.JSONDecodeError, TypeError):
52
+ return False
53
+ if (
54
+ not isinstance(error_data, dict)
55
+ or error_data.get("ha_error_code") != CONFIG_NOT_FOUND_CODE
56
+ ):
57
+ return False
58
+ message = extract_tool_error_message(exc).removeprefix(
59
+ DASHBOARD_FETCH_FAILED_PREFIX
60
+ )
61
+ return message in NO_STORED_CONFIG_MESSAGES
62
+
63
+
64
+ def read_failure_code(error_msg: str) -> ErrorCode:
65
+ """RESOURCE_NOT_FOUND when Core names the identifier unknown (call after the
66
+ lazy resolve); otherwise SERVICE_CALL_FAILED."""
67
+ if is_unknown_dashboard(error_msg):
68
+ return ErrorCode.RESOURCE_NOT_FOUND
69
+ return ErrorCode.SERVICE_CALL_FAILED
70
+
71
+
72
+ def raise_registry_read_error(*, action: str, url_path: str) -> NoReturn:
73
+ """Raise the shared user-facing error for an unreadable dashboard registry."""
74
+ raise_tool_error(
75
+ create_error_response(
76
+ ErrorCode.SERVICE_CALL_FAILED,
77
+ "Failed to read the Home Assistant dashboard registry",
78
+ suggestions=[
79
+ "Retry the operation",
80
+ "Check the Home Assistant connection and logs",
81
+ "Use ha_config_get_dashboard(list_only=True) to verify registry access",
82
+ ],
83
+ context={"action": action, "url_path": url_path},
84
+ )
85
+ )
86
+
87
+
88
+ DASHBOARD_LIST_SUGGESTION = (
89
+ "Use ha_config_get_dashboard(list_only=True) to see available dashboards"
90
+ )
91
+
92
+
93
+ def raise_unresolved_delete(
94
+ url_path: str, dashboards: list[dict[str, Any]]
95
+ ) -> NoReturn:
96
+ """Raise the delete error for an identifier with no collection item."""
97
+ # YAML rows carry no collection id, so ``_resolve_dashboard`` skips them.
98
+ if any(
99
+ d.get("url_path") == url_path and d.get("mode") == "yaml" for d in dashboards
100
+ ):
101
+ raise_tool_error(
102
+ create_error_response(
103
+ ErrorCode.VALIDATION_INVALID_PARAMETER,
104
+ f"Dashboard '{url_path}' is a YAML-mode dashboard",
105
+ details="It is defined in configuration.yaml; the "
106
+ "Home Assistant API cannot delete it.",
107
+ context={"action": "delete", "url_path": url_path},
108
+ )
109
+ )
110
+ available_ids = [d.get("url_path") for d in dashboards[:10] if d.get("url_path")]
111
+ raise_tool_error(
112
+ create_error_response(
113
+ ErrorCode.RESOURCE_NOT_FOUND,
114
+ f"Dashboard '{url_path}' not found",
115
+ details=f"No dashboard found with URL path or internal ID '{url_path}'.",
116
+ suggestions=[DASHBOARD_LIST_SUGGESTION],
117
+ context={
118
+ "action": "delete",
119
+ "url_path": url_path,
120
+ "available_dashboard_ids": available_ids,
121
+ },
122
+ )
123
+ )
@@ -9,9 +9,11 @@ item, so it gets no note.
9
9
 
10
10
  from __future__ import annotations
11
11
 
12
+ from collections.abc import Callable
12
13
  from typing import Any
13
14
 
14
- from ..client.rest_client import HomeAssistantError
15
+ from ..client.rest_client import HomeAssistantConnectionError, HomeAssistantError
16
+ from ..errors import ErrorCode
15
17
  from .config_helpers.listing import listed_items
16
18
  from .config_helpers.schemas import SIMPLE_HELPER_TYPES
17
19
 
@@ -73,3 +75,52 @@ async def remove_registry_entry(
73
75
  {"type": "config/entity_registry/remove", "entity_id": entity_id}
74
76
  )
75
77
  return result, notes
78
+
79
+
80
+ async def remove_registry_entries(
81
+ client: Any, entity_ids: list[str], error_text: Callable[[dict[str, Any]], str]
82
+ ) -> dict[str, Any]:
83
+ """Remove each id in turn; each lands in ``removed``, ``skipped`` (Core's
84
+ not_found: already absent) or ``errors``. A lost connection stops the run
85
+ and lists the ids it never reached, which are safe to retry."""
86
+ removed: list[str] = []
87
+ skipped: list[str] = []
88
+ errors: list[dict[str, str]] = []
89
+ not_attempted: list[str] = []
90
+ for index, eid in enumerate(entity_ids):
91
+ try:
92
+ result = await client.send_websocket_message(
93
+ {"type": "config/entity_registry/remove", "entity_id": eid}
94
+ )
95
+ except HomeAssistantConnectionError as exc:
96
+ errors.append(
97
+ {
98
+ "entity_id": eid,
99
+ "code": ErrorCode.CONNECTION_FAILED.value,
100
+ "message": str(exc),
101
+ }
102
+ )
103
+ not_attempted = list(entity_ids[index + 1 :])
104
+ break
105
+ if result.get("success"):
106
+ removed.append(eid)
107
+ elif result.get("error_code") == "not_found":
108
+ skipped.append(eid)
109
+ else:
110
+ errors.append(
111
+ {
112
+ "entity_id": eid,
113
+ "code": ErrorCode.SERVICE_CALL_FAILED.value,
114
+ "message": error_text(result),
115
+ }
116
+ )
117
+ response: dict[str, Any] = {
118
+ "success": not errors,
119
+ "total": len(entity_ids),
120
+ "removed": removed,
121
+ "skipped": skipped,
122
+ "errors": errors,
123
+ }
124
+ if not_attempted:
125
+ response["not_attempted"] = not_attempted
126
+ return response
@@ -11,6 +11,7 @@ from ha_mcp._vendor.fastmcp.exceptions import ToolError
11
11
  from ...client.rest_client import NON_ADMIN_TOKEN_WARNING, HomeAssistantAPIError
12
12
  from ...errors import get_error_code, get_error_message
13
13
  from ..component_api import component_supports, get_component_caps
14
+ from ..dashboard_read_errors import CONFIG_NOT_FOUND_CODE, NO_STORED_CONFIG_MESSAGES
14
15
  from ..helper_flows import helper_flow_types
15
16
  from ..helpers import exception_to_structured_error, safe_progress
16
17
  from ..tools_config_dashboards import (
@@ -66,14 +67,6 @@ async def _scrub_results_for_enforce(
66
67
  results[category] = scrub_records(items, enforce_regex)
67
68
 
68
69
 
69
- # The ``lovelace/config`` messages meaning "this dashboard has no stored
70
- # config" — bare (nested error shape) and as ``send_websocket_message``'s
71
- # flat envelope prefixes it. Mirrors ``dashboard_screenshot/paths.py``.
72
- _NO_STORED_CONFIG_MESSAGES = frozenset(
73
- {"No config found.", "Command failed: No config found."}
74
- )
75
-
76
-
77
70
  def _is_no_stored_config(resp: dict[str, Any]) -> bool:
78
71
  """True when a failed ``lovelace/config`` envelope means the dashboard
79
72
  has no stored config — an auto-generated dashboard that was never taken
@@ -95,9 +88,9 @@ def _is_no_stored_config(resp: dict[str, Any]) -> bool:
95
88
  same HA error.
96
89
  """
97
90
  code = resp.get("error_code") or get_error_code(resp)
98
- if code != "config_not_found":
91
+ if code != CONFIG_NOT_FOUND_CODE:
99
92
  return False
100
- return get_error_message(resp) in _NO_STORED_CONFIG_MESSAGES
93
+ return get_error_message(resp) in NO_STORED_CONFIG_MESSAGES
101
94
 
102
95
 
103
96
  async def _phase_finished(