ha-mcp-dev 8.4.3.dev2642__tar.gz → 8.4.3.dev2645__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 (725) hide show
  1. {ha_mcp_dev-8.4.3.dev2642/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2645}/PKG-INFO +25 -1
  2. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/README.md +24 -0
  3. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/pyproject.toml +1 -1
  4. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/dashboard_screenshot/theme_guard.py +6 -4
  5. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/http_transport.py +59 -3
  6. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/read_only.py +47 -9
  7. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/zh-Hans.json +1 -1
  8. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_search.py +5 -5
  9. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/transforms/categorized_search.py +2 -2
  10. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645/src/ha_mcp_dev.egg-info}/PKG-INFO +25 -1
  11. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/LICENSE +0 -0
  12. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/MANIFEST.in +0 -0
  13. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/setup.cfg +0 -0
  14. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/__init__.py +0 -0
  15. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/__main__.py +0 -0
  16. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_pypi_marker +0 -0
  17. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_rich_compat.py +0 -0
  18. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/__init__.py +0 -0
  19. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  20. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  21. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  22. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  23. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  24. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  25. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  26. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  27. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  28. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  29. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  30. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  31. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  32. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  33. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  34. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  35. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  36. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  37. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  38. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  39. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  40. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  41. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  42. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  43. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  44. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  45. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  46. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  47. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  48. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  49. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  50. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  51. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  52. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  53. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  54. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  55. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  56. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  57. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  58. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  59. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  60. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  61. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  62. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  63. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  64. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  65. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  66. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  67. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  68. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  69. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  70. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  71. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  72. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  73. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  74. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  75. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  76. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  77. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  78. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  79. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  80. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  81. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  82. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  83. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  84. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  85. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  86. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  87. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  88. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  89. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  90. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  91. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  92. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  93. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  94. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  95. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  96. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  97. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  98. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  99. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  100. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  101. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  102. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  103. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  104. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  105. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  106. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  107. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  108. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  109. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  110. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  111. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  112. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  113. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  114. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  115. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  116. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  117. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  118. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  119. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  120. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  121. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  122. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  123. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  124. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  125. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  126. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  127. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  128. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  129. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  130. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  131. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  132. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  133. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  134. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  135. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  136. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  137. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  138. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  139. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  140. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  141. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  142. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  143. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  144. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  145. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  146. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  147. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  148. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  149. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  150. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  151. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  152. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  153. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  154. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  155. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  156. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  157. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  158. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  159. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  160. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  161. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  162. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  163. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  164. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  165. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  166. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  167. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  168. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  169. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  170. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  171. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  172. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  173. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  174. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  175. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  176. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  177. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  178. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  179. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  180. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  181. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  182. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  183. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  184. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  185. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  186. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  187. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  188. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  189. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  190. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  191. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  192. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  193. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  194. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  195. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  196. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  197. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  198. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  199. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  200. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  201. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  202. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  203. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  204. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  205. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  206. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  207. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  208. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  209. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  210. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  211. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  212. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  213. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  214. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  215. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  216. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  217. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  218. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  219. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  220. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  221. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  222. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  223. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  224. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  225. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  226. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  227. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  228. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  229. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  230. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  231. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  232. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  233. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  234. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  235. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  236. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  237. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  238. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  239. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  240. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  241. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  242. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  243. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  244. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  245. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  246. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  247. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  248. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  249. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  250. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  251. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  252. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  253. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  254. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  255. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  256. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  257. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  258. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  259. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  260. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  261. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  262. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  263. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  264. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  265. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  266. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  267. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  268. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  269. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  270. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  271. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  272. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  273. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  274. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  275. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  276. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  277. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  278. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  279. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  280. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  281. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  282. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  283. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  284. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  285. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  286. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  287. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  288. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  289. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  290. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  291. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  292. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  293. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  294. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  295. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  296. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  297. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  298. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  299. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  300. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  301. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  302. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  303. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  304. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  305. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  306. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  307. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  308. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  309. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  310. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  311. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  312. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  313. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  314. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  315. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  316. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  317. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  318. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  319. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  320. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  321. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  322. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  323. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  324. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  325. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  326. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  327. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  328. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  329. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  330. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  331. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  332. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  333. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  334. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  335. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  336. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  337. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  338. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  339. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  340. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  341. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  342. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  343. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  344. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  345. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  346. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  347. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  348. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  349. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  350. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  351. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  352. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  353. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  354. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  355. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  356. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  357. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  358. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  359. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  360. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  361. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  362. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  363. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  364. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  365. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  366. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  367. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  368. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  369. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  370. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  371. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  372. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  373. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  374. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  375. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  376. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  377. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  378. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  379. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  380. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  381. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  382. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  383. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  384. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  385. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  386. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  387. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  388. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  389. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  390. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  391. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  392. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  393. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  394. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  395. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  396. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  397. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  398. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  399. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  400. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  401. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  402. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  403. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  404. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  405. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  406. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  407. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  408. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  409. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  410. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  411. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  412. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  413. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  414. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  415. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  416. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  417. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  418. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  419. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  420. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  421. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  422. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  423. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  424. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  425. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  426. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  427. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  428. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  429. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/requirements.txt +0 -0
  430. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  431. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  432. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  433. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  434. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  435. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  436. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  437. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  438. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  439. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  440. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  441. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  442. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  443. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  444. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  445. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  446. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  447. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  448. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  449. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  450. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  451. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  452. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  453. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  454. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  455. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  456. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  457. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  458. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  459. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  460. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  461. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  462. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  463. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  464. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  465. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  466. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  467. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  468. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  469. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  470. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  471. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  472. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  473. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  474. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  475. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  476. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  477. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  478. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  479. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  480. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  481. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  482. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  483. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  484. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  485. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  486. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/_version.py +0 -0
  487. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/auth/__init__.py +0 -0
  488. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/auth/consent_form.py +0 -0
  489. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/auth/oidc_compat.py +0 -0
  490. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/auth/provider.py +0 -0
  491. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/backup_manager.py +0 -0
  492. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/browser_landing.py +0 -0
  493. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/client/__init__.py +0 -0
  494. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/client/rest_client.py +0 -0
  495. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/client/supervisor_client.py +0 -0
  496. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/client/websocket_client.py +0 -0
  497. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/client/websocket_listener.py +0 -0
  498. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/config.py +0 -0
  499. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  500. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  501. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  502. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  503. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  504. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/errors.py +0 -0
  505. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/ha_request_queue.py +0 -0
  506. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  507. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/llm_exposure.py +0 -0
  508. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/log_filters.py +0 -0
  509. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/__init__.py +0 -0
  510. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/approval_queue.py +0 -0
  511. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/editing.py +0 -0
  512. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/evaluator.py +0 -0
  513. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/handlers.py +0 -0
  514. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/middleware.py +0 -0
  515. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/model.py +0 -0
  516. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/persistence.py +0 -0
  517. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/policy/value_sources.py +0 -0
  518. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/py.typed +0 -0
  519. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/redaction.py +0 -0
  520. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/renamed_tools.py +0 -0
  521. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  522. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  523. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  524. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  525. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  526. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  527. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  528. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  529. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  530. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  531. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  532. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  533. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  534. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  535. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  536. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  537. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  538. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  539. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  540. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  541. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  542. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  543. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  544. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  545. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  546. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  547. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  548. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  549. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  550. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  551. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  552. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  553. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  554. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  555. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  556. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  557. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  558. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  559. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  560. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  561. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  562. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/server.py +0 -0
  563. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/__init__.py +0 -0
  564. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  565. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  566. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  567. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  568. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  569. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  570. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  571. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  572. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  573. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  574. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_theme.py +0 -0
  575. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  576. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  577. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  578. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  579. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  580. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  581. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  582. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  583. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  584. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  585. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  586. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  587. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  588. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  589. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  590. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  591. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/settings.css +0 -0
  592. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/settings.html +0 -0
  593. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/settings_ui/settings.js +0 -0
  594. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/smoke_test.py +0 -0
  595. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  596. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/strict_bps.py +0 -0
  597. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tool_dispatch.py +0 -0
  598. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/__init__.py +0 -0
  599. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/auto_backup.py +0 -0
  600. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/backup.py +0 -0
  601. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  602. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/best_practice_result.py +0 -0
  603. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  604. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  605. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  606. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/blueprint_write.py +0 -0
  607. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/bulk_selector.py +0 -0
  608. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/component_api.py +0 -0
  609. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/component_config_entries.py +0 -0
  610. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/component_config_reads.py +0 -0
  611. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  612. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/component_devices.py +0 -0
  613. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/component_registries.py +0 -0
  614. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  615. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  616. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  617. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  618. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  619. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  620. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  621. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  622. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  623. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/device_control.py +0 -0
  624. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  625. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/hacs_registration.py +0 -0
  626. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/helpers.py +0 -0
  627. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  628. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/log_common.py +0 -0
  629. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/log_sources.py +0 -0
  630. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  631. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  632. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/radio/__init__.py +0 -0
  633. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/radio/base.py +0 -0
  634. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/radio/matter.py +0 -0
  635. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/radio/thread.py +0 -0
  636. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  637. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/radio/zwave.py +0 -0
  638. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/reference_validator.py +0 -0
  639. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/registry.py +0 -0
  640. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  641. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  642. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  643. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  644. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  645. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  646. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  647. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  648. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  649. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  650. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  651. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  652. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_addons.py +0 -0
  653. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_areas.py +0 -0
  654. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  655. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  656. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  657. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_calendar.py +0 -0
  658. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_camera.py +0 -0
  659. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_categories.py +0 -0
  660. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_code.py +0 -0
  661. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  662. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  663. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  664. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  665. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  666. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  667. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_dev.py +0 -0
  668. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_energy.py +0 -0
  669. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_entities.py +0 -0
  670. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  671. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_groups.py +0 -0
  672. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_hacs.py +0 -0
  673. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_history.py +0 -0
  674. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_integrations.py +0 -0
  675. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_labels.py +0 -0
  676. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_logs.py +0 -0
  677. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_radio.py +0 -0
  678. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_registry.py +0 -0
  679. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_resources.py +0 -0
  680. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  681. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_service.py +0 -0
  682. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_services.py +0 -0
  683. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_system.py +0 -0
  684. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_themes.py +0 -0
  685. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_todo.py +0 -0
  686. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_traces.py +0 -0
  687. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_updates.py +0 -0
  688. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_utility.py +0 -0
  689. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  690. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  691. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  692. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/tools_zones.py +0 -0
  693. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/util_helpers.py +0 -0
  694. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/tools/validation_middleware.py +0 -0
  695. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/transforms/__init__.py +0 -0
  696. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  697. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/transport_security.py +0 -0
  698. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/update_check.py +0 -0
  699. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/__init__.py +0 -0
  700. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/config_hash.py +0 -0
  701. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/config_write_lock.py +0 -0
  702. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  703. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/data_paths.py +0 -0
  704. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  705. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/domain_handlers.py +0 -0
  706. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/entity_membership.py +0 -0
  707. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  708. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  709. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/operation_manager.py +0 -0
  710. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/python_sandbox.py +0 -0
  711. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/skill_loader.py +0 -0
  712. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/utils/usage_logger.py +0 -0
  713. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/visibility/__init__.py +0 -0
  714. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/visibility/enforcement.py +0 -0
  715. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/visibility/model.py +0 -0
  716. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/visibility/persistence.py +0 -0
  717. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp/visibility/resolver.py +0 -0
  718. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  719. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  720. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  721. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  722. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  723. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/tests/__init__.py +0 -0
  724. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/tests/test_constants.py +0 -0
  725. {ha_mcp_dev-8.4.3.dev2642 → ha_mcp_dev-8.4.3.dev2645}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2642
