ha-mcp-dev 8.4.3.dev2664__tar.gz → 8.4.3.dev2666__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 (727) hide show
  1. {ha_mcp_dev-8.4.3.dev2664/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2666}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/dashboard_screenshot/paths.py +47 -52
  4. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_deep.py +4 -4
  5. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_config_dashboards.py +2 -2
  6. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_dashboard_screenshot.py +8 -7
  7. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_search.py +3 -3
  8. ha_mcp_dev-8.4.3.dev2666/src/ha_mcp/tools/validation_middleware.py +195 -0
  9. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  10. ha_mcp_dev-8.4.3.dev2664/src/ha_mcp/tools/validation_middleware.py +0 -95
  11. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/LICENSE +0 -0
  12. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/MANIFEST.in +0 -0
  13. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/README.md +0 -0
  14. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/setup.cfg +0 -0
  15. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/__init__.py +0 -0
  16. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/__main__.py +0 -0
  17. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_pypi_marker +0 -0
  18. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_rich_compat.py +0 -0
  19. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/__init__.py +0 -0
  20. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  21. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  22. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  23. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  24. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  25. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  26. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  27. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  28. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  29. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  30. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  31. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  32. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  33. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  34. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  35. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  36. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  37. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  38. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  39. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  40. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  41. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  42. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  43. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  44. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  45. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  46. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  47. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  48. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  49. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  50. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  51. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  52. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  53. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  54. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  55. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  56. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  57. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  58. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  59. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  60. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  61. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  62. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  63. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  64. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  65. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  66. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  67. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  68. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  69. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  70. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  71. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  72. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  73. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  74. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  75. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  76. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  77. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  78. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  79. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  80. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  81. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  82. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  83. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  84. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  85. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  86. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  87. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  88. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  89. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  90. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  91. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  92. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  93. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  94. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  95. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  96. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  97. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  98. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  99. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  100. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  101. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  102. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  103. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  104. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  105. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  106. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  107. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  108. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  109. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  110. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  111. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  112. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  113. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  114. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  115. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  116. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  117. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  118. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  119. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  120. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  121. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  122. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  123. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  124. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  125. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  126. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  127. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  128. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  129. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  130. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  131. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  132. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  133. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  134. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  135. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  136. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  137. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  138. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  139. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  140. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  141. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  142. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  143. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  144. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  145. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  146. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  147. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  148. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  149. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  150. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  151. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  152. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  153. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  154. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  155. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  156. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  157. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  158. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  159. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  160. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  161. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  162. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  163. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  164. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  165. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  166. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  167. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  168. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  169. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  170. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  171. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  172. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  173. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  174. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  175. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  176. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  177. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  178. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  179. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  180. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  181. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  182. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  183. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  184. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  185. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  186. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  187. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  188. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  189. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  190. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  191. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  192. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  193. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  194. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  195. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  196. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  197. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  198. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  199. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  200. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  201. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  202. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  203. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  204. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  205. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  206. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  207. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  208. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  209. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  210. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  211. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  212. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  213. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  214. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  215. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  216. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  217. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  218. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  219. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  220. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  221. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  222. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  223. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  224. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  225. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  226. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  227. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  228. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  229. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  230. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  231. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  232. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  233. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  234. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  235. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  236. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  237. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  238. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  239. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  240. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  241. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  242. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  243. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  244. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  245. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  246. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  247. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  248. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  249. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  250. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  251. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  252. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  253. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  254. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  255. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  256. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  257. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  258. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  259. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  260. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  261. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  262. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  263. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  264. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  265. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  266. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  267. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  268. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  269. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  270. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  271. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  272. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  273. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  274. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  275. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  276. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  277. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  278. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  279. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  280. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  281. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  282. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  283. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  284. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  285. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  286. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  287. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  288. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  289. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  290. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  291. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  292. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  293. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  294. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  295. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  296. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  297. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  298. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  299. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  300. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  301. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  302. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  303. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  304. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  305. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  306. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  307. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  308. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  309. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  310. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  311. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  312. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  313. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  314. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  315. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  316. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  317. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  318. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  319. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  320. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  321. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  322. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  323. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  324. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  325. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  326. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  327. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  328. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  329. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  330. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  331. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  332. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  333. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  334. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  335. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  336. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  337. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  338. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  339. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  340. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  341. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  342. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  343. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  344. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  345. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  346. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  347. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  348. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  349. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  350. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  351. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  352. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  353. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  354. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  355. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  356. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  357. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  358. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  359. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  360. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  361. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  362. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  363. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  364. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  365. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  366. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  367. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  368. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  369. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  370. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  371. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  372. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  373. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  374. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  375. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  376. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  377. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  378. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  379. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  380. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  381. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  382. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  383. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  384. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  385. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  386. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  387. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  388. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  389. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  390. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  391. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  392. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  393. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  394. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  395. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  396. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  397. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  398. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  399. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  400. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  401. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  402. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  403. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  404. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  405. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  406. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  407. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  408. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  409. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  410. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  411. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  412. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  413. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  414. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  415. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  416. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  417. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  418. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  419. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  420. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  421. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  422. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  423. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  424. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  425. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  426. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  427. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  428. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  429. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  430. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/requirements.txt +0 -0
  431. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  432. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  433. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  434. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  435. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  436. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  437. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  438. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  439. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  440. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  441. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  442. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  443. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  444. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  445. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  446. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  447. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  448. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  449. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  450. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  451. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  452. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  453. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  454. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  455. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  456. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  457. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  458. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  459. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  460. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  461. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  462. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  463. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  464. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  465. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  466. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  467. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  468. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  469. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  470. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  471. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  472. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  473. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  474. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  475. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  476. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  477. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  478. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  479. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  480. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  481. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  482. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  483. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  484. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  485. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  486. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  487. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/_version.py +0 -0
  488. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/auth/__init__.py +0 -0
  489. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/auth/consent_form.py +0 -0
  490. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/auth/oidc_compat.py +0 -0
  491. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/auth/provider.py +0 -0
  492. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/backup_manager.py +0 -0
  493. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/browser_landing.py +0 -0
  494. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/client/__init__.py +0 -0
  495. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/client/rest_client.py +0 -0
  496. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/client/supervisor_client.py +0 -0
  497. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/client/websocket_client.py +0 -0
  498. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/client/websocket_listener.py +0 -0
  499. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/config.py +0 -0
  500. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  501. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  502. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  503. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  504. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  505. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/errors.py +0 -0
  506. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/ha_request_queue.py +0 -0
  507. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  508. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/http_transport.py +0 -0
  509. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/llm_exposure.py +0 -0
  510. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/log_filters.py +0 -0
  511. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/__init__.py +0 -0
  512. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/approval_queue.py +0 -0
  513. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/editing.py +0 -0
  514. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/evaluator.py +0 -0
  515. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/handlers.py +0 -0
  516. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/middleware.py +0 -0
  517. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/model.py +0 -0
  518. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/persistence.py +0 -0
  519. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/policy/value_sources.py +0 -0
  520. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/py.typed +0 -0
  521. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/read_only.py +0 -0
  522. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/redaction.py +0 -0
  523. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/renamed_tools.py +0 -0
  524. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  525. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  526. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  527. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  528. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  529. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  530. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  531. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  532. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  533. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  534. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  535. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  536. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  537. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  538. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  539. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  540. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  541. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  542. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  543. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  544. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  545. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  546. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  547. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  548. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  549. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  550. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  551. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  552. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  553. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  554. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  555. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  556. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  557. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  558. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  559. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  560. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  561. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  562. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  563. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  564. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  565. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/server.py +0 -0
  566. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/__init__.py +0 -0
  567. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  568. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  569. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  570. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  571. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  572. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  573. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  574. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  575. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  576. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  577. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_theme.py +0 -0
  578. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  579. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  580. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  581. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  582. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  583. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  584. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  585. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  586. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  587. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  588. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  589. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  590. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  591. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  592. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  593. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  594. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  595. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/settings.css +0 -0
  596. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/settings.html +0 -0
  597. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/settings_ui/settings.js +0 -0
  598. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/smoke_test.py +0 -0
  599. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  600. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/strict_bps.py +0 -0
  601. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tool_dispatch.py +0 -0
  602. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/__init__.py +0 -0
  603. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/auto_backup.py +0 -0
  604. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/backup.py +0 -0
  605. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  606. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/best_practice_result.py +0 -0
  607. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  608. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  609. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  610. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/blueprint_write.py +0 -0
  611. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/bulk_selector.py +0 -0
  612. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/component_api.py +0 -0
  613. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/component_config_entries.py +0 -0
  614. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/component_config_reads.py +0 -0
  615. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  616. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/component_devices.py +0 -0
  617. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/component_registries.py +0 -0
  618. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  619. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  620. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  621. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  622. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  623. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  624. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  625. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  626. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  627. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/device_control.py +0 -0
  628. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/entity_registration.py +0 -0
  629. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  630. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/hacs_registration.py +0 -0
  631. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/helpers.py +0 -0
  632. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  633. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/log_common.py +0 -0
  634. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/log_sources.py +0 -0
  635. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  636. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  637. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/radio/__init__.py +0 -0
  638. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/radio/base.py +0 -0
  639. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/radio/matter.py +0 -0
  640. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/radio/thread.py +0 -0
  641. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  642. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/radio/zwave.py +0 -0
  643. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/reference_validator.py +0 -0
  644. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/registry.py +0 -0
  645. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  646. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  647. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  648. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  649. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  650. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  651. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  652. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  653. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  654. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  655. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  656. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_addons.py +0 -0
  657. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_areas.py +0 -0
  658. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  659. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  660. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  661. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_calendar.py +0 -0
  662. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_camera.py +0 -0
  663. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_categories.py +0 -0
  664. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_code.py +0 -0
  665. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  666. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  667. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  668. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  669. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_dev.py +0 -0
  670. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_energy.py +0 -0
  671. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_entities.py +0 -0
  672. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  673. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_groups.py +0 -0
  674. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_hacs.py +0 -0
  675. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_history.py +0 -0
  676. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_integrations.py +0 -0
  677. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_labels.py +0 -0
  678. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_logs.py +0 -0
  679. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_radio.py +0 -0
  680. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_registry.py +0 -0
  681. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_resources.py +0 -0
  682. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  683. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_service.py +0 -0
  684. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_services.py +0 -0
  685. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_system.py +0 -0
  686. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_themes.py +0 -0
  687. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_todo.py +0 -0
  688. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_traces.py +0 -0
  689. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_updates.py +0 -0
  690. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_utility.py +0 -0
  691. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  692. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  693. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  694. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/tools_zones.py +0 -0
  695. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/tools/util_helpers.py +0 -0
  696. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/transforms/__init__.py +0 -0
  697. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/transforms/categorized_search.py +0 -0
  698. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  699. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/transport_security.py +0 -0
  700. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/update_check.py +0 -0
  701. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/__init__.py +0 -0
  702. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/config_hash.py +0 -0
  703. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/config_write_lock.py +0 -0
  704. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  705. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/data_paths.py +0 -0
  706. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  707. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/domain_handlers.py +0 -0
  708. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/entity_membership.py +0 -0
  709. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  710. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  711. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/operation_manager.py +0 -0
  712. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/python_sandbox.py +0 -0
  713. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/skill_loader.py +0 -0
  714. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/utils/usage_logger.py +0 -0
  715. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/visibility/__init__.py +0 -0
  716. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/visibility/enforcement.py +0 -0
  717. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/visibility/model.py +0 -0
  718. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/visibility/persistence.py +0 -0
  719. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp/visibility/resolver.py +0 -0
  720. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  721. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  722. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  723. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  724. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  725. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/tests/__init__.py +0 -0
  726. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/tests/test_constants.py +0 -0
  727. {ha_mcp_dev-8.4.3.dev2664 → ha_mcp_dev-8.4.3.dev2666}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2664
3
+ Version: 8.4.3.dev2666
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.4.3.dev2664"
7
+ version = "8.4.3.dev2666"
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
@@ -34,7 +34,7 @@ _DECODE_URI_RESERVED_VIEW_CHARS = frozenset("$&+,:;=")
34
34
  class DashboardRenderTarget:
35
35
  """Resolved frontend route and audit metadata for a screenshot request."""
36
36
 
37
- dashboard_url_path: str
37
+ url_path: str
38
38
  view_path: str | None
39
39
  render_path: str
40
40
  view_index: int | None
@@ -152,7 +152,7 @@ def _render_path_metadata(
152
152
  render_path = _normalize_dashboard_path(f"{base_path}/{fallback_suffix}")
153
153
 
154
154
  metadata: dict[str, Any] = {
155
- "dashboard_url_path": base_path,
155
+ "url_path": base_path,
156
156
  "view_index": index,
157
157
  "view_path": stable_path,
158
158
  "title": view_config.get("title"),
@@ -181,7 +181,7 @@ def dashboard_render_paths(
181
181
  return (
182
182
  [
183
183
  {
184
- "dashboard_url_path": base_path,
184
+ "url_path": base_path,
185
185
  "view_index": None,
186
186
  "view_path": None,
187
187
  "title": None,
@@ -252,7 +252,7 @@ def _fallback_view_target(
252
252
  """Build one verified numeric fallback target for an unusable named path."""
253
253
  fallback_suffix = _numeric_fallback_suffix(view_index, views)
254
254
  return DashboardRenderTarget(
255
- dashboard_url_path=base_path,
255
+ url_path=base_path,
256
256
  view_path=view_path,
257
257
  render_path=_normalize_dashboard_path(f"{base_path}/{fallback_suffix}"),
258
258
  view_index=view_index,
@@ -264,11 +264,9 @@ def _fallback_view_target(
264
264
  )
265
265
 
266
266
 
267
- async def fetch_dashboard_render_config(
268
- client: Any, dashboard_url_path: str
269
- ) -> dict[str, Any]:
267
+ async def fetch_dashboard_render_config(client: Any, url_path: str) -> dict[str, Any]:
270
268
  """Fetch a Lovelace dashboard config for stable view-path resolution."""
271
- base_path = dashboard_frontend_path(dashboard_url_path)
269
+ base_path = dashboard_frontend_path(url_path)
272
270
  request: dict[str, Any] = {"type": "lovelace/config", "force": True}
273
271
  if base_path != "lovelace":
274
272
  request["url_path"] = base_path
@@ -281,10 +279,9 @@ async def fetch_dashboard_render_config(
281
279
  raise_tool_error(
282
280
  create_error_response(
283
281
  ErrorCode.CONNECTION_FAILED,
284
- f"Could not load dashboard '{dashboard_url_path}' for view-path "
285
- "resolution.",
282
+ f"Could not load dashboard '{url_path}' for view-path resolution.",
286
283
  details=str(exc),
287
- context={"dashboard_url_path": dashboard_url_path},
284
+ context={"url_path": url_path},
288
285
  suggestions=[
289
286
  "Check the Home Assistant connection",
290
287
  "Retry with legacy dashboard_path if you already know the frontend route",
@@ -310,8 +307,8 @@ async def fetch_dashboard_render_config(
310
307
  raise_tool_error(
311
308
  create_error_response(
312
309
  ErrorCode.RESOURCE_NOT_FOUND,
313
- f"Could not load dashboard '{dashboard_url_path}': {message}",
314
- context={"dashboard_url_path": dashboard_url_path},
310
+ f"Could not load dashboard '{url_path}': {message}",
311
+ context={"url_path": url_path},
315
312
  suggestions=[
316
313
  "Use ha_config_get_dashboard(list_only=True) to list dashboard URL paths"
317
314
  ],
@@ -320,9 +317,9 @@ async def fetch_dashboard_render_config(
320
317
  raise_tool_error(
321
318
  create_error_response(
322
319
  ErrorCode.SERVICE_CALL_FAILED,
323
- f"Failed to load dashboard '{dashboard_url_path}': {message}",
320
+ f"Failed to load dashboard '{url_path}': {message}",
324
321
  context={
325
- "dashboard_url_path": dashboard_url_path,
322
+ "url_path": url_path,
326
323
  "home_assistant_error_code": error_code or None,
327
324
  },
328
325
  suggestions=[
@@ -337,9 +334,9 @@ async def fetch_dashboard_render_config(
337
334
  raise_tool_error(
338
335
  create_error_response(
339
336
  ErrorCode.SERVICE_CALL_FAILED,
340
- f"Dashboard '{dashboard_url_path}' returned an invalid config payload.",
337
+ f"Dashboard '{url_path}' returned an invalid config payload.",
341
338
  context={
342
- "dashboard_url_path": dashboard_url_path,
339
+ "url_path": url_path,
343
340
  "payload_type": type(config).__name__,
344
341
  },
345
342
  )
@@ -348,7 +345,7 @@ async def fetch_dashboard_render_config(
348
345
 
349
346
 
350
347
  def match_dashboard_view(
351
- dashboard_url_path: str,
348
+ url_path: str,
352
349
  config: dict[str, Any],
353
350
  view_path: str,
354
351
  *,
@@ -382,7 +379,7 @@ def match_dashboard_view(
382
379
  ErrorCode.VALIDATION_INVALID_PARAMETER,
383
380
  "Strategy dashboards do not expose static named view paths.",
384
381
  context={
385
- "dashboard_url_path": dashboard_url_path,
382
+ "url_path": url_path,
386
383
  "view_path": view_path,
387
384
  },
388
385
  suggestions=list(strategy_suggestions),
@@ -408,7 +405,7 @@ def match_dashboard_view(
408
405
  ErrorCode.RESOURCE_NOT_FOUND,
409
406
  f"Dashboard view path '{view_path}' is {reason}.",
410
407
  context={
411
- "dashboard_url_path": dashboard_url_path,
408
+ "url_path": url_path,
412
409
  "view_path": view_path,
413
410
  "available_view_paths": available,
414
411
  },
@@ -419,12 +416,12 @@ def match_dashboard_view(
419
416
 
420
417
 
421
418
  def resolve_dashboard_view(
422
- dashboard_url_path: str,
419
+ url_path: str,
423
420
  config: dict[str, Any],
424
421
  view_path: str | None,
425
422
  ) -> DashboardRenderTarget:
426
423
  """Resolve one named Lovelace view to a canonical frontend route."""
427
- base_path = dashboard_frontend_path(dashboard_url_path)
424
+ base_path = dashboard_frontend_path(url_path)
428
425
  if view_path is None:
429
426
  views = config.get("views")
430
427
  has_static_views = isinstance(views, list) and bool(views)
@@ -444,7 +441,7 @@ def resolve_dashboard_view(
444
441
  "only the base route is available."
445
442
  )
446
443
  return DashboardRenderTarget(
447
- dashboard_url_path=base_path,
444
+ url_path=base_path,
448
445
  view_path=None,
449
446
  render_path=base_path,
450
447
  view_index=None,
@@ -452,7 +449,7 @@ def resolve_dashboard_view(
452
449
  warnings=(warning,),
453
450
  )
454
451
 
455
- view_index, _ = match_dashboard_view(dashboard_url_path, config, view_path)
452
+ view_index, _ = match_dashboard_view(url_path, config, view_path)
456
453
  cleaned_view_path = view_path
457
454
  views = config.get("views")
458
455
  if not isinstance(views, list):
@@ -477,7 +474,7 @@ def resolve_dashboard_view(
477
474
  ),
478
475
  )
479
476
  return DashboardRenderTarget(
480
- dashboard_url_path=base_path,
477
+ url_path=base_path,
481
478
  view_path=cleaned_view_path,
482
479
  render_path=render_path,
483
480
  view_index=view_index,
@@ -497,7 +494,7 @@ async def _resolve_legacy_dashboard_target(
497
494
  create_error_response(
498
495
  ErrorCode.VALIDATION_INVALID_PARAMETER,
499
496
  f"Raw view suffix '{parts[1]}' is reserved by Home Assistant.",
500
- context={"dashboard_url_path": dashboard_root},
497
+ context={"url_path": dashboard_root},
501
498
  )
502
499
  )
503
500
  validated_config = await _validate_legacy_dashboard_root(client, render_path)
@@ -505,7 +502,7 @@ async def _resolve_legacy_dashboard_target(
505
502
  raw_view = parts[1] if len(parts) > 1 else None
506
503
  numeric_index = _numeric_view_index(raw_view) if raw_view is not None else None
507
504
  return DashboardRenderTarget(
508
- dashboard_url_path="lovelace",
505
+ url_path="lovelace",
509
506
  view_path=None,
510
507
  render_path=render_path,
511
508
  view_index=numeric_index,
@@ -521,7 +518,7 @@ async def _resolve_legacy_dashboard_target(
521
518
  raw_view = parts[1]
522
519
  if "strategy" in validated_config:
523
520
  return DashboardRenderTarget(
524
- dashboard_url_path=dashboard_root,
521
+ url_path=dashboard_root,
525
522
  view_path=None,
526
523
  render_path=render_path,
527
524
  view_index=None,
@@ -545,7 +542,7 @@ async def _resolve_legacy_dashboard_target(
545
542
  ErrorCode.RESOURCE_NOT_FOUND,
546
543
  f"Dashboard view path '{raw_view}' was not found.",
547
544
  context={
548
- "dashboard_url_path": dashboard_root,
545
+ "url_path": dashboard_root,
549
546
  "view_path": raw_view,
550
547
  "available_view_paths": [
551
548
  path
@@ -562,7 +559,7 @@ async def _resolve_legacy_dashboard_target(
562
559
  duplicate_count = sum(_configured_view_path(view) == raw_view for view in views)
563
560
  if duplicate_count > 1:
564
561
  return DashboardRenderTarget(
565
- dashboard_url_path=dashboard_root,
562
+ url_path=dashboard_root,
566
563
  view_path=raw_view,
567
564
  render_path=_normalize_dashboard_path(f"{dashboard_root}/{raw_view}"),
568
565
  view_index=view_index,
@@ -584,7 +581,7 @@ async def _resolve_legacy_dashboard_target(
584
581
  ErrorCode.RESOURCE_NOT_FOUND,
585
582
  f"Dashboard view index '{raw_view}' was not found.",
586
583
  context={
587
- "dashboard_url_path": dashboard_root,
584
+ "url_path": dashboard_root,
588
585
  "view_index": numeric_index,
589
586
  "available_view_count": len(views)
590
587
  if isinstance(views, list)
@@ -606,10 +603,10 @@ async def _resolve_legacy_dashboard_target(
606
603
  if not warnings:
607
604
  warnings.append(
608
605
  f"Numeric view index '{render_path}' is fragile; assign the view a "
609
- "unique views[].path and use dashboard_url_path/view_path addressing."
606
+ "unique views[].path and use url_path/view_path addressing."
610
607
  )
611
608
  return DashboardRenderTarget(
612
- dashboard_url_path=dashboard_root,
609
+ url_path=dashboard_root,
613
610
  view_path=None,
614
611
  render_path=render_path,
615
612
  view_index=view_index,
@@ -622,44 +619,44 @@ async def resolve_dashboard_render_target(
622
619
  client: Any,
623
620
  *,
624
621
  dashboard_path: str | None,
625
- dashboard_url_path: str | None,
622
+ url_path: str | None,
626
623
  view_path: str | None,
627
624
  ) -> DashboardRenderTarget:
628
625
  """Resolve legacy raw or structured screenshot addressing."""
629
- if dashboard_path is not None and dashboard_url_path is not None:
626
+ if dashboard_path is not None and url_path is not None:
630
627
  raise_tool_error(
631
628
  create_error_response(
632
629
  ErrorCode.VALIDATION_INVALID_PARAMETER,
633
- "Use dashboard_path or dashboard_url_path/view_path, not both.",
630
+ "Use dashboard_path or url_path/view_path, not both.",
634
631
  context={
635
632
  "dashboard_path": dashboard_path,
636
- "dashboard_url_path": dashboard_url_path,
633
+ "url_path": url_path,
637
634
  "view_path": view_path,
638
635
  },
639
636
  )
640
637
  )
641
- if dashboard_url_path is None:
638
+ if url_path is None:
642
639
  if view_path is not None:
643
640
  raise_tool_error(
644
641
  create_error_response(
645
642
  ErrorCode.VALIDATION_MISSING_PARAMETER,
646
- "dashboard_url_path is required when view_path is supplied.",
643
+ "url_path is required when view_path is supplied.",
647
644
  context={"view_path": view_path},
648
645
  )
649
646
  )
650
647
  return await _resolve_legacy_dashboard_target(client, dashboard_path)
651
648
 
652
- if not dashboard_url_path.strip():
649
+ if not url_path.strip():
653
650
  raise_tool_error(
654
651
  create_error_response(
655
652
  ErrorCode.VALIDATION_INVALID_PARAMETER,
656
- "dashboard_url_path cannot be empty.",
657
- context={"dashboard_url_path": dashboard_url_path},
653
+ "url_path cannot be empty.",
654
+ context={"url_path": url_path},
658
655
  )
659
656
  )
660
- if dashboard_frontend_path(dashboard_url_path) == "lovelace" and view_path is None:
657
+ if dashboard_frontend_path(url_path) == "lovelace" and view_path is None:
661
658
  return DashboardRenderTarget(
662
- dashboard_url_path="lovelace",
659
+ url_path="lovelace",
663
660
  view_path=None,
664
661
  render_path="lovelace",
665
662
  view_index=None,
@@ -669,8 +666,8 @@ async def resolve_dashboard_render_target(
669
666
  "renders the first view visible to Puppet's Home Assistant user.",
670
667
  ),
671
668
  )
672
- config = await fetch_dashboard_render_config(client, dashboard_url_path)
673
- return resolve_dashboard_view(dashboard_url_path, config, view_path)
669
+ config = await fetch_dashboard_render_config(client, url_path)
670
+ return resolve_dashboard_view(url_path, config, view_path)
674
671
 
675
672
 
676
673
  async def _validate_legacy_dashboard_root(
@@ -715,12 +712,12 @@ async def _numeric_view_warning(
715
712
  parts = render_path.split("/", maxsplit=1)
716
713
  if len(parts) < 2:
717
714
  return []
718
- dashboard_url_path, raw_view = parts
715
+ url_path, raw_view = parts
719
716
  index = _numeric_view_index(raw_view)
720
717
  if index is None:
721
718
  return []
722
719
  if config is None:
723
- config = await fetch_dashboard_render_config(client, dashboard_url_path)
720
+ config = await fetch_dashboard_render_config(client, url_path)
724
721
  views = config.get("views")
725
722
  if not isinstance(views, list):
726
723
  return []
@@ -740,12 +737,10 @@ async def _numeric_view_warning(
740
737
  ]
741
738
  if matching_paths.count(stable_path) != 1:
742
739
  return []
743
- canonical = _safe_named_render_path(
744
- dashboard_frontend_path(dashboard_url_path), stable_path
745
- )
740
+ canonical = _safe_named_render_path(dashboard_frontend_path(url_path), stable_path)
746
741
  if canonical is None:
747
742
  return []
748
743
  return [
749
744
  f"Numeric view index '{render_path}' is fragile; use the stable render "
750
- + f"path '{canonical}' or dashboard_url_path/view_path addressing."
745
+ + f"path '{canonical}' or url_path/view_path addressing."
751
746
  ]
@@ -1085,8 +1085,8 @@ class DeepSearchMixin(SceneSearchMixin):
1085
1085
  else (match.get("title") or url_path)
1086
1086
  )
1087
1087
  records[url_path] = {
1088
- "dashboard_url": url_path,
1089
- "dashboard_title": title,
1088
+ "url_path": url_path,
1089
+ "title": title,
1090
1090
  "score": 100,
1091
1091
  "match_in_config": True,
1092
1092
  # Dashboards are not a search/related item type, so this is
@@ -1163,8 +1163,8 @@ class DeepSearchMixin(SceneSearchMixin):
1163
1163
  if config_score >= threshold:
1164
1164
  return [
1165
1165
  {
1166
- "dashboard_url": url_path,
1167
- "dashboard_title": title,
1166
+ "url_path": url_path,
1167
+ "title": title,
1168
1168
  "score": config_score,
1169
1169
  "match_in_config": True,
1170
1170
  "match_in_references": False,
@@ -1811,7 +1811,7 @@ class DashboardConfigTools:
1811
1811
  force_reload: Annotated[
1812
1812
  bool,
1813
1813
  Field(
1814
- description="Force reload from storage (bypass cache). Not applicable in search mode (search always uses force=True for fresh results)."
1814
+ description="Force reload from storage (bypass cache). Not applicable in search mode, which always reads fresh config."
1815
1815
  ),
1816
1816
  ] = False,
1817
1817
  entity_id: Annotated[
@@ -1914,7 +1914,7 @@ class DashboardConfigTools:
1914
1914
  python_transform=f'config{m["python_path"]}["icon"] = "mdi:x"' (it is
1915
1915
  NOT valid on its own without the `config` prefix). jq_path is the same
1916
1916
  location in jq dot-notation.
1917
- Multiple criteria are AND-ed. Always fetches fresh config (force=True).
1917
+ Multiple criteria are AND-ed. Always fetches fresh config, bypassing the cache.
1918
1918
  Search covers cards/card/custom_fields/states containers up to a depth
1919
1919
  bound; if the dashboard carries a non-traversed child-bearing shape
1920
1920
  (e.g. picture-elements `elements`), the result carries a `warnings`
@@ -38,6 +38,7 @@ from ..dashboard_screenshot.content import (
38
38
  dashboard_screenshot_warnings,
39
39
  )
40
40
  from ..dashboard_screenshot.paths import (
41
+ DashboardRenderTarget,
41
42
  resolve_dashboard_render_target,
42
43
  )
43
44
  from ..errors import ErrorCode, create_error_response
@@ -50,7 +51,7 @@ logger = logging.getLogger(__name__)
50
51
  def _package_screenshot_result(
51
52
  *,
52
53
  captures: list[Any],
53
- target: Any,
54
+ target: DashboardRenderTarget,
54
55
  capture_failures: list[dict[str, Any]],
55
56
  capture_warnings: list[str],
56
57
  ) -> ToolResult:
@@ -58,7 +59,7 @@ def _package_screenshot_result(
58
59
  try:
59
60
  structured_content: dict[str, Any] = {
60
61
  "success": True,
61
- "dashboard_url_path": target.dashboard_url_path,
62
+ "url_path": target.url_path,
62
63
  "view_path": target.view_path,
63
64
  "view_index": target.view_index,
64
65
  "render_path": target.render_path,
@@ -123,11 +124,11 @@ class DashboardScreenshotTools:
123
124
  description="Legacy Lovelace frontend path to render, e.g. "
124
125
  "'lovelace/0' (default dashboard, first view), "
125
126
  "'lovelace-home/kitchen', or 'my-dashboard'. Leading slash "
126
- "optional. Prefer dashboard_url_path + view_path for a stable "
127
- "named view. Mutually exclusive with dashboard_url_path."
127
+ "optional. Prefer url_path + view_path for a stable "
128
+ "named view. Mutually exclusive with url_path."
128
129
  ),
129
130
  ] = None,
130
- dashboard_url_path: Annotated[
131
+ url_path: Annotated[
131
132
  str | None,
132
133
  Field(
133
134
  description="Stable dashboard URL path, e.g. 'lovelace-home' "
@@ -138,7 +139,7 @@ class DashboardScreenshotTools:
138
139
  str | None,
139
140
  Field(
140
141
  description="Stable Lovelace views[].path value to render. "
141
- "Requires dashboard_url_path."
142
+ "Requires url_path."
142
143
  ),
143
144
  ] = None,
144
145
  width: Annotated[
@@ -246,7 +247,7 @@ class DashboardScreenshotTools:
246
247
  target = await resolve_dashboard_render_target(
247
248
  self._client,
248
249
  dashboard_path=dashboard_path,
249
- dashboard_url_path=dashboard_url_path,
250
+ url_path=url_path,
250
251
  view_path=view_path,
251
252
  )
252
253
  validate_capture_parameters(
@@ -1178,7 +1178,7 @@ def _dashboard_split_serviceable(req: _ResolvedSearch, caps: Any) -> bool:
1178
1178
  class _DashboardLeg:
1179
1179
  """The dashboards surface's contribution to a component-served ha_search.
1180
1180
 
1181
- ``records`` are legacy-shaped (``dashboard_url`` / ``dashboard_title`` /
1181
+ ``records`` are legacy-shaped (``url_path`` / ``title`` /
1182
1182
  ``score``), NOT component records — they never pass through
1183
1183
  ``_normalize_component_config_record``. ``failed`` is the leg's own
1184
1184
  "not scanned" count, reported with the deep path's wording. ``error`` is
@@ -1226,13 +1226,13 @@ def _merge_sort_key(record: dict[str, Any]) -> str:
1226
1226
  the wire records unchanged, so the merge reproduces the exact order that
1227
1227
  decided window membership. Dashboard records are outside the component
1228
1228
  corpus, so any deterministic key places them consistently across pages —
1229
- ``dashboard_url`` extends the same chain.
1229
+ ``url_path`` extends the same chain.
1230
1230
  """
1231
1231
  return str(
1232
1232
  record.get("entity_id")
1233
1233
  or record.get("id")
1234
1234
  or record.get("name")
1235
- or record.get("dashboard_url")
1235
+ or record.get("url_path")
1236
1236
  or ""
1237
1237
  )
1238
1238
 
@@ -0,0 +1,195 @@
1
+ """FastMCP middleware that converts argument-validation errors to structured ToolErrors.
2
+
3
+ When a model passes the wrong type for a tool parameter (e.g. a JSON string where
4
+ a dict is required), FastMCP surfaces a validation error with a raw message like
5
+ "Input should be a valid dictionary" -- a bare ``pydantic.ValidationError`` on
6
+ older FastMCP, or a ``fastmcp.exceptions.ValidationError`` wrapping it (chained
7
+ via ``from e``) on FastMCP >= 3.4.3. This middleware intercepts either shape and
8
+ converts it to ha-mcp's structured format with actionable guidance. When the
9
+ tool's schema can be read, an argument name the tool does not declare is
10
+ reported with the closest declared parameter, if one resembles it, and the full
11
+ parameter list.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import logging
17
+ from collections.abc import Sequence
18
+ from difflib import SequenceMatcher
19
+ from typing import Any
20
+
21
+ from pydantic import ValidationError as PydanticValidationError
22
+ from pydantic_core import ErrorDetails
23
+
24
+ from ha_mcp._vendor.fastmcp.exceptions import ValidationError as FastMCPValidationError
25
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
26
+ CallNext,
27
+ Middleware,
28
+ MiddlewareContext,
29
+ )
30
+
31
+ from ..errors import create_validation_error
32
+ from .helpers import raise_tool_error
33
+
34
+ logger = logging.getLogger(__name__)
35
+
36
+ # Maps Pydantic error types to model-readable fix hints.
37
+ # FastMCP uses non-strict Pydantic: scalar mismatches (bool, int) are coerced
38
+ # rather than rejected, so only dict_type and list_type fire among type errors.
39
+ _TYPE_HINTS: dict[str, str] = {
40
+ "dict_type": (
41
+ "expected a JSON object. "
42
+ 'Pass {"key": "value"} directly, not a JSON-encoded string.'
43
+ ),
44
+ "list_type": (
45
+ "expected a JSON array. Pass [...] directly, not a JSON-encoded string."
46
+ ),
47
+ }
48
+
49
+ _UNKNOWN_ARGUMENT = "unexpected_keyword_argument"
50
+
51
+
52
+ async def _tool_parameter_names(context: MiddlewareContext | None) -> list[str] | None:
53
+ """Return the called tool's declared parameter names, or None if unavailable."""
54
+ fastmcp_context = getattr(context, "fastmcp_context", None)
55
+ tool_name = getattr(getattr(context, "message", None), "name", None)
56
+ if fastmcp_context is None or not tool_name:
57
+ return None
58
+ try:
59
+ tool = await fastmcp_context.fastmcp.get_tool(tool_name)
60
+ except Exception:
61
+ logger.warning(
62
+ "Parameter lookup for %s failed; unknown-argument hint omitted",
63
+ tool_name,
64
+ exc_info=True,
65
+ )
66
+ return None
67
+ if tool is None:
68
+ logger.warning(
69
+ "Parameter lookup for %s returned no tool; unknown-argument hint omitted",
70
+ tool_name,
71
+ )
72
+ return None
73
+ properties = tool.parameters.get("properties")
74
+ if not isinstance(properties, dict):
75
+ logger.warning(
76
+ "No parameter schema for %s; unknown-argument hint omitted", tool_name
77
+ )
78
+ return None
79
+ return list(properties)
80
+
81
+
82
+ def _closest_parameter(unknown: str, candidates: Sequence[str]) -> str | None:
83
+ """Return the declared parameter an invented argument name most likely meant.
84
+
85
+ A candidate qualifies by sharing an underscore-separated word with the name
86
+ (``dashboard_url`` for ``url_path``) or by a similarity ratio of at least
87
+ 0.6 (typos). A declared name the invented one ends with ranks first
88
+ (``dashboard_url_path`` for ``url_path``), then more shared words; the ratio
89
+ breaks ties.
90
+ """
91
+ unknown_lower = unknown.lower()
92
+ words = set(unknown_lower.split("_")) - {""}
93
+ best: tuple[bool, int, float, str] | None = None
94
+ for candidate in candidates:
95
+ candidate_lower = candidate.lower()
96
+ shared = len(words & set(candidate_lower.split("_")))
97
+ ratio = SequenceMatcher(None, unknown_lower, candidate_lower).ratio()
98
+ if not shared and ratio < 0.6:
99
+ continue
100
+ suffix = unknown_lower.endswith(f"_{candidate_lower}")
101
+ if best is None or (suffix, shared, ratio) > best[:3]:
102
+ best = (suffix, shared, ratio, candidate)
103
+ return best[3] if best else None
104
+
105
+
106
+ def _unknown_argument_hint(param: str, unclaimed: Sequence[str]) -> str:
107
+ """Name an undeclared argument, suggesting the parameter it likely meant."""
108
+ match = _closest_parameter(param, unclaimed)
109
+ return (
110
+ f"unknown parameter, did you mean `{match}`?" if match else "unknown parameter"
111
+ )
112
+
113
+
114
+ def _type_hint(errs: Sequence[ErrorDetails]) -> str:
115
+ """Prefer a dict_type/list_type hint; else the first error's raw message."""
116
+ return next(
117
+ (_TYPE_HINTS[e["type"]] for e in errs if e["type"] in _TYPE_HINTS),
118
+ errs[0]["msg"],
119
+ )
120
+
121
+
122
+ class ValidationErrorMiddleware(Middleware):
123
+ """Convert argument-validation failures into structured ToolErrors."""
124
+
125
+ async def on_call_tool(
126
+ self, context: MiddlewareContext, call_next: CallNext
127
+ ) -> Any:
128
+ try:
129
+ result = await call_next(context)
130
+ except (PydanticValidationError, FastMCPValidationError) as exc:
131
+ # fastmcp >= 3.4.3 re-raises an argument-validation failure as
132
+ # ``fastmcp.exceptions.ValidationError`` wrapping the pydantic error
133
+ # (chained via ``from e``); older fastmcp raises the pydantic error
134
+ # directly. Recover the pydantic errors from whichever shape arrived,
135
+ # and let any other fastmcp ValidationError (e.g. a return-value
136
+ # failure with no pydantic cause) propagate unchanged.
137
+ pydantic_exc = (
138
+ exc if isinstance(exc, PydanticValidationError) else exc.__cause__
139
+ )
140
+ if not isinstance(pydantic_exc, PydanticValidationError):
141
+ raise
142
+ errors = pydantic_exc.errors(include_url=False)
143
+ # Group by the real argument path. A union param like
144
+ # `str | list[str]` emits one error per arm with loc (param, "str"),
145
+ # (param, "list[str]"); without grouping the user saw `param.str` /
146
+ # `param.list[str]` instead of `param` (#1601). We keep the param
147
+ # name plus any numeric list indices (so a bad element still reports
148
+ # `monday.1`) but drop the non-numeric union-arm tags.
149
+ grouped: dict[str, list[ErrorDetails]] = {}
150
+ for err in errors:
151
+ loc = [str(p) for p in err.get("loc", ()) if p != "__root__"]
152
+ if loc:
153
+ key = ".".join([loc[0], *(p for p in loc[1:] if p.isdigit())])
154
+ else:
155
+ key = ""
156
+ grouped.setdefault(key, []).append(err)
157
+
158
+ valid_parameters = (
159
+ await _tool_parameter_names(context)
160
+ if any(err["type"] == _UNKNOWN_ARGUMENT for err in errors)
161
+ else None
162
+ )
163
+ unclaimed: list[str] = []
164
+ if valid_parameters is not None:
165
+ # Skip parameters the call already supplied: a second, invented
166
+ # argument almost never means one of them.
167
+ message_obj = getattr(context, "message", None)
168
+ supplied = getattr(message_obj, "arguments", None) or {}
169
+ unclaimed = [p for p in valid_parameters if p not in supplied]
170
+
171
+ parts: list[str] = []
172
+ for param, errs in grouped.items():
173
+ if (
174
+ valid_parameters is not None
175
+ and errs[0]["type"] == _UNKNOWN_ARGUMENT
176
+ ):
177
+ hint = _unknown_argument_hint(param, unclaimed)
178
+ else:
179
+ hint = _type_hint(errs)
180
+ parts.append(f"`{param}`: {hint}" if param else hint)
181
+ message = "; ".join(parts) if parts else "Invalid argument types."
182
+ error_context: dict[str, Any] | None = None
183
+ if valid_parameters is not None:
184
+ separator = " " if message.endswith((".", "?")) else ". "
185
+ listing = ", ".join(valid_parameters) or "none"
186
+ message += f"{separator}Valid parameters: {listing}."
187
+ error_context = {"valid_parameters": valid_parameters}
188
+ raise_tool_error(
189
+ create_validation_error(
190
+ message,
191
+ details=", ".join(dict.fromkeys(err["type"] for err in errors)),
192
+ context=error_context,
193
+ )
194
+ )
195
+ return result
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2664
3
+ Version: 8.4.3.dev2666
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT