ha-mcp-dev 9.1.1.dev3378__tar.gz → 9.1.1.dev3382__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 (847) hide show
  1. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/PKG-INFO +2 -2
  2. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/README.md +1 -1
  3. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/pyproject.toml +1 -1
  4. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/pyproject.toml.orig +1 -1
  5. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/renamed_tools.py +77 -1
  6. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server_tool_text.py +5 -4
  7. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/az.json +1 -1
  8. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/cs.json +1 -1
  9. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/de.json +1 -1
  10. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/en.json +6 -6
  11. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/eo.json +1 -1
  12. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/es.json +1 -1
  13. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/fr.json +1 -1
  14. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/hu.json +1 -1
  15. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/it.json +1 -1
  16. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/ko.json +1 -1
  17. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/nl.json +1 -1
  18. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/pl.json +1 -1
  19. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/ru.json +1 -1
  20. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/sv.json +1 -1
  21. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/zh-Hans.json +1 -1
  22. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/zh-Hant.json +1 -1
  23. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings.html +12 -6
  24. ha_mcp_dev-9.1.1.dev3382/src/ha_mcp/tools/renamed_tool_middleware.py +117 -0
  25. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_bug_report.py +22 -24
  26. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/validation_middleware.py +94 -42
  27. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/categorized_search.py +14 -2
  28. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/usage_logger.py +22 -1
  29. ha_mcp_dev-9.1.1.dev3378/src/ha_mcp/tools/renamed_tool_middleware.py +0 -89
  30. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/LICENSE +0 -0
  31. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/__init__.py +0 -0
  32. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/__main__.py +0 -0
  33. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_pypi_marker +0 -0
  34. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_rich_compat.py +0 -0
  35. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/__init__.py +0 -0
  36. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  37. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  38. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  39. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  40. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  41. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  42. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  43. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  44. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  45. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  46. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  47. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  48. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  49. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  50. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  51. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  52. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  53. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  54. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  55. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev_security.py +0 -0
  56. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  57. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  58. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  59. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  60. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  61. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  62. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  63. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  64. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  65. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  66. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  67. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  68. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  69. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  70. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  71. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  72. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  73. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  74. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  75. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  76. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  77. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  78. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  79. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  80. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  81. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  82. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  83. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  84. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  85. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  86. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  87. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  88. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  89. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  90. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  91. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  92. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  93. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  94. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  95. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  96. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  97. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/skills.py +0 -0
  98. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  99. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  100. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  101. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  102. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  103. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  104. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  105. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  106. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  107. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  108. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  109. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  110. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  111. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  112. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  113. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  114. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  115. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  116. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  117. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  118. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  119. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  120. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  121. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  122. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  123. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  124. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  125. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  126. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  127. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  128. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  129. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  130. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  131. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  132. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  133. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  134. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  135. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/jev_search.py +0 -0
  136. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  137. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  138. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  139. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  140. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  141. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  142. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  143. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  144. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  145. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  146. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  147. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  148. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  149. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  150. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  151. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  152. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  153. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  154. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  155. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  156. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  157. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  158. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  159. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  160. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  161. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  162. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  163. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  164. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  165. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  166. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  167. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  168. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  169. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  170. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  171. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  172. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  173. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  174. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  175. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  176. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  177. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  178. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  179. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  180. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  181. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  182. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  183. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  184. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  185. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  186. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  187. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  188. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  189. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  190. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  191. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  192. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  193. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  194. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  195. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  196. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  197. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  198. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  199. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  200. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  201. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  202. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  203. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  204. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  205. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  206. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  207. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  208. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/extensions.py +0 -0
  209. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  210. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  211. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  212. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  213. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  214. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  215. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  216. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  217. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  218. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  219. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  220. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  221. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  222. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  223. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  224. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  225. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  226. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  227. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  228. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  229. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  230. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  231. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  232. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  233. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  234. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  235. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  236. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  237. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  238. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  239. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  240. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  241. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  242. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  243. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  244. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  245. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  246. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  247. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  248. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  249. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  250. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  251. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  252. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  253. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  254. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  255. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  256. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  257. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/__init__.py +0 -0
  258. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_constants.py +0 -0
  259. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_resources.py +0 -0
  260. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_snapshot.py +0 -0
  261. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/_source.py +0 -0
  262. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/client.py +0 -0
  263. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/extension.py +0 -0
  264. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/skills/models.py +0 -0
  265. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  266. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  267. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  268. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  269. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  270. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  271. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  272. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  273. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  274. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  275. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  276. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  277. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  278. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  279. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  280. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  281. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  282. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  283. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  284. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  285. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  286. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  287. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  288. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  289. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  290. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  291. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  292. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  293. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  294. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  295. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  296. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  297. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  298. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  299. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  300. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  301. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  302. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  303. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  304. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  305. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  306. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  307. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  308. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  309. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  310. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  311. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  312. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  313. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  314. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  315. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  316. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  317. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  318. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  319. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  320. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  321. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  322. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  323. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  324. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  325. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  326. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  327. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  328. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  329. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  330. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  331. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  332. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  333. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  334. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  335. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  336. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  337. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  338. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  339. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  340. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  341. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  342. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  343. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  344. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  345. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  346. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  347. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  348. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  349. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  350. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  351. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  352. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  353. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  354. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  355. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  356. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  357. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  358. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  359. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  360. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  361. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  362. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  363. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  364. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  365. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  366. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  367. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  368. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  369. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  370. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  371. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  372. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  373. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  374. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  375. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  376. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  377. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  378. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  379. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  380. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  381. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  382. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  383. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  384. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  385. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  386. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  387. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  388. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  389. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  390. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  391. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  392. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  393. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  394. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  395. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  396. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  397. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  398. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  399. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  400. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  401. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  402. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  403. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  404. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  405. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  406. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  407. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  408. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  409. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  410. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  411. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  412. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  413. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  414. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  415. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  416. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  417. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  418. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  419. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  420. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  421. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  422. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_request_clock.py +0 -0
  423. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  424. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  425. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  426. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  427. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  428. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  429. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  430. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  431. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  432. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  433. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  434. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  435. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  436. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  437. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  438. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  439. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  440. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  441. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  442. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  443. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  444. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  445. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  446. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  447. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  448. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  449. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  450. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  451. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  452. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  453. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  454. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  455. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  456. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  457. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  458. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  459. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/requirements.txt +0 -0
  460. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  461. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  462. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  463. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  464. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  465. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  466. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  467. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  468. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  469. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  470. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  471. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  472. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  473. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  474. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  475. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  476. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  477. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  478. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  479. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  480. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  481. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  482. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  483. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  484. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  485. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  486. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  487. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  488. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  489. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  490. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  491. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  492. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  493. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  494. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  495. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  496. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  497. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  498. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  499. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  500. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  501. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  502. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  503. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  504. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  505. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  506. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  507. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  508. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  509. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  510. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  511. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  512. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  513. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  514. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  515. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  516. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/_version.py +0 -0
  517. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/app_discovery.py +0 -0
  518. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/__init__.py +0 -0
  519. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/consent_form.py +0 -0
  520. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/iss_stamp.py +0 -0
  521. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/oidc_compat.py +0 -0
  522. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/auth/provider.py +0 -0
  523. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_calendar.py +0 -0
  524. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_dashboards.py +0 -0
  525. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_diff.py +0 -0
  526. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_entities.py +0 -0
  527. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_entity_ids.py +0 -0
  528. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_helper_target.py +0 -0
  529. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_integrations.py +0 -0
  530. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_manager.py +0 -0
  531. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_tags.py +0 -0
  532. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_todo.py +0 -0
  533. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/backup_zones.py +0 -0
  534. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/browser_landing.py +0 -0
  535. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/__init__.py +0 -0
  536. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/admin_routes.py +0 -0
  537. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/config_entry_read.py +0 -0
  538. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/error_log_journald.py +0 -0
  539. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/event_listeners.py +0 -0
  540. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/models.py +0 -0
  541. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/rest_client.py +0 -0
  542. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/supervisor_client.py +0 -0
  543. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/websocket_client.py +0 -0
  544. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/websocket_listener.py +0 -0
  545. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/client/websocket_state.py +0 -0
  546. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config.py +0 -0
  547. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_backup.py +0 -0
  548. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_meta.py +0 -0
  549. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_overrides.py +0 -0
  550. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_registry.py +0 -0
  551. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/config_settings.py +0 -0
  552. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  553. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  554. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  555. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/engine_compat.py +0 -0
  556. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  557. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  558. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/theme_check.py +0 -0
  559. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  560. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/errors.py +0 -0
  561. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/ha_request_queue.py +0 -0
  562. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  563. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/http_transport.py +0 -0
  564. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/image_info.py +0 -0
  565. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/ipv6_lan_guard.py +0 -0
  566. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/listen_sockets.py +0 -0
  567. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/llm_exposure.py +0 -0
  568. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/log_filters.py +0 -0
  569. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/mcp_client_context.py +0 -0
  570. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/__init__.py +0 -0
  571. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/approval_queue.py +0 -0
  572. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/decision_pin.py +0 -0
  573. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/decisions.py +0 -0
  574. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/editing.py +0 -0
  575. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/evaluator.py +0 -0
  576. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/events.py +0 -0
  577. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/handlers.py +0 -0
  578. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/middleware.py +0 -0
  579. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/model.py +0 -0
  580. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/mrtr.py +0 -0
  581. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/persistence.py +0 -0
  582. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/server_channels.py +0 -0
  583. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/policy/value_sources.py +0 -0
  584. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/py.typed +0 -0
  585. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/read_only.py +0 -0
  586. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/redaction.py +0 -0
  587. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  588. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  589. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  590. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-actions.md +0 -0
  591. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  592. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  593. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  594. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  595. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  596. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  597. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  598. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  599. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  600. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  601. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  602. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/triggers-and-conditions.md +0 -0
  603. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  604. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server.py +0 -0
  605. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server_instructions.py +0 -0
  606. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/server_lifespan.py +0 -0
  607. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/__init__.py +0 -0
  608. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  609. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  610. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  611. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_oauth_callbacks.py +0 -0
  612. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  613. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  614. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  615. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  616. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  617. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  618. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  619. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_theme.py +0 -0
  620. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  621. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  622. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  623. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings.css +0 -0
  624. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/01_i18n_state.js +0 -0
  625. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/02_tools_restart.js +0 -0
  626. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/03_render_save.js +0 -0
  627. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/04_backups.js +0 -0
  628. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/05_feature_flags.js +0 -0
  629. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/06_policy_cards.js +0 -0
  630. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/07_policy_actions.js +0 -0
  631. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/08_advanced.js +0 -0
  632. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/09_prefs_visibility.js +0 -0
  633. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/settings_ui/settings_js/10_oauth_callbacks.js +0 -0
  634. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/smoke_test.py +0 -0
  635. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  636. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/storage_helper_types.py +0 -0
  637. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/strict_bps.py +0 -0
  638. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tool_catalog.py +0 -0
  639. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tool_dispatch.py +0 -0
  640. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/__init__.py +0 -0
  641. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/addon_connection_hints.py +0 -0
  642. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/area_messages.py +0 -0
  643. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/auto_backup.py +0 -0
  644. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/automation_errors.py +0 -0
  645. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/automation_registry_details.py +0 -0
  646. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup.py +0 -0
  647. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_access.py +0 -0
  648. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_on_demand.py +0 -0
  649. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_snapshot.py +0 -0
  650. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/backup_snapshot_restore.py +0 -0
  651. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  652. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/best_practice_result.py +0 -0
  653. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  654. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  655. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  656. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/blueprint_write.py +0 -0
  657. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_config.py +0 -0
  658. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_redaction.py +0 -0
  659. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_sources.py +0 -0
  660. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bug_report_templates.py +0 -0
  661. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/bulk_selector.py +0 -0
  662. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/coercion.py +0 -0
  663. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_api.py +0 -0
  664. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_automation.py +0 -0
  665. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_config_entries.py +0 -0
  666. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_config_reads.py +0 -0
  667. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  668. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_devices.py +0 -0
  669. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_helper_collections.py +0 -0
  670. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_registries.py +0 -0
  671. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  672. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/component_todo.py +0 -0
  673. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_backup.py +0 -0
  674. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  675. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_errors.py +0 -0
  676. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  677. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_introspect.py +0 -0
  678. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  679. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_progress.py +0 -0
  680. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  681. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  682. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  683. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_file_visibility.py +0 -0
  684. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/__init__.py +0 -0
  685. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/core_payload.py +0 -0
  686. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/create.py +0 -0
  687. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/describe.py +0 -0
  688. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/flow.py +0 -0
  689. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/icon_route.py +0 -0
  690. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/listing.py +0 -0
  691. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/registry.py +0 -0
  692. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/schemas.py +0 -0
  693. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/typed_config.py +0 -0
  694. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/update.py +0 -0
  695. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_helpers/validation.py +0 -0
  696. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_subentry_restore.py +0 -0
  697. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_write_errors.py +0 -0
  698. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/config_write_helpers.py +0 -0
  699. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/core_contract.py +0 -0
  700. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_card_describe.py +0 -0
  701. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  702. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  703. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dashboard_read_errors.py +0 -0
  704. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/dev_backup.py +0 -0
  705. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/device_control.py +0 -0
  706. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/device_enrichment.py +0 -0
  707. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/diagnostics_helpers.py +0 -0
  708. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/energy_preferences.py +0 -0
  709. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_expose_batch.py +0 -0
  710. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_param_parsing.py +0 -0
  711. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_registration.py +0 -0
  712. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_removal.py +0 -0
  713. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/entity_update_fields.py +0 -0
  714. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  715. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/event_call.py +0 -0
  716. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/event_listener_fields.py +0 -0
  717. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/flow_helper_lookup.py +0 -0
  718. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/flow_translations.py +0 -0
  719. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/hacs_backend.py +0 -0
  720. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/hacs_registration.py +0 -0
  721. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/helper_flows.py +0 -0
  722. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/helpers.py +0 -0
  723. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/history_response.py +0 -0
  724. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/ignored_entries.py +0 -0
  725. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_entry_state.py +0 -0
  726. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_flow_steps.py +0 -0
  727. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_schema.py +0 -0
  728. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/integration_ws_commands.py +0 -0
  729. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_common.py +0 -0
  730. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources.py +0 -0
  731. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  732. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources_logbook.py +0 -0
  733. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  734. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/__init__.py +0 -0
  735. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/base.py +0 -0
  736. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/matter.py +0 -0
  737. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/thread.py +0 -0
  738. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  739. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/zwave.py +0 -0
  740. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/radio/zwave_parameters.py +0 -0
  741. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/recorder_errors.py +0 -0
  742. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/reference_validator.py +0 -0
  743. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/registry.py +0 -0
  744. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/resource_codec.py +0 -0
  745. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/resource_patch.py +0 -0
  746. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/response_helpers.py +0 -0
  747. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/scene_discovery.py +0 -0
  748. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/__init__.py +0 -0
  749. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/base.py +0 -0
  750. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/component.py +0 -0
  751. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/entities.py +0 -0
  752. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/legacy.py +0 -0
  753. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/modes.py +0 -0
  754. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/overview.py +0 -0
  755. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/response.py +0 -0
  756. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/search/state.py +0 -0
  757. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/server_version.py +0 -0
  758. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  759. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  760. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  761. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  762. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  763. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  764. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  765. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  766. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  767. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  768. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/statistics_calendar.py +0 -0
  769. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/statistics_helpers.py +0 -0
  770. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/statistics_resets.py +0 -0
  771. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/system_restart.py +0 -0
  772. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tool_hints.py +0 -0
  773. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  774. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_addons.py +0 -0
  775. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_areas.py +0 -0
  776. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  777. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  778. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_calendar.py +0 -0
  779. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_camera.py +0 -0
  780. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_categories.py +0 -0
  781. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_code.py +0 -0
  782. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  783. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  784. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  785. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  786. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  787. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  788. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_dev.py +0 -0
  789. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_energy.py +0 -0
  790. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_entities.py +0 -0
  791. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  792. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_groups.py +0 -0
  793. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_hacs.py +0 -0
  794. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_history.py +0 -0
  795. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_integrations.py +0 -0
  796. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_labels.py +0 -0
  797. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_logs.py +0 -0
  798. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_radio.py +0 -0
  799. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_registry.py +0 -0
  800. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_resources.py +0 -0
  801. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_search.py +0 -0
  802. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  803. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_service.py +0 -0
  804. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_services.py +0 -0
  805. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_system.py +0 -0
  806. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_themes.py +0 -0
  807. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_todo.py +0 -0
  808. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_traces.py +0 -0
  809. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_updates.py +0 -0
  810. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_utility.py +0 -0
  811. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  812. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  813. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  814. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/tools_zones.py +0 -0
  815. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/update_categories.py +0 -0
  816. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/util_helpers.py +0 -0
  817. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/tools/ws_waiters.py +0 -0
  818. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/__init__.py +0 -0
  819. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/compact_params.py +0 -0
  820. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/component_helpers.py +0 -0
  821. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/component_search.py +0 -0
  822. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  823. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  824. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/transport_security.py +0 -0
  825. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/update_check.py +0 -0
  826. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/__init__.py +0 -0
  827. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/config_hash.py +0 -0
  828. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/config_write_lock.py +0 -0
  829. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  830. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/data_paths.py +0 -0
  831. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  832. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/domain_handlers.py +0 -0
  833. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/entity_membership.py +0 -0
  834. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  835. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  836. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  837. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/operation_manager.py +0 -0
  838. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/python_sandbox.py +0 -0
  839. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  840. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/utils/skill_loader.py +0 -0
  841. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/__init__.py +0 -0
  842. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/config_files.py +0 -0
  843. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/enforcement.py +0 -0
  844. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/identifier_aliases.py +0 -0
  845. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/model.py +0 -0
  846. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/src/ha_mcp/visibility/persistence.py +0 -0
  847. {ha_mcp_dev-9.1.1.dev3378 → ha_mcp_dev-9.1.1.dev3382}/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.1.dev3378
