ha-mcp-dev 8.4.3.dev2624__tar.gz → 8.4.3.dev2627__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 (315) hide show
  1. {ha_mcp_dev-8.4.3.dev2624/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2627}/PKG-INFO +1 -1
  2. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/pyproject.toml +17 -1
  3. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/__main__.py +1 -1
  4. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/config.py +16 -0
  5. ha_mcp_dev-8.4.3.dev2627/src/ha_mcp/http_transport.py +160 -0
  6. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/server.py +1 -1
  7. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/__init__.py +0 -1
  8. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/en.json +4 -0
  9. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/settings.js +3 -0
  10. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  11. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/SOURCES.txt +1 -0
  12. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/LICENSE +0 -0
  13. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/MANIFEST.in +0 -0
  14. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/README.md +0 -0
  15. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/setup.cfg +0 -0
  16. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/__init__.py +0 -0
  17. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_pypi_marker +0 -0
  18. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_rich_compat.py +0 -0
  19. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/__init__.py +0 -0
  20. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/requirements.txt +0 -0
  21. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  22. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  23. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  24. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  25. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  26. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  27. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  28. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  29. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  30. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  31. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  32. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  33. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  34. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  35. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  36. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  37. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  38. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  39. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  40. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  41. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  42. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  43. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  44. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  45. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  46. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  47. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  48. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  49. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  50. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  51. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  52. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  53. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  54. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  55. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  56. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  57. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  58. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  59. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  60. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  61. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  62. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  63. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  64. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  65. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  66. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  67. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  68. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  69. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  70. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  71. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  72. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  73. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  74. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  75. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  76. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  77. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/_version.py +0 -0
  78. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/__init__.py +0 -0
  79. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/consent_form.py +0 -0
  80. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/oidc_compat.py +0 -0
  81. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/auth/provider.py +0 -0
  82. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/backup_manager.py +0 -0
  83. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/browser_landing.py +0 -0
  84. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/__init__.py +0 -0
  85. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/rest_client.py +0 -0
  86. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/supervisor_client.py +0 -0
  87. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/websocket_client.py +0 -0
  88. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/client/websocket_listener.py +0 -0
  89. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  90. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/capture.py +0 -0
  91. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/content.py +0 -0
  92. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/paths.py +0 -0
  93. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/provision.py +0 -0
  94. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  95. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/errors.py +0 -0
  96. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/ha_request_queue.py +0 -0
  97. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  98. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/llm_exposure.py +0 -0
  99. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/log_filters.py +0 -0
  100. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/__init__.py +0 -0
  101. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/approval_queue.py +0 -0
  102. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/editing.py +0 -0
  103. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/evaluator.py +0 -0
  104. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/handlers.py +0 -0
  105. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/middleware.py +0 -0
  106. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/model.py +0 -0
  107. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/persistence.py +0 -0
  108. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/policy/value_sources.py +0 -0
  109. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/py.typed +0 -0
  110. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/read_only.py +0 -0
  111. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/redaction.py +0 -0
  112. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/renamed_tools.py +0 -0
  113. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  114. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  115. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  116. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  117. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  118. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  119. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  120. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  121. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  122. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  123. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  124. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  125. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  126. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  127. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  128. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  129. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  130. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  131. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  132. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  133. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  134. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  135. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  136. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  137. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  138. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  139. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  140. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  141. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  142. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  143. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  144. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  145. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  146. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  147. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  148. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  149. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  150. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  151. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  152. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  153. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  154. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  155. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  156. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  157. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  158. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  159. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  160. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  161. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  162. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  163. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  164. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_theme.py +0 -0
  165. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/_tools_meta.py +0 -0
  166. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  167. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  168. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  169. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  170. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  171. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  172. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  173. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  174. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  175. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  176. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  177. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  178. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  179. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  180. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  181. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/settings.css +0 -0
  182. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/settings_ui/settings.html +0 -0
  183. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/smoke_test.py +0 -0
  184. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  185. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/strict_bps.py +0 -0
  186. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tool_dispatch.py +0 -0
  187. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/__init__.py +0 -0
  188. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/auto_backup.py +0 -0
  189. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/backup.py +0 -0
  190. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  191. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/best_practice_result.py +0 -0
  192. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  193. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/blueprint_sources.py +0 -0
  194. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  195. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/blueprint_write.py +0 -0
  196. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/bulk_selector.py +0 -0
  197. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_api.py +0 -0
  198. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_config_entries.py +0 -0
  199. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_config_reads.py +0 -0
  200. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  201. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_devices.py +0 -0
  202. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_registries.py +0 -0
  203. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  204. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow.py +0 -0
  205. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  206. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  207. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  208. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  209. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_reconfigure.py +0 -0
  210. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  211. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/dashboard_edit_errors.py +0 -0
  212. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/device_control.py +0 -0
  213. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  214. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/hacs_registration.py +0 -0
  215. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/helpers.py +0 -0
  216. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/integration_reconfigure.py +0 -0
  217. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_common.py +0 -0
  218. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_sources.py +0 -0
  219. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_sources_fault.py +0 -0
  220. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/log_sources_supervisor.py +0 -0
  221. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/__init__.py +0 -0
  222. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/base.py +0 -0
  223. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/matter.py +0 -0
  224. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/thread.py +0 -0
  225. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/zigbee.py +0 -0
  226. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/radio/zwave.py +0 -0
  227. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/reference_validator.py +0 -0
  228. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/registry.py +0 -0
  229. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/renamed_tool_middleware.py +0 -0
  230. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  231. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  232. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  233. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  234. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  235. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  236. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  237. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  238. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  239. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  240. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tool_search_hint_middleware.py +0 -0
  241. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_addons.py +0 -0
  242. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_areas.py +0 -0
  243. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_assist_pipeline.py +0 -0
  244. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  245. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  246. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_calendar.py +0 -0
  247. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_camera.py +0 -0
  248. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_categories.py +0 -0
  249. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_code.py +0 -0
  250. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  251. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  252. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  253. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  254. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  255. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_dashboard_screenshot.py +0 -0
  256. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_dev.py +0 -0
  257. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_energy.py +0 -0
  258. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_entities.py +0 -0
  259. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  260. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_groups.py +0 -0
  261. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_hacs.py +0 -0
  262. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_history.py +0 -0
  263. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_integrations.py +0 -0
  264. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_labels.py +0 -0
  265. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_logs.py +0 -0
  266. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_radio.py +0 -0
  267. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_registry.py +0 -0
  268. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_resources.py +0 -0
  269. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_search.py +0 -0
  270. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_security_policy.py +0 -0
  271. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_service.py +0 -0
  272. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_services.py +0 -0
  273. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_system.py +0 -0
  274. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_themes.py +0 -0
  275. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_todo.py +0 -0
  276. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_traces.py +0 -0
  277. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_updates.py +0 -0
  278. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_utility.py +0 -0
  279. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  280. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  281. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_yaml_read.py +0 -0
  282. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/tools_zones.py +0 -0
  283. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/util_helpers.py +0 -0
  284. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/tools/validation_middleware.py +0 -0
  285. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transforms/__init__.py +0 -0
  286. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transforms/categorized_search.py +0 -0
  287. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  288. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/transport_security.py +0 -0
  289. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/update_check.py +0 -0
  290. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/__init__.py +0 -0
  291. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/config_hash.py +0 -0
  292. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/config_write_lock.py +0 -0
  293. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  294. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/data_paths.py +0 -0
  295. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  296. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/domain_handlers.py +0 -0
  297. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/entity_membership.py +0 -0
  298. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  299. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  300. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/operation_manager.py +0 -0
  301. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/python_sandbox.py +0 -0
  302. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/skill_loader.py +0 -0
  303. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/utils/usage_logger.py +0 -0
  304. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/__init__.py +0 -0
  305. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/enforcement.py +0 -0
  306. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/model.py +0 -0
  307. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/persistence.py +0 -0
  308. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp/visibility/resolver.py +0 -0
  309. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  310. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  311. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  312. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  313. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/tests/__init__.py +0 -0
  314. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/tests/test_constants.py +0 -0
  315. {ha_mcp_dev-8.4.3.dev2624 → ha_mcp_dev-8.4.3.dev2627}/tests/test_env_manager.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2624
3
+ Version: 8.4.3.dev2627
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "8.4.3.dev2624"
7
+ version = "8.4.3.dev2627"
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
@@ -94,6 +94,14 @@ mypy_path = "src"
94
94
  # /tmp keeps the cache on Linux tmpfs — avoids the slow Windows FS in WSL2.
95
95
  # Windows-native contributors can remove this line or override with MYPY_CACHE_DIR.
96
96
  cache_dir = "/tmp/.mypy_cache"
97
+ # Vendored skills submodule: upstream's code, not ours to type-check. This is
98
+ # the exclusion that was actually failing a local run, because `mypy src/`
99
+ # recurses into the submodule when it is initialized while CI's lint job checks
100
+ # out without `submodules: true` and never sees it.
101
+ # A regex, NOT a [[tool.mypy.overrides]] module entry like the ha_mcp._vendor.*
102
+ # one below: `skills-vendor` contains a hyphen, so it has no importable module
103
+ # path for a module pattern to match. Do not "simplify" it into that block.
104
+ exclude = ['^src/ha_mcp/resources/skills-vendor/']
97
105
  warn_return_any = true
98
106
  warn_unused_configs = true
99
107
  disallow_untyped_defs = true
@@ -150,6 +158,14 @@ extend-exclude = [
150
158
  # Vendored websockets — upstream's code style, not ours. Kept in sync
151
159
  # with PATHS_IGNORE in scripts/codeql_quality_gate.py.
152
160
  "src/ha_mcp/_vendor/websockets",
161
+ # Vendored skills submodule (src/ha_mcp/resources/skills-vendor) — upstream's
162
+ # code, shipped as package data. This covers the directory-scoped commands,
163
+ # `ruff check src/ ...` in CI and the ones in CONTRIBUTING.md. It does NOT
164
+ # affect lefthook, which passes {staged_files} as explicit paths that ruff
165
+ # lints regardless of extend-exclude (force-exclude is not set), and a
166
+ # submodule's contents are never staged in the superproject anyway. Kept in
167
+ # sync with PATHS_IGNORE in scripts/codeql_quality_gate.py.
168
+ "src/ha_mcp/resources/skills-vendor",
153
169
  # HA integration manifests must be strict JSON (no trailing commas);
154
170
  # ruff 0.15+ formats .json files as JSONC and inserts trailing commas
155
171
  # which makes Python's json.load() reject the file at HA startup.
@@ -616,7 +616,7 @@ async def _run_with_shutdown(server_coro: Coroutine[Any, Any, Any]) -> None:
616
616
  shutdown_task = asyncio.create_task(_shutdown_event.wait())
617
617
 
618
618
  try:
619
- done, pending = await asyncio.wait(
619
+ done, _ = await asyncio.wait(
620
620
  [server_task, shutdown_task],
621
621
  return_when=asyncio.FIRST_COMPLETED,
622
622
  )
@@ -124,6 +124,12 @@ class Settings(BaseSettings):
124
124
  debug: bool = Field(False, alias="DEBUG")
125
125
  log_level: str = Field("INFO", alias="LOG_LEVEL")
126
126
 
127
+ # Opt-in HTTP experiments, applied at app construction (restart required).
128
+ http_transport_diagnostics: bool = Field(
129
+ False, alias="HAMCP_HTTP_TRANSPORT_DIAGNOSTICS"
130
+ )
131
+ http_json_response: bool = Field(False, alias="HAMCP_HTTP_JSON_RESPONSE")
132
+
127
133
  # MCP Server configuration
128
134
  mcp_server_name: str = Field("ha-mcp", alias="MCP_SERVER_NAME")
129
135
  mcp_server_version: str = Field(
@@ -940,6 +946,16 @@ ADVANCED_SETTINGS_FIELDS: tuple[AdvancedField, ...] = (
940
946
  AdvancedField("environment", "ENVIRONMENT", str, "diagnostics", True),
941
947
  AdvancedField("log_level", "LOG_LEVEL", str, "diagnostics", True),
942
948
  AdvancedField("debug", "DEBUG", bool, "diagnostics", True),
949
+ AdvancedField(
950
+ "http_transport_diagnostics",
951
+ "HAMCP_HTTP_TRANSPORT_DIAGNOSTICS",
952
+ bool,
953
+ "diagnostics",
954
+ True,
955
+ ),
956
+ AdvancedField(
957
+ "http_json_response", "HAMCP_HTTP_JSON_RESPONSE", bool, "diagnostics", True
958
+ ),
943
959
  # Settings UI sidecar (stdio-only). 0 (default) = first spawn picks a
944
960
  # free port and later spawns reuse it via ui.state (#2131); a value
945
961
  # pins a preferred fixed port instead (best-effort, #1587).
@@ -0,0 +1,160 @@
1
+ """Default-off HTTP diagnostics and JSON responses for HA-MCP launchers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import logging
6
+ from dataclasses import dataclass
7
+ from time import monotonic
8
+ from typing import Any
9
+ from uuid import uuid4
10
+
11
+ import fastmcp
12
+ from fastmcp import FastMCP
13
+ from fastmcp.server.http import StarletteWithLifespan
14
+ from starlette.middleware import Middleware
15
+ from starlette.types import ASGIApp, Message, Receive, Scope, Send
16
+
17
+ from .config import get_global_settings
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+
22
+ class HttpTransportFastMCP(FastMCP):
23
+ """Apply instance HTTP experiments at the shared app-construction boundary.
24
+
25
+ Both CLI HTTP launchers and existing embedded components call ``http_app``.
26
+ Keep FastMCP's arguments untouched when the options are off, including any
27
+ existing FASTMCP_JSON_RESPONSE setting. Stdio does not use this method.
28
+ """
29
+
30
+ def http_app(self, *args: Any, **kwargs: Any) -> StarletteWithLifespan:
31
+ """Build the normal app, adding only explicitly enabled experiments."""
32
+ settings = get_global_settings()
33
+ if settings.http_json_response:
34
+ # FastMCP accepts json_response as its third positional argument.
35
+ if len(args) > 2:
36
+ args = (*args[:2], True, *args[3:])
37
+ else:
38
+ kwargs["json_response"] = True
39
+ if settings.http_transport_diagnostics:
40
+ path = args[0] if args else kwargs.get("path")
41
+ existing = args[1] if len(args) > 1 else kwargs.get("middleware")
42
+ middleware = [
43
+ *(existing or []),
44
+ Middleware(
45
+ TransportDiagnostics,
46
+ path=path or fastmcp.settings.streamable_http_path,
47
+ ),
48
+ ]
49
+ if len(args) > 1:
50
+ args = (args[0], middleware, *args[2:])
51
+ else:
52
+ kwargs["middleware"] = middleware
53
+ return super().http_app(*args, **kwargs)
54
+
55
+
56
+ @dataclass
57
+ class _Transfer:
58
+ """Counters local to one HTTP request; never retain body data."""
59
+
60
+ request_bytes: int = 0
61
+ response_bytes: int = 0
62
+ request_complete: bool = False
63
+ response_complete: bool = False
64
+ disconnect: bool = False
65
+ status: int | None = None
66
+ error: str | None = None
67
+
68
+ def received(self, message: Message, trace: str) -> None:
69
+ """Count only events delivered by the underlying receive callable."""
70
+ if message["type"] == "http.request":
71
+ self.request_bytes += len(message.get("body", b""))
72
+ if not message.get("more_body", False):
73
+ self.request_complete = True
74
+ logger.info("MCP HTTP trace=%s request body complete", trace)
75
+ elif message["type"] == "http.disconnect":
76
+ self.disconnect = True
77
+
78
+ def sent(self, message: Message, trace: str, started: float) -> None:
79
+ """Record accepted events, including final-body handoff before app cleanup."""
80
+ if message["type"] == "http.response.start":
81
+ self.status = message["status"]
82
+ logger.info(
83
+ "MCP HTTP trace=%s response headers status=%s", trace, self.status
84
+ )
85
+ elif message["type"] == "http.response.body":
86
+ self.response_bytes += len(message.get("body", b""))
87
+ self.response_complete = not message.get("more_body", False)
88
+ if self.response_complete:
89
+ logger.info(
90
+ "MCP HTTP trace=%s response body complete response_bytes=%d elapsed_ms=%.1f",
91
+ trace,
92
+ self.response_bytes,
93
+ (monotonic() - started) * 1000,
94
+ )
95
+
96
+
97
+ def _declared_length(scope: Scope) -> int | None:
98
+ """Read only a bounded numeric length, never log arbitrary header text."""
99
+ for name, value in scope.get("headers", []):
100
+ if name.lower() == b"content-length":
101
+ if len(value) <= 20 and value.isdigit():
102
+ return int(value)
103
+ return None
104
+ return None
105
+
106
+
107
+ class TransportDiagnostics:
108
+ """Observe the MCP HTTP boundary without buffering or altering messages.
109
+
110
+ Completion means ASGI accepted the final body event, not that the client
111
+ received or processed it. No paths, headers, request IDs supplied by clients,
112
+ bodies or exception messages are logged. Other HTTP routes are untouched.
113
+ """
114
+
115
+ def __init__(self, app: ASGIApp, path: str) -> None:
116
+ self.app = app
117
+ self.path = path.rstrip("/")
118
+
119
+ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
120
+ if scope["type"] != "http" or scope["path"].rstrip("/") != self.path:
121
+ await self.app(scope, receive, send)
122
+ return
123
+
124
+ transfer = _Transfer()
125
+ trace = uuid4().hex[:16]
126
+ started = monotonic()
127
+ declared = _declared_length(scope)
128
+ logger.info("MCP HTTP trace=%s started declared_bytes=%s", trace, declared)
129
+
130
+ async def receive_observed() -> Message:
131
+ message = await receive()
132
+ transfer.received(message, trace)
133
+ return message
134
+
135
+ async def send_observed(message: Message) -> None:
136
+ await send(message)
137
+ transfer.sent(message, trace, started)
138
+
139
+ try:
140
+ await self.app(scope, receive_observed, send_observed)
141
+ except BaseException as exc:
142
+ # Cancellation is diagnostic too; always preserve the original exit.
143
+ transfer.error = type(exc).__name__
144
+ raise
145
+ finally:
146
+ logger.info(
147
+ "MCP HTTP trace=%s finished elapsed_ms=%.1f declared_bytes=%s "
148
+ "request_bytes=%d request_complete=%s status=%s "
149
+ "response_bytes=%d response_complete=%s disconnect=%s error=%s",
150
+ trace,
151
+ (monotonic() - started) * 1000,
152
+ declared,
153
+ transfer.request_bytes,
154
+ transfer.request_complete,
155
+ transfer.status,
156
+ transfer.response_bytes,
157
+ transfer.response_complete,
158
+ transfer.disconnect,
159
+ transfer.error,
160
+ )
@@ -14,13 +14,13 @@ from pathlib import Path
14
14
  from typing import TYPE_CHECKING, Annotated, Any, ClassVar
15
15
 
16
16
  import yaml # type: ignore[import-untyped]
17
- from fastmcp import FastMCP
18
17
  from mcp.types import Icon
19
18
  from pydantic import Field
20
19
 
21
20
  from .config import _PACKAGE_VERSION, get_global_settings
22
21
  from .errors import ErrorCode, create_error_response
23
22
  from .hacs_auto_refresh import hacs_refresh_lifespan
23
+ from .http_transport import HttpTransportFastMCP as FastMCP
24
24
  from .tools.helpers import raise_tool_error
25
25
  from .transforms import DEFAULT_PINNED_TOOLS
26
26
 
@@ -55,7 +55,6 @@ from ._persistence import (
55
55
  )
56
56
  from ._supervisor import (
57
57
  _BACKGROUND_RESTART_TASKS,
58
- _SUPERVISOR_SELF_RESTART_FLUSH_DELAY_S,
59
58
  _schedule_supervisor_self_restart,
60
59
  _supervisor_fetch_current_options,
61
60
  _supervisor_merge_and_post_options,
@@ -448,6 +448,10 @@
448
448
  "advanced.mcp_server_version.help": "Defaults to the package version. Overriding may confuse clients. Restart required.",
449
449
  "advanced.environment.label": "Environment",
450
450
  "advanced.environment.help": "development or production. Affects logging verbosity. Restart required.",
451
+ "advanced.http_transport_diagnostics.label": "HTTP transport diagnostics",
452
+ "advanced.http_transport_diagnostics.help": "Experimental. Log MCP HTTP byte counts, timing and completion at INFO level, without payloads or credentials. Does not confirm client receipt. HTTP only; restart required.",
453
+ "advanced.http_json_response.label": "JSON responses instead of streaming",
454
+ "advanced.http_json_response.help": "Experimental. Return a single JSON response instead of an SSE stream. Affects all HTTP clients on this server and disables streamed progress for these responses. HTTP only; restart required.",
451
455
  "advanced.log_level.label": "Log level",
452
456
  "advanced.log_level.help": "DEBUG/INFO/WARNING/ERROR/CRITICAL. Restart required.",
453
457
  "advanced.debug.label": "Debug mode",
@@ -3981,6 +3981,8 @@ const ADVANCED_FIELD_META = {
3981
3981
  environment: { label: "Environment", help: "'development' or 'production'. Affects logging verbosity. Restart required." },
3982
3982
  log_level: { label: "Log level", help: "DEBUG/INFO/WARNING/ERROR/CRITICAL. Set once at startup; restart required." },
3983
3983
  debug: { label: "Debug mode", help: "Verbose request logging. Logs sensitive data; do not enable in production. Restart required." },
3984
+ http_transport_diagnostics: { label: "HTTP transport diagnostics", help: "Experimental. Log MCP HTTP byte counts, timing and completion at INFO level, without payloads or credentials. Does not confirm client receipt. HTTP only; restart required." },
3985
+ http_json_response: { label: "JSON responses instead of streaming", help: "Experimental. Return a single JSON response instead of an SSE stream. Affects all HTTP clients on this server and disables streamed progress for these responses. HTTP only; restart required." },
3984
3986
  code_mode_max_duration: { label: "Code-mode max duration (s)", help: "Wall-clock budget per sandbox run. Range 1–300. Restart required." },
3985
3987
  code_mode_max_memory: { label: "Code-mode max memory (bytes)", help: "RSS cap per sandbox run. Range 1 MB–256 MB. Restart required." },
3986
3988
  code_mode_max_recursion: { label: "Code-mode max recursion", help: "Recursion-depth cap per sandbox run. Restart required." },
@@ -4002,6 +4004,7 @@ const ADVANCED_RESTART_REQUIRED = new Set([
4002
4004
  "ha_tool_concurrency",
4003
4005
  "enabled_tool_modules", "enable_websocket",
4004
4006
  "log_level", "debug",
4007
+ "http_transport_diagnostics", "http_json_response",
4005
4008
  "mcp_server_name", "mcp_server_version", "environment",
4006
4009
  // fuzzy_threshold is read once by SmartSearchTools at the
4007
4010
  // lazy-init singleton (tools/smart_search/) — changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 8.4.3.dev2624
3
+ Version: 8.4.3.dev2627
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
@@ -13,6 +13,7 @@ src/ha_mcp/config.py
13
13
  src/ha_mcp/errors.py
14
14
  src/ha_mcp/ha_request_queue.py
15
15
  src/ha_mcp/hacs_auto_refresh.py
16
+ src/ha_mcp/http_transport.py
16
17
  src/ha_mcp/llm_exposure.py
17
18
  src/ha_mcp/log_filters.py
18
19
  src/ha_mcp/py.typed