ha-mcp-dev 8.5.0.dev2797__tar.gz → 8.5.0.dev2801__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 (738) hide show
  1. {ha_mcp_dev-8.5.0.dev2797/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.5.0.dev2801}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/pyproject.toml +1 -1
  3. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +20 -20
  4. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/VENDORED +1 -1
  5. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/__init__.py +1 -1
  6. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +1 -1
  7. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +2 -2
  8. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +1 -1
  9. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +1 -1
  10. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +39 -20
  11. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +23 -0
  12. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +7 -3
  13. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +25 -1
  14. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +58 -21
  15. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/server.py +35 -13
  16. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +11 -9
  17. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +69 -23
  18. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +1 -0
  19. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +5 -0
  20. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +20 -29
  21. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +11 -1
  22. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +3 -3
  23. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +4 -1
  24. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/requirements.txt +1 -1
  25. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  26. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/LICENSE +0 -0
  27. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/MANIFEST.in +0 -0
  28. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/README.md +0 -0
  29. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/setup.cfg +0 -0
  30. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/__init__.py +0 -0
  31. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/__main__.py +0 -0
  32. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_pypi_marker +0 -0
  33. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_rich_compat.py +0 -0
  34. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/__init__.py +0 -0
  35. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  36. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  37. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  38. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  39. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  40. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  41. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  42. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  43. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  44. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  45. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  46. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  47. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  48. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  49. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  50. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  51. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  52. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  53. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  54. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  55. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  56. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  57. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  58. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  59. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  60. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  61. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  62. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  63. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  64. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  65. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  66. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  67. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  68. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  69. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  70. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  71. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  72. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  73. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  74. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  75. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  76. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  77. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  78. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  79. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  80. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  81. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  82. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  83. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  84. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  85. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  86. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  87. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  88. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  89. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  90. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  91. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  92. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  93. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  94. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  95. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  96. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  97. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  98. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  99. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  100. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  101. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  102. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  103. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  104. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  105. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  106. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  107. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  108. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  109. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  110. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  111. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  112. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  113. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  114. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  115. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  116. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  117. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  118. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  119. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  120. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  121. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  122. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  123. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  124. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  125. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  126. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  127. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  128. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  129. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  130. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  131. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  132. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  133. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  134. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  135. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  136. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  137. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  138. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  139. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  140. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  141. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  142. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  143. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  144. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  145. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  146. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  147. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  148. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  149. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  150. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  151. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  152. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  153. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  154. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  155. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  156. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  157. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  158. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  159. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  160. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  161. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  162. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  163. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  164. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  165. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  166. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  167. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  168. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  169. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  170. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  171. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  172. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  173. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  174. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  175. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  176. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  177. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  178. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  179. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  180. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  181. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  182. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  183. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  184. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  185. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  186. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  187. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  188. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  189. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  190. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  191. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  192. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  193. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  194. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  195. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  196. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  197. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  198. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  199. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  200. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  201. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  202. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  203. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  204. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  205. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  206. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  207. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  208. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  209. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  210. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  211. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  212. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  213. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  214. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  215. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  216. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  217. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  218. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  219. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  220. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  221. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  222. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  223. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  224. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  225. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  226. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  227. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  228. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  229. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  230. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  231. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  232. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  233. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  234. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  235. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  236. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  237. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  238. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  239. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  240. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  241. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  242. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  243. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  244. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  245. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  246. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  247. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  248. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  249. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  250. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  251. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  252. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  253. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  254. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  255. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  256. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  257. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  258. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  259. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  260. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  261. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  262. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  263. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  264. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  265. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  266. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  267. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  268. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  269. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  270. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  271. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  272. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  273. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  274. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  275. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  276. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  277. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  278. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  279. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  280. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  281. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  282. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  283. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  284. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  285. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  286. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  287. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  288. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  289. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  290. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  291. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  292. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  293. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  294. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  295. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  296. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  297. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  298. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  299. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  300. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  301. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  302. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  303. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  304. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  305. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  306. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  307. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  308. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  309. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  310. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  311. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  312. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  313. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  314. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  315. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  316. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  317. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  318. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  319. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  320. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  321. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  322. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  323. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  324. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  325. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  326. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  327. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  328. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  329. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  330. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  331. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  332. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  333. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  334. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  335. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  336. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  337. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  338. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  339. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  340. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  341. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  342. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  343. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  344. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  345. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  346. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  347. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  348. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  349. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  350. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  351. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  352. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  353. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  354. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  355. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  356. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  357. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  358. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  359. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  360. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  361. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  362. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  363. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  364. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  365. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  366. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  367. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  368. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  369. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  370. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  371. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  372. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  373. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  374. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  375. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  376. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  377. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  378. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  379. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  380. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  381. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  382. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  383. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  384. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  385. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  386. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  387. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  388. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  389. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  390. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  391. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  392. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  393. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  394. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  395. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  396. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  397. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  398. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  399. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  400. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  401. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  402. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  403. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  404. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  405. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  406. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  407. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  408. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  409. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  410. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  411. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  412. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  413. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  414. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  415. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  416. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  417. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  418. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  419. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  420. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  421. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  422. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  423. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  424. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  425. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  426. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  427. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  428. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  429. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  430. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  431. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  432. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  433. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  434. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  435. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  436. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  437. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  438. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  439. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  440. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  441. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  442. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  443. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  444. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  445. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  446. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  447. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  448. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  449. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  450. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  451. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  452. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  453. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  454. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  455. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  456. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  457. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  458. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  459. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  460. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  461. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  462. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  463. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  464. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  465. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  466. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  467. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  468. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  469. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  470. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  471. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  472. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  473. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  474. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  475. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  476. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  477. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  478. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  479. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  480. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/_version.py +0 -0
  481. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/auth/__init__.py +0 -0
  482. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/auth/consent_form.py +0 -0
  483. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/auth/oidc_compat.py +0 -0
  484. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/auth/provider.py +0 -0
  485. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/backup_manager.py +0 -0
  486. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/browser_landing.py +0 -0
  487. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/client/__init__.py +0 -0
  488. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/client/admin_routes.py +0 -0
  489. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/client/rest_client.py +0 -0
  490. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/client/supervisor_client.py +0 -0
  491. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/client/websocket_client.py +0 -0
  492. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/client/websocket_listener.py +0 -0
  493. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/config.py +0 -0
  494. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  495. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  496. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  497. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  498. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  499. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  500. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/errors.py +0 -0
  501. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/ha_request_queue.py +0 -0
  502. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  503. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/http_transport.py +0 -0
  504. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/llm_exposure.py +0 -0
  505. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/log_filters.py +0 -0
  506. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/__init__.py +0 -0
  507. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/approval_queue.py +0 -0
  508. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/decision_pin.py +0 -0
  509. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/decisions.py +0 -0
  510. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/editing.py +0 -0
  511. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/evaluator.py +0 -0
  512. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/events.py +0 -0
  513. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/handlers.py +0 -0
  514. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/middleware.py +0 -0
  515. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/model.py +0 -0
  516. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/persistence.py +0 -0
  517. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/policy/value_sources.py +0 -0
  518. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/py.typed +0 -0
  519. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/read_only.py +0 -0
  520. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/redaction.py +0 -0
  521. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/renamed_tools.py +0 -0
  522. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  523. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  524. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  525. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  526. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  527. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  528. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  529. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  530. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  531. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  532. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  533. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  534. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  535. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  536. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  537. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  538. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  539. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  540. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  541. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  542. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  543. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  544. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  545. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  546. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  547. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  548. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  549. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  550. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  551. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  552. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  553. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  554. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  555. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  556. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  557. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  558. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  559. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  560. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  561. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  562. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  563. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/server.py +0 -0
  564. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/server_lifespan.py +0 -0
  565. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/__init__.py +0 -0
  566. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  567. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  568. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  569. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  570. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  571. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  572. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  573. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  574. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  575. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  576. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_theme.py +0 -0
  577. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  578. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  579. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/az.json +0 -0
  580. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  581. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  582. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  583. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  584. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  585. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  586. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  587. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  588. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  589. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  590. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  591. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  592. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  593. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  594. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  595. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/settings.css +0 -0
  596. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/settings.html +0 -0
  597. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/settings_ui/settings.js +0 -0
  598. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/smoke_test.py +0 -0
  599. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  600. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/strict_bps.py +0 -0
  601. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tool_dispatch.py +0 -0
  602. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/__init__.py +0 -0
  603. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/auto_backup.py +0 -0
  604. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/backup.py +0 -0
  605. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  606. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/best_practice_result.py +0 -0
  607. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  608. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  609. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  610. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/blueprint_write.py +0 -0
  611. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/bulk_selector.py +0 -0
  612. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/component_api.py +0 -0
  613. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/component_config_entries.py +0 -0
  614. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/component_config_reads.py +0 -0
  615. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  616. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/component_devices.py +0 -0
  617. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/component_registries.py +0 -0
  618. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  619. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  620. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  621. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  622. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  623. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  624. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  625. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  626. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  627. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/dashboard_list_checks.py +0 -0
  628. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/device_control.py +0 -0
  629. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/entity_registration.py +0 -0
  630. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  631. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/hacs_registration.py +0 -0
  632. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/helpers.py +0 -0
  633. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  634. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/log_common.py +0 -0
  635. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/log_sources.py +0 -0
  636. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  637. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  638. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/radio/__init__.py +0 -0
  639. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/radio/base.py +0 -0
  640. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/radio/matter.py +0 -0
  641. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/radio/thread.py +0 -0
  642. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  643. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/radio/zwave.py +0 -0
  644. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/reference_validator.py +0 -0
  645. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/registry.py +0 -0
  646. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  647. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/scene_discovery.py +0 -0
  648. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  649. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  650. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  651. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  652. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  653. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  654. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  655. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  656. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  657. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  658. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  659. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_addons.py +0 -0
  660. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_areas.py +0 -0
  661. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  662. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  663. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  664. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_calendar.py +0 -0
  665. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_camera.py +0 -0
  666. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_categories.py +0 -0
  667. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_code.py +0 -0
  668. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  669. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  670. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  671. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  672. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  673. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  674. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_dev.py +0 -0
  675. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_energy.py +0 -0
  676. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_entities.py +0 -0
  677. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  678. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_groups.py +0 -0
  679. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_hacs.py +0 -0
  680. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_history.py +0 -0
  681. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_integrations.py +0 -0
  682. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_labels.py +0 -0
  683. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_logs.py +0 -0
  684. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_radio.py +0 -0
  685. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_registry.py +0 -0
  686. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_resources.py +0 -0
  687. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_search.py +0 -0
  688. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  689. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_service.py +0 -0
  690. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_services.py +0 -0
  691. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_system.py +0 -0
  692. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_themes.py +0 -0
  693. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_todo.py +0 -0
  694. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_traces.py +0 -0
  695. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_updates.py +0 -0
  696. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_utility.py +0 -0
  697. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  698. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  699. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  700. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/tools_zones.py +0 -0
  701. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/util_helpers.py +0 -0
  702. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/tools/validation_middleware.py +0 -0
  703. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/transforms/__init__.py +0 -0
  704. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/transforms/categorized_search.py +0 -0
  705. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/transforms/component_search.py +0 -0
  706. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  707. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/transforms/write_tool_note.py +0 -0
  708. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/transport_security.py +0 -0
  709. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/update_check.py +0 -0
  710. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/__init__.py +0 -0
  711. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/config_hash.py +0 -0
  712. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/config_write_lock.py +0 -0
  713. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  714. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/data_paths.py +0 -0
  715. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  716. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/domain_handlers.py +0 -0
  717. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/entity_membership.py +0 -0
  718. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  719. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  720. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/mcp_client_host.py +0 -0
  721. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/operation_manager.py +0 -0
  722. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/python_sandbox.py +0 -0
  723. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/registry_update_lock.py +0 -0
  724. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/skill_loader.py +0 -0
  725. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/utils/usage_logger.py +0 -0
  726. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/visibility/__init__.py +0 -0
  727. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/visibility/enforcement.py +0 -0
  728. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/visibility/model.py +0 -0
  729. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/visibility/persistence.py +0 -0
  730. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp/visibility/resolver.py +0 -0
  731. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  732. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  733. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  734. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  735. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  736. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/tests/__init__.py +0 -0
  737. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/tests/test_constants.py +0 -0
  738. {ha_mcp_dev-8.5.0.dev2797 → ha_mcp_dev-8.5.0.dev2801}/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.5.0.dev2797
