ha-mcp-dev 9.1.0.dev3350__tar.gz → 9.1.0.dev3352__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 (838) hide show
  1. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/PKG-INFO +14 -1
  2. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/README.md +13 -0
  3. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/pyproject.toml +1 -1
  4. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/pyproject.toml.orig +1 -1
  5. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/http_transport.py +38 -15
  6. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/server.py +47 -48
  7. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/server_instructions.py +17 -14
  8. ha_mcp_dev-9.1.0.dev3352/src/ha_mcp/tool_catalog.py +125 -0
  9. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/bug_report_config.py +3 -0
  10. ha_mcp_dev-9.1.0.dev3352/src/ha_mcp/tools/tool_search_hint_middleware.py +96 -0
  11. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_code.py +2 -2
  12. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_search.py +3 -4
  13. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transforms/categorized_search.py +14 -5
  14. ha_mcp_dev-9.1.0.dev3350/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -103
  15. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/LICENSE +0 -0
  16. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/__init__.py +0 -0
  17. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/__main__.py +0 -0
  18. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_pypi_marker +0 -0
  19. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_rich_compat.py +0 -0
  20. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/__init__.py +0 -0
  21. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  22. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  23. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  24. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  25. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  26. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  27. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  28. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  29. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  30. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  31. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  32. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  33. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  34. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  35. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  36. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  37. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  38. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  39. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  40. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  41. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  42. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  43. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  44. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  45. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  46. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  47. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  48. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  49. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  50. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  51. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  52. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  53. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  54. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  55. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  56. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  57. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  58. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  59. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  60. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  61. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  62. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  63. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  64. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  65. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  66. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  67. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  68. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  69. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  70. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  71. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  72. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  73. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  74. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  75. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  76. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  77. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  78. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  79. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  80. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  81. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  82. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  83. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  84. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  85. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  86. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  87. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  88. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  89. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  90. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  91. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  92. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  93. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  94. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  95. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  96. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  97. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  98. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  99. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  100. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  101. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  102. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  103. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  104. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  105. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  106. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  107. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  108. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  109. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  110. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  111. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  112. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  113. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  114. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  115. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  116. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  117. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  118. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  119. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  120. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  121. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  122. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  123. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  124. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  125. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  126. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  127. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  128. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  129. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  130. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  131. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  132. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  133. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  134. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  135. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  136. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  137. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  138. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  139. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  140. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  141. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  142. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  143. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  144. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  145. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  146. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  147. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  148. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  149. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  150. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  151. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  152. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  153. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  154. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  155. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  156. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  157. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  158. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  159. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  160. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  161. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  162. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  163. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  164. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  165. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  166. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  167. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  168. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  169. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  170. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  171. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  172. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  173. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  174. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  175. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  176. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  177. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  178. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  179. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  180. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  181. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  182. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  183. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  184. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  185. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  186. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  187. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  188. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  189. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  190. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  191. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  192. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  193. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  194. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  195. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  196. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  197. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  198. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  199. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  200. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  201. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  202. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  203. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  204. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  205. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  206. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  207. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  208. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  209. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  210. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  211. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  212. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  213. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  214. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  215. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  216. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  217. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  218. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  219. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  220. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  221. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  222. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  223. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  224. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  225. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  226. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  227. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  228. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  229. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  230. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  231. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  232. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  233. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  234. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  235. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  236. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  237. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  238. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  239. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  240. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  241. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  242. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  243. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  244. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  245. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  246. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  247. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  248. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  249. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  250. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  251. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  252. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  253. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  254. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  255. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  256. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  257. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  258. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  259. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  260. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  261. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  262. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  263. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  264. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  265. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  266. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  267. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  268. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  269. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  270. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  271. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  272. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  273. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  274. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  275. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  276. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  277. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  278. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  279. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  280. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  281. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  282. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  283. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  284. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  285. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  286. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  287. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  288. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  289. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  290. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  291. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  292. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  293. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  294. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  295. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  296. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  297. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  298. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  299. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  300. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  301. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  302. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  303. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  304. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  305. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  306. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  307. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  308. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  309. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  310. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  311. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  312. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  313. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  314. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  315. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  316. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  317. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  318. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  319. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  320. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  321. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  322. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  323. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  324. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  325. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  326. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  327. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  328. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  329. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  330. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  331. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  332. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  333. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  334. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  335. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  336. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  337. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  338. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  339. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  340. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  341. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  342. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  343. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  344. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  345. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  346. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  347. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  348. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  349. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  350. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  351. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  352. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  353. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  354. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  355. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  356. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  357. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  358. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  359. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  360. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  361. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  362. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  363. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  364. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  365. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  366. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  367. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  368. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  369. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  370. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  371. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  372. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  373. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  374. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  375. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  376. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  377. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  378. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  379. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  380. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  381. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  382. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  383. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  384. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  385. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  386. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  387. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  388. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  389. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  390. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  391. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  392. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  393. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  394. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  395. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  396. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  397. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  398. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  399. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  400. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  401. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  402. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  403. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  404. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  405. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  406. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  407. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  408. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  409. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  410. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  411. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  412. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  413. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  414. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  415. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  416. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  417. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  418. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  419. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  420. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  421. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  422. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  423. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  424. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  425. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  426. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  427. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  428. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  429. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  430. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  431. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  432. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  433. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  434. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  435. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  436. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  437. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  438. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  439. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  440. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  441. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  442. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  443. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  444. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/requirements.txt +0 -0
  445. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  446. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  447. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  448. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  449. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  450. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  451. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  452. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  453. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  454. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  455. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  456. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  457. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  458. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  459. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  460. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  461. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  462. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  463. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  464. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  465. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  466. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  467. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  468. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  469. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  470. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  471. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  472. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  473. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  474. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  475. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  476. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  477. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  478. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  479. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  480. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  481. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  482. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  483. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  484. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  485. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  486. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  487. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  488. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  489. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  490. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  491. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  492. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  493. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  494. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  495. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  496. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  497. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  498. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  499. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  500. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  501. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/_version.py +0 -0
  502. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/app_discovery.py +0 -0
  503. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/auth/__init__.py +0 -0
  504. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/auth/consent_form.py +0 -0
  505. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/auth/iss_stamp.py +0 -0
  506. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/auth/oidc_compat.py +0 -0
  507. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/auth/provider.py +0 -0
  508. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_dashboards.py +0 -0
  509. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_diff.py +0 -0
  510. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_entities.py +0 -0
  511. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_entity_ids.py +0 -0
  512. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_helper_target.py +0 -0
  513. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_integrations.py +0 -0
  514. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_manager.py +0 -0
  515. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_tags.py +0 -0
  516. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_todo.py +0 -0
  517. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/backup_zones.py +0 -0
  518. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/browser_landing.py +0 -0
  519. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/__init__.py +0 -0
  520. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/admin_routes.py +0 -0
  521. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/error_log_journald.py +0 -0
  522. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/event_listeners.py +0 -0
  523. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/models.py +0 -0
  524. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/rest_client.py +0 -0
  525. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/supervisor_client.py +0 -0
  526. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/websocket_client.py +0 -0
  527. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/client/websocket_listener.py +0 -0
  528. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/config.py +0 -0
  529. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/config_backup.py +0 -0
  530. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/config_meta.py +0 -0
  531. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/config_overrides.py +0 -0
  532. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/config_registry.py +0 -0
  533. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/config_settings.py +0 -0
  534. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  535. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  536. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  537. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  538. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  539. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  540. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  541. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  542. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/errors.py +0 -0
  543. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/ha_request_queue.py +0 -0
  544. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  545. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/image_info.py +0 -0
  546. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  547. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/listen_sockets.py +0 -0
  548. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/llm_exposure.py +0 -0
  549. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/log_filters.py +0 -0
  550. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/mcp_client_context.py +0 -0
  551. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/__init__.py +0 -0
  552. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/approval_queue.py +0 -0
  553. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/decision_pin.py +0 -0
  554. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/decisions.py +0 -0
  555. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/editing.py +0 -0
  556. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/evaluator.py +0 -0
  557. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/events.py +0 -0
  558. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/handlers.py +0 -0
  559. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/middleware.py +0 -0
  560. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/model.py +0 -0
  561. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/mrtr.py +0 -0
  562. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/persistence.py +0 -0
  563. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/server_channels.py +0 -0
  564. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/policy/value_sources.py +0 -0
  565. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/py.typed +0 -0
  566. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/read_only.py +0 -0
  567. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/redaction.py +0 -0
  568. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/renamed_tools.py +0 -0
  569. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  570. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  571. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  572. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  573. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  574. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  575. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  576. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  577. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  578. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  579. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  580. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  581. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  582. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  583. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  584. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  585. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  586. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/server_lifespan.py +0 -0
  587. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/server_tool_text.py +0 -0
  588. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/__init__.py +0 -0
  589. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  590. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  591. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  592. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  593. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  594. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  595. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  596. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  597. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  598. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  599. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  600. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_theme.py +0 -0
  601. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  602. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  603. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  604. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  605. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  606. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  607. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  608. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  609. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  610. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/hu.json +0 -0
  611. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  612. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  613. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  614. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  615. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  616. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  617. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  618. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  619. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  620. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings.css +0 -0
  621. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings.html +0 -0
  622. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  623. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  624. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  625. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  626. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  627. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  628. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  629. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  630. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  631. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  632. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/smoke_test.py +0 -0
  633. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  634. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/storage_helper_types.py +0 -0
  635. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/strict_bps.py +0 -0
  636. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tool_dispatch.py +0 -0
  637. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/__init__.py +0 -0
  638. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  639. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/area_messages.py +0 -0
  640. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/auto_backup.py +0 -0
  641. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/automation_errors.py +0 -0
  642. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/backup.py +0 -0
  643. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/backup_access.py +0 -0
  644. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  645. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  646. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  647. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  648. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/best_practice_result.py +0 -0
  649. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  650. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  651. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  652. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/blueprint_write.py +0 -0
  653. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  654. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  655. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  656. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/bulk_selector.py +0 -0
  657. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/coercion.py +0 -0
  658. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_api.py +0 -0
  659. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_automation.py +0 -0
  660. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_config_entries.py +0 -0
  661. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_config_reads.py +0 -0
  662. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  663. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_devices.py +0 -0
  664. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  665. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_registries.py +0 -0
  666. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  667. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/component_todo.py +0 -0
  668. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  669. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  670. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  671. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  672. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  673. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  674. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  675. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  676. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  677. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  678. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  679. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  680. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  681. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  682. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  683. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  684. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  685. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  686. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  687. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  688. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  689. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  690. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  691. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_write_errors.py +0 -0
  692. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  693. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/core_contract.py +0 -0
  694. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  695. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  696. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  697. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  698. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/dev_backup.py +0 -0
  699. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/device_control.py +0 -0
  700. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/device_enrichment.py +0 -0
  701. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  702. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/energy_preferences.py +0 -0
  703. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  704. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  705. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/entity_registration.py +0 -0
  706. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/entity_removal.py +0 -0
  707. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  708. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  709. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/event_call.py +0 -0
  710. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  711. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  712. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/hacs_backend.py +0 -0
  713. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/hacs_registration.py +0 -0
  714. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/helper_flows.py +0 -0
  715. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/helpers.py +0 -0
  716. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/history_response.py +0 -0
  717. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  718. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  719. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/log_common.py +0 -0
  720. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/log_sources.py +0 -0
  721. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  722. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  723. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  724. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/radio/__init__.py +0 -0
  725. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/radio/base.py +0 -0
  726. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/radio/matter.py +0 -0
  727. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/radio/thread.py +0 -0
  728. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  729. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/radio/zwave.py +0 -0
  730. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  731. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/recorder_errors.py +0 -0
  732. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/reference_validator.py +0 -0
  733. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/registry.py +0 -0
  734. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  735. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/resource_codec.py +0 -0
  736. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/resource_patch.py +0 -0
  737. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/response_helpers.py +0 -0
  738. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/scene_discovery.py +0 -0
  739. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/__init__.py +0 -0
  740. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/base.py +0 -0
  741. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/component.py +0 -0
  742. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/entities.py +0 -0
  743. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/legacy.py +0 -0
  744. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/modes.py +0 -0
  745. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/overview.py +0 -0
  746. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/response.py +0 -0
  747. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/search/state.py +0 -0
  748. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/server_version.py +0 -0
  749. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  750. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  751. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  752. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  753. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  754. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  755. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  756. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  757. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  758. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  759. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  760. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  761. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/statistics_resets.py +0 -0
  762. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/system_restart.py +0 -0
  763. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tool_hints.py +0 -0
  764. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_addons.py +0 -0
  765. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_areas.py +0 -0
  766. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  767. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  768. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  769. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_calendar.py +0 -0
  770. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_camera.py +0 -0
  771. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_categories.py +0 -0
  772. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  773. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  774. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  775. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  776. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  777. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  778. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_dev.py +0 -0
  779. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_energy.py +0 -0
  780. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_entities.py +0 -0
  781. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  782. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_groups.py +0 -0
  783. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_hacs.py +0 -0
  784. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_history.py +0 -0
  785. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_integrations.py +0 -0
  786. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_labels.py +0 -0
  787. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_logs.py +0 -0
  788. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_radio.py +0 -0
  789. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_registry.py +0 -0
  790. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_resources.py +0 -0
  791. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  792. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_service.py +0 -0
  793. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_services.py +0 -0
  794. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_system.py +0 -0
  795. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_themes.py +0 -0
  796. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_todo.py +0 -0
  797. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_traces.py +0 -0
  798. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_updates.py +0 -0
  799. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_utility.py +0 -0
  800. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  801. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  802. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  803. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/tools_zones.py +0 -0
  804. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/update_categories.py +0 -0
  805. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/util_helpers.py +0 -0
  806. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/validation_middleware.py +0 -0
  807. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/tools/ws_waiters.py +0 -0
  808. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transforms/__init__.py +0 -0
  809. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transforms/compact_params.py +0 -0
  810. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transforms/component_helpers.py +0 -0
  811. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transforms/component_search.py +0 -0
  812. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  813. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  814. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/transport_security.py +0 -0
  815. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/update_check.py +0 -0
  816. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/__init__.py +0 -0
  817. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/config_hash.py +0 -0
  818. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/config_write_lock.py +0 -0
  819. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  820. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/data_paths.py +0 -0
  821. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  822. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/domain_handlers.py +0 -0
  823. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/entity_membership.py +0 -0
  824. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  825. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  826. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  827. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/operation_manager.py +0 -0
  828. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/python_sandbox.py +0 -0
  829. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  830. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/skill_loader.py +0 -0
  831. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/utils/usage_logger.py +0 -0
  832. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/visibility/__init__.py +0 -0
  833. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/visibility/config_files.py +0 -0
  834. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/visibility/enforcement.py +0 -0
  835. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  836. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/visibility/model.py +0 -0
  837. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/visibility/persistence.py +0 -0
  838. {ha_mcp_dev-9.1.0.dev3350 → ha_mcp_dev-9.1.0.dev3352}/src/ha_mcp/visibility/resolver.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 9.1.0.dev3350
