ha-mcp-dev 8.6.0.dev2981__tar.gz → 8.6.0.dev2987__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 (777) hide show
  1. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/PKG-INFO +2 -2
  2. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/README.md +1 -1
  3. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/pyproject.toml +1 -1
  4. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/pyproject.toml.orig +1 -1
  5. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/llm_exposure.py +9 -1
  6. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/read_only.py +20 -11
  7. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/server_tool_text.py +18 -10
  8. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_search.py +3 -1
  9. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/transforms/categorized_search.py +147 -35
  10. ha_mcp_dev-8.6.0.dev2987/src/ha_mcp/transforms/compact_params.py +87 -0
  11. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/LICENSE +0 -0
  12. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/__init__.py +0 -0
  13. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/__main__.py +0 -0
  14. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_pypi_marker +0 -0
  15. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_rich_compat.py +0 -0
  16. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/__init__.py +0 -0
  17. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  18. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  19. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  20. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  21. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  22. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  23. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  24. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  25. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  26. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  27. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  28. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  29. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  30. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  31. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  32. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  33. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  34. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  35. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  36. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  37. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  38. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  39. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  40. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  41. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  42. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  43. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  44. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  45. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  46. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  47. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  48. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  49. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  50. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  51. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  52. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  53. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  54. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  55. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  56. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  57. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  58. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  59. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  60. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  61. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  62. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  63. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  64. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  65. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  66. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  67. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  68. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  69. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  70. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  71. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  72. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  73. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  74. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  75. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  76. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  77. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  78. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  79. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  80. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  81. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  82. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  83. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  84. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  85. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  86. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  87. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  88. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  89. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  90. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  91. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  92. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  93. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  94. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  95. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  96. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  97. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  98. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  99. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  100. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  101. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  102. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  103. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  104. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  105. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  106. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  107. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  108. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  109. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  110. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  111. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  112. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  113. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  114. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  115. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  116. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  117. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  118. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  119. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  120. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  121. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  122. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  123. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  124. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  125. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  126. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  127. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  128. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  129. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  130. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  131. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  132. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  133. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  134. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  135. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  136. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  137. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  138. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  139. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  140. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  141. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  142. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  143. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  144. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  145. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  146. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  147. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  148. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  149. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  150. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  151. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  152. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  153. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  154. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  155. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  156. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  157. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  158. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  159. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  160. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  161. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  162. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  163. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  164. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  165. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  166. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  167. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  168. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  169. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  170. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  171. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  172. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  173. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  174. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  175. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  176. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  177. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  178. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  179. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  180. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  181. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  182. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  183. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  184. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  185. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  186. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  187. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  188. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  189. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  190. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  191. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  192. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  193. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  194. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  195. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  196. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  197. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  198. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  199. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  200. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  201. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  202. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  203. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  204. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  205. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  206. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  207. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  208. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  209. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  210. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  211. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  212. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  213. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  214. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  215. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  216. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  217. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  218. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  219. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  220. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  221. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  222. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  223. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  224. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  225. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  226. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  227. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  228. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  229. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  230. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  231. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  232. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  233. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  234. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  235. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  236. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  237. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  238. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  239. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  240. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  241. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  242. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  243. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  244. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  245. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  246. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  247. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  248. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  249. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  250. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  251. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  252. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  253. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  254. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  255. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  256. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  257. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  258. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  259. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  260. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  261. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  262. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  263. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  264. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  265. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  266. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  267. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  268. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  269. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  270. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  271. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  272. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  273. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  274. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  275. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  276. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  277. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  278. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  279. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  280. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  281. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  282. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  283. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  284. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  285. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  286. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  287. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  288. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  289. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  290. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  291. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  292. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  293. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  294. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  295. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  296. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  297. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  298. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  299. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  300. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  301. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  302. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  303. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  304. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  305. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  306. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  307. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  308. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  309. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  310. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  311. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  312. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  313. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  314. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  315. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  316. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  317. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  318. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  319. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  320. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  321. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  322. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  323. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  324. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  325. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  326. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  327. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  328. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  329. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  330. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  331. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  332. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  333. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  334. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  335. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  336. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  337. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  338. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  339. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  340. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  341. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  342. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  343. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  344. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  345. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  346. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  347. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  348. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  349. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  350. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  351. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  352. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  353. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  354. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  355. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  356. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  357. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  358. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  359. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  360. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  361. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  362. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  363. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  364. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  365. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  366. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  367. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  368. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  369. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  370. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  371. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  372. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  373. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  374. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  375. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  376. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  377. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  378. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  379. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  380. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  381. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  382. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  383. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  384. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  385. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  386. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  387. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  388. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  389. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  390. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  391. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  392. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  393. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  394. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  395. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  396. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  397. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  398. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  399. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  400. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  401. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  402. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  403. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  404. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  405. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  406. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  407. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  408. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  409. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  410. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  411. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  412. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  413. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  414. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  415. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  416. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  417. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  418. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  419. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  420. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  421. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  422. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  423. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  424. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  425. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  426. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  427. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  428. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/requirements.txt +0 -0
  429. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  430. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  431. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  432. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  433. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  434. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  435. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  436. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  437. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  438. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  439. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  440. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  441. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  442. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  443. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  444. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  445. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  446. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  447. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  448. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  449. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  450. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  451. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  452. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  453. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  454. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  455. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  456. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  457. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  458. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  459. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  460. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  461. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  462. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  463. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  464. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  465. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  466. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  467. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  468. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  469. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  470. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  471. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  472. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  473. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  474. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  475. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  476. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  477. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  478. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  479. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  480. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  481. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  482. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  483. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  484. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  485. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/_version.py +0 -0
  486. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/app_discovery.py +0 -0
  487. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/auth/__init__.py +0 -0
  488. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/auth/consent_form.py +0 -0
  489. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/auth/oidc_compat.py +0 -0
  490. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/auth/provider.py +0 -0
  491. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/backup_diff.py +0 -0
  492. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/backup_entity_ids.py +0 -0
  493. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/backup_manager.py +0 -0
  494. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/backup_tags.py +0 -0
  495. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/browser_landing.py +0 -0
  496. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/client/__init__.py +0 -0
  497. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/client/admin_routes.py +0 -0
  498. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/client/rest_client.py +0 -0
  499. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/client/supervisor_client.py +0 -0
  500. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/client/websocket_client.py +0 -0
  501. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/client/websocket_listener.py +0 -0
  502. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/config.py +0 -0
  503. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/config_backup.py +0 -0
  504. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/config_meta.py +0 -0
  505. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/config_overrides.py +0 -0
  506. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/config_registry.py +0 -0
  507. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/config_settings.py +0 -0
  508. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  509. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  510. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  511. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  512. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  513. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  514. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/errors.py +0 -0
  515. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/ha_request_queue.py +0 -0
  516. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  517. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/http_transport.py +0 -0
  518. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/image_info.py +0 -0
  519. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/log_filters.py +0 -0
  520. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/__init__.py +0 -0
  521. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/approval_queue.py +0 -0
  522. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/decision_pin.py +0 -0
  523. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/decisions.py +0 -0
  524. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/editing.py +0 -0
  525. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/evaluator.py +0 -0
  526. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/events.py +0 -0
  527. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/handlers.py +0 -0
  528. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/middleware.py +0 -0
  529. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/model.py +0 -0
  530. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/mrtr.py +0 -0
  531. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/persistence.py +0 -0
  532. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/server_channels.py +0 -0
  533. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/policy/value_sources.py +0 -0
  534. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/py.typed +0 -0
  535. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/redaction.py +0 -0
  536. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/renamed_tools.py +0 -0
  537. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  538. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  539. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  540. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  541. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  542. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  543. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  544. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  545. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  546. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  547. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  548. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  549. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  550. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  551. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  552. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  553. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  554. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/server.py +0 -0
  555. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/server_lifespan.py +0 -0
  556. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/__init__.py +0 -0
  557. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  558. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  559. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  560. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  561. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  562. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  563. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  564. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  565. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  566. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  567. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_theme.py +0 -0
  568. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  569. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  570. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  571. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  572. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  573. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  574. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  575. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  576. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  577. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  578. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  579. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  580. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  581. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  582. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  583. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  584. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  585. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  586. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings.css +0 -0
  587. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings.html +0 -0
  588. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  589. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  590. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  591. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  592. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  593. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  594. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  595. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  596. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  597. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/smoke_test.py +0 -0
  598. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  599. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/strict_bps.py +0 -0
  600. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tool_dispatch.py +0 -0
  601. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/__init__.py +0 -0
  602. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/area_messages.py +0 -0
  603. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/auto_backup.py +0 -0
  604. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/backup.py +0 -0
  605. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/backup_access.py +0 -0
  606. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  607. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  608. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/best_practice_result.py +0 -0
  609. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  610. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  611. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  612. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/blueprint_write.py +0 -0
  613. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/bug_report_config.py +0 -0
  614. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  615. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/bulk_selector.py +0 -0
  616. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/coercion.py +0 -0
  617. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_api.py +0 -0
  618. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_config_entries.py +0 -0
  619. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_config_reads.py +0 -0
  620. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  621. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_devices.py +0 -0
  622. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  623. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_registries.py +0 -0
  624. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  625. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  626. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  627. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  628. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  629. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  630. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  631. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  632. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  633. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  634. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  635. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  636. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  637. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  638. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  639. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  640. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  641. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  642. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  643. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  644. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  645. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  646. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_write_errors.py +0 -0
  647. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  648. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/core_contract.py +0 -0
  649. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  650. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  651. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  652. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/dev_backup.py +0 -0
  653. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/device_control.py +0 -0
  654. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/device_enrichment.py +0 -0
  655. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  656. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/energy_preferences.py +0 -0
  657. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  658. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/entity_registration.py +0 -0
  659. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  660. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  661. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/hacs_registration.py +0 -0
  662. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/helpers.py +0 -0
  663. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/history_response.py +0 -0
  664. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  665. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/log_common.py +0 -0
  666. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/log_sources.py +0 -0
  667. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  668. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  669. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/radio/__init__.py +0 -0
  670. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/radio/base.py +0 -0
  671. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/radio/matter.py +0 -0
  672. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/radio/thread.py +0 -0
  673. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  674. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/radio/zwave.py +0 -0
  675. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  676. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/recorder_errors.py +0 -0
  677. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/reference_validator.py +0 -0
  678. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/registry.py +0 -0
  679. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  680. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/response_helpers.py +0 -0
  681. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/scene_discovery.py +0 -0
  682. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/__init__.py +0 -0
  683. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/base.py +0 -0
  684. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/component.py +0 -0
  685. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/entities.py +0 -0
  686. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/legacy.py +0 -0
  687. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/modes.py +0 -0
  688. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/overview.py +0 -0
  689. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/response.py +0 -0
  690. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/search/state.py +0 -0
  691. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  692. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  693. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  694. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  695. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  696. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  697. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  698. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  699. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  700. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  701. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  702. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/statistics_resets.py +0 -0
  703. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/system_restart.py +0 -0
  704. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tool_hints.py +0 -0
  705. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  706. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_addons.py +0 -0
  707. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_areas.py +0 -0
  708. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  709. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  710. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  711. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_calendar.py +0 -0
  712. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_camera.py +0 -0
  713. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_categories.py +0 -0
  714. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_code.py +0 -0
  715. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  716. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  717. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  718. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  719. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  720. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  721. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_dev.py +0 -0
  722. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_energy.py +0 -0
  723. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_entities.py +0 -0
  724. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  725. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_groups.py +0 -0
  726. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_hacs.py +0 -0
  727. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_history.py +1 -1
  728. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_integrations.py +0 -0
  729. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_labels.py +0 -0
  730. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_logs.py +0 -0
  731. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_radio.py +0 -0
  732. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_registry.py +0 -0
  733. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_resources.py +0 -0
  734. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  735. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_service.py +0 -0
  736. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_services.py +0 -0
  737. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_system.py +0 -0
  738. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_themes.py +0 -0
  739. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_todo.py +0 -0
  740. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_traces.py +0 -0
  741. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_updates.py +0 -0
  742. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_utility.py +0 -0
  743. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  744. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  745. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  746. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/tools_zones.py +0 -0
  747. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/util_helpers.py +0 -0
  748. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/validation_middleware.py +0 -0
  749. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/tools/ws_waiters.py +0 -0
  750. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/transforms/__init__.py +0 -0
  751. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/transforms/component_helpers.py +0 -0
  752. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/transforms/component_search.py +0 -0
  753. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  754. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  755. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/transport_security.py +0 -0
  756. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/update_check.py +0 -0
  757. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/__init__.py +0 -0
  758. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/config_hash.py +0 -0
  759. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/config_write_lock.py +0 -0
  760. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  761. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/data_paths.py +0 -0
  762. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  763. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/domain_handlers.py +0 -0
  764. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/entity_membership.py +0 -0
  765. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  766. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  767. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  768. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/operation_manager.py +0 -0
  769. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/python_sandbox.py +0 -0
  770. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  771. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/skill_loader.py +0 -0
  772. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/utils/usage_logger.py +0 -0
  773. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/visibility/__init__.py +0 -0
  774. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/visibility/enforcement.py +0 -0
  775. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/visibility/model.py +0 -0
  776. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/visibility/persistence.py +0 -0
  777. {ha_mcp_dev-8.6.0.dev2981 → ha_mcp_dev-8.6.0.dev2987}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.6.0.dev2981