3
+ Version: 8.4.3.dev2645
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -408,6 +408,30 @@ For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`]
408
408
 
409
409
  ---
410
410
 
411
+ ### Read-only HTTP connections
412
+
413
+ Append `/readonly` to the server's HTTP MCP endpoint to restrict that connection
414
+ to the existing Read Only Mode while other clients keep normal access:
415
+
416
+ ```text
417
+ Normal: https://example.com/private_your_secret
418
+ Read-only: https://example.com/private_your_secret/readonly
419
+ ```
420
+
421
+ OAuth and OIDC connections use the same login/provider: for example,
422
+ `https://example.com/mcp/readonly`. No additional secret or server is required.
423
+ Read-only connections hide write tools and block write calls, including calls
424
+ through cached tools or search proxies. The global Read Only Mode setting still
425
+ restricts both endpoints when enabled. Reconnect the client after changing its URL
426
+ so it refreshes its tool list.
427
+
428
+ This is a connection mode for automated agents, not a separate permission on the
429
+ credential: the same credentials still work at the normal endpoint. Home Assistant
430
+ webhook URLs also accept the suffix:
431
+ `https://your-ha.example/api/webhook/<webhook-id>/readonly`. This requires the
432
+ updated embedded integration or Webhook Proxy dev app (add-on), together with
433
+ the updated MCP server.
434
+
411
435
  ## 🧪 Dev Channel