3
+ Version: 9.1.0.dev3352
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
@@ -445,6 +445,19 @@ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, C
445
445
 
446
446
  For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
447
447
 
448
+ ### Per-URL tool catalog
449
+
450
+ `ENABLE_TOOL_SEARCH` defaults to off, and it sets the catalog of the main endpoint only. When several clients share one server, give each the URL for the catalog it needs: a client with built-in tool search keeps the full list, a small-context client gets the search tools. The suffixes are fixed overrides that ignore `ENABLE_TOOL_SEARCH`:
451
+
452
+ ```text
453
+ Main endpoint (follows ENABLE_TOOL_SEARCH): https://example.com/private_your_secret
454
+ Always the full catalog: https://example.com/private_your_secret/catalog/full
455
+ Always the search tools: https://example.com/private_your_secret/catalog/search
456
+ Read-only, search tools: https://example.com/private_your_secret/readonly/catalog/search
457
+ ```
458
+
459
+ Each URL keeps its catalog for the life of the connection, so a client picks its catalog only by the URL it is given. Reconnect the client after changing its URL so it refreshes its tool list. Home Assistant webhook URLs accept the same suffixes, alone or after `/readonly`: `https://your-ha.example/api/webhook/<webhook-id>/catalog/search`. This needs an embedded integration or Webhook Proxy app (add-on) release that serves them, with a matching MCP server; an older one returns 404 for a suffixed URL. Stdio runs one client per server process, so set `ENABLE_TOOL_SEARCH` in that client's server environment instead.
460
+
448
461
  ---