3
+ Version: 8.6.0.dev2987
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Keywords: mcp,home-assistant,ai,automation,smart-home
6
6
  Author: Julien
@@ -413,7 +413,7 @@ Set ENABLE_TOOL_SEARCH=true (or toggle the option in the HA app). The full catal
413
413
 
414
414
  | Tool | Purpose |
415
415
  |------|---------|
416
- | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. Hidden tools return name, description, parameters, and annotations (`readOnlyHint` / `destructiveHint`) so the agent can pick the right one; a pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
416
+ | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. A hidden tool comes back compact: name, one-line description (the docstring's first paragraph), a one-line `params` list (types, enum values, required) and the proxy that executes it. `ha_search_tools(tools=[...])` returns the full definition (description, input schema and annotations) of the named tools, the second hop before a call. A pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
417
417
  | `ha_call_read_tool` | Execute a `readOnlyHint` tool by name. Safe — clients can auto-approve. |
418
418
  | `ha_call_write_tool` | Execute a write tool that creates or updates data. |
419
419
  | `ha_call_delete_tool` | Execute a tool that removes / deletes data. |
@@ -353,7 +353,7 @@ Set ENABLE_TOOL_SEARCH=true (or toggle the option in the HA app). The full catal
353
353
 
354
354
  | Tool | Purpose |
355
355
  |------|---------|
356
- | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. Hidden tools return name, description, parameters, and annotations (`readOnlyHint` / `destructiveHint`) so the agent can pick the right one; a pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
356
+ | `ha_search_tools` | BM25 English-keyword search across all tools, pinned ones included. A hidden tool comes back compact: name, one-line description (the docstring's first paragraph), a one-line `params` list (types, enum values, required) and the proxy that executes it. `ha_search_tools(tools=[...])` returns the full definition (description, input schema and annotations) of the named tools, the second hop before a call. A pinned tool returns a name-only stub (`pinned: true`) pointing back at the tool list, and does not use up a result slot. |
357
357
  | `ha_call_read_tool` | Execute a `readOnlyHint` tool by name. Safe — clients can auto-approve. |
358
358
  | `ha_call_write_tool` | Execute a write tool that creates or updates data. |
359
359
  | `ha_call_delete_tool` | Execute a tool that removes / deletes data. |
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2981"
7
+ version = "8.6.0.dev2987"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.6.0.dev2981"
7
+ version = "8.6.0.dev2987"
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
@@ -15,7 +15,8 @@ axis from the global enable/disable in the settings UI:
15
15
  For embedded servers with the Home Assistant LLM API enabled, the single
16
16
  source of truth travels **in-band**: :class:`LlmExposureMiddleware` stamps
17
17
  every ``tools/list`` entry with
18
- ``_meta.ha_mcp = {"llm_api_exposed": bool, "pinned": bool, "policy": {...}}``
18
+ ``_meta.ha_mcp = {"llm_api_exposed": bool, "pinned": bool, "params": str,
19
+ "policy": {...}}``
19
20
  so the component (one more loopback MCP client) filters on data that can never
20
21
  drift from the server's settings, with zero extra round-trips. The ``policy``
21
22
  block reports the serving server's gating state (#1990 — see META_POLICY_KEY). Stamping re-reads the
@@ -51,6 +52,10 @@ logger = logging.getLogger(__name__)
51
52
  META_NAMESPACE = "ha_mcp"
52
53
  META_EXPOSED_KEY = "llm_api_exposed"
53
54
  META_PINNED_KEY = "pinned"
55
+ # The one-line parameter summary the component's search hits show (#2633).
56
+ # Rendered here so the component, which cannot import this package, carries
57
+ # no copy of the renderer.
58
+ META_PARAMS_KEY = "params"
54
59
 
55
60
  # Serving-server policy/identity block stamped alongside the per-tool keys
56
61
  # (#1990). A client (or a debugging agent) reading tools/list can see the
@@ -267,6 +272,8 @@ class LlmExposureMiddleware(Middleware):
267
272
  call_next: CallNext[mt.ListToolsRequest, Sequence[Tool]],
268
273
  ) -> Sequence[Tool]:
269
274
  """Stamp ``_meta.ha_mcp`` on every tool in the list result."""
275
+ from .transforms.compact_params import compact_params
276
+
270
277
  tools = await call_next(context)
271
278
  overrides, pinned = self._current_settings()
272
279
  policy_block = self._policy_block()
@@ -279,6 +286,7 @@ class LlmExposureMiddleware(Middleware):
279
286
  tool.name, tool.tags or set(), overrides
280
287
  )
281
288
  namespace[META_PINNED_KEY] = tool.name in pinned
289
+ namespace[META_PARAMS_KEY] = compact_params(tool.parameters)
282
290
  namespace[META_POLICY_KEY] = policy_block
283
291
  meta[META_NAMESPACE] = namespace
284
292
  stamped.append(tool.model_copy(update={"meta": meta}))
@@ -348,6 +348,17 @@ def read_only_visible(tool: Tool) -> bool:
348
348
  def _raise_read_only_error(
349
349
  name: str, *, blocked_operation: str | None = None, allowed: str | None = None
350
350
  ) -> NoReturn:
351
+ raise_tool_error(
352
+ read_only_error_response(
353
+ name, blocked_operation=blocked_operation, allowed=allowed
354
+ )
355
+ )
356
+
357
+
358
+ def read_only_error_response(
359
+ name: str, *, blocked_operation: str | None = None, allowed: str | None = None
360
+ ) -> dict[str, Any]:
361
+ """The structured ``READ_ONLY_MODE`` error for a blocked call to *name*."""
351
362
  context: dict[str, Any] = {"tool_name": name, "read_only_mode": True}
352
363
  if blocked_operation is not None:
353
364
  context["blocked_operation"] = blocked_operation
@@ -364,17 +375,15 @@ def _raise_read_only_error(
364
375
  f"'{name}' is a write-capable tool, so the call was blocked — "
365
376
  f"no changes were made."
366
377
  )