3
+ Version: 8.5.0.dev2801
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.5.0.dev2797"
7
+ version = "8.5.0.dev2801"
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
@@ -1,7 +1,7 @@
1
1
  43070e2d4e532684de521b885f385d0841030efa2b1a20bafb76133a5e1379c1 LICENSE
2
2
  21859d4324326a6fb383cfd827626db2278088d4659000a8569f55262309a894 REQUIRES.txt
3
- 2a6cee2aa217292ce8ff58f8f3a98f0099b0ba6cbfce45b527abd8353fb90929 VENDORED
4
- ffd632ba9a7590a381837c71fd21f7c0bfd551b4ec3baed386a00eff89a19ff1 __init__.py
3
+ 8b4e81d4cab8dedb5288e049b552561ecd69fec834a6d5d8520cf1a2d01a4ba4 VENDORED
4
+ d6384f05e63f59d7abb2618a31e8f419a6675552ea1a7fc73a9f5b430012e0e2 __init__.py
5
5
  2ae9ce0d217923abf551b6f8bcf08e516529b9a6abab160bab5d8c9b7e245c3d _compat.py
6
6
  0fe101433a655a48e5fd1dde0c75879f3a74f9092d2b935bd71fad19bcfb77a1 _install_hints.py
7
7
  a9c59fe78564360444de04484a2b0906569fb58408be3c968be3f81a5e3015a4 _warnings.py