412
436
 
413
437
  Want early access to new features and fixes? Dev releases (`.devN`) are published on every push to master.
@@ -376,6 +376,30 @@ For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`]
376
376
 
377
377
  ---
378
378
 
379
+ ### Read-only HTTP connections
380
+
381
+ Append `/readonly` to the server's HTTP MCP endpoint to restrict that connection
382
+ to the existing Read Only Mode while other clients keep normal access:
383
+
384
+ ```text
385
+ Normal: https://example.com/private_your_secret
386
+ Read-only: https://example.com/private_your_secret/readonly
387
+ ```
388
+
389
+ OAuth and OIDC connections use the same login/provider: for example,
390
+ `https://example.com/mcp/readonly`. No additional secret or server is required.
391
+ Read-only connections hide write tools and block write calls, including calls
392
+ through cached tools or search proxies. The global Read Only Mode setting still
393
+ restricts both endpoints when enabled. Reconnect the client after changing its URL
394
+ so it refreshes its tool list.
395
+
396
+ This is a connection mode for automated agents, not a separate permission on the
397
+ credential: the same credentials still work at the normal endpoint. Home Assistant
398
+ webhook URLs also accept the suffix:
399
+ `https://your-ha.example/api/webhook/<webhook-id>/readonly`. This requires the
400
+ updated embedded integration or Webhook Proxy dev app (add-on), together with
401
+ the updated MCP server.
402
+
379
403
  ## 🧪 Dev Channel
380
404
 
381
405
  Want early access to new features and fixes? Dev releases (`.devN`) are published on every push to master.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.4.3.dev2642"
7
+ version = "8.4.3.dev2645"
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
@@ -80,9 +80,9 @@ def _read_only_mode() -> bool:
80
80
  must know about it.
81
81
  """
82
82
  try:
83
- from ..config import get_global_settings
83
+ from ..read_only import is_read_only
84
84
 
85
- return bool(get_global_settings().read_only_mode)
85
+ return is_read_only()
86
86
  except Exception: # pragma: no cover - settings must never break a read
87
87
  return False
88
88
 
@@ -423,12 +423,14 @@ class ThemeGuard:
423
423
  "> General in the Home Assistant UI."
424
424
  )
425
425
  elif _read_only_mode():
426
+ from ..read_only import read_only_remedy_hint
427
+
426
428
  remedy = (
427
429
  "Server Read Only Mode is on, so ha-mcp will not restore "
428
430
  "it: captures keep running there, but every theme write is "
429
431
  "blocked at call time. Restore it from that account's own "
430
- "session, Profile > General in the Home Assistant UI, or "
431
- "turn Read Only Mode off first."
432
+ "session, Profile > General in the Home Assistant UI. "
433
+ f"{read_only_remedy_hint()}"
432
434
  )
433
435
  else:
434
436
  remedy = (
@@ -1,4 +1,4 @@
1
- """Default-off HTTP diagnostics and JSON responses for HA-MCP launchers."""
1
+ """Shared HTTP endpoint modes and transport options for HA-MCP launchers."""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -22,6 +22,28 @@ from .config import get_global_settings
22
22
  logger = logging.getLogger(__name__)
23
23
 
24
24
 
25
+ def _get_route_path(scope: Scope) -> str:
26
+ """Local copy of ``starlette._utils.get_route_path`` (private API).
27
+
28
+ Strips a mount's ``root_path`` prefix from ``scope["path"]``, the same
29
+ prefix Starlette's own routers use to resolve a sub-app's route. Vendored
30
+ because the source module is private and a minor Starlette bump could
31
+ move or change it without notice; keep this in sync with upstream if
32
+ scope's routing fields ever change.
33
+ """
34
+ path: str = scope["path"]
35
+ root_path = scope.get("root_path", "")
36
+ if not root_path:
37
+ return path
38
+ if not path.startswith(root_path):
39
+ return path
40
+ if path == root_path:
41
+ return ""
42
+ if path[len(root_path)] == "/":
43
+ return path[len(root_path) :]
44
+ return path
45
+
46
+
25
47
  @dataclass
26
48
  class _DiagnosticLogLevel:
27
49
  """Shared ownership while HTTP app lifespans overlap during a restart."""
@@ -67,7 +89,7 @@ class HttpTransportFastMCP(FastMCP):
67
89
  """
68
90
 
69
91
  def http_app(self, *args: Any, **kwargs: Any) -> StarletteWithLifespan:
70
- """Build the normal app, adding only explicitly enabled experiments."""
92
+ """Build the app with a readonly alias and optional transport experiments."""
71
93
  settings = get_global_settings()
72
94
  if settings.http_json_response:
73
95
  # FastMCP accepts json_response as its third positional argument.
@@ -89,7 +111,41 @@ class HttpTransportFastMCP(FastMCP):
89
111
  args = (args[0], middleware, *args[2:])
90
112
  else:
91
113
  kwargs["middleware"] = middleware
92
- return super().http_app(*args, **kwargs)
114
+ app = super().http_app(*args, **kwargs)
115
+ if app.state.transport_type == "streamable-http":
116
+ app.add_middleware(ReadOnlyEndpoint, path=app.state.path)
117
+ return app
118
+
119
+
120
+ class ReadOnlyEndpoint:
121
+ """Route the exact /readonly alias through the same authenticated MCP app.
122
+
123
+ This selects read-only behavior for a configured client connection; the
124
+ credential still works at the normal endpoint. Settings and other HTTP
125
+ routes are not aliased.
126
+ """
127
+
128
+ def __init__(self, app: ASGIApp, path: str) -> None:
129
+ self.app = app
130
+ self.path = path
131
+ self.readonly_path = f"{path.rstrip('/')}/readonly"
132
+
133
+ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
134
+ if (
135
+ scope["type"] != "http"
136
+ or _get_route_path(scope).rstrip("/") != self.readonly_path
137
+ ):
138
+ await self.app(scope, receive, send)
139
+ return
140
+
141
+ from .read_only import read_only_request
142
+
143
+ route_path = _get_route_path(scope)
144
+ prefix = scope["path"][: -len(route_path)]
145
+ path = prefix + self.path
146
+ scope = {**scope, "path": path, "raw_path": path.encode("utf-8")}
147
+ with read_only_request():
148
+ await self.app(scope, receive, send)
93
149
 
94
150
 
95
151
  @dataclass
@@ -1,7 +1,8 @@
1
1
  """Read-only mode — catalog filtering and call-time write blocking (#1569).
2
2
 
3
3
  When ``Settings.read_only_mode`` is on (Tools-tab toggle in the web UI,
4
- ``read_only_mode`` addon option, or ``READ_ONLY_MODE`` env var):
4
+ ``read_only_mode`` addon option, or ``READ_ONLY_MODE`` env var), or the
5
+ HTTP connection uses the ``/readonly`` endpoint:
5
6
 
6
7
  - ``ReadOnlyToolsTransform`` hides write-capable tools from the MCP
7
8
  catalog at list time, except the exempt mixed read/write tools in
@@ -14,6 +15,8 @@ When ``Settings.read_only_mode`` is on (Tools-tab toggle in the web UI,
14
15
  Both consult the live settings singleton per request, so flipping the
15
16
  toggle in standalone HTTP mode takes effect without a restart (addon
16
17
  and stdio modes pick it up on restart, like every other feature flag).
18
+ The HTTP endpoint additionally restricts its own request context without
19
+ changing the shared settings.
17
20
 
18
21
  A tool counts as write-capable when its ``readOnlyHint`` annotation is
19
22
  not ``True`` — the same fail-closed default the policy handlers and the
@@ -30,7 +33,9 @@ from __future__ import annotations
30
33
 
31
34
  import json
32
35
  import logging
33
- from collections.abc import Awaitable, Callable, Sequence
36
+ from collections.abc import Awaitable, Callable, Iterator, Sequence
37
+ from contextlib import contextmanager
38
+ from contextvars import ContextVar
34
39
  from typing import TYPE_CHECKING, Any, NamedTuple, NoReturn
35
40
 
36
41
  from fastmcp.server.middleware.middleware import CallNext, Middleware, MiddlewareContext
@@ -49,6 +54,41 @@ if TYPE_CHECKING:
49
54
 
50
55
  logger = logging.getLogger(__name__)
51
56
 
57
+ _request_read_only: ContextVar[bool] = ContextVar(
58
+ "ha_mcp_request_read_only", default=False
59
+ )
60
+
61
+
62
+ def is_read_only() -> bool:
63
+ """Apply the global setting or the current HTTP endpoint's restriction."""
64
+ return get_global_settings().read_only_mode or _request_read_only.get()
65
+
66
+
67
+ @contextmanager
68
+ def read_only_request() -> Iterator[None]:
69
+ """Restrict this request and its nested tool calls without affecting others."""
70
+ token = _request_read_only.set(True)
71
+ try:
72
+ yield
73
+ finally:
74
+ _request_read_only.reset(token)
75
+
76
+
77
+ def read_only_remedy_hint() -> str:
78
+ """User-facing guidance for lifting Read Only Mode.
79
+
80
+ Deliberately never names the ``/readonly`` endpoint suffix: #2433 wants
81
+ this restriction to hold even for an untrusted model that could talk a
82
+ user into dropping it. The global setting has no such escape-hatch risk,
83
+ so it stays nameable when it is the (or an) active source.
84
+ """
85
+ if get_global_settings().read_only_mode:
86
+ return (
87
+ "To allow changes, the user must turn off Read Only Mode in the "
88
+ "ha-mcp settings UI (Tools tab) or the add-on configuration."
89
+ )
90
+ return "This connection is read-only. If changes are needed, ask the user."
91
+
52
92
 