3
+ Version: 9.1.1.dev3382
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
@@ -442,7 +442,7 @@ A `ha_manage_*` tool combines several operations, so it is reachable from more t
442
442
 
443
443
  Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
444
444
 
445
- > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
445
+ > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; disconnect and reconnect a Claude Desktop custom connector; refresh the tools list of a claude.ai connector; or quit and reopen Claude Desktop for a server in `claude_desktop_config.json`), then start a new conversation. If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
446
446
 
447
447
  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.
448
448
 
@@ -381,7 +381,7 @@ A `ha_manage_*` tool combines several operations, so it is reachable from more t
381
381
 
382
382
  Leave it off in clients with deferred tool loading (claude.ai, Claude Desktop, Claude Code); the full catalog has no idle cost there, direct calls skip the search step, and the client's built-in tool search is the better choice — there is no benefit to running ha-mcp's on top of it. Whether tools are deferred depends on the client and model combination: the same model can behave differently per client — GitHub Copilot CLI running Claude Sonnet/Opus inlines the full catalog and still benefits from tool search here. Some Codex models and ChatGPT include deferred tools too — check your client/model directly to confirm its features so you don't leave this enabled unnecessarily.
383
383
 
384
- > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; or close and reopen Claude Desktop). If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
384
+ > 🔄 **Refresh your client's tool list after changing this (or any) setting.** Toggling `ENABLE_TOOL_SEARCH` (or changing pinned/disabled tools, Read Only Mode, etc.) changes the tools the server exposes, but your AI client keeps serving its **cached** tool list until it re-fetches. Restarting the app or Home Assistant does **not** refresh the client — reconnect or refresh the MCP server in your client (e.g. in ChatGPT open **Settings**, then the plugin settings, select the connector and click **Refresh tools**; disconnect and reconnect a Claude Desktop custom connector; refresh the tools list of a claude.ai connector; or quit and reopen Claude Desktop for a server in `claude_desktop_config.json`), then start a new conversation. If you skip this, newly enabled tools won't appear in the client at all, and tools the server no longer exposes still show as available but fail when called (`Unknown tool`, or the Read Only Mode error for a write tool that mode hides). ChatGPT sometimes keeps serving the stale list even after the connector is removed and re-added under the same name — if tools are still missing after a refresh, delete the connector and create a new one with a **different name**. The [FAQ](https://homeassistant-ai.github.io/ha-mcp/faq/#chatgpt-stale-tools) has the full steps.
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
 
@@ -4,7 +4,7 @@ build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "9.1.1.dev3378"
7
+ version = "9.1.1.dev3382"
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.1.dev3378"
7
+ version = "9.1.1.dev3382"
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
@@ -18,11 +18,16 @@ readers pick the more restrictive one (``rename_retired_keys``'s ``prefer``).
18
18
  And a call on a retired name carries the old signature, which the merged tool
19
19
  cannot dispatch without the ``action`` it never had —
20
20
  ``adapt_retired_arguments`` fills that in.
21
+
22
+ A parameter can move the same way a tool does. ``RENAMED_PARAMETERS`` keeps
23
+ the old parameter name callable for a client that has not re-listed, and
24
+ ``CLIENT_TOOL_LIST_REFRESH_STEPS`` is what such a client's user has to do.
21
25
  """
22
26
 
23
27
  from __future__ import annotations
24
28
 
25
- from collections.abc import Callable, Mapping
29
+ import json
30
+ from collections.abc import Callable, Mapping, Sequence
26
31
  from typing import Any
27
32
 
28
33
  # Retired tool name -> the name that serves it today.
@@ -37,6 +42,24 @@ RENAMED_TOOLS: dict[str, str] = {
37
42
  "ha_import_blueprint": "ha_manage_blueprints",
38
43
  }
39
44
 
45
+ # Current tool name -> retired parameter name -> the name that serves it today.
46
+ # Only a pure rename belongs here: the value keeps its meaning and its format.
47
+ RENAMED_PARAMETERS: dict[str, dict[str, str]] = {
48
+ "ha_config_get_automation": {"identifier": "entity_id"},
49
+ "ha_config_set_automation": {"identifier": "entity_id"},
50
+ "ha_config_remove_automation": {"identifier": "entity_id"},
51
+ }
52
+
53
+ # How each client re-fetches the tool list, for every text that tells an agent
54
+ # its list is stale. Steps are separated by ";" and carry none inside.
55
+ CLIENT_TOOL_LIST_REFRESH_STEPS = (
56
+ "Claude Desktop custom connector: disconnect and reconnect it; "
57
+ "server in claude_desktop_config.json: quit and reopen Claude Desktop; "
58
+ "claude.ai: refresh the connector's tools list; Claude Code: /mcp, "
59
+ "reconnect; ChatGPT: open Settings, then the plugin settings, select the "
60
+ "connector and click Refresh tools"
61
+ )
62
+
40
63
 
41
64
  def current_tool_name(name: str) -> str:
42
65
  """The name a tool answers to today, given any name it has had."""
@@ -101,3 +124,56 @@ def adapt_retired_arguments(
101
124
  if adapter is None:
102
125
  return dict(arguments) if arguments is not None else None
103
126
  return adapter(dict(arguments or {}))
127
+
128
+
129
+ def retired_parameters_used(
130
+ name: str, arguments: Mapping[str, Any] | None
131
+ ) -> dict[str, str]:
132
+ """The retired parameter names a call on ``name`` carries, with their current names.
133
+
134
+ A retired name sent together with its current name is left out: that
135
+ caller knows the current signature, so the stray argument is rejected like
136
+ any other unknown one instead of replacing the value sent under the
137
+ current name.
138
+ """
139
+ renames = RENAMED_PARAMETERS.get(name)
140
+ if not renames or not arguments:
141
+ return {}
142
+ return {
143
+ old: new
144
+ for old, new in renames.items()
145
+ if old in arguments and new not in arguments
146
+ }
147
+
148
+
149
+ def add_stale_list_warning(result: Any, renames: Sequence[tuple[str, str]]) -> None:
150
+ """Tell the caller of a call served through an old name that its list is stale.
151
+
152
+ ``renames`` holds each old name with its current one. The warning joins the
153
+ result's top-level ``warnings`` in both representations: the structured
154
+ content and the JSON text a client without it reads.
155
+ """
156
+ listed = ", ".join(f"`{old}` is now `{new}`" for old, new in renames)
157
+ warning = (
158
+ f"This call used a name from before an ha-mcp update ({listed}). It "
159
+ "was served, but your tool list is a stale copy. Ask the user to "
160
+ f"refresh it ({CLIENT_TOOL_LIST_REFRESH_STEPS}), then start a new "
161
+ "conversation."
162
+ )
163
+ structured = getattr(result, "structured_content", None)
164
+ if isinstance(structured, dict):
165
+ result.structured_content = {
166
+ **structured,
167
+ "warnings": [*(structured.get("warnings") or []), warning],
168
+ }
169
+ for block in getattr(result, "content", None) or []:
170
+ text = getattr(block, "text", None)
171
+ if not isinstance(text, str):
172
+ continue
173
+ try:
174
+ parsed = json.loads(text)
175
+ except json.JSONDecodeError:
176
+ continue
177
+ if isinstance(parsed, dict):
178
+ parsed["warnings"] = [*(parsed.get("warnings") or []), warning]
179
+ block.text = json.dumps(parsed)
@@ -480,10 +480,11 @@ LITE_DOCSTRINGS: dict[str, str] = {
480
480
  "The response carries the full workflow in its `instructions` "
481
481
  "field (duplicate check, the mandatory anonymisation step, and "
482
482
  "how to file the issue), plus "
483
- '`missing_tool_hint` for the "a tool I expected is missing" '
484
- "case, which is usually a stale client tool list rather than a "
485
- "bug. Read `instructions` before presenting anything to the "
486
- "user; ha_get_skill_guide does not cover issue reporting."
483
+ '`missing_tool_hint` for the "a tool I expected is missing" or '
484
+ '"a tool rejects as unknown a parameter my tool list shows" case, '
485
+ "which is usually a stale client tool list rather than a bug. Read "
486
+ "`instructions` before presenting anything to the user; "
487
+ "ha_get_skill_guide does not cover issue reporting."
487
488
  ),
488
489
  }
489
490
 
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "İnteqrasiyanı təyin et",
921
- "description": "İnteqrasiyanı (konfiqurasiya qeydini) idarə edin: aktivləşdirin/söndürün, əlavə edin, seçimlərini yeniləyin və ya yenidən konfiqurasiya edin."
921
+ "description": "İnteqrasiyanı idarə edin (konfiqurasiya girişini): aktivləşdirin/deaktiv edin, əlavə edin, seçimləri yeniləyin, yenidən konfiqurasiya edin və ya öz əmrlərini göndərin."
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "Tapşırığı təyin et",
@@ -887,7 +887,7 @@
887
887
  },
888
888
  "ha_set_integration": {
889
889
  "title": "Nastavit integraci",
890
- "description": "Spravovat integraci (položku konfigurace): povolit/zakázat, přidat nebo aktualizovat možnosti."
890
+ "description": "Správa integrace (konfigurační položka): zapnutí/vypnutí, přidání, aktualizace možností, rekonfigurace nebo odeslání vlastních příkazů."
891
891
  },
892
892
  "ha_set_todo_item": {
893
893
  "title": "Nastavit položku úkolu",
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "Integration aktualisieren",
921
- "description": "Aktiviert, deaktiviert, fügt hinzu oder ändert Integrationsparameter."
921
+ "description": "Verwalte eine Integration (Konfigurationseintrag): aktivieren/deaktivieren, hinzufügen, Optionen aktualisieren, neu konfigurieren oder eigene Befehle senden."
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "To-do-Element erstellen/aktualisieren",
@@ -27,7 +27,7 @@
27
27
  "tabs.policies": "Tool Security Policies",
28
28
  "tabs.visibility": "Entity Visibility",
29
29
  "tabs.accessibility": "Accessibility",
30
- "notice.restart_required": "⚠ Changes saved. Restart HA-MCP for them to take effect. On next startup, HA-MCP fully removes disabled tools from the MCP tool list. Then reconnect or refresh the MCP server in your AI client (e.g. refresh tool list on claude.ai, re-add/refresh the connector in ChatGPT, or close and reopen Claude Desktop) so it reloads the tool list. Restarting the app (add-on) or Home Assistant does NOT refresh your client's cached tool list. ChatGPT sometimes keeps serving its cached tool list even after the connector is removed and re-added — if tools are still missing, delete the connector and create a new one under a different name.",
30
+ "notice.restart_required": "⚠ Changes saved. Restart HA-MCP for them to take effect. On next startup, HA-MCP fully removes disabled tools from the MCP tool list. Then reconnect or refresh the MCP server in your AI client (e.g. refresh tool list on claude.ai; in ChatGPT open Settings, then the plugin settings, select the connector and click Refresh tools; disconnect and reconnect a Claude Desktop custom connector; or quit and reopen Claude Desktop for a server in claude_desktop_config.json) so it reloads the tool list, then start a new conversation. Restarting the app (add-on) or Home Assistant does NOT refresh your client's cached tool list. ChatGPT sometimes keeps serving its cached tool list even after the connector is removed and re-added — if tools are still missing, delete the connector and create a new one under a different name.",
31
31
  "notice.shared_settings": "Server-wide features (Tool Search, YAML config editing, filesystem tools, etc.) appear in both the <strong>Server Settings</strong> tab and the app (add-on) Configuration page; they're the same settings either way. Either surface stays in sync with the other after the app (add-on) restarts. Changes require HA-MCP to be restarted.",
32
32
  "notice.env_pins": "Tools listed in the <code>DISABLED_TOOLS</code> or <code>PINNED_TOOLS</code> env vars are locked read-only; unset the env var to edit them here. Pin toggles only take effect when Tool Search is enabled (Server Settings tab or app (add-on) Configuration page).",
33
33
  "actions.restart_addon": "Restart app (add-on)",
@@ -39,7 +39,7 @@
39
39
  "tools.read_only.help": "Turns off all write tools and blocks every tool from making write or destructive calls. Mixed read/write tools (backups, Apps (add-ons), energy preferences, voice pipelines, and code mode when enabled) stay available with their write operations blocked.",
40
40
  "tools.read_only.unknown": "Could not read server settings. Read Only Mode status unknown; this view may not reflect what the server enforces.",
41
41
  "tools.search": "Search tools...",
42
- "server.auto_save_notice": "Settings on this tab save automatically. Changes take effect only after you restart HA-MCP (applies them server-side) and reconnect or refresh the MCP server in your AI client (reloads the tool list), e.g. refresh tool list on claude.ai, re-add or refresh the connector in ChatGPT, or close and reopen Claude Desktop. ChatGPT sometimes keeps serving its cached tool list even after the connector is removed and re-added — if tools are still missing, delete the connector and create a new one under a different name.",
42
+ "server.auto_save_notice": "Settings on this tab save automatically. Changes take effect only after you restart HA-MCP (applies them server-side) and reconnect or refresh the MCP server in your AI client (reloads the tool list), e.g. refresh tool list on claude.ai; in ChatGPT open Settings, then the plugin settings, select the connector and click Refresh tools; disconnect and reconnect a Claude Desktop custom connector; or quit and reopen Claude Desktop for a server in claude_desktop_config.json; then start a new conversation. ChatGPT sometimes keeps serving its cached tool list even after the connector is removed and re-added — if tools are still missing, delete the connector and create a new one under a different name.",
43
43
  "server.sections.search": "Search & matching",
44
44
  "server.sections.operations": "Operations",
45
45
  "server.sections.tool_surface": "Tool surface",
@@ -221,10 +221,10 @@
221
221
  "common.range_or_value": "Range {min}–{max}, or {value}.",
222
222
  "common.restart_required": "Restart required.",
223
223
  "common.none": "(none)",
224
- "notice.restart.addon": "⚠ Changes saved. Click \"Restart app (add-on)\" for them to take effect. Disabled tools will be removed from the MCP tool list on next startup. Then refresh the tool list in your AI client; restarting the App alone does not refresh the client's cached list.",
225
- "notice.restart.embedded": "⚠ Changes saved. Click \"Restart HA-MCP Server\" to reload the in-process integration. Then refresh the MCP tool list in your AI client.",
226
- "notice.restart.sidecar": "⚠ Changes saved. Fully quit and reopen your MCP client for them to take effect. Disabled tools will be removed from the MCP tool list on next startup.",
227
- "notice.restart.standalone": "⚠ Changes saved. Restart the ha-mcp process, then refresh the MCP tool list in your AI client.",
224
+ "notice.restart.addon": "⚠ Changes saved. Click \"Restart app (add-on)\" for them to take effect. Disabled tools will be removed from the MCP tool list on next startup. Then refresh the tool list in your AI client (for a Claude Desktop custom connector, disconnect and reconnect it; for a server in claude_desktop_config.json, quit and reopen Claude Desktop) and start a new conversation; restarting the App alone does not refresh the client's cached list.",
225
+ "notice.restart.embedded": "⚠ Changes saved. Click \"Restart HA-MCP Server\" to reload the in-process integration. Then refresh the MCP tool list in your AI client (for a Claude Desktop custom connector, disconnect and reconnect it; for a server in claude_desktop_config.json, quit and reopen Claude Desktop) and start a new conversation.",
226
+ "notice.restart.sidecar": "⚠ Changes saved. Fully quit and reopen your MCP client for them to take effect. Disabled tools will be removed from the MCP tool list on next startup. Then start a new conversation.",
227
+ "notice.restart.standalone": "⚠ Changes saved. Restart the ha-mcp process, then refresh the MCP tool list in your AI client (for a Claude Desktop custom connector, disconnect and reconnect it; for a server in claude_desktop_config.json, quit and reopen Claude Desktop) and start a new conversation.",
228
228
  "server.sidecar.confirm_disable": "⚠ PERMANENTLY disable the settings server?\n\nThis stops the server and writes a marker that prevents it from starting again. To restore access, delete ~/.ha-mcp/settings_ui_disabled and unset HA_MCP_DISABLE_SETTINGS_UI. Continue?",
229
229
  "tools.empty": "No tools found. The sidecar reads ~/.ha-mcp/tool_metadata.json. If it is missing or empty, restart your MCP client. See ~/.ha-mcp/sidecar.log for details.",
230
230
  "tools.group_count": "{enabled}/{total} enabled",
@@ -887,7 +887,7 @@
887
887
  },
888
888
  "ha_set_integration": {
889
889
  "title": "Agordi Integriĝon",
890
- "description": "Administri integriĝon (agorda eniro): ebligi/malŝalti, aldoni, aŭ ĝisdatigi opciojn."
890
+ "description": "Administri integriĝon (agordan eniron): ebligi/malebligi, aldoni, ĝisdatigi agordojn, reagordi aŭ sendi ties proprajn komandojn."
891
891
  },
892
892
  "ha_set_todo_item": {
893
893
  "title": "Agordi Farendaĵon",
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "Modificar integración",
921
- "description": "Gestiona una integración (entrada de configuración): activarla o desactivarla, añadirla o actualizar sus opciones."
921
+ "description": "Gestionar una integración (entrada de configuración): habilitar/deshabilitar, agregar, actualizar opciones, reconfigurar o enviar sus propios comandos."
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "Definir tarea",
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "Mettre à jour l'intégration",
921
- "description": "Active, désactive, ajoute ou modifie les paramètres d'intégration."
921
+ "description": "Gérer une intégration (entrée de configuration) : activer/désactiver, ajouter, mettre à jour les options, reconfigurer ou envoyer ses propres commandes."
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "Créer/mettre à jour un élément de tâche",
@@ -887,7 +887,7 @@
887
887
  },
888
888
  "ha_set_integration": {
889
889
  "title": "Integráció beállítása",
890
- "description": "Integráció (konfigurációs bejegyzés) kezelése: engedélyezés/letiltás, hozzáadás, beállítások frissítése vagy újrakonfigurálás."
890
+ "description": "Integráció kezelése (konfigurációs bejegyzés): engedélyezés/letiltás, hozzáadás, beállítások frissítése, újrakonfigurálás vagy saját parancsok küldése."
891
891
  },
892
892
  "ha_set_todo_item": {
893
893
  "title": "Teendő elem beállítása",
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "Imposta un'integrazione",
921
- "description": "Gestisce un'integrazione (voce di configurazione): la attiva o disattiva, la aggiunge oppure ne aggiorna le opzioni."
921
+ "description": "Gestisci un'integrazione (config entry): abilita/disabilita, aggiungi, aggiorna le opzioni, riconfigura o invia i suoi comandi."
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "Imposta una voce delle cose da fare",
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "통합 구성요소 설정",
921
- "description": "통합 구성요소(설정 항목)를 관리합니다. 사용/사용 안 함 전환, 추가, 옵션 수정, 재설정을 할 수 있습니다."
921
+ "description": "통합 구성 요소(설정 항목)를 관리합니다: 활성화/비활성화, 추가, 옵션 업데이트, 재구성 또는 자체 명령 전송."
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "할 일 항목 설정",
@@ -887,7 +887,7 @@
887
887
  },
888
888
  "ha_set_integration": {
889
889
  "title": "Integratie Instellen",
890
- "description": "Beheer een integratie (configuratie-item): inschakelen/uitschakelen, toevoegen of opties bijwerken."
890
+ "description": "Beheer een integratie (config-entry): inschakelen/uitschakelen, toevoegen, opties bijwerken, herconfigureren of eigen commando's verzenden."
891
891
  },
892
892
  "ha_set_todo_item": {
893
893
  "title": "To-do Item Instellen",
@@ -887,7 +887,7 @@
887
887
  },
888
888
  "ha_set_integration": {
889
889
  "title": "Ustaw integrację",
890
- "description": "Zarządzaj integracją (wpisem konfiguracyjnym): włącz/wyłącz, dodaj lub zaktualizuj opcje."
890
+ "description": "Zarządzaj integracją (wpisem konfiguracji): włączaj/wyłączaj, dodawaj, aktualizuj opcje, rekonfiguruj lub wysyłaj jej własne polecenia."
891
891
  },
892
892
  "ha_set_todo_item": {
893
893
  "title": "Ustaw element listy zadań",
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "Изменить интеграцию",
921
- "description": "Включать, отключать, добавлять или менять параметры интеграции."
921
+ "description": "Управление интеграцией (записью конфигурации): включение/отключение, добавление, обновление параметров, переконфигурация или отправка собственных команд."
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "Создать или изменить задачу",
@@ -887,7 +887,7 @@
887
887
  },
888
888
  "ha_set_integration": {
889
889
  "title": "Ställ in integration",
890
- "description": "Hantera en integration (konfigurationspost): aktivera/inaktivera, lägga till eller uppdatera alternativ."
890
+ "description": "Hantera en integration (konfigurationspost): aktivera/inaktivera, lägg till, uppdatera alternativ, omkonfigurera eller skicka dess egna kommandon."
891
891
  },
892
892
  "ha_set_todo_item": {
893
893
  "title": "Ställ in att-göra-objekt",
@@ -918,7 +918,7 @@
918
918
  },
919
919
  "ha_set_integration": {
920
920
  "title": "设置集成",
921
- "description": "管理集成(配置条目):启用/禁用、添加或更新选项。"
921
+ "description": "管理集成(配置条目):启用/禁用、添加、更新选项、重新配置或发送其自身的命令。"
922
922
  },
923
923
  "ha_set_todo_item": {
924
924
  "title": "设置待办条目",
@@ -887,7 +887,7 @@
887
887
  },
888
888
  "ha_set_integration": {
889
889
  "title": "設定整合",
890
- "description": "管理整合(設定項目):啟用/停用、新增、更新選項或重新設定。"
890
+ "description": "管理整合(設定項目):啟用/停用、新增、更新選項、重新設定,或傳送其自己的指令。"
891
891
  },
892
892
  "ha_set_todo_item": {
893
893
  "title": "設定待辦事項",
@@ -173,10 +173,13 @@
173
173
  ⚠ Changes saved. Restart HA-MCP for them to take effect. On next
174
174
  startup, HA-MCP fully removes disabled tools from the MCP tool list.
175
175
  Then reconnect or refresh the MCP server in your AI client (e.g.
176
- refresh tool list on claude.ai, re-add/refresh the connector in
177
- ChatGPT, or close and reopen Claude Desktop) so it reloads the tool
178
- list. Restarting the App (add-on) or Home Assistant does NOT refresh your
179
- client's cached tool list.
176
+ refresh tool list on claude.ai; in ChatGPT open Settings, then the
177
+ plugin settings, select the connector and click Refresh tools;
178
+ disconnect and reconnect a Claude Desktop custom connector; or quit
179
+ and reopen Claude Desktop for a server in claude_desktop_config.json)
180
+ so it reloads the tool list, then start a new conversation. Restarting
181
+ the App (add-on) or Home Assistant does NOT refresh your client's
182
+ cached tool list.
180
183
  </span>
181
184
  <button class="restart-btn" id="restartBtn" style="display:none" data-i18n="actions.restart_addon">Restart App (add-on)</button>
182
185
  </div>
@@ -232,8 +235,11 @@
232
235
  Settings on this tab save automatically. Changes take effect only after
233
236
  you restart the App (add-on) (applies them server-side) and reconnect or
234
237
  refresh the MCP server in your AI client (reloads the tool list), e.g.
235
- refresh tool list on claude.ai, re-add or refresh the connector in
236
- ChatGPT, or close and reopen Claude Desktop.
238
+ refresh tool list on claude.ai; in ChatGPT open Settings, then the
239
+ plugin settings, select the connector and click Refresh tools;
240
+ disconnect and reconnect a Claude Desktop custom connector; or quit
241
+ and reopen Claude Desktop for a server in claude_desktop_config.json;
242
+ then start a new conversation.
237
243
  </div>
238
244
  </div>
239
245
 
@@ -0,0 +1,117 @@
1
+ """FastMCP middleware: keep retired tool and parameter names callable.
2
+
3
+ Home Assistant 2026.2 renamed add-ons to apps, and this server's two add-on
4
+ tools moved with it (``ha_get_addon`` -> ``ha_get_app``, ``ha_manage_addon``
5
+ -> ``ha_manage_app``). Renaming a tool or one of its parameters is not a
6
+ breaking change here — clients resolve tools by name at runtime and re-list
7
+ after a server update — but a client that has not re-listed yet would get a
8
+ bare "Unknown tool", or an unknown-parameter rejection, until it does.
9
+
10
+ This middleware closes that window without paying for it in the catalog. It
11
+ runs before FastMCP resolves the name and validates the arguments
12
+ (``call_tool`` builds the middleware context first and its ``call_next``
13
+ re-reads ``context.message``), so rewriting the name or an argument key here
14
+ dispatches the call to the current tool. The old names are never registered
15
+ or declared, so they stay out of ``tools/list`` and cost no tokens.
16
+
17
+ The call is served, so nothing else tells that client its list is stale: the
18
+ result carries a warning with the refresh steps, and the server log records
19
+ the first use of each old name.
20
+
21
+ Registering the old name as a second, disabled tool would not work:
22
+ ``get_tool`` filters on ``is_enabled`` and ``call_tool`` then raises
23
+ ``NotFoundError``, so a disabled tool is unlisted *and* uncallable.
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ import logging
29
+ from typing import Any
30
+
31
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
32
+ CallNext,
33
+ Middleware,
34
+ MiddlewareContext,
35
+ )
36
+
37
+ from ..renamed_tools import (
38
+ RENAMED_TOOLS,
39
+ adapt_retired_arguments,
40
+ add_stale_list_warning,
41
+ retired_parameters_used,
42
+ )
43
+
44
+ logger = logging.getLogger(__name__)
45
+
46
+ __all__ = ["RENAMED_TOOLS", "RenamedToolAliasMiddleware"]
47
+
48
+
49
+ class RenamedToolAliasMiddleware(Middleware):
50
+ """Dispatch a call on a retired tool or parameter name to its current name.
51
+
52
+ Installed first in the chain so every later middleware — read-only
53
+ exemptions, policy gating, redaction — sees the current names it is keyed
54
+ on, rather than an alias it would not recognise.
55
+ """
56
+
57
+ def __init__(self) -> None:
58
+ # Which retired names have been logged at INFO already, so the first
59
+ # call on each is audible and the rest stay at DEBUG. An operator
60
+ # otherwise has no way to know a client is still calling the old name —
61
+ # the one observation that could ever justify retiring this alias —
62
+ # while a per-call INFO line would be noise for a tool called in a
63
+ # loop. Log de-duplication only: no dispatch decision reads it, and a
64
+ # restart simply announces each name once more.
65
+ self._announced: set[str] = set()
66
+
67
+ def _announce(self, key: str, old: str, new: str) -> None:
68
+ if key in self._announced:
69
+ logger.debug(
70
+ "%s was renamed to %s; dispatching the call to the current name",
71
+ old,
72
+ new,
73
+ )
74
+ return
75
+ self._announced.add(key)
76
+ logger.info(
77
+ "A client called %s, which was renamed to %s; dispatching to the "
78
+ "current name. Old names stay callable, but a client that re-lists "
79
+ "its tools after a server update will not need this.",
80
+ old,
81
+ new,
82
+ )
83
+
84
+ async def on_call_tool(
85
+ self, context: MiddlewareContext, call_next: CallNext
86
+ ) -> Any:
87
+ called = context.message.name
88
+ name = RENAMED_TOOLS.get(called, called)
89
+ arguments = context.message.arguments
90
+ renames: list[tuple[str, str]] = []
91
+ if name != called:
92
+ self._announce(called, called, name)
93
+ renames.append((called, name))
94
+ # A consolidated tool needs the ``action`` the retired signature
95
+ # never carried; a plain rename forwards the arguments as they are.
96
+ arguments = adapt_retired_arguments(called, arguments)
97
+ retired_parameters = retired_parameters_used(name, arguments)
98
+ if retired_parameters:
99
+ arguments = {
100
+ retired_parameters.get(key, key): value
101
+ for key, value in (arguments or {}).items()
102
+ }
103
+ for old, new in retired_parameters.items():
104
+ self._announce(f"{name}.{old}", f"{name}({old}=...)", new)
105
+ renames.append((old, new))
106
+ if not renames:
107
+ return await call_next(context)
108
+
109
+ result = await call_next(
110
+ context.copy(
111
+ message=context.message.model_copy(
112
+ update={"name": name, "arguments": arguments}
113
+ )
114
+ )
115
+ )
116
+ add_stale_list_warning(result, renames)
117
+ return result
@@ -34,6 +34,7 @@ from ..mcp_client_context import (
34
34
  extract_client_info,
35
35
  protocol_version,
36
36
  )
37
+ from ..renamed_tools import CLIENT_TOOL_LIST_REFRESH_STEPS
37
38
  from ..utils.mcp_client_host import detect_client_host
38
39
  from ..utils.usage_logger import (
39
40
  AVG_LOG_ENTRIES_PER_TOOL,
@@ -95,22 +96,19 @@ _TITLE_PREFIXES = {
95
96
  # GitHub refuses a longer issue title.
96
97
  _ISSUE_TITLE_MAX_CHARS = 256
97
98
 
98
- # Guidance surfaced when the reported problem is a tool that never shows up in
99
- # the client's tool list. In issue #1804 this produced a false bug report: the
100
- # tool was enabled and loaded server-side (startup logs even said so), but the
101
- # MCP client had never refreshed its cached tool list, so the agent concluded
102
- # it was a server bug. A stale client-side tool list is the single most likely
103
- # cause of a missing tool and must be ruled out before filing.
99
+ # #1804 (missing tool) and #2968 / #2978 (renamed parameter) were filed as
100
+ # server bugs; a stale client tool list caused #1804 and #2968 and is the
101
+ # likely cause of #2978, so the hint has the agent rule it out before filing.
102
+ # The name predates the parameter case and stays: it is a response key.
104
103
  MISSING_TOOL_HINT = (
105
- "MISSING/UNAVAILABLE TOOL? If the problem is that a tool you expected is not "
106
- "in your tool list (can't find it, can't call it), this is very likely NOT a "
107
- "bug. MCP clients cache the tool list when they connect and do NOT pick up "
108
- "newly enabled tools until the connection is refreshed. Server-side logs "
109
- "saying a tool is 'enabled' do NOT mean the client has loaded it. Ask the "
110
- "user to refresh their MCP connection first: in Claude Desktop / claude.ai "
111
- "use the connector's refresh option, or simply disconnect and reconnect it; "
112
- "in Claude Code run /mcp and reconnect the server. Only file a bug if the "
113
- "tool is still missing after a refresh."
104
+ "MISSING TOOL OR UNKNOWN PARAMETER? A tool you expected is not in your tool "
105
+ "list, or a tool rejects as unknown a parameter your tool list shows: very "
106
+ "likely NOT a bug. MCP clients cache the tool list, so they miss newly "
107
+ "enabled tools and keep showing parameter names an ha-mcp update renamed; "
108
+ "server logs saying a tool is 'enabled' do NOT mean the client loaded it. "
109
+ f"Ask the user to refresh first ({CLIENT_TOOL_LIST_REFRESH_STEPS}), then "
110
+ "start a new conversation. Only file a bug if the problem remains after a "
111
+ "refresh."
114
112
  )
115
113
 
116
114
  # Known Claude Desktop bugs that present as ha-mcp failures. Both live in
@@ -793,8 +791,8 @@ class BugReportTools:
793
791
  before showing anything to the user: it covers the missing-tool and
794
792
  known-client pre-checks, the duplicate check, the mandatory
795
793
  anonymisation step, and how to file the issue. Check
796
- `missing_tool_hint` FIRST when the report is about a missing tool: a
797
- stale client tool list (not a bug) is the usual cause.
794
+ `missing_tool_hint` FIRST when a tool is missing or rejects as unknown
795
+ a parameter your tool list shows: a stale list (not a bug) is the usual cause.
798
796
  """
799
797
  # Validate fields= before anything is collected: the projection at the
800
798
  # end was the only parse, outside any ValueError handler, so a
@@ -993,13 +991,13 @@ class BugReportTools:
993
991
  "known_client_issues_hint": KNOWN_CLIENT_ISSUES_HINT,
994
992
  "instructions": (
995
993
  "WORKFLOW FOR FILING A REPORT:\n\n"
996
- "0. **PRE-CHECK — is the problem a missing/unavailable tool?** If "
997
- "the user's issue is that a tool they expected is missing or "
998
- "cannot be called, DO NOT file a bug yet. See the "
999
- "`missing_tool_hint` field: the likely cause is a stale MCP "
1000
- "client tool list (not a server bug), fixed by refreshing or "
1001
- "reconnecting the MCP connection. Only continue with this report "
1002
- "if the tool is still missing after the user refreshes.\n\n"
994
+ "0. **PRE-CHECK — missing tool or unknown parameter?** If the "
995
+ "user's issue is that a tool they expected is missing, cannot be "
996
+ "called or rejects as unknown a parameter the client's tool list "
997
+ "shows, DO NOT file a bug yet. See the `missing_tool_hint` field: "
998
+ "the likely cause is a stale MCP client tool list (not a server "
999
+ "bug), fixed by refreshing or reconnecting the MCP connection. "
1000
+ "Only continue if the problem remains after the user refreshes.\n\n"
1003
1001
  "0b. **PRE-CHECK — is it a known Claude Desktop bug?** A write "
1004
1002
  "tool that hangs to a 4-minute timeout, or every call failing "
1005
1003
  "with 'expected nonoptional, received undefined', is a client "