367
- raise_tool_error(
368
- create_error_response(
369
- ErrorCode.READ_ONLY_MODE,
370
- message,
371
- suggestions=[
372
- "Continue with read-only tools — searching, getting, and "
373
- + "listing data all remain available.",
374
- read_only_remedy_hint(),
375
- ],
376
- context=context,
377
- )
378
+ return create_error_response(
379
+ ErrorCode.READ_ONLY_MODE,
380
+ message,
381
+ suggestions=[
382
+ "Continue with read-only tools — searching, getting, and "
383
+ + "listing data all remain available.",
384
+ read_only_remedy_hint(),
385
+ ],
386
+ context=context,
378
387
  )
379
388
 
380
389
 
@@ -9,9 +9,10 @@ from __future__ import annotations
9
9
 
10
10
  # Description for the unified search tool
11
11
  SEARCH_TOOL_DESCRIPTION = (
12
- "Search ALL Home Assistant tools by ENGLISH keyword. Returns matching "
13
- "tools with descriptions, parameters, and annotations "
14
- "(read/write/delete). Categories: entities, states, automations, "
12
+ "Search ALL Home Assistant tools by ENGLISH keyword. Each hit is "
13
+ "compact: name, one-line description, a one-line params list (types, "
14
+ "enum values, required), and the proxy that executes it. Categories: "
15
+ "entities, states, automations, "
15
16
  "scripts, dashboards, helpers, HACS, calendar, zones, labels, groups, "
16
17
  "areas, floors, history, statistics, devices, integrations, services, "
17
18
  "backups, todo, camera, blueprints, system, and more.\n\n"
@@ -20,13 +21,17 @@ SEARCH_TOOL_DESCRIPTION = (
20
21
  "(pinned: true); use the schema you already have.\n\n"
21
22
  "WORKFLOW:\n"
22
23
  "1. ha_search_tools(query='...') \u2014 find tools (this tool)\n"
23
- "2. Execute: call the tool DIRECTLY by name (preferred), or use "
24
+ "2. ha_search_tools(tools=['<name>']) \u2014 full description and input "
25
+ "schema of the tool(s) you will call. Do this BEFORE calling: the compact "
26
+ "hit omits usage guidance, nested fields, defaults and parameter "
27
+ "descriptions.\n"
28
+ "3. Execute: call the tool DIRECTLY by name (preferred), or use "
24
29
  "a proxy for permission gating:\n"
25
30
  " - ha_call_read_tool \u2014 readOnlyHint tools (safe, no side effects)\n"
26
31
  " - ha_call_write_tool \u2014 destructiveHint tools that create/update\n"
27
32
  " - ha_call_delete_tool \u2014 destructiveHint tools that remove/delete\n"
28
- "Once you know a tool name, call it directly \u2014 no need to search "
29
- "again.\n\n"
33
+ "Once you hold a tool's full schema, call it directly \u2014 no need to "
34
+ "repeat the keyword search or the schema lookup.\n\n"
30
35
  "If using proxies, call with TWO top-level params:\n"
31
36
  ' ha_call_read_tool(name="ha_search", arguments={"query": "..."})\n'
32
37
  " Do NOT nest name/arguments inside the arguments param.\n"
@@ -40,8 +45,9 @@ SEARCH_TOOL_DESCRIPTION = (
40
45
  TOOL_DISCOVERY_INSTRUCTIONS = (
41
46
  "\n\n## Tool Discovery\n"
42
47
  "Tools already in your tool list are callable directly — "
43
- "do not search for them. Once you know any tool’s name, "
44
- "call it directly; never search for the same tool twice.\n\n"
48
+ "do not search for them. Once you hold a tool’s full schema, "
49
+ "call it directly; repeat neither the keyword search nor the "
50
+ "schema lookup for the same tool.\n\n"
45
51
  "Most other tools are NOT listed directly — use "
46
52
  "ha_search_tools to find them.\n\n"
47
53
  "WORKFLOW:\n"
@@ -49,8 +55,10 @@ TOOL_DISCOVERY_INSTRUCTIONS = (
49
55
  "naming the operation (e.g. 'get entity state'). Translate "
50
56
  "other languages first; entity, area and device names keep "
51
57
  "their original spelling.\n"
52
- "2. Results include name, description, parameters, and "
53
- "annotations (readOnlyHint/destructiveHint). A tool already "
58
+ "2. Results are compact: name, one-line description, a one-line "
59
+ "params list and the proxy to use. Before calling, fetch the full "
60
+ "description and input schema with ha_search_tools(tools=['<name>']). "
61
+ "A tool already "
54
62
  "in your list comes back as a name-only stub (pinned: true) "
55
63
  "— use the schema you already have.\n"
56
64
  "3. Execute the discovered tool — two options:\n"
@@ -618,7 +618,9 @@ class SearchTools(ComponentSearchMixin, OverviewMixin, StateMixin):
618
618
  result["tool_discovery"] = {
619
619
  "hint": (
620
620
  "This server uses search-based tool discovery. "
621
- "Use ha_search_tools(query='...') to find tools, then "
621
+ "Use ha_search_tools(query='...') to find tools, "
622
+ "ha_search_tools(tools=['<name>']) for the full input "
623
+ "schema of the one you will call, then "
622
624
  "execute the discovered tool directly by name (preferred), "
623
625
  "or via a proxy for permission gating: "
624
626
  "ha_call_read_tool, ha_call_write_tool, or "
@@ -35,6 +35,7 @@ from ha_mcp._vendor.mcp.types import ToolAnnotations
35
35
 
36
36
  from ..errors import TOOL_ERROR_LOG_LEVEL, ErrorCode, create_error_response
37
37
  from ..renamed_tools import adapt_retired_arguments, current_tool_name
38
+ from .compact_params import compact_params, summary
38
39
  from .write_tool_note import DESKTOP_APPROVAL_NOTE
39
40
 
40
41
  if TYPE_CHECKING:
@@ -100,6 +101,14 @@ SEARCH_QUERY_DESCRIPTION = (
100
101
  "entity, area and device names keep their original spelling."
101
102
  )
102
103
 
104
+ SEARCH_TOOLS_DESCRIPTION = (
105
+ "Exact tool names to return in full (description, input schema, "
106
+ "annotations); pinned tools come back as their stub. 'query' is ignored "
107
+ "when this is given."
108
+ )
109
+
110
+ _TOOL_NOT_FOUND = "Search by English keywords to find the right tool name."
111
+
103
112
  # ``manage`` names one interface that intentionally combines several
104
113
  # operations (.gemini/styleguide.md, Tool Naming Convention). Such a tool is
105
114
  # categorised by its annotations like any other, but every call proxy can
@@ -472,9 +481,10 @@ class CategorizedSearchTransform(BM25SearchTransform):
472
481
  The unified ``ha_search_tools`` searches across ALL tools regardless of
473
482
  category, pinned ones included (issue #2576: a pinned tool vanishing
474
483
  from search reads as "no such capability" to a small model). Hidden
475
- hits carry their full definition and annotations so the LLM can pick a
476
- proxy; pinned hits are rendered as a name-only stub pointing back at the
477
- tool list, and never consume one of the ``max_results`` slots.
484
+ hits are compact (description, one-line params, proxy hint), and
485
+ ``tools=[...]`` returns their full definitions. Pinned hits are rendered
486
+ as a name-only stub pointing back at the tool list, and never consume
487
+ one of the ``max_results`` slots.
478
488
  """
479
489
 
480
490
  def __init__(
@@ -573,15 +583,35 @@ class CategorizedSearchTransform(BM25SearchTransform):
573
583
  transform = self
574
584
 
575
585
  async def search_tools(
576
- query: Annotated[str, SEARCH_QUERY_DESCRIPTION],
586
+ query: Annotated[str, SEARCH_QUERY_DESCRIPTION] = "",
587
+ tools: Annotated[list[str] | None, SEARCH_TOOLS_DESCRIPTION] = None,
577
588
  ctx: Context = None, # type: ignore[assignment]
578
589
  ) -> list[dict[str, Any]]:
579
590
  """Search for tools using English keywords.
580
591
 
581
- Returns matching tool definitions ranked by relevance,
582
- in the same format as list_tools.
592
+ Returns compact matches ranked by relevance; pass ``tools`` to
593
+ get the full definitions of named tools.
583
594
  """
584
595
  catalog = await transform.get_tool_catalog(ctx)
596
+ if tools:
597
+ return await transform._render_full(catalog, tools, ctx)
598
+ if not query.strip():
599
+ raise ToolError(
600
+ json.dumps(
601
+ create_error_response(
602
+ code=ErrorCode.VALIDATION_INVALID_PARAMETER,
603
+ message=(
604
+ "Pass 'query' (English keywords) or 'tools' "
605
+ "(exact tool names)."
606
+ ),
607
+ suggestions=[
608
+ "ha_search_tools(query='create helper') finds tools.",
609
+ "ha_search_tools(tools=['<name>']) returns a tool's full schema.",
610
+ ],
611
+ )
612
+ ),
613
+ log_level=TOOL_ERROR_LOG_LEVEL,
614
+ )
585
615
  results = await transform._search(catalog, query)
586
616
  return await transform._render_results(results)
587
617
 
@@ -610,46 +640,128 @@ class CategorizedSearchTransform(BM25SearchTransform):
610
640
  slots -= 1
611
641
  return results
612
642
 
613
- async def _render_results(self, tools: Sequence[Tool]) -> list[dict[str, Any]]:
614
- """Serialize search results with ``execute_via`` hints."""
643
+ def _execute_via_hint(self, tool: Tool) -> str:
644
+ """Call form(s) for *tool* through each proxy ``_advertised_routes`` lists."""
615
645
  proxy_map: dict[Capability, str] = {
616
646
  "read": self._call_read_name,
617
647
  "write": self._call_write_name,
618
648
  "delete": self._call_delete_name,
619
649
  }
620
- results = []
621
- for tool in tools:
622
- if tool.name in self._always_visible:
623
- # The client already holds this tool's full definition —
624
- # repeating a 5-9KB schema here is what overflows small
625
- # context windows (#2576).
626
- results.append(
627
- {
628
- "name": tool.name,
629
- "pinned": True,
630
- "execute_via": (
631
- f"{tool.name} is already in your tool list — "
632
- "call it directly with the schema you have; "
633
- "no search or proxy needed."
634
- ),
635
- }
650
+ routes = _advertised_routes(tool.name, _categorize_tool(tool))
651
+ if len(routes) == 1:
652
+ return _execute_via(proxy_map[routes[0]], tool.name)
653
+ hint = "; ".join(
654
+ f"{route} actions: {_execute_via(proxy_map[route], tool.name)}"
655
+ for route in routes
656
+ )
657
+ return hint[:1].upper() + hint[1:]
658
+
659
+ @staticmethod
660
+ def _pinned_stub(tool: Tool) -> dict[str, Any]:
661
+ # The client already holds this tool's full definition — repeating a
662
+ # 5-9KB schema here is what overflows small context windows (#2576).
663
+ return {
664
+ "name": tool.name,
665
+ "pinned": True,
666
+ "execute_via": (
667
+ f"{tool.name} is already in your tool list — "
668
+ "call it directly with the schema you have; "
669
+ "no search or proxy needed."
670
+ ),
671
+ }
672
+
673
+ async def _render_results(self, tools: Sequence[Tool]) -> list[dict[str, Any]]:
674
+ """Serialize search hits as compact entries with ``execute_via`` hints."""
675
+ return [
676
+ self._pinned_stub(tool)
677
+ if tool.name in self._always_visible
678
+ else {
679
+ "name": tool.name,
680
+ "description": summary(tool.description),
681
+ "params": compact_params(tool.parameters),
682
+ "execute_via": self._execute_via_hint(tool),
683
+ }
684
+ for tool in tools
685
+ ]
686
+
687
+ async def _render_full(
688
+ self, catalog: Sequence[Tool], names: list[str], ctx: Context
689
+ ) -> list[dict[str, Any]]:
690
+ """Full definitions of *names* from *catalog*, in the order given.
691
+
692
+ A pinned name gets the stub, an unknown one a not-found entry — or,
693
+ for a write tool Read Only Mode hides, the READ_ONLY_MODE error the
694
+ call proxies give, so the model learns why rather than concluding
695
+ the capability does not exist. When no name resolves the whole call
696
+ is an error.
697
+ """
698
+ by_name = {tool.name: tool for tool in catalog}
699
+ hidden = await self._read_only_hidden(names, by_name, ctx)
700
+ results: list[dict[str, Any]] = []
701
+ found = 0
702
+ for name in names:
703
+ tool = by_name.get(name)
704
+ if tool is None:
705
+ error = (
706
+ hidden[name]
707
+ if name in hidden
708
+ else create_error_response(
709
+ code=ErrorCode.RESOURCE_NOT_FOUND,
710
+ message=f"Tool '{name}' not found.",
711
+ suggestions=[_TOOL_NOT_FOUND],
712
+ context={"tool_name": name},
713
+ )
636
714
  )
715
+ results.append({"name": name, **error})
637
716
  continue
638
- data = tool.to_mcp_tool().model_dump(
639
- mode="json", exclude_none=True, by_alias=True
640
- )
641
- routes = _advertised_routes(tool.name, _categorize_tool(tool))
642
- if len(routes) == 1:
643
- data["execute_via"] = _execute_via(proxy_map[routes[0]], tool.name)
717
+ found += 1
718
+ if tool.name in self._always_visible:
719
+ results.append(self._pinned_stub(tool))
720
+ else:
721
+ data = tool.to_mcp_tool().model_dump(
722
+ mode="json", exclude_none=True, by_alias=True
723
+ )
724
+ data["execute_via"] = self._execute_via_hint(tool)
725
+ results.append(data)
726
+ if not found:
727
+ if len(results) == 1:
728
+ error = results[0]
729
+ elif all(name in hidden for name in names):
730
+ error = {**hidden[names[0]], "results": results}
644
731
  else:
645
- hint = "; ".join(
646
- f"{route} actions: {_execute_via(proxy_map[route], tool.name)}"
647
- for route in routes
732
+ missing = [name for name in names if name not in hidden]
733
+ message = f"No tool is named {', '.join(missing)}."
734
+ if hidden:
735
+ message += " Read Only Mode hides the others; see their entries in results."
736
+ error = create_error_response(
737
+ code=ErrorCode.RESOURCE_NOT_FOUND,
738
+ message=message,
739
+ suggestions=[_TOOL_NOT_FOUND],
740
+ context={"results": results},
648
741
  )
649
- data["execute_via"] = hint[:1].upper() + hint[1:]
650
- results.append(data)
742
+ raise ToolError(json.dumps(error), log_level=TOOL_ERROR_LOG_LEVEL)
651
743
  return results
652
744
 
745
+ @staticmethod
746
+ async def _read_only_hidden(
747
+ names: list[str], visible: dict[str, Tool], ctx: Context
748
+ ) -> dict[str, dict[str, Any]]:
749
+ """READ_ONLY_MODE errors for the *names* Read Only Mode hides."""
750
+ if not _read_only_mode() or all(name in visible for name in names):
751
+ return {}
752
+ from ..read_only import read_only_error_response, read_only_visible
753
+
754
+ registered = {
755
+ tool.name: tool for tool in await ctx.fastmcp.local_provider._list_tools()
756
+ }
757
+ return {
758
+ name: read_only_error_response(name)
759
+ for name in names
760
+ if name not in visible
761
+ and name in registered
762
+ and not read_only_visible(registered[name])
763
+ }
764
+
653
765
  def _make_categorized_proxy(
654
766
  self,
655
767
  proxy_name: str,
@@ -0,0 +1,87 @@
1
+ """One-line renderings of a tool for compact search hits (#2633).
2
+
3
+ ``compact_params`` names every parameter with its type on one line and
4
+ ``summary`` is a description's first paragraph. The search transform renders
5
+ hits with them, and :class:`ha_mcp.llm_exposure.LlmExposureMiddleware` stamps
6
+ ``params`` into each tool's ``_meta.ha_mcp`` so the custom component, which
7
+ cannot import this package, shows the same line in its own search hits.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ import json
13
+ from typing import Any
14
+
15
+
16
+ def _literal_labels(branch: dict[str, Any]) -> list[str | None]:
17
+ """Labels of the ``enum``/``const`` values *branch* admits; ``None`` is
18
+ kept as-is for the caller's nullable check."""
19
+ values = [*(branch.get("enum") or [])]
20
+ if "const" in branch:
21
+ values.append(branch["const"])
22
+ return [v if isinstance(v, str) or v is None else json.dumps(v) for v in values]
23
+
24
+
25
+ def _plain_type(branch: dict[str, Any], *, nested: bool) -> str:
26
+ """Label of a branch without literal values."""
27
+ kind = branch.get("type")
28
+ if kind == "array":
29
+ items = _param_type(branch.get("items"))
30
+ return f"({items})[]" if "|" in items else f"{items}[]"
31
+ if isinstance(kind, str) and kind:
32
+ return kind
33
+ if nested and (isinstance(kind, list) or "anyOf" in branch or "oneOf" in branch):
34
+ return _param_type(branch)
35
+ return "object" if {"$ref", "properties", "allOf"} & branch.keys() else "any"
36
+
37
+
38
+ def _param_type(node: Any) -> str:
39
+ """Type label for one parameter: ``|`` joins union branches, enum and
40
+ const values are spelled out inline, ``?`` marks nullable, ``T[]`` an
41
+ array of ``T``."""
42
+ if not isinstance(node, dict):
43
+ return "any"
44
+ kind = node.get("type")
45
+ if isinstance(kind, list):
46
+ branches: list[Any] = [{**node, "type": k} for k in kind]
47
+ else:
48
+ branches = node.get("anyOf") or node.get("oneOf") or [node]
49
+ labels: dict[str, None] = {}
50
+ nullable = False
51
+ for branch in branches:
52
+ if not isinstance(branch, dict):
53
+ continue
54
+ if values := _literal_labels(branch):
55
+ nullable = nullable or None in values
56
+ labels.update(dict.fromkeys(v for v in values if v is not None))
57
+ elif branch.get("type") == "null":
58
+ nullable = True
59
+ else:
60
+ labels[_plain_type(branch, nested=branch is not node)] = None
61
+ if not labels:
62
+ return "null" if nullable else "any"
63
+ return "|".join(labels) + ("?" if nullable else "")
64
+
65
+
66
+ def compact_params(schema: Any) -> str:
67
+ """One line naming every parameter with its type and required marker;
68
+ ``none`` for a tool without parameters."""
69
+ props = schema.get("properties") if isinstance(schema, dict) else None
70
+ if not isinstance(props, dict) or not props:
71
+ return "none"
72
+ required = schema.get("required")
73
+ required = set(required) if isinstance(required, list) else set()
74
+ return "; ".join(
75
+ f"{name} ({_param_type(field)}{', required' if name in required else ''})"
76
+ for name, field in props.items()
77
+ )
78
+
79
+
80
+ def summary(description: str | None) -> str:
81
+ """The first paragraph of a tool description, on one line.
82
+
83
+ A docstring opens with its summary line; the paragraphs after it (and
84
+ the BM25 keyword list ``SearchKeywordsTransform`` appends) come back
85
+ with the full definition from ``tools=[...]``.
86
+ """
87
+ return " ".join((description or "").split("\n\n", 1)[0].split())