53
93
  class ReadOnlyExemption(NamedTuple):
54
94
  """One mixed read/write tool that stays enabled in read-only mode.
@@ -322,9 +362,7 @@ def _raise_read_only_error(
322
362
  suggestions=[
323
363
  "Continue with read-only tools — searching, getting, and "
324
364
  + "listing data all remain available.",
325
- "If the user wants to allow changes, they must turn off "
326
- + "Read Only Mode in the ha-mcp settings UI (Tools tab) or "
327
- + "the add-on configuration.",
365
+ read_only_remedy_hint(),
328
366
  ],
329
367
  context=context,
330
368
  )
@@ -333,7 +371,7 @@ def _raise_read_only_error(
333
371
 
334
372
  def require_write_access(tool_name: str) -> None:
335
373
  """Reject direct tool execution while Read Only Mode is enabled."""
336
- if get_global_settings().read_only_mode:
374
+ if is_read_only():
337
375
  _raise_read_only_error(tool_name)
338
376
 
339
377
 
@@ -346,7 +384,7 @@ class ReadOnlyToolsTransform(Transform):
346
384
  """
347
385
 
348
386
  async def list_tools(self, tools: Sequence[Tool]) -> Sequence[Tool]:
349
- if not get_global_settings().read_only_mode:
387
+ if not is_read_only():
350
388
  return tools
351
389
  return [t for t in tools if read_only_visible(t)]
352
390
 
@@ -354,7 +392,7 @@ class ReadOnlyToolsTransform(Transform):
354
392
  self, name: str, call_next: GetToolNext, *, version: VersionSpec | None = None
355
393
  ) -> Tool | None:
356
394
  tool = await call_next(name, version=version)
357
- if tool is None or not get_global_settings().read_only_mode:
395
+ if tool is None or not is_read_only():
358
396
  return tool
359
397
  return tool if read_only_visible(tool) else None
360
398
 
@@ -495,7 +533,7 @@ class ReadOnlyMiddleware(Middleware):
495
533
  async def on_call_tool(
496
534
  self, context: MiddlewareContext, call_next: CallNext
497
535
  ) -> Any:
498
- if not get_global_settings().read_only_mode:
536
+ if not is_read_only():
499
537
  return await call_next(context)
500
538
 
501
539
  # RenamedToolAliasMiddleware runs ahead of this one and normally
@@ -467,7 +467,7 @@
467
467
  "advanced.code_mode_saved_tools_path.label": "已保存工具路径",
468
468
  "advanced.code_mode_saved_tools_path.help": "用于在重启间持久化自定义工具的 JSON 文件。需重启。",
469
469
  "advanced.extra_yaml_write_keys.label": "额外的 YAML 可写键",
470
- "advanced.extra_yaml_write_keys.help": "以逗号分隔的顶层键:除内置键外,ha_config_set_yaml 还可写入这些键,适用于本安装中以 YAML 为主的集成(例如 alert2)。重新定义 Home Assistant 自身信任边界的键始终无法添加,会被忽略。需要自定义组件 1.2.4 或更高版本。",
470
+ "advanced.extra_yaml_write_keys.help": "此安装中面向 YAML 优先的集成(例如 alert2)除内置键外,ha_config_set_yaml 还可写入的额外顶级键。每行输入一个键或用逗号分隔键。重新定义 Home Assistant 自身信任边界的键永远无法添加且将被忽略。需要自定义组件 1.2.4 或更新版本。",
471
471
  "advanced.sidecar_pin_port.label": "设置界面旁路服务端口",
472
472
  "advanced.sidecar_pin_port.help": "0 会在首次启动时选择一个空闲端口,并在后续重启中保留该端口;1024–65535 会固定一个首选端口(如果被占用,则回退到空闲端口)。需要重启。",
473
473
  "advanced.enable_dev_mode.label": "开发者模式",
@@ -4265,15 +4265,15 @@ class SearchTools:
4265
4265
 
4266
4266
  # Surface Read Only Mode after projection so the flag survives any
4267
4267
  # fields= filter.
4268
- if get_global_settings().read_only_mode:
4268
+ from ..read_only import is_read_only, read_only_remedy_hint
4269
+
4270
+ if is_read_only():
4269
4271
  projected["read_only_mode"] = True
4270
4272
  projected["read_only_mode_hint"] = (
4271
4273
  "Read Only Mode is ON: write-capable tools are disabled and "
4272
4274
  "all write or destructive operations are blocked "
4273
- "server-side. You can search, read, and analyze freely. To "
4274
- "allow changes, the user must turn off Read Only Mode in "
4275
- "the ha-mcp settings UI (Tools tab) or the add-on "
4276
- "configuration."
4275
+ "server-side. You can search, read, and analyze freely. "
4276
+ f"{read_only_remedy_hint()}"
4277
4277
  )
4278
4278
 
4279
4279
  # Surface the MCP server's own update status after projection.
@@ -276,9 +276,9 @@ def _execute_via(proxy: str, tool_name: str) -> str:
276
276
 
277
277
  def _read_only_mode() -> bool:
278
278
  """Whether Read Only Mode is on — consulted per request, like its filter."""
279
- from ..config import get_global_settings
279
+ from ..read_only import is_read_only
280
280
 
281
- return bool(get_global_settings().read_only_mode)
281
+ return is_read_only()
282
282
 
283
283
 
284
284
  def _advertised_routes(name: str, category: Capability) -> list[Capability]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2642
3
+ Version: 8.4.3.dev2645
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -408,6 +408,30 @@ For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`]
408
408
 
409
409
  ---
410
410
 
411
+ ### Read-only HTTP connections
412
+
413
+ Append `/readonly` to the server's HTTP MCP endpoint to restrict that connection
414
+ to the existing Read Only Mode while other clients keep normal access:
415
+
416
+ ```text
417
+ Normal: https://example.com/private_your_secret
418
+ Read-only: https://example.com/private_your_secret/readonly
419
+ ```
420
+
421
+ OAuth and OIDC connections use the same login/provider: for example,
422
+ `https://example.com/mcp/readonly`. No additional secret or server is required.
423
+ Read-only connections hide write tools and block write calls, including calls
424
+ through cached tools or search proxies. The global Read Only Mode setting still
425
+ restricts both endpoints when enabled. Reconnect the client after changing its URL
426
+ so it refreshes its tool list.
427
+
428
+ This is a connection mode for automated agents, not a separate permission on the
429
+ credential: the same credentials still work at the normal endpoint. Home Assistant
430
+ webhook URLs also accept the suffix:
431
+ `https://your-ha.example/api/webhook/<webhook-id>/readonly`. This requires the
432
+ updated embedded integration or Webhook Proxy dev app (add-on), together with
433
+ the updated MCP server.
434
+
411
435
  ## 🧪 Dev Channel
412
436
 
413
437
  Want early access to new features and fixes? Dev releases (`.devN`) are published on every push to master.