@@ -55,15 +55,15 @@ dc1d498f1d723a1447cb4fa358b3dcf786eb7f4e1b048c3238b28ced34c23b67 client/group.p
55
55
  0648016833612089c873938a63d69cded6336e8c8d9867e9412d4e2dac9c2f97 client/logging.py
56
56
  4014857ab79e71cd06f28afaa160f00d9c646c63a63bb99565174933497fc501 client/messages.py
57
57
  01e24f9b114fd85aacd62fb99631adedb23e5293e9e72cfc9b2680035364c7a9 client/mixins/__init__.py
58
- 91c4ffeccaa231f1912668c889293eac8650ac253f7dd806e4d22bab1cf50039 client/mixins/prompts.py
59
- f66ad0606f95376178f817cc1ba2ff78cad45cf9d35e730f503addd625068822 client/mixins/resources.py
60
- e09278749f40fe83a7aafad62d5460842fd6599ef331425bae89e73a55d78730 client/mixins/tools.py
58
+ a286df8775a6de31aa19ff6f26002a6f612a9ab36acf4e8629b52da44e406da4 client/mixins/prompts.py
59
+ 26c5c96f8ffa53ebf035667efde96418750eebeb016c6d79ab2f5f4fe087718e client/mixins/resources.py
60
+ c78ce42cd9e3496947d582c548d9852dad251407635b1f44ba2ff41ed60a0b6b client/mixins/tools.py
61
61
  e418845c0228e016596d96d1a962f2d0ccb814f7b769ee0b08e9f158de44fe89 client/oauth_callback.py
62
62
  c3a98f99610d06c9b95fd9df0f7acefacbfc4756a9f62bbd0a64df880ccd01ca client/progress.py
63
63
  5aa421cd60f10be7bdab46641ade22e90e41bf6a6226cb2d26814fb53ffcf406 client/roots.py
64
64
  d759cb6643a356a15c4537185597567349fe713beae579c48e48ed65ec35cbb0 client/sampling/__init__.py
65
65
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 client/sampling/handlers/__init__.py
66
- b5d3d0052f82f8d4d0ef053498474e403b4815b170e3522456bb4618253bdc4f client/sampling/handlers/anthropic.py
66
+ 01c00f9d12ab4db3ec98bb032b0884b186a5aa73222e30b0fb5b88fba6e66c8a client/sampling/handlers/anthropic.py
67
67
  74b2ef4eaf706dacbdbeb060ccfaf5036e7053a0db51e7367fd2450ce892b3f5 client/sampling/handlers/google_genai.py
68
68
  a41ee550a4a16f8965afe7eb9e5afc4fb94e1683afab9777857dfb1917e0ab7a client/sampling/handlers/openai.py
69
69
  dd343adbd063873c835400ae2c30dcfd451acf2712c347244bca63c0d7e1ae51 client/telemetry.py
@@ -93,7 +93,7 @@ d7ec0ff66e333e21df80829ddd5a1ad9dddd955b2b8456f199e08c732ca1ea77 contrib/mcp_mi
93
93
  65d2365c668228499112fdf649f35e93f7af4dc652cd08012c67ea6abb55d46a exceptions.py
94
94
  e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 experimental/__init__.py
95
95
  01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b experimental/transforms/__init__.py
96
- 4461ed050c5ffd35606e53657937b77402c550e3c9039c168f1d8dcb97680dd7 experimental/transforms/code_mode.py
96
+ 15e2f6aa9dc2051af34bb5d0470adc8ec45f402a50706ff7fe950c2f2dc5184f experimental/transforms/code_mode.py
97
97
  a08727048d5bdc6f513fd4161f1a53ae1ffbcf387cc62b6319317946814cd4c5 mcp_config.py
98
98
  353a26dc9d40c4e682ebc1411838ee0920a759ced021d264057b86c0335f1a24 prompts/__init__.py
99
99
  abddba9c78219818445f1147c21476544c55e3b994d80e8e647ea7072421f2b1 prompts/base.py
@@ -117,7 +117,7 @@ e52df6b15b5b66edad8e11c71bf32d8f9cacba628a1d7a9ed97e440f6a491296 server/auth/ha
117
117
  482e01b4ecc8af2714eb1bc50cc7afa0bdbadab1e583171cb9aa70fa2b270af0 server/auth/oauth_proxy/__init__.py
118
118
  5f490615f239c44e861b7860fbdabc02e4a768587e9e77259b7695b2628576d3 server/auth/oauth_proxy/consent.py
119
119
  66c2b86e445bb5e930eae7ec7c495a20e752ceec57af059fd96de66ebf2fcce0 server/auth/oauth_proxy/models.py
120
- 49915a4be389f7294a77c9b5f05ce0c4d398b52373f32e5e910284b04eb7aa7c server/auth/oauth_proxy/proxy.py
120
+ 59fdac16c65da5bacd0994f92d1e3f23dc39253d984ef16d5cc5c01a1b48380a server/auth/oauth_proxy/proxy.py
121
121
  c20a999e75dbfbd5801ccf0172127b316f8bca1807fb3ca282cadcdc0a37295e server/auth/oauth_proxy/ui.py
122
122
  a7dfed182cd72300a09136f500738cafd81960807b474fd184143a24fa0898d9 server/auth/oauth_proxy/upstream.py