449
462
 
450
463
  ### Read-only HTTP connections
@@ -385,6 +385,19 @@ Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, C
385
385
 
386
386
  For the HA app, the same option is documented in [`homeassistant-addon/DOCS.md`](homeassistant-addon/DOCS.md#enable_tool_search) along with the in-app settings UI for fine-grained tool enable/disable/pin.
387
387
 
388
+ ### Per-URL tool catalog
389
+
390
+ `ENABLE_TOOL_SEARCH` defaults to off, and it sets the catalog of the main endpoint only. When several clients share one server, give each the URL for the catalog it needs: a client with built-in tool search keeps the full list, a small-context client gets the search tools. The suffixes are fixed overrides that ignore `ENABLE_TOOL_SEARCH`:
391
+
392
+ ```text
393
+ Main endpoint (follows ENABLE_TOOL_SEARCH): https://example.com/private_your_secret
394
+ Always the full catalog: https://example.com/private_your_secret/catalog/full
395
+ Always the search tools: https://example.com/private_your_secret/catalog/search
396
+ Read-only, search tools: https://example.com/private_your_secret/readonly/catalog/search
397
+ ```
398
+
399
+ Each URL keeps its catalog for the life of the connection, so a client picks its catalog only by the URL it is given. Reconnect the client after changing its URL so it refreshes its tool list. Home Assistant webhook URLs accept the same suffixes, alone or after `/readonly`: `https://your-ha.example/api/webhook/<webhook-id>/catalog/search`. This needs an embedded integration or Webhook Proxy app (add-on) release that serves them, with a matching MCP server; an older one returns 404 for a suffixed URL. Stdio runs one client per server process, so set `ENABLE_TOOL_SEARCH` in that client's server environment instead.
400
+
388
401
  ---
389
402
 
390
403
  ### Read-only HTTP connections
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.0.dev3350"
7
+ version = "9.1.0.dev3352"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.15"
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.0.dev3350"
7
+ version = "9.1.0.dev3352"
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
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import logging
6
6
  from collections.abc import Iterator
7
- from contextlib import contextmanager
7
+ from contextlib import ExitStack, contextmanager
8
8
  from dataclasses import dataclass, field
9
9
  from threading import Lock
10
10
  from time import monotonic
@@ -19,6 +19,7 @@ from ha_mcp._vendor.fastmcp import FastMCP
19
19
  from ha_mcp._vendor.fastmcp.server.http import StarletteWithLifespan
20
20
 
21
21
  from .config import get_global_settings
22
+ from .tool_catalog import CATALOG_MODES, CatalogMode
22
23
 
23
24
  logger = logging.getLogger(__name__)
24
25
 
@@ -90,7 +91,7 @@ class HttpTransportFastMCP(FastMCP):
90
91
  """
91
92
 
92
93
  def http_app(self, *args: Any, **kwargs: Any) -> StarletteWithLifespan:
93
- """Build the app with a readonly alias and optional transport experiments."""
94
+ """Build the app with endpoint selectors and optional transport experiments."""
94
95
  settings = get_global_settings()
95
96
  if settings.http_json_response:
96
97
  # FastMCP accepts json_response as its third positional argument.
@@ -114,38 +115,60 @@ class HttpTransportFastMCP(FastMCP):
114
115
  kwargs["middleware"] = middleware
115
116
  app = super().http_app(*args, **kwargs)
116
117
  if app.state.transport_type == "streamable-http":
117
- app.add_middleware(ReadOnlyEndpoint, path=app.state.path)
118
+ app.add_middleware(EndpointSelectors, path=app.state.path)
118
119
  return app
119
120
 
120
121
 
121
- class ReadOnlyEndpoint:
122
- """Route the exact /readonly alias through the same authenticated MCP app.
122
+ class EndpointSelectors:
123
+ """Route connection-selecting suffixes through the same authenticated MCP app.
123
124
 
124
- This selects read-only behavior for a configured client connection; the
125
- credential still works at the normal endpoint. Settings and other HTTP
126
- routes are not aliased.
125
+ ``/readonly`` restricts the connection to reads; ``/catalog/full`` and
126
+ ``/catalog/search`` fix its tool catalog. A connection may use both,
127
+ read-only first (``/readonly/catalog/search``). The credential
128
+ still works at the normal endpoint. Settings and other HTTP routes are
129
+ not aliased.
127
130
  """
128
131
 
129
132
  def __init__(self, app: ASGIApp, path: str) -> None:
130
133
  self.app = app
131
134
  self.path = path
132
- self.readonly_path = f"{path.rstrip('/')}/readonly"
135
+ self.base = path.rstrip("/")
136
+
137
+ def _selectors(self, route_path: str) -> tuple[bool, CatalogMode | None] | None:
138
+ """``(read_only, catalog_mode)`` for a selector suffix, else None."""
139
+ if not route_path.startswith(self.base + "/"):
140
+ return None
141
+ parts = route_path[len(self.base) + 1 :].split("/")
142
+ read_only = parts[:1] == ["readonly"]
143
+ if read_only:
144
+ parts = parts[1:]
145
+ if not parts:
146
+ return (True, None) if read_only else None
147
+ if len(parts) == 2 and parts[0] == "catalog" and parts[1] in CATALOG_MODES:
148
+ return read_only, parts[1]
149
+ return None
133
150
 
134
151
  async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
135
- if (
136
- scope["type"] != "http"
137
- or _get_route_path(scope).rstrip("/") != self.readonly_path
138
- ):
152
+ if scope["type"] != "http":
139
153
  await self.app(scope, receive, send)
140
154
  return
141
-
142
155
  from .read_only import read_only_request
156
+ from .tool_catalog import catalog_endpoint
143
157
 
144
158
  route_path = _get_route_path(scope)
159
+ selected = self._selectors(route_path.rstrip("/"))
160
+ if selected is None:
161
+ await self.app(scope, receive, send)
162
+ return
163
+ read_only, mode = selected
145
164
  prefix = scope["path"][: -len(route_path)]
146
165
  path = prefix + self.path
147
166
  scope = {**scope, "path": path, "raw_path": path.encode("utf-8")}
148
- with read_only_request():
167
+ with ExitStack() as stack:
168
+ if read_only:
169
+ stack.enter_context(read_only_request())
170
+ if mode is not None:
171
+ stack.enter_context(catalog_endpoint(mode))
149
172
  await self.app(scope, receive, send)
150
173
 
151
174
 
@@ -34,6 +34,12 @@ from .server_tool_text import (
34
34
  SKILL_TOOL_NAME,
35
35
  SKILL_USE_BEFORE_KEYWORDS,
36
36
  )
37
+ from .tool_catalog import (
38
+ CATALOG_MODES,
39
+ default_catalog_mode,
40
+ install_catalog_instructions,
41
+ set_search_available,
42
+ )
37
43
  from .tools.helpers import raise_tool_error
38
44
  from .tools.tool_hints import read_only_hints
39
45
  from .transforms import DEFAULT_PINNED_TOOLS
@@ -114,12 +120,18 @@ class HomeAssistantSmartMCPServer:
114
120
  server_name = self.settings.mcp_server_name
115
121
  server_version = self.settings.mcp_server_version
116
122
 
117
- instructions = self._build_instructions()
123
+ skills = self._build_skills_instructions()
124
+ self._instructions = {
125
+ mode: compose_instructions(
126
+ skills, self.settings, tool_search=mode == "search"
127
+ )
128
+ for mode in CATALOG_MODES
129
+ }
118
130
 
119
131
  self.mcp = FastMCP(
120
132
  name=server_name,
121
133
  version=server_version,
122
- instructions=instructions,
134
+ instructions=self._instructions[default_catalog_mode()],
123
135
  lifespan=server_lifespan,
124
136
  )
125
137
 
@@ -199,7 +211,7 @@ class HomeAssistantSmartMCPServer:
199
211
 
200
212
  # Enrich tool descriptions with BM25 keyword boosts. Runs
201
213
  # unconditionally so Claude's native deferred-tool search
202
- # (claude.ai) benefits even when ENABLE_TOOL_SEARCH is off.
214
+ # (claude.ai) benefits on full-catalog connections too.
203
215
  # Must come before _apply_tool_search so CategorizedSearchTransform
204
216
  # indexes the enriched descriptions.
205
217
  self._apply_search_keyword_enrichment()
@@ -231,7 +243,7 @@ class HomeAssistantSmartMCPServer:
231
243
  self.mcp.add_middleware(ValidationErrorMiddleware())
232
244
 
233
245
  # Replace the opaque "Unknown tool" FastMCP raises when a client calls
234
- # ha_search_tools / the ha_call_* proxies while Tool Search is off
246
+ # ha_search_tools / the ha_call_* proxies on a full-catalog connection
235
247
  # (stale client tool-list cache) with an actionable refresh hint.
236
248
  from .tools.tool_search_hint_middleware import ToolSearchHintMiddleware
237
249
 
@@ -321,14 +333,10 @@ class HomeAssistantSmartMCPServer:
321
333
 
322
334
  return get_skills_dir()
323
335
 
324
- def _build_instructions(self) -> str:
325
- """Compose the server instructions sent in the MCP initialize response."""
326
- return compose_instructions(self._build_skills_instructions(), self.settings)
327
-
328
336
  def _build_skills_instructions(self) -> str | None:
329
337
  """The skills section of the instructions, or None without skills."""
330
338
  return build_skills_instructions(
331
- self._get_skills_dir(), self.settings, skill_tool_hidden(self.settings)
339
+ self._get_skills_dir(), skill_tool_hidden(self.settings)
332
340
  )
333
341
 
334
342
  _parse_skill_frontmatter = staticmethod(parse_skill_frontmatter)
@@ -394,8 +402,8 @@ class HomeAssistantSmartMCPServer:
394
402
 
395
403
  # Description overrides that REPLACE the original description for BM25.
396
404
  # Used to narrow overly broad tools so they stop matching generic queries
397
- # against ha-mcp's internal BM25 search tool. Only applied when
398
- # enable_tool_search=True, because they are tuned specifically for the
405
+ # against ha-mcp's internal BM25 search tool. Only applied to
406
+ # search-mode connections, because they are tuned specifically for the
399
407
  # categorized search transform and replacing the base description would
400
408
  # unnecessarily trim context for other clients.
401
409
  _SEARCH_DESCRIPTION_OVERRIDES: ClassVar[dict[str, str]] = {}
@@ -480,7 +488,7 @@ class HomeAssistantSmartMCPServer:
480
488
  list-tools time via ``SearchKeywordsTransform``.
481
489
 
482
490
  Description overrides (``_SEARCH_DESCRIPTION_OVERRIDES``) are only
483
- applied when ``enable_tool_search`` is also set, because they
491
+ applied to search-mode connections, because they
484
492
  REPLACE the original description and are tuned specifically for
485
493
  ha-mcp's internal BM25 search tool.
486
494
 
@@ -496,11 +504,7 @@ class HomeAssistantSmartMCPServer:
496
504
  )
497
505
  return
498
506
 
499
- overrides = (
500
- self._SEARCH_DESCRIPTION_OVERRIDES
501
- if self.settings.enable_tool_search
502
- else None
503
- )
507
+ overrides = self._SEARCH_DESCRIPTION_OVERRIDES
504
508
  try:
505
509
  self.mcp.add_transform(
506
510
  SearchKeywordsTransform(
@@ -517,32 +521,15 @@ class HomeAssistantSmartMCPServer:
517
521
  logger.exception("Failed to apply SearchKeywordsTransform")
518
522
 
519
523
  def _apply_tool_search(self) -> None:
520
- """Apply the CategorizedSearchTransform if enabled.
521
-
522
- Replaces the full tool catalog with a unified BM25 search tool and
523
- three categorized call proxies (read/write/delete). Pinned tools
524
- remain directly visible in list_tools() for individual permission
525
- gating. The ``ha_get_skill_guide`` tool is pinned via
526
- ``DEFAULT_PINNED_TOOLS`` (transforms/categorized_search.py) so the
527
- bundled skill trigger-conditions stay in the catalog — no explicit
528
- ``pinned.append(...)`` for it here.
529
-
530
- Note: ``_apply_search_keyword_enrichment`` already ran before this
531
- method and installed ``SearchKeywordsTransform`` — the enriched
524
+ """Install the CategorizedSearchTransform and per-endpoint instructions.
525
+
526
+ For endpoints in search mode (see ``tool_catalog``), replaces the full
527
+ catalog with a BM25 search tool and read/write/delete call proxies.
528
+ Pinned tools, ``ha_get_skill_guide`` among them via
529
+ ``DEFAULT_PINNED_TOOLS``, stay directly visible for permission gating.
530
+ ``_apply_search_keyword_enrichment`` already ran, so the enriched
532
531
  catalog is what the categorized transform indexes.
533
532
  """
534
- if not self.settings.enable_tool_search:
535
- return
536
-
537
- try:
538
- from .transforms import CategorizedSearchTransform
539
- except ImportError:
540
- logger.error(
541
- "CategorizedSearchTransform not available but ENABLE_TOOL_SEARCH=true — "
542
- "full tool catalog will be exposed. Install fastmcp>=3.1 to fix."
543
- )
544
- return
545
-
546
533
  # Build the always_visible list: defaults (minus tools the user
547
534
  # explicitly toggled to "enabled" in the Tools tab) + user pins.
548
535
  # The skill guide tool is part of DEFAULT_PINNED_TOOLS, and in
@@ -576,6 +563,8 @@ class HomeAssistantSmartMCPServer:
576
563
  )
577
564
 
578
565
  try:
566
+ from .transforms import CategorizedSearchTransform
567
+
579
568
  self.mcp.add_transform(
580
569
  CategorizedSearchTransform(
581
570
  max_results=self.settings.tool_search_max_results,
@@ -589,14 +578,24 @@ class HomeAssistantSmartMCPServer:
589
578
  enable_code_mode=self.settings.enable_code_mode,
590
579
  )
591
580
  )
592
- logger.info(
593
- "Tool search transform applied (%d pinned tools, max_results=%d, code_mode=%s)",
594
- len(pinned),
595
- self.settings.tool_search_max_results,
596
- self.settings.enable_code_mode,
597
- )
598
581
  except Exception:
599
- logger.exception("Failed to apply tool search transform")
582
+ # Import or install failed: no endpoint can serve search, so every
583
+ # one serves, and describes, the full catalog.
584
+ logger.exception(
585
+ "Tool search transform unavailable; every endpoint serves the "
586
+ "full tool catalog"
587
+ )
588
+ set_search_available(False)
589
+ self.mcp.instructions = self._instructions["full"]
590
+ return
591
+ set_search_available(True)
592
+ install_catalog_instructions(self.mcp, self._instructions)
593
+ logger.info(
594
+ "Tool search transform applied (%d pinned tools, max_results=%d, code_mode=%s)",
595
+ len(pinned),
596
+ self.settings.tool_search_max_results,
597
+ self.settings.enable_code_mode,
598
+ )
600
599
 
601
600
  def _apply_tool_security_policies(self) -> None:
602
601
  """Register the tool security policies middleware (#966).
@@ -1,7 +1,7 @@
1
1
  """The instructions the server sends in the MCP initialize response.
2
2
 
3
3
  Sections, in order: the bundled best-practice skills with how to read them
4
- (plus the tool-search note when that mode is on), the Read Only Mode
4
+ (plus the tool-search note for connections in search mode), the Read Only Mode
5
5
  warning, the issue-filing rule, and the installation owner's
6
6
  ``custom_instructions``. The skills header and access fallbacks are
7
7
  defined here; the notices come from ``server_tool_text``.
@@ -116,9 +116,7 @@ def skill_block(skill_name: str, description: str) -> str:
116
116
  return f"\n### Skill: {skill_name} ({uri})\n{description.strip()}"
117
117
 
118
118
 
119
- def build_skills_instructions(
120
- skills_dir: Path | None, settings: Settings, tool_hidden: bool
121
- ) -> str | None:
119
+ def build_skills_instructions(skills_dir: Path | None, tool_hidden: bool) -> str | None:
122
120
  """Build the skills section from each bundled SKILL.md's frontmatter.
123
121
 
124
122
  The description field is authored for LLM consumption and included
@@ -134,22 +132,27 @@ def build_skills_instructions(
134
132
  _RESOURCE_ACCESS + _LOCAL_SKILLS_FALLBACK if tool_hidden else _SKILL_TOOL_ACCESS
135
133
  )
136
134
  header = _SKILLS_HEADER.format(access_method=access_method)
137
- instructions = header + "\n".join(
135
+ return header + "\n".join(
138
136
  skill_block(name, frontmatter["description"])
139
137
  for name, _dir, frontmatter in skills
140
138
  )
141
139
 
142
- if settings.enable_tool_search:
143
- instructions += TOOL_DISCOVERY_INSTRUCTIONS.format(
144
- pinned=", ".join(DEFAULT_PINNED_TOOLS)
145
- )
146
-
147
- return instructions
148
140
 
141
+ def compose_instructions(
142
+ skills: str | None, settings: Settings, *, tool_search: bool
143
+ ) -> str:
144
+ """Join the skills section with the startup notices and the owner's text.
149
145
 
150
- def compose_instructions(skills: str | None, settings: Settings) -> str:
151
- """Join the skills section with the startup notices and the owner's text."""
152
- sections = [skills] if skills else []
146
+ ``tool_search`` is the connection's catalog mode, so one server sends
147
+ the discovery note only to the connections that get the search tools.
148
+ """
149
+ discovery = (
150
+ TOOL_DISCOVERY_INSTRUCTIONS.format(pinned=", ".join(DEFAULT_PINNED_TOOLS))
151
+ if tool_search
152
+ else ""
153
+ )
154
+ lead = (skills or "") + discovery
155
+ sections = [lead.lstrip("\n")] if lead else []
153
156
  # Surface Read Only Mode in the startup instructions so clients
154
157
  # that show server instructions warn the model up front. Startup
155
158
  # state only — live flips are covered by the structured
@@ -0,0 +1,125 @@
1
+ """Per-endpoint tool catalog selection.
2
+
3
+ ``ENABLE_TOOL_SEARCH`` (off by default) sets the catalog of the main
4
+ endpoint. A single ha-mcp instance is often shared by several MCP clients
5
+ with different needs: one with its own deferred tool search wants the full
6
+ catalog, a small-context client wants ha-mcp's search tools. Each URL
7
+ therefore serves one fixed catalog:
8
+
9
+ - ``<path>`` follows ``ENABLE_TOOL_SEARCH``;
10
+ - ``<path>/catalog/full`` always serves the full catalog;
11
+ - ``<path>/catalog/search`` always serves the search tools.
12
+
13
+ Either suffix may follow ``/readonly``. The catalog is fixed per URL, not
14
+ negotiated per request, because clients do not refresh their tool list
15
+ when it changes: a client picks its catalog by the URL it is given.
16
+
17
+ Stdio serves one client per process, so its environment selects the mode.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ from collections.abc import Callable, Iterator, Mapping
23
+ from contextlib import contextmanager
24
+ from contextvars import ContextVar
25
+ from typing import TYPE_CHECKING, Any, Literal
26
+
27
+ from ha_mcp._vendor import mcp_types as mt
28
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
29
+ CallNext,
30
+ Middleware,
31
+ MiddlewareContext,
32
+ )
33
+
34
+ from .config import get_global_settings
35
+
36
+ if TYPE_CHECKING:
37
+ from ha_mcp._vendor.fastmcp import FastMCP
38
+
39
+ CatalogMode = Literal["full", "search"]
40
+ CATALOG_MODES: tuple[CatalogMode, ...] = ("full", "search")
41
+
42
+ _endpoint_mode: ContextVar[CatalogMode | None] = ContextVar(
43
+ "ha_mcp_endpoint_catalog_mode", default=None
44
+ )
45
+ # False while the search transform cannot be installed: every endpoint then
46
+ # serves, and describes, the full catalog. Set by each server it builds, so
47
+ # a later server in the process (the component restarts in place) resets it.
48
+ _search_available = True
49
+
50
+
51
+ def set_search_available(available: bool) -> None:
52
+ """Record whether this process's server installed the search transform."""
53
+ global _search_available
54
+ _search_available = available
55
+
56
+
57
+ def default_catalog_mode() -> CatalogMode:
58
+ """The main endpoint's mode, set by ``ENABLE_TOOL_SEARCH``."""
59
+ if _search_available and get_global_settings().enable_tool_search:
60
+ return "search"
61
+ return "full"
62
+
63
+
64
+ def current_catalog_mode() -> CatalogMode:
65
+ """The catalog mode of the endpoint serving this request."""
66
+ if not _search_available:
67
+ return "full"
68
+ return _endpoint_mode.get() or default_catalog_mode()
69
+
70
+
71
+ def tool_search_active() -> bool:
72
+ """Whether this request's endpoint serves search-based tool discovery."""
73
+ return current_catalog_mode() == "search"
74
+
75
+
76
+ @contextmanager
77
+ def catalog_endpoint(mode: CatalogMode) -> Iterator[None]:
78
+ """Select ``mode`` for this request and its nested tool calls."""
79
+ token = _endpoint_mode.set(mode)
80
+ try:
81
+ yield
82
+ finally:
83
+ _endpoint_mode.reset(token)
84
+
85
+
86
+ class ToolCatalogInstructionsMiddleware(Middleware):
87
+ """Send each connection the server instructions for its endpoint's catalog.
88
+
89
+ ``initialize`` (protocol <= 2025-11-25) and ``server/discover``
90
+ (2026-07-28) both carry the instructions.
91
+ """
92
+
93
+ def __init__(self, instructions_for: Callable[[CatalogMode], str]) -> None:
94
+ self._instructions_for = instructions_for
95
+
96
+ async def on_initialize(
97
+ self,
98
+ context: MiddlewareContext[mt.InitializeRequest],
99
+ call_next: CallNext[mt.InitializeRequest, mt.InitializeResult | None],
100
+ ) -> mt.InitializeResult | None:
101
+ result = await call_next(context)
102
+ if result is None:
103
+ return None
104
+ return result.model_copy(
105
+ update={"instructions": self._instructions_for(current_catalog_mode())}
106
+ )
107
+
108
+ async def on_discover(
109
+ self,
110
+ context: MiddlewareContext[mt.DiscoverRequest],
111
+ call_next: CallNext[mt.DiscoverRequest, mt.DiscoverResult | dict[str, Any]],
112
+ ) -> mt.DiscoverResult | dict[str, Any]:
113
+ result = await call_next(context)
114
+ if not isinstance(result, mt.DiscoverResult):
115
+ return result
116
+ return result.model_copy(
117
+ update={"instructions": self._instructions_for(current_catalog_mode())}
118
+ )
119
+
120
+
121
+ def install_catalog_instructions(
122
+ mcp: FastMCP, instructions: Mapping[CatalogMode, str]
123
+ ) -> None:
124
+ """Send each connection the instructions for its endpoint's catalog."""
125
+ mcp.add_middleware(ToolCatalogInstructionsMiddleware(instructions.__getitem__))
@@ -6,6 +6,7 @@ from typing import Any
6
6
  from ..config import Settings
7
7
  from ..settings_ui import _persistence
8
8
  from ..settings_ui._tools_meta import ignored_disabled_tools, tool_config_warnings
9
+ from ..tool_catalog import current_catalog_mode
9
10
 
10
11
  logger = logging.getLogger(__name__)
11
12
 
@@ -46,6 +47,8 @@ def collect_config_toggles(settings: Settings) -> dict[str, Any]:
46
47
  isinstance(custom, str) and custom.strip()
47
48
  )
48
49
 
50
+ # The catalog this connection serves; its URL can override enable_tool_search.
51
+ toggles["connection_catalog"] = current_catalog_mode()
49
52
  toggles.update(_tool_config_diagnostics(settings))
50
53
  return toggles
51
54
 
@@ -0,0 +1,96 @@
1
+ """FastMCP middleware: actionable error for stale tool-search proxy/search calls.
2
+
3
+ On a connection serving the full catalog (see ``ha_mcp.tool_catalog``), the
4
+ synthetic tool-search tools — ``ha_search_tools`` and the
5
+ ``ha_call_{read,write,delete}_tool`` proxies — do not resolve. If a
6
+ client calls one of them anyway, FastMCP raises a bare ``NotFoundError``
7
+ ("Unknown tool: 'ha_search_tools'") with no recovery guidance.
8
+
9
+ Two things cause that call: the client caches a tool list it fetched from a
10
+ search-catalog connection, or the agent learned the names from another
11
+ ha-mcp server it is connected to (for example a ``/catalog/search`` URL
12
+ alongside a ``/catalog/full`` one). Restarting the app (add-on) or Home
13
+ Assistant fixes neither: the stale list lives in the client.
14
+
15
+ This middleware intercepts that one case and replaces the opaque "Unknown tool"
16
+ with a structured error naming the connection's catalog and both causes. It
17
+ only acts on a *top-level* resolution miss for one of those four names on a
18
+ full-catalog connection; in every other case — including a ``NotFoundError``
19
+ bubbling up from inside an executing tool — the original error propagates
20
+ unchanged.
21
+ """
22
+
23
+ from __future__ import annotations
24
+
25
+ import logging
26
+ from typing import Any
27
+
28
+ from ha_mcp._vendor.fastmcp.exceptions import NotFoundError
29
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
30
+ CallNext,
31
+ Middleware,
32
+ MiddlewareContext,
33
+ )
34
+
35
+ from ..errors import ErrorCode, create_error_response
36
+ from ..policy.middleware import PROXY_META_TOOLS
37
+ from ..tool_catalog import tool_search_active
38
+ from .helpers import raise_tool_error
39
+
40
+ logger = logging.getLogger(__name__)
41
+
42
+
43
+ class ToolSearchHintMiddleware(Middleware):
44
+ """Turn the opaque "Unknown tool" for tool-search synthetic tools into a
45
+ stale-tool-list hint on a full-catalog connection."""
46
+
47
+ async def on_call_tool(
48
+ self, context: MiddlewareContext, call_next: CallNext
49
+ ) -> Any:
50
+ try:
51
+ return await call_next(context)
52
+ except NotFoundError as exc:
53
+ name = context.message.name
54
+ # Only rewrite a TOP-LEVEL "Unknown tool" miss for one of the four
55
+ # tool-search synthetic names on a full-catalog connection:
56
+ # - match the dispatch-layer message so a NotFoundError bubbling up
57
+ # from INSIDE an executing tool (a different name) is never
58
+ # mislabeled as a stale cache; on any wording change this simply
59
+ # fails closed and re-raises the original error.
60
+ # - require the full catalog (on a search connection the names
61
+ # resolve, so a miss is a different, real problem to not mask).
62
+ top_level_miss = str(exc) == f"Unknown tool: {name!r}"
63
+ if top_level_miss and name in PROXY_META_TOOLS and not tool_search_active():
64
+ logger.info(
65
+ "Stale tool-search call for %r on a full-catalog connection "
66
+ "- returning refresh-your-tool-list hint",
67
+ name,
68
+ )
69
+ raise_tool_error(
70
+ create_error_response(
71
+ code=ErrorCode.RESOURCE_NOT_FOUND,
72
+ message=(
73
+ f"'{name}' exists only on a connection serving the "
74
+ "search catalog, and this connection serves the full "
75
+ "catalog, so every tool is available directly by name. "
76
+ "Either your MCP client is showing a cached tool list "
77
+ "from a search-catalog connection, or the name comes "
78
+ "from another ha-mcp server you are connected to (such "
79
+ "as a /catalog/search URL). Restarting the app "
80
+ "(add-on) or Home Assistant does not refresh the "
81
+ "client's cached list."
82
+ ),
83
+ suggestions=[
84
+ (
85
+ "Call the tool you need directly by its name on "
86
+ "this connection."
87
+ ),
88
+ (
89
+ "If the client lists stale tools, reconnect or "
90
+ "refresh this MCP server to reload its tool list."
91
+ ),
92
+ ],
93
+ context={"tool_name": name, "catalog": "full"},
94
+ )
95
+ )
96
+ raise
@@ -79,8 +79,8 @@ _saved_tools: dict[str, dict[str, str]] = {}
79
79
 
80
80
  # Tools that sandbox code must not call. Includes ``ha_manage_custom_tool``
81
81
  # itself (prevents recursive self-invocation) plus the four synthetics that
82
- # the categorized-search transform exposes when ``ENABLE_TOOL_SEARCH=true``
83
- # (``ha_search_tools``, ``ha_call_{read,write,delete}_tool``). Without those
82
+ # a search-catalog connection exposes (main URL with ``ENABLE_TOOL_SEARCH``,
83
+ # or ``/catalog/search``): ``ha_search_tools``, ``ha_call_*_tool``. Without those
84
84
  # four entries, sandbox code could "launder" a recursive call as
85
85
  # ``call_tool("ha_call_write_tool", {"name": "ha_manage_custom_tool", ...})``
86
86
  # — the proxy would then dispatch the underlying tool and the in-sandbox