123
123
  b44d5db31e3f760b18d97a363027d2777ec0c7ee982339eb2f5d507894bc121e server/auth/oidc_proxy.py
@@ -151,7 +151,7 @@ df16f6cf532f38b87318d06d7c0f97717699614ada54fcfb53701d5281ed6cc5 server/auth/pr
151
151
  e0497cf65d8a93849bf2873b94e18abaff2d8a9a879d24db9af22d52548bb696 server/event_store.py
152
152
  29bc8c6a594ec12a859fcf54658bedc59e7e3a507e861b3a79a72ca5d2fdb83c server/extensions.py
153
153
  bc157f88e7854f970ba57108745eeb72c04a95fc593a102b6c8a54f5c01e8998 server/http.py
154
- b0c121ea761671766b8a12fa88bdeb10e30bbce0682f9c17556ebac0afdf72f8 server/lifespan.py
154
+ c939ec1886308f99257b07aaa73a4781565d5d3e170fc13b0d8b36f4735a4fda server/lifespan.py
155
155
  9ad85391f6cdd905a7168a579afdf423bf9600d5067b09123ac201295e6c1126 server/low_level.py
156
156
  dc669c15efc3c6bdeb531a6267860c141bb86d64e49c0ee586805c4866bd0c01 server/middleware/__init__.py
157
157
  172f87828b7aa58bcf31e377c149c9fbc05bf6aba377e8e92a8d4757ebda5bf0 server/middleware/authorization.py
@@ -181,7 +181,7 @@ cd022ac9e2a9846c76ed95be96b136f36a1d4a9edcde1b73e62062ba43622556 server/provide
181
181
  101c860292375904bb89f3f8e4590eb9537f232f4aab4e207ac96f9bad229241 server/providers/local_provider/decorators/prompts.py
182
182
  18300b436f36bb796a530e9b3f077c5aaccb5e9eef00a00e9e618321160d8db4 server/providers/local_provider/decorators/resources.py
183
183
  793779ff2289d4281e9bca891ffb09e397445e314d0dc9c7640ec817fb999814 server/providers/local_provider/decorators/tools.py
184
- 1490e1521191d3017ed16893a50b4b63a271b7be45f7bc4138639dadc4bd3bf7 server/providers/local_provider/local_provider.py
184
+ 0a16d7a534974141054d6cb962e7ed7907390191bf40c9f00a68bb43d6b01205 server/providers/local_provider/local_provider.py
185
185
  11c75b6557ce98f4855c76aa0d7740df71e704d05fda8435d92f89aee4a5623e server/providers/openapi/README.md
186
186
  9e4dd35d653c9363b7c7679b38ca3f653b53a359065507046bce94db5dfe4bd5 server/providers/openapi/__init__.py
187
187
  3eedd623727b69f35c701c7f20e5ea499eee0ed43353310a33425cb32ff04798 server/providers/openapi/components.py
@@ -191,13 +191,13 @@ b00f94d08ce939d3aca4fb4e9d77d34633570e505640bd7c0a3a4cfb27030b05 server/provide
191
191
  59455808dce7fb5c90fa043ca0a1cbe7d911658f79efe92771dcc1b1109c3789 server/providers/prefab_synthesis.py
192
192
  9a73913afb1857025d489d1e7c3521058248c67ad7fa4835bf185db0f855dc46 server/providers/proxy.py
193
193
  6bb7641e4c222ff359a38f9617987cc64a8c3eaf04118346b1e96f8b336bc9da server/providers/skills/__init__.py
194
- b075279c08c947a3edd568e5a71f8972ca42fac2135560961182f2b506e0c34c server/providers/skills/_common.py
194
+ 8845d0ceb5a62372ea24f338522998282552941c29801810448444edf85b513d server/providers/skills/_common.py
195
195
  ce1a7b8a0adece4168f039721d3c0d196da79ae6d8d2b7835ef13733f6c510ab server/providers/skills/claude_provider.py
196
196
  571e579ffa410d5a932dc7afeeb76717171ac927450ecd408ca7b2c99e7c5150 server/providers/skills/directory_provider.py
197
197
  a427c8444b114edb0a6bf40541dd0a3c53b8adfb59ad292a3eb785711825e145 server/providers/skills/skill_provider.py
198
198
  b759c2e9f832ff7b27a9d4347a12851e235d59f7cfa0360aba5efd57377a4adb server/providers/skills/vendor_providers.py
199
199
  59802937576af905a862e1768df1677ad07a47288b5cb31b75cca6f1090b6472 server/providers/wrapped_provider.py
200
- 5d39de351465012b204d542579cd101fde574250551ebff34e3280b61dfc280c server/server.py
200
+ 68d9404589d657563aa8a67211819c6d44ee846991a3f417d08f0f3947392865 server/server.py
201
201
  a50d0db0003d63db49a3ec62b18dc75e267d6e03b7165f11f02992316be4e160 server/session_scoped_event_store.py
202
202
  a172b6697b515083db1d9f2466d8c88659d37427ece0d292c26d1646c1e72e2f server/sessions.py
203
203
  24b63d7adc0e3e7ebb5528924d9cf2e5789faad798bd39175690c8dca0742ac4 server/telemetry.py
@@ -218,7 +218,7 @@ d66e0f39358b3d410906d0c5fb6b5b09c908ebd2bb8da61130a0a6a89dafa428 settings.py
218
218
  fd1992e098123e61b8e2697dae56bc3d6311ea118c9dbdbac0197d7ad274b126 tools/__init__.py
219
219
  2fceb041133d3d9d38b172f9d87650a6a5c9a856c11a8f0c29c35a682c1a7232 tools/base.py
220
220
  d750e73263d2cd1b1fa184476d5256086858e7495ace3f26b32048eaeae39663 tools/function_parsing.py
221
- 8805444d42bbd6b6746a7054314fa98112b19f6cd37aa224f1ebbc252159ed4c tools/function_tool.py
221
+ eb1f8951c3695227a91c32a9a3f52f7f68aaa1572b3ec22843b9e199774cdeaf tools/function_tool.py
222
222
  9e7fbcfde19d838b70cf25db2cc9ffa757cc69253ff245a3d578b683db3634f5 tools/tool_transform.py
223
223
  114f6988d2f7f28911d20afa9792106f76b723e8f4f8c09625e2310b7db438a3 types.py
224
224
  fa2989f12fab5e66d73167836a695d3fe7470ea00f83fc3098f573f8b357d781 utilities/__init__.py
@@ -249,20 +249,20 @@ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 utilities/mcp_
249
249
  99526bda0a6c8523eecb550bed72a03f815e379bca1ecaa870122a5af8e9a0ad utilities/mime.py
250
250
  6890003fe8e02d81f2c1fe4ed7866e50ebfff06b699d7308724ceaa9f413f701 utilities/openapi/README.md
251
251
  c833f7723b65b8bf55695ab67261860ce5b21532dc6d6a3c6e887cc12e35ab83 utilities/openapi/__init__.py
252
- 65a15c422a085e95e8f485bee3e2cdac8843bc32468d7716514fadb2dfd9a14f utilities/openapi/director.py
252
+ 3015f816ee852d420df12d380d8b558d6e1635c12f110a210d144ce04a1b1f22 utilities/openapi/director.py
253
253
  9eb89249d9644ba337379bbbc8140060ea6a5b642be1961d7cb214eed0cca404 utilities/openapi/formatters.py
254
254
  8521f1f6091a8cef4154db5342c017fafaf48876869153380b86f7eb741ffa8b utilities/openapi/json_schema_converter.py
255
- 7512abae329c45ecf9a8c24720fc40589f947d9f9e81cff5b7a8932e82a75d77 utilities/openapi/models.py
256
- 57052f479cf7f68d959683bd54a6f31c39859d95e9315261bc70f503bb22ae67 utilities/openapi/parser.py
257
- d8101ea69d2bbde61d696bc8bc26c85beee540e73e21835fde64476dc8ae5b2a utilities/openapi/schemas.py
258
- 5c576526e95b7b13235ec9dd8cb250d4d8c7eaa9d90cb71e3021e4fa9101d2cd utilities/pagination.py
255
+ 6d833c04a3bc731a66258221e5f15826a41e265e9c80898218ae226e29f4d612 utilities/openapi/models.py
256
+ 2e58bc03dd82687ef7a843474eb65c1f644eafe2c039eb0949a61cce8b313de9 utilities/openapi/parser.py
257
+ 1db004cc712839ebdb920e7017776c743e8cd3a3e999b7fe13132d68da4a099c utilities/openapi/schemas.py
258
+ 9db69a1b408230d652ec39d89867449d504491aeda59fbc7285a14210575b7e3 utilities/pagination.py
259
259
  634850f693e36fc0e5c877581bdb7e990bfd7541676288170c6a1d1713755d46 utilities/prefab.py
260
260
  3db58fb4f30afb73083baeb8d94c9a23d9875980f091c19592b9eff89588764c utilities/skills.py
261
261
  66a0085646c22d1ff49b89cb218813e5b88eebf12f868423a1eab4f1a0389b98 utilities/tasks.py
262
262
  63e6d25c67609e194c5e940602ccf0562ac1617ab33e6f5b5b05a55bfca9c31c utilities/tests.py
263
263
  6e158212fb4a31e14b309c7c65aefee8861ac62f8edb2ee06ba359e37df92c37 utilities/timeout.py
264
264
  0b105f303612c242d5be4569b185a3e9780b9749f693ba5392ebad223b5aa0d6 utilities/token_cache.py
265
- fe36c39ffdc8368ab586bf00109470dec5c57baa07cb7440907a3c98e929cc12 utilities/types.py
265
+ a1ac7acb1d21720d6e2dc9094558d3ada8a50f8580154c2bf102154c62a29d5f utilities/types.py
266
266
  81c9e16bb563e31101c5dad2f3711994aa4dff8dc0433720899144be44eacea8 utilities/ui.py
267
267
  3ec3a6eeda40bce166793f27a109c8f132b29b4125f781cfc2de220c22568b6a utilities/version_check.py
268
- eb2562903a218bd86976325796d4dc29d78a619535afdf0507866b3359863354 utilities/versions.py
268
+ 5e19b700a340ef7fd8974571de2aa190ef1acfc609547aaa1729704bfc241ae2 utilities/versions.py
@@ -1,2 +1,2 @@
1
- fastmcp-slim==4.0.3
1
+ fastmcp-slim==4.0.5
2
2
  Vendored by scripts/vendor_fastmcp.py — do not edit by hand.
@@ -32,7 +32,7 @@ from ha_mcp._vendor.fastmcp import _compat
32
32
 
33
33
  _compat.install()
34
34
 
35
- __version__ = "4.0.3"
35
+ __version__ = "4.0.5"
36
36
 
37
37
  if settings.deprecation_warnings:
38
38
  warnings.simplefilter("default", FastMCPDeprecationWarning)
@@ -96,7 +96,7 @@ class ClientPromptsMixin:
96
96
  for _ in range(max_pages):
97
97
  result = await self.list_prompts_mcp(cursor=cursor)
98
98
  all_prompts.extend(result.prompts)
99
- if not result.next_cursor:
99
+ if result.next_cursor is None:
100
100
  break
101
101
  if result.next_cursor in seen_cursors:
102
102
  logger.warning(
@@ -96,7 +96,7 @@ class ClientResourcesMixin:
96
96
  for _ in range(max_pages):
97
97
  result = await self.list_resources_mcp(cursor=cursor)
98
98
  all_resources.extend(result.resources)
99
- if not result.next_cursor:
99
+ if result.next_cursor is None:
100
100
  break
101
101
  if result.next_cursor in seen_cursors:
102
102
  logger.warning(
@@ -191,7 +191,7 @@ class ClientResourcesMixin:
191
191
  for _ in range(max_pages):
192
192
  result = await self.list_resource_templates_mcp(cursor=cursor)
193
193
  all_templates.extend(result.resource_templates)
194
- if not result.next_cursor:
194
+ if result.next_cursor is None:
195
195
  break
196
196
  if result.next_cursor in seen_cursors:
197
197
  logger.warning(
@@ -121,7 +121,7 @@ class ClientToolsMixin:
121
121
  for _ in range(max_pages):
122
122
  result = await self.list_tools_mcp(cursor=cursor, cache_mode=cache_mode)
123
123
  all_tools.extend(result.tools)
124
- if not result.next_cursor:
124
+ if result.next_cursor is None:
125
125
  break
126
126
  if result.next_cursor in seen_cursors:
127
127
  logger.warning(
@@ -135,7 +135,7 @@ class AnthropicSamplingHandler:
135
135
  if params.system_prompt is not None:
136
136
  kwargs["system"] = params.system_prompt
137
137
  if params.temperature is not None:
138
- kwargs["temperature"] = params.temperature
138
+ kwargs["extra_body"] = {"temperature": params.temperature}
139
139
  if params.stop_sequences is not None:
140
140
  kwargs["stop_sequences"] = params.stop_sequences
141
141
  if anthropic_tools is not None:
@@ -108,8 +108,8 @@ _DEFAULT_LIMITS: "ResourceLimits" = {
108
108
  "max_memory": 100_000_000, # 100 MB
109
109
  }
110
110
  """Baseline limits applied when ``MontySandboxProvider`` is constructed
111
- without an explicit ``limits`` argument. Pass ``limits=None`` to opt out
112
- entirely, or a dict to override."""
111
+ without an explicit ``limits`` argument. Pass ``limits=None`` to disable
112
+ configurable time, memory, and GC limits, or a dict to override."""
113
113
 
114
114
 
115
115
  class MontySandboxProvider:
@@ -117,16 +117,19 @@ class MontySandboxProvider:
117
117
 
118
118
  Args:
119
119
  limits: Resource limits for sandbox execution. Supported keys:
120
- ``max_duration_secs`` (float), ``max_allocations`` (int),
121
- ``max_memory`` (int), ``max_recursion_depth`` (int),
122
- ``gc_interval`` (int). All are optional; omit a key to
123
- leave that limit uncapped.
120
+ `max_duration_secs` (float), `max_memory` (int),
121
+ `max_recursion_depth` (int), and `gc_interval` (int).
122
+ Time, memory, and GC limits are optional; omit a key to disable
123
+ it. Recursion depth defaults to Monty's standard maximum of 1,000.
124
+ Unsupported keys raise `ValueError` rather than being silently
125
+ ignored.
124
126
 
125
127
  When the argument is omitted entirely, a conservative baseline
126
128
  is applied (``max_duration_secs=30``, ``max_memory=100 MB``) so
127
129
  the out-of-box configuration is not unbounded. Pass
128
- ``limits=None`` to explicitly run without any limits, or a dict
129
- to set your own.
130
+ ``limits=None`` to disable configurable time, memory, and GC
131
+ limits, or a dict to set your own. Monty's standard recursion
132
+ limit still applies.
130
133
  """
131
134
 
132
135
  def __init__(
@@ -156,6 +159,17 @@ class MontySandboxProvider:
156
159
  "Install it with `fastmcp[code-mode]` or pass a custom SandboxProvider."
157
160
  ) from exc
158
161
 
162
+ if self.limits is not None:
163
+ supported_limits = pydantic_monty.ResourceLimits.__annotations__.keys()
164
+ unsupported_limits = self.limits.keys() - supported_limits
165
+ if unsupported_limits:
166
+ unsupported = ", ".join(repr(key) for key in sorted(unsupported_limits))
167
+ supported = ", ".join(sorted(supported_limits))
168
+ raise ValueError(
169
+ f"Unsupported Monty resource limits: {unsupported}. "
170
+ f"Supported limits: {supported}."
171
+ )
172
+
159
173
  # Monty currently leaves Python callbacks running when a sandbox exits:
160
174
  # https://github.com/pydantic/monty/issues/821
161
175
  # Keep their tasks alive and join them before leaving this execution.
@@ -184,10 +198,10 @@ class MontySandboxProvider:
184
198
  key: track(value) for key, value in (external_functions or {}).items()
185
199
  }
186
200
 
187
- monty = pydantic_monty.Monty(code, inputs=list(inputs))
188
201
  future = asyncio.ensure_future(
189
202
  self._run_monty(
190
- monty,
203
+ pydantic_monty,
204
+ code=code,
191
205
  inputs=inputs or None,
192
206
  external_functions=async_functions or None,
193
207
  )
@@ -195,10 +209,10 @@ class MontySandboxProvider:
195
209
  try:
196
210
  return await future
197
211
  except asyncio.CancelledError:
198
- # Awaiting alone does not stop the native sandbox thread when the
212
+ # Awaiting alone does not stop the sandbox worker when the
199
213
  # surrounding task is cancelled (e.g. an HTTP client disconnects
200
214
  # mid-execution). Explicitly cancel so the Monty runtime tears the
201
- # thread down instead of leaving it running to completion.
215
+ # worker down instead of leaving it running to completion.
202
216
  future.cancel()
203
217
  raise
204
218
  finally:
@@ -210,23 +224,28 @@ class MontySandboxProvider:
210
224
  with anyio.CancelScope(shield=True):
211
225
  await asyncio.gather(*tasks, return_exceptions=True)
212
226
 
213
- def _run_monty(
227
+ async def _run_monty(
214
228
  self,
215
- monty: Any,
229
+ pydantic_monty: Any,
216
230
  *,
231
+ code: str,
217
232
  inputs: dict[str, Any] | None,
218
233
  external_functions: dict[str, Callable[..., Any]] | None,
219
234
  ) -> Any:
220
- """Launch the sandbox and return its awaitable.
235
+ """Run code in an isolated sandbox session.
221
236
 
222
237
  Isolated so the cancellation handling in `run()` can be exercised
223
238
  without a live `pydantic-monty` runtime.
224
239
  """
225
- return monty.run_async(
226
- inputs=inputs,
227
- external_functions=external_functions,
228
- limits=self.limits,
229
- )
240
+ async with (
241
+ pydantic_monty.AsyncMonty() as pool,
242
+ pool.checkout(limits=self.limits) as session,
243
+ ):
244
+ return await session.feed_run(
245
+ code,
246
+ inputs=inputs,
247
+ external_lookup=external_functions,
248
+ )
230
249
 
231
250
 
232
251
  # ---------------------------------------------------------------------------
@@ -1313,6 +1313,15 @@ class OAuthProxy(OAuthProvider, ConsentMixin):
1313
1313
  # Get stored upstream tokens
1314
1314
  idp_tokens = code_model.idp_tokens
1315
1315
 
1316
+ # A non-positive lifetime means the upstream access token is already
1317
+ # unusable. Reject it as an OAuth error before consuming our one-time
1318
+ # authorization code instead of passing an invalid TTL to storage.
1319
+ if "expires_in" in idp_tokens and int(idp_tokens["expires_in"]) <= 0:
1320
+ raise TokenError(
1321
+ "invalid_grant",
1322
+ "Upstream access token has a non-positive expires_in",
1323
+ )
1324
+
1316
1325
  # Use IdP-granted scopes when available (RFC 6749 §5.1: the IdP MUST
1317
1326
  # include a scope parameter when the granted scope differs from the
1318
1327
  # requested scope). Fall back to requested scopes only when the IdP
@@ -1820,6 +1829,14 @@ class OAuthProxy(OAuthProvider, ConsentMixin):
1820
1829
  logger.error("Upstream token refresh failed: %s", e)
1821
1830
  raise TokenError("invalid_grant", f"Upstream refresh failed: {e}") from e
1822
1831
 
1832
+ # A refresh response with a non-positive lifetime is equally unusable.
1833
+ # Reject it before mutating stored upstream state or rotating JTI mappings.
1834
+ if "expires_in" in token_response and int(token_response["expires_in"]) <= 0:
1835
+ raise TokenError(
1836
+ "invalid_grant",
1837
+ "Upstream access token has a non-positive expires_in",
1838
+ )
1839
+
1823
1840
  # Update stored upstream token
1824
1841
  # In refresh flow, we know there's a refresh token, so default to 1 hour
1825
1842
  # (user override still applies if set)
@@ -2157,6 +2174,12 @@ class OAuthProxy(OAuthProvider, ConsentMixin):
2157
2174
  # swap for. Return directly from the verified claims, unless the
2158
2175
  # token was revoked (tracked by jti until natural expiry).
2159
2176
  if payload.get("fastmcp_grant") == _ID_JAG_GRANT_MARKER:
2177
+ if self._identity_assertion is None:
2178
+ logger.warning(
2179
+ "Rejected ID-JAG token: identity assertion is not configured (jti=%s)",
2180
+ jti[:16],
2181
+ )
2182
+ return None
2160
2183
  if jti in self._revoked_id_jag_jtis:
2161
2184
  logger.info("Rejected revoked ID-JAG access token jti=%s", jti[:16])
2162
2185
  return None
@@ -44,9 +44,9 @@ To compose with existing `@asynccontextmanager` lifespans, wrap them explicitly:
44
44
 
45
45
  from __future__ import annotations
46
46
 
47
- from collections.abc import AsyncIterator, Callable
47
+ from collections.abc import AsyncGenerator, AsyncIterator, Callable
48
48
  from contextlib import AbstractAsyncContextManager, asynccontextmanager
49
- from typing import TYPE_CHECKING, Any
49
+ from typing import TYPE_CHECKING, Any, cast
50
50
 
51
51
  if TYPE_CHECKING:
52
52
  from ha_mcp._vendor.fastmcp.server.server import FastMCP
@@ -84,7 +84,11 @@ class Lifespan:
84
84
  Yields:
85
85
  The lifespan context dict.
86
86
  """
87
- async with asynccontextmanager(self._fn)(server) as result:
87
+ generator_fn = cast(
88
+ Callable[["FastMCP[Any]"], AsyncGenerator[dict[str, Any] | None]],
89
+ self._fn,
90
+ )
91
+ async with asynccontextmanager(generator_fn)(server) as result:
88
92
  yield result if result is not None else {}
89
93
 
90
94
  def __or__(self, other: Lifespan) -> ComposedLifespan:
@@ -453,7 +453,31 @@ class LocalProvider(
453
453
  This includes both FunctionTool/Resource/Prompt instances created via
454
454
  decorators and custom Tool/Resource/Prompt subclasses.
455
455
  """
456
- return [c for c in self._components.values() if c.task_config.supports_tasks()]
456
+ components = list(self._components.values())
457
+
458
+ # Separate by component type for transform application
459
+ tools = [c for c in components if isinstance(c, Tool)]
460
+ resources = [c for c in components if isinstance(c, Resource)]
461
+ templates = [c for c in components if isinstance(c, ResourceTemplate)]
462
+ prompts = [c for c in components if isinstance(c, Prompt)]
463
+
464
+ # Apply this provider's transforms sequentially
465
+ for transform in self.transforms:
466
+ tools = await transform.list_tools(tools)
467
+ resources = await transform.list_resources(resources)
468
+ templates = await transform.list_resource_templates(templates)
469
+ prompts = await transform.list_prompts(prompts)
470
+
471
+ return [
472
+ c
473
+ for c in [
474
+ *tools,
475
+ *resources,
476
+ *templates,
477
+ *prompts,
478
+ ]
479
+ if c.task_config.supports_tasks()
480
+ ]
457
481
 
458
482
  # =========================================================================
459
483
  # Decorator methods
@@ -8,6 +8,8 @@ from dataclasses import dataclass, field
8
8
  from pathlib import Path
9
9
  from typing import Any
10
10
 
11
+ import yaml
12
+
11
13
 
12
14
  @dataclass
13
15
  class SkillFileInfo:
@@ -30,14 +32,61 @@ class SkillInfo:
30
32
  frontmatter: dict[str, Any] = field(default_factory=dict)
31
33
 
32
34
 
35
+ def _parse_frontmatter_line_based(frontmatter_text: str) -> dict[str, Any]:
36
+ """Legacy line-based frontmatter parser (key: value only).
37
+
38
+ Used as a fallback when full YAML parsing fails so plain scalar keys
39
+ (including values that contain `: `) are not discarded entirely.
40
+ Multiline YAML block scalars (`|` / `>`) are not supported here —
41
+ those require a successful `yaml.safe_load`.
42
+ """
43
+ frontmatter: dict[str, Any] = {}
44
+ for line in frontmatter_text.strip().split("\n"):
45
+ if ":" not in line:
46
+ continue
47
+ key, _, value = line.partition(":")
48
+ key = key.strip()
49
+ value = value.strip()
50
+
51
+ # Handle quoted strings
52
+ if (value.startswith('"') and value.endswith('"')) or (
53
+ value.startswith("'") and value.endswith("'")
54
+ ):
55
+ value = value[1:-1]
56
+
57
+ # Handle lists [a, b, c]
58
+ if value.startswith("[") and value.endswith("]"):
59
+ items = value[1:-1].split(",")
60
+ value = [item.strip().strip("\"'") for item in items if item.strip()]
61
+
62
+ frontmatter[key] = value
63
+ return frontmatter
64
+
65
+
33
66
  def parse_frontmatter(content: str) -> tuple[dict[str, Any], str]:
34
67
  """Parse YAML frontmatter from markdown content.
35
68
 
69
+ Uses `yaml.BaseLoader` so multiline block scalars (`|` / `>`) work while
70
+ every scalar value is returned as a plain string. `SkillInfo.frontmatter`
71
+ is a public mapping; letting a full loader (e.g. `safe_load`) apply
72
+ implicit scalar typing would silently turn `version: 1.10` into the float
73
+ `1.1`, `enabled: yes` into `True`, or a date-like value into
74
+ `datetime.date` for every skill author, which is a backwards-incompatible
75
+ surprise rather than an internal detail. `BaseLoader` has no such
76
+ constructors, so values round-trip as written. If YAML parsing fails
77
+ (invalid YAML, recursion limit, etc.), falls back to a line-based
78
+ key:value parser so plain frontmatter is not discarded.
79
+
36
80
  Args:
37
81
  content: Markdown content potentially starting with ---
38
82
 
39
83
  Returns:
40
- Tuple of (frontmatter dict, remaining content)
84
+ Tuple of (frontmatter dict, remaining content). If no frontmatter
85
+ block is found at all (no opening/closing `---` delimiters),
86
+ returns `({}, content)` unchanged. If a delimited block is found
87
+ but is empty or does not parse to a YAML mapping (and the line-based
88
+ fallback also yields nothing), returns `({}, remaining)` with the
89
+ delimited block stripped.
41
90
  """
42
91
  content = content.removeprefix("\ufeff")
43
92
 
@@ -52,28 +101,16 @@ def parse_frontmatter(content: str) -> tuple[dict[str, Any], str]:
52
101
  frontmatter_text = content[3 : 3 + end_match.start()]
53
102
  remaining = content[3 + end_match.end() :]
54
103
 
55
- # Parse YAML (simple key: value parsing, no complex types)
56
- frontmatter: dict[str, Any] = {}
57
- for line in frontmatter_text.strip().split("\n"):
58
- if ":" in line:
59
- key, _, value = line.partition(":")
60
- key = key.strip()
61
- value = value.strip()
62
-
63
- # Handle quoted strings
64
- if (value.startswith('"') and value.endswith('"')) or (
65
- value.startswith("'") and value.endswith("'")
66
- ):
67
- value = value[1:-1]
68
-
69
- # Handle lists [a, b, c]
70
- if value.startswith("[") and value.endswith("]"):
71
- items = value[1:-1].split(",")
72
- value = [item.strip().strip("\"'") for item in items if item.strip()]
104
+ try:
105
+ parsed = yaml.load(frontmatter_text, Loader=yaml.BaseLoader)
106
+ except (yaml.YAMLError, RecursionError):
107
+ # Prefer partial recovery over discarding every key (issue #4416 review).
108
+ return _parse_frontmatter_line_based(frontmatter_text), remaining
73
109
 
74
- frontmatter[key] = value
110
+ if not isinstance(parsed, dict):
111
+ return {}, remaining
75
112
 
76
- return frontmatter, remaining
113
+ return parsed, remaining
77
114
 
78
115
 
79
116
  def compute_file_hash(path: Path) -> str:
@@ -16,7 +16,16 @@ from contextlib import (
16
16
  )
17
17
  from functools import partial
18
18
  from pathlib import Path
19
- from typing import TYPE_CHECKING, Any, Generic, Literal, TypeVar, cast, overload
19
+ from typing import (
20
+ TYPE_CHECKING,
21
+ Any,
22
+ Generic,
23
+ Literal,
24
+ TypeVar,
25
+ cast,
26
+ get_args,
27
+ overload,
28
+ )
20
29
 
21
30
  import httpx2
22
31
  from ha_mcp._vendor import mcp_types
@@ -31,6 +40,7 @@ from ha_mcp._vendor.mcp_types import (
31
40
  from ha_mcp._vendor.mcp_types.jsonrpc import MISSING_REQUIRED_CLIENT_CAPABILITY
32
41
  from pydantic import AnyUrl
33
42
  from pydantic import ValidationError as PydanticValidationError
43
+ from pydantic_core import ErrorType
34
44
  from starlette.routing import BaseRoute
35
45
  from typing_extensions import Self
36
46
 
@@ -112,6 +122,21 @@ if TYPE_CHECKING:
112
122
 
113
123
  logger = get_logger(__name__.removeprefix("ha_mcp._vendor."))
114
124
 
125
+ _BUILTIN_VALIDATION_ERROR_TYPES = frozenset(get_args(ErrorType))
126
+
127
+
128
+ def _validation_error_summary(error: PydanticValidationError) -> dict[str, Any]:
129
+ """Keep counts and built-in codes, never input-derived validation details."""
130
+ error_types = {
131
+ detail["type"]
132
+ if detail["type"] in _BUILTIN_VALIDATION_ERROR_TYPES
133
+ else "custom_error"
134
+ for detail in error.errors(
135
+ include_url=False, include_context=False, include_input=False
136
+ )
137
+ }
138
+ return {"error_count": error.error_count(), "error_types": sorted(error_types)}
139
+
115
140
 
116
141
  def _version_request_meta(
117
142
  version: VersionSpec | None,
@@ -1491,18 +1516,15 @@ class FastMCP(
1491
1516
  try:
1492
1517
  return await tool._run(arguments or {})
1493
1518
  except ValidationError as e:
1494
- # Argument-validation failure (a bad call). FunctionTool
1495
- # converts pydantic's call-validation error into fastmcp's
1496
- # ValidationError (see #4128) so it can be filtered as a
1497
- # client error. Log the underlying detail without a URL or
1498
- # traceback, matching the previous pydantic-error logging.
1499
1519
  cause = e.__cause__
1500
- detail = (
1501
- cause.errors(include_url=False)
1502
- if isinstance(cause, PydanticValidationError)
1503
- else str(e)
1504
- )
1505
- logger.warning("Invalid arguments for tool %r: %s", name, detail)
1520
+ if isinstance(cause, PydanticValidationError):
1521
+ logger.warning(
1522
+ "Invalid arguments for tool %r: %s",
1523
+ name,
1524
+ _validation_error_summary(cause),
1525
+ )
1526
+ else:
1527
+ logger.warning("Invalid arguments for tool %r", name)
1506
1528
  raise
1507
1529
  except FastMCPError as e:
1508
1530
  logger.log(
@@ -1516,7 +1538,7 @@ class FastMCP(
1516
1538
  logger.warning(
1517
1539
  "Invalid arguments for tool %r: %s",
1518
1540
  name,
1519
- e.errors(include_url=False),
1541
+ _validation_error_summary(e),
1520
1542
  )
1521
1543
  raise
1522
1544
  except Exception as e: