ha-mcp-dev 8.4.3.dev2652__tar.gz → 8.4.3.dev2656__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 (728) hide show
  1. {ha_mcp_dev-8.4.3.dev2652/src/ha_mcp_dev.egg-info → ha_mcp_dev-8.4.3.dev2656}/PKG-INFO +31 -3
  2. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/pyproject.toml +38 -8
  3. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/__main__.py +9 -8
  4. ha_mcp_dev-8.4.3.dev2656/src/ha_mcp/_vendor/requirements.txt +11 -0
  5. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/auth/oidc_compat.py +4 -4
  6. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/auth/provider.py +48 -31
  7. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/backup_manager.py +3 -2
  8. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/dashboard_screenshot/capture.py +2 -1
  9. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/dashboard_screenshot/content.py +2 -2
  10. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/dashboard_screenshot/paths.py +1 -1
  11. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/dashboard_screenshot/provision.py +2 -1
  12. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/errors.py +5 -0
  13. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/ha_request_queue.py +5 -1
  14. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/http_transport.py +4 -3
  15. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/llm_exposure.py +4 -4
  16. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/log_filters.py +3 -38
  17. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/handlers.py +1 -1
  18. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/middleware.py +6 -1
  19. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/read_only.py +10 -6
  20. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/redaction.py +5 -1
  21. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/server.py +7 -4
  22. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/__init__.py +1 -1
  23. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_tools_meta.py +3 -7
  24. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/smoke_test.py +4 -1
  25. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/strict_bps.py +6 -1
  26. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/auto_backup.py +1 -1
  27. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/backup.py +4 -3
  28. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/blueprint_sources.py +1 -1
  29. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/config_entry_flow.py +1 -1
  30. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/config_entry_reconfigure.py +1 -1
  31. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/dashboard_edit_errors.py +1 -1
  32. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/device_control.py +2 -2
  33. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/helpers.py +7 -3
  34. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/integration_reconfigure.py +1 -1
  35. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/log_sources.py +1 -1
  36. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/log_sources_fault.py +3 -3
  37. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/log_sources_supervisor.py +1 -1
  38. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/radio/zigbee.py +1 -1
  39. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/renamed_tool_middleware.py +5 -1
  40. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_deep.py +2 -2
  41. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tool_search_hint_middleware.py +6 -2
  42. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_addons.py +1 -1
  43. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_areas.py +3 -2
  44. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_assist_pipeline.py +3 -2
  45. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_blueprints.py +3 -2
  46. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_bug_report.py +31 -16
  47. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_calendar.py +3 -2
  48. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_camera.py +2 -2
  49. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_categories.py +3 -2
  50. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_code.py +3 -5
  51. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_config_automations.py +3 -2
  52. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_config_dashboards.py +3 -3
  53. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_config_helpers.py +3 -2
  54. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_config_scenes.py +3 -2
  55. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_config_scripts.py +3 -2
  56. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_dashboard_screenshot.py +3 -3
  57. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_dev.py +3 -2
  58. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_energy.py +3 -2
  59. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_entities.py +3 -2
  60. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_filesystem.py +3 -2
  61. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_groups.py +3 -2
  62. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_hacs.py +4 -3
  63. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_history.py +4 -3
  64. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_integrations.py +3 -2
  65. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_labels.py +3 -2
  66. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_logs.py +1 -1
  67. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_radio.py +3 -2
  68. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_registry.py +3 -2
  69. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_resources.py +3 -2
  70. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_search.py +4 -3
  71. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_security_policy.py +3 -2
  72. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_service.py +4 -3
  73. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_services.py +3 -2
  74. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_system.py +3 -2
  75. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_themes.py +3 -2
  76. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_todo.py +3 -2
  77. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_traces.py +4 -3
  78. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_updates.py +3 -2
  79. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_utility.py +1 -1
  80. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_voice_assistant.py +3 -2
  81. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_yaml_config.py +3 -2
  82. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_yaml_read.py +3 -2
  83. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/tools_zones.py +3 -2
  84. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/util_helpers.py +5 -2
  85. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/validation_middleware.py +7 -2
  86. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/transforms/categorized_search.py +34 -26
  87. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/transforms/lite_docstrings.py +4 -4
  88. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/transport_security.py +1 -4
  89. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/visibility/enforcement.py +7 -3
  90. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656/src/ha_mcp_dev.egg-info}/PKG-INFO +31 -3
  91. ha_mcp_dev-8.4.3.dev2656/src/ha_mcp_dev.egg-info/requires.txt +45 -0
  92. ha_mcp_dev-8.4.3.dev2652/src/ha_mcp/_vendor/requirements.txt +0 -8
  93. ha_mcp_dev-8.4.3.dev2652/src/ha_mcp_dev.egg-info/requires.txt +0 -9
  94. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/LICENSE +0 -0
  95. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/MANIFEST.in +0 -0
  96. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/README.md +0 -0
  97. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/setup.cfg +0 -0
  98. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/__init__.py +0 -0
  99. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_pypi_marker +0 -0
  100. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_rich_compat.py +0 -0
  101. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/__init__.py +0 -0
  102. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/LICENSE +0 -0
  103. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/MANIFEST.sha256 +0 -0
  104. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/REQUIRES.txt +0 -0
  105. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/VENDORED +0 -0
  106. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/__init__.py +0 -0
  107. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/_compat.py +0 -0
  108. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/_install_hints.py +0 -0
  109. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/_warnings.py +0 -0
  110. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/__init__.py +0 -0
  111. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/app.py +0 -0
  112. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/approval.py +0 -0
  113. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/choice.py +0 -0
  114. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/config.py +0 -0
  115. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/file_upload.py +0 -0
  116. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/form.py +0 -0
  117. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/apps/generative.py +0 -0
  118. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/__init__.py +0 -0
  119. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/__main__.py +0 -0
  120. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/apps_dev.py +0 -0
  121. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/auth.py +0 -0
  122. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/cimd.py +0 -0
  123. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/cli.py +0 -0
  124. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/client.py +0 -0
  125. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/__init__.py +0 -0
  126. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/authentication.py +0 -0
  127. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/command.py +0 -0
  128. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/configuration.py +0 -0
  129. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/credentials.py +0 -0
  130. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/horizon_client.py +0 -0
  131. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/output.py +0 -0
  132. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/deploy/state.py +0 -0
  133. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/discovery.py +0 -0
  134. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/generate.py +0 -0
  135. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/__init__.py +0 -0
  136. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_code.py +0 -0
  137. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/claude_desktop.py +0 -0
  138. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/cursor.py +0 -0
  139. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/gemini_cli.py +0 -0
  140. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/goose.py +0 -0
  141. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/mcp_json.py +0 -0
  142. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/shared.py +0 -0
  143. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/install/stdio.py +0 -0
  144. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/cli/run.py +0 -0
  145. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/__init__.py +0 -0
  146. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/_sdk_context_shim.py +0 -0
  147. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/auth/__init__.py +0 -0
  148. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/auth/bearer.py +0 -0
  149. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/auth/client_credentials.py +0 -0
  150. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/auth/oauth.py +0 -0
  151. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/caching.py +0 -0
  152. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/client.py +0 -0
  153. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/dependencies.py +0 -0
  154. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/elicitation.py +0 -0
  155. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/extension_hooks.py +0 -0
  156. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/group.py +0 -0
  157. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/logging.py +0 -0
  158. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/messages.py +0 -0
  159. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/mixins/__init__.py +0 -0
  160. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/mixins/prompts.py +0 -0
  161. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/mixins/resources.py +0 -0
  162. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/mixins/tools.py +0 -0
  163. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/oauth_callback.py +0 -0
  164. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/progress.py +0 -0
  165. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/roots.py +0 -0
  166. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/sampling/__init__.py +0 -0
  167. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/__init__.py +0 -0
  168. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/anthropic.py +0 -0
  169. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/google_genai.py +0 -0
  170. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/sampling/handlers/openai.py +0 -0
  171. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/telemetry.py +0 -0
  172. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/__init__.py +0 -0
  173. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/base.py +0 -0
  174. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/config.py +0 -0
  175. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/http.py +0 -0
  176. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/inference.py +0 -0
  177. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/memory.py +0 -0
  178. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/sse.py +0 -0
  179. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/client/transports/stdio.py +0 -0
  180. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/README.md +0 -0
  181. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/README.md +0 -0
  182. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/__init__.py +0 -0
  183. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/bulk_tool_caller.py +0 -0
  184. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/bulk_tool_caller/example.py +0 -0
  185. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/README.md +0 -0
  186. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/__init__.py +0 -0
  187. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/component_manager.py +0 -0
  188. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/component_manager/example.py +0 -0
  189. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/README.md +0 -0
  190. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/__init__.py +0 -0
  191. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/example.py +0 -0
  192. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/contrib/mcp_mixin/mcp_mixin.py +0 -0
  193. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/decorators.py +0 -0
  194. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/dependencies.py +0 -0
  195. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/exceptions.py +0 -0
  196. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/experimental/__init__.py +0 -0
  197. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/__init__.py +0 -0
  198. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/experimental/transforms/code_mode.py +0 -0
  199. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/mcp_config.py +0 -0
  200. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/prompts/__init__.py +0 -0
  201. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/prompts/base.py +0 -0
  202. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/prompts/function_prompt.py +0 -0
  203. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/py.typed +0 -0
  204. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/resources/__init__.py +0 -0
  205. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/resources/base.py +0 -0
  206. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/resources/function_resource.py +0 -0
  207. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/resources/security.py +0 -0
  208. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/resources/template.py +0 -0
  209. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/resources/types.py +0 -0
  210. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/__init__.py +0 -0
  211. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/__init__.py +0 -0
  212. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/auth.py +0 -0
  213. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/cimd.py +0 -0
  214. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/__init__.py +0 -0
  215. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/handlers/authorize.py +0 -0
  216. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/identity_assertion.py +0 -0
  217. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/jwt_issuer.py +0 -0
  218. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/middleware.py +0 -0
  219. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/__init__.py +0 -0
  220. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/consent.py +0 -0
  221. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/models.py +0 -0
  222. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/proxy.py +0 -0
  223. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/ui.py +0 -0
  224. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/oauth_proxy/upstream.py +0 -0
  225. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/oidc_proxy.py +0 -0
  226. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/__init__.py +0 -0
  227. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/auth0.py +0 -0
  228. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/aws.py +0 -0
  229. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/azure.py +0 -0
  230. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/clerk.py +0 -0
  231. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/debug.py +0 -0
  232. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/descope.py +0 -0
  233. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/discord.py +0 -0
  234. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/github.py +0 -0
  235. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/google.py +0 -0
  236. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/huggingface.py +0 -0
  237. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/in_memory.py +0 -0
  238. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/introspection.py +0 -0
  239. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/jwt.py +0 -0
  240. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/keycloak.py +0 -0
  241. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/oci.py +0 -0
  242. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/propelauth.py +0 -0
  243. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/scalekit.py +0 -0
  244. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/supabase.py +0 -0
  245. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/providers/workos.py +0 -0
  246. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/redirect_validation.py +0 -0
  247. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/auth/ssrf.py +0 -0
  248. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/caching.py +0 -0
  249. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/completions.py +0 -0
  250. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/context.py +0 -0
  251. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/dependencies.py +0 -0
  252. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/elicitation.py +0 -0
  253. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/event_store.py +0 -0
  254. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/extensions.py +0 -0
  255. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/http.py +0 -0
  256. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/lifespan.py +0 -0
  257. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/low_level.py +0 -0
  258. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/__init__.py +0 -0
  259. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/authorization.py +0 -0
  260. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/caching.py +0 -0
  261. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/dereference.py +0 -0
  262. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/error_handling.py +0 -0
  263. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/logging.py +0 -0
  264. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/middleware.py +0 -0
  265. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/ping.py +0 -0
  266. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/rate_limiting.py +0 -0
  267. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/response_limiting.py +0 -0
  268. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/timing.py +0 -0
  269. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/middleware/tool_injection.py +0 -0
  270. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/mixins/__init__.py +0 -0
  271. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/mixins/lifespan.py +0 -0
  272. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/mixins/mcp_operations.py +0 -0
  273. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/mixins/transport.py +0 -0
  274. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/__init__.py +0 -0
  275. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/addressing.py +0 -0
  276. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/aggregate.py +0 -0
  277. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/base.py +0 -0
  278. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/fastmcp_provider.py +0 -0
  279. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem.py +0 -0
  280. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/filesystem_discovery.py +0 -0
  281. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/__init__.py +0 -0
  282. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/__init__.py +0 -0
  283. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/prompts.py +0 -0
  284. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/resources.py +0 -0
  285. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/decorators/tools.py +0 -0
  286. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/local_provider/local_provider.py +0 -0
  287. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/README.md +0 -0
  288. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/__init__.py +0 -0
  289. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/components.py +0 -0
  290. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/provider.py +0 -0
  291. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/openapi/routing.py +0 -0
  292. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_payload.py +0 -0
  293. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/prefab_synthesis.py +0 -0
  294. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/proxy.py +0 -0
  295. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/__init__.py +0 -0
  296. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/_common.py +0 -0
  297. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/claude_provider.py +0 -0
  298. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/directory_provider.py +0 -0
  299. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/skill_provider.py +0 -0
  300. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/skills/vendor_providers.py +0 -0
  301. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/providers/wrapped_provider.py +0 -0
  302. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/server.py +0 -0
  303. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/session_scoped_event_store.py +0 -0
  304. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/sessions.py +0 -0
  305. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/telemetry.py +0 -0
  306. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/__init__.py +0 -0
  307. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/catalog.py +0 -0
  308. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/namespace.py +0 -0
  309. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/prompts_as_tools.py +0 -0
  310. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/resources_as_tools.py +0 -0
  311. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/__init__.py +0 -0
  312. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/base.py +0 -0
  313. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/bm25.py +0 -0
  314. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/search/regex.py +0 -0
  315. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/tool_transform.py +0 -0
  316. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/version_filter.py +0 -0
  317. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/server/transforms/visibility.py +0 -0
  318. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/settings.py +0 -0
  319. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/telemetry.py +0 -0
  320. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/tools/__init__.py +0 -0
  321. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/tools/base.py +0 -0
  322. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/tools/function_parsing.py +0 -0
  323. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/tools/function_tool.py +0 -0
  324. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/tools/tool_transform.py +0 -0
  325. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/types.py +0 -0
  326. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/__init__.py +0 -0
  327. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/asgi_transport.py +0 -0
  328. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/async_utils.py +0 -0
  329. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/auth.py +0 -0
  330. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/authorization.py +0 -0
  331. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/cli.py +0 -0
  332. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/components.py +0 -0
  333. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/docstring_parsing.py +0 -0
  334. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/exceptions.py +0 -0
  335. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/http.py +0 -0
  336. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/inspect.py +0 -0
  337. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema.py +0 -0
  338. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/json_schema_type.py +0 -0
  339. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/lifespan.py +0 -0
  340. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/logging.py +0 -0
  341. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/__init__.py +0 -0
  342. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/__init__.py +0 -0
  343. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/__init__.py +0 -0
  344. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/base.py +0 -0
  345. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/environments/uv.py +0 -0
  346. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/mcp_server_config.py +0 -0
  347. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/schema.json +0 -0
  348. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/__init__.py +0 -0
  349. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/base.py +0 -0
  350. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mcp_server_config/v1/sources/filesystem.py +0 -0
  351. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/mime.py +0 -0
  352. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/README.md +0 -0
  353. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/__init__.py +0 -0
  354. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/director.py +0 -0
  355. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/formatters.py +0 -0
  356. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/json_schema_converter.py +0 -0
  357. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/models.py +0 -0
  358. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/parser.py +0 -0
  359. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/openapi/schemas.py +0 -0
  360. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/pagination.py +0 -0
  361. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/prefab.py +0 -0
  362. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/skills.py +0 -0
  363. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/tasks.py +0 -0
  364. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/tests.py +0 -0
  365. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/timeout.py +0 -0
  366. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/token_cache.py +0 -0
  367. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/types.py +0 -0
  368. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/ui.py +0 -0
  369. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/version_check.py +0 -0
  370. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/fastmcp/utilities/versions.py +0 -0
  371. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/LICENSE +0 -0
  372. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/MANIFEST.sha256 +0 -0
  373. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/REQUIRES.txt +0 -0
  374. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/VENDORED +0 -0
  375. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/__init__.py +0 -0
  376. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/cli/__init__.py +0 -0
  377. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/cli/claude.py +0 -0
  378. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/cli/cli.py +0 -0
  379. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/__init__.py +0 -0
  380. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/__main__.py +0 -0
  381. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/_input_required.py +0 -0
  382. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/_memory.py +0 -0
  383. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/_probe.py +0 -0
  384. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/_transport.py +0 -0
  385. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/auth/__init__.py +0 -0
  386. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/auth/exceptions.py +0 -0
  387. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/auth/extensions/__init__.py +0 -0
  388. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/auth/extensions/client_credentials.py +0 -0
  389. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/auth/extensions/identity_assertion.py +0 -0
  390. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/auth/oauth2.py +0 -0
  391. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/auth/utils.py +0 -0
  392. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/caching.py +0 -0
  393. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/client.py +0 -0
  394. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/context.py +0 -0
  395. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/extension.py +0 -0
  396. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/session.py +0 -0
  397. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/session_group.py +0 -0
  398. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/sse.py +0 -0
  399. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/stdio.py +0 -0
  400. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/streamable_http.py +0 -0
  401. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/client/subscriptions.py +0 -0
  402. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/os/__init__.py +0 -0
  403. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/os/posix/__init__.py +0 -0
  404. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/os/posix/utilities.py +0 -0
  405. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/os/win32/__init__.py +0 -0
  406. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/os/win32/utilities.py +0 -0
  407. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/py.typed +0 -0
  408. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/__init__.py +0 -0
  409. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/__main__.py +0 -0
  410. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/_otel.py +0 -0
  411. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/_streamable_http_modern.py +0 -0
  412. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/apps.py +0 -0
  413. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/__init__.py +0 -0
  414. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/errors.py +0 -0
  415. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/handlers/__init__.py +0 -0
  416. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/handlers/authorize.py +0 -0
  417. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/handlers/metadata.py +0 -0
  418. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/handlers/register.py +0 -0
  419. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/handlers/revoke.py +0 -0
  420. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/handlers/token.py +0 -0
  421. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/json_response.py +0 -0
  422. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/middleware/__init__.py +0 -0
  423. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/middleware/auth_context.py +0 -0
  424. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/middleware/bearer_auth.py +0 -0
  425. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/middleware/client_auth.py +0 -0
  426. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/provider.py +0 -0
  427. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/routes.py +0 -0
  428. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/auth/settings.py +0 -0
  429. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/caching.py +0 -0
  430. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/connection.py +0 -0
  431. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/context.py +0 -0
  432. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/elicitation.py +0 -0
  433. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/extension.py +0 -0
  434. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/fastmcp.py +0 -0
  435. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/lowlevel/__init__.py +0 -0
  436. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/lowlevel/helper_types.py +0 -0
  437. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/lowlevel/server.py +0 -0
  438. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/__init__.py +0 -0
  439. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/context.py +0 -0
  440. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/exceptions.py +0 -0
  441. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/__init__.py +0 -0
  442. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/base.py +0 -0
  443. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/prompts/manager.py +0 -0
  444. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/resolve.py +0 -0
  445. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/__init__.py +0 -0
  446. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/base.py +0 -0
  447. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/resource_manager.py +0 -0
  448. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/templates.py +0 -0
  449. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/resources/types.py +0 -0
  450. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/server.py +0 -0
  451. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/__init__.py +0 -0
  452. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/base.py +0 -0
  453. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/tools/tool_manager.py +0 -0
  454. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/__init__.py +0 -0
  455. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/context_injection.py +0 -0
  456. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/func_metadata.py +0 -0
  457. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/logging.py +0 -0
  458. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/mcpserver/utilities/types.py +0 -0
  459. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/models.py +0 -0
  460. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/request_state.py +0 -0
  461. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/runner.py +0 -0
  462. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/session.py +0 -0
  463. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/sse.py +0 -0
  464. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/stdio.py +0 -0
  465. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/streamable_http.py +0 -0
  466. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/streamable_http_manager.py +0 -0
  467. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/subscriptions.py +0 -0
  468. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/transport_security.py +0 -0
  469. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/server/validation.py +0 -0
  470. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/__init__.py +0 -0
  471. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/_callable_inspection.py +0 -0
  472. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/_compat.py +0 -0
  473. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/_context_streams.py +0 -0
  474. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/_httpx_utils.py +0 -0
  475. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/_otel.py +0 -0
  476. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/_stream_protocols.py +0 -0
  477. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/auth.py +0 -0
  478. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/auth_utils.py +0 -0
  479. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/context.py +0 -0
  480. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/direct_dispatcher.py +0 -0
  481. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/dispatcher.py +0 -0
  482. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/exceptions.py +0 -0
  483. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/extension.py +0 -0
  484. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/inbound.py +0 -0
  485. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/jsonrpc_dispatcher.py +0 -0
  486. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/memory.py +0 -0
  487. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/message.py +0 -0
  488. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/metadata_utils.py +0 -0
  489. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/path_security.py +0 -0
  490. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/peer.py +0 -0
  491. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/subscriptions.py +0 -0
  492. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/tool_name_validation.py +0 -0
  493. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/transport_context.py +0 -0
  494. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/shared/uri_template.py +0 -0
  495. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/types/__init__.py +0 -0
  496. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/types/jsonrpc.py +0 -0
  497. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/types/methods.py +0 -0
  498. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp/types/version.py +0 -0
  499. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/LICENSE +0 -0
  500. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/MANIFEST.sha256 +0 -0
  501. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/REQUIRES.txt +0 -0
  502. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/VENDORED +0 -0
  503. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/__init__.py +0 -0
  504. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/_types.py +0 -0
  505. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/_v2025_11_25/__init__.py +0 -0
  506. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/_v2026_07_28/__init__.py +0 -0
  507. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/_wire_base.py +0 -0
  508. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/jsonrpc.py +0 -0
  509. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/methods.py +0 -0
  510. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/py.typed +0 -0
  511. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/mcp_types/version.py +0 -0
  512. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/LICENSE +0 -0
  513. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/MANIFEST.sha256 +0 -0
  514. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/VENDORED +0 -0
  515. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/__init__.py +0 -0
  516. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/__main__.py +0 -0
  517. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/asyncio/__init__.py +0 -0
  518. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/asyncio/client.py +0 -0
  519. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/asyncio/connection.py +0 -0
  520. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/asyncio/messages.py +0 -0
  521. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/asyncio/router.py +0 -0
  522. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/asyncio/server.py +0 -0
  523. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/auth.py +0 -0
  524. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/cli.py +0 -0
  525. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/client.py +0 -0
  526. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/connection.py +0 -0
  527. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/datastructures.py +0 -0
  528. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/exceptions.py +0 -0
  529. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/extensions/__init__.py +0 -0
  530. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/extensions/base.py +0 -0
  531. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/extensions/permessage_deflate.py +0 -0
  532. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/frames.py +0 -0
  533. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/headers.py +0 -0
  534. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/http11.py +0 -0
  535. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/imports.py +0 -0
  536. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/__init__.py +0 -0
  537. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/auth.py +0 -0
  538. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/client.py +0 -0
  539. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/exceptions.py +0 -0
  540. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/framing.py +0 -0
  541. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/handshake.py +0 -0
  542. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/http.py +0 -0
  543. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/protocol.py +0 -0
  544. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/legacy/server.py +0 -0
  545. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/protocol.py +0 -0
  546. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/proxy.py +0 -0
  547. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/py.typed +0 -0
  548. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/server.py +0 -0
  549. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/streams.py +0 -0
  550. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/sync/__init__.py +0 -0
  551. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/sync/client.py +0 -0
  552. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/sync/connection.py +0 -0
  553. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/sync/messages.py +0 -0
  554. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/sync/router.py +0 -0
  555. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/sync/server.py +0 -0
  556. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/sync/utils.py +0 -0
  557. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/trio/__init__.py +0 -0
  558. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/trio/client.py +0 -0
  559. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/trio/connection.py +0 -0
  560. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/trio/messages.py +0 -0
  561. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/trio/router.py +0 -0
  562. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/trio/server.py +0 -0
  563. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/trio/utils.py +0 -0
  564. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/typing.py +0 -0
  565. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/uri.py +0 -0
  566. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/utils.py +0 -0
  567. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_vendor/websockets/version.py +0 -0
  568. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/_version.py +0 -0
  569. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/auth/__init__.py +0 -0
  570. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/auth/consent_form.py +0 -0
  571. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/browser_landing.py +0 -0
  572. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/client/__init__.py +0 -0
  573. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/client/rest_client.py +0 -0
  574. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/client/supervisor_client.py +0 -0
  575. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/client/websocket_client.py +0 -0
  576. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/client/websocket_listener.py +0 -0
  577. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/config.py +0 -0
  578. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/dashboard_screenshot/__init__.py +0 -0
  579. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/dashboard_screenshot/theme_guard.py +0 -0
  580. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/hacs_auto_refresh.py +0 -0
  581. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/__init__.py +0 -0
  582. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/approval_queue.py +0 -0
  583. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/editing.py +0 -0
  584. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/evaluator.py +0 -0
  585. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/model.py +0 -0
  586. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/persistence.py +0 -0
  587. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/policy/value_sources.py +0 -0
  588. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/py.typed +0 -0
  589. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/renamed_tools.py +0 -0
  590. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  591. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  592. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  593. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  594. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  595. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  596. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  597. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  598. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  599. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  600. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/area-target-over-entity-list/case.yaml +0 -0
  601. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/arrive-home-automation/case.yaml +0 -0
  602. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/assist-shortcut-card/case.yaml +0 -0
  603. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/avg-temperature/case.yaml +0 -0
  604. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/backup-deletion-confirmation/case.yaml +0 -0
  605. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/blueprint-authoring/case.yaml +0 -0
  606. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/button-event-entity/case.yaml +0 -0
  607. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/device-id-trigger-migration/case.yaml +0 -0
  608. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/helper-flow-fields-not-platform-yaml/case.yaml +0 -0
  609. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/media-player-song/case.yaml +0 -0
  610. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/motion-light-automation-mode/case.yaml +0 -0
  611. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/rename-entity-impact-analysis/case.yaml +0 -0
  612. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/template-attributes-yaml-exception/case.yaml +0 -0
  613. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/timer-finished-automation/case.yaml +0 -0
  614. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/evals/vacuum-last-clean/case.yaml +0 -0
  615. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/scripts/check_eval_cases.py +0 -0
  616. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  617. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/appdaemon.md +0 -0
  618. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  619. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/backups.md +0 -0
  620. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/blueprint-guide.md +0 -0
  621. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  622. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  623. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  624. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  625. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  626. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  627. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  628. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/scenes.md +0 -0
  629. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  630. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  631. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_handlers_advanced.py +0 -0
  632. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_handlers_backups.py +0 -0
  633. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_handlers_fs.py +0 -0
  634. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_handlers_server.py +0 -0
  635. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_handlers_theme.py +0 -0
  636. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_handlers_tools.py +0 -0
  637. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_i18n.py +0 -0
  638. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_locale_policy.py +0 -0
  639. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_persistence.py +0 -0
  640. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_supervisor.py +0 -0
  641. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/_theme.py +0 -0
  642. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/README.md +0 -0
  643. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/cs.json +0 -0
  644. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/de.json +0 -0
  645. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/en.json +0 -0
  646. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/eo.json +0 -0
  647. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/es.json +0 -0
  648. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/fr.json +0 -0
  649. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/it.json +0 -0
  650. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/ko.json +0 -0
  651. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/nl.json +0 -0
  652. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/pl.json +0 -0
  653. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/ru.json +0 -0
  654. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/sv.json +0 -0
  655. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/tlh.json +0 -0
  656. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/zh-Hans.json +0 -0
  657. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/locales/zh-Hant.json +0 -0
  658. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/settings.css +0 -0
  659. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/settings.html +0 -0
  660. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/settings_ui/settings.js +0 -0
  661. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  662. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tool_dispatch.py +0 -0
  663. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/__init__.py +0 -0
  664. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  665. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/best_practice_result.py +0 -0
  666. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/best_practice_variables.py +0 -0
  667. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/blueprint_substitute.py +0 -0
  668. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/blueprint_write.py +0 -0
  669. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/bulk_selector.py +0 -0
  670. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/component_api.py +0 -0
  671. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/component_config_entries.py +0 -0
  672. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/component_config_reads.py +0 -0
  673. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/component_dashboard_edit.py +0 -0
  674. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/component_devices.py +0 -0
  675. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/component_registries.py +0 -0
  676. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/component_registry_lookup.py +0 -0
  677. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/config_entry_flow_form.py +0 -0
  678. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/config_entry_flow_menu.py +0 -0
  679. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/config_entry_flow_walker.py +0 -0
  680. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/config_entry_identity.py +0 -0
  681. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/config_entry_reload_watch.py +0 -0
  682. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/entity_registration.py +0 -0
  683. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/error_log_parsing.py +0 -0
  684. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/hacs_registration.py +0 -0
  685. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/log_common.py +0 -0
  686. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/radio/__init__.py +0 -0
  687. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/radio/base.py +0 -0
  688. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/radio/matter.py +0 -0
  689. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/radio/thread.py +0 -0
  690. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/radio/zwave.py +0 -0
  691. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/reference_validator.py +0 -0
  692. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/registry.py +0 -0
  693. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  694. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  695. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  696. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  697. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  698. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_graph.py +0 -0
  699. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  700. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  701. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  702. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/transforms/__init__.py +0 -0
  703. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/update_check.py +0 -0
  704. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/__init__.py +0 -0
  705. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/config_hash.py +0 -0
  706. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/config_write_lock.py +0 -0
  707. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/dashboard_patch.py +0 -0
  708. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/data_paths.py +0 -0
  709. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/device_registry_semantics.py +0 -0
  710. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/domain_handlers.py +0 -0
  711. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/entity_membership.py +0 -0
  712. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  713. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  714. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/operation_manager.py +0 -0
  715. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/python_sandbox.py +0 -0
  716. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/skill_loader.py +0 -0
  717. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/utils/usage_logger.py +0 -0
  718. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/visibility/__init__.py +0 -0
  719. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/visibility/model.py +0 -0
  720. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/visibility/persistence.py +0 -0
  721. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp/visibility/resolver.py +0 -0
  722. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  723. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  724. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  725. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  726. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/tests/__init__.py +0 -0
  727. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/tests/test_constants.py +0 -0
  728. {ha_mcp_dev-8.4.3.dev2652 → ha_mcp_dev-8.4.3.dev2656}/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.dev2652
3
+ Version: 8.4.3.dev2656
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
@@ -19,9 +19,37 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Requires-Python: <3.15,>=3.13
20
20
  Description-Content-Type: text/markdown
21
21
  License-File: LICENSE
22
- Requires-Dist: fastmcp==3.4.7
22
+ Requires-Dist: anyio>=4.10; python_version >= "3.14"
23
+ Requires-Dist: anyio>=4.9; python_version < "3.14"
24
+ Requires-Dist: authlib>=1.6.11
25
+ Requires-Dist: cyclopts>=4.0.0
26
+ Requires-Dist: exceptiongroup>=1.2.2
27
+ Requires-Dist: griffelib>=2.0.0
28
+ Requires-Dist: httpx2>=2.5.0
29
+ Requires-Dist: joserfc>=1.5.0
30
+ Requires-Dist: jsonref>=1.1.0
31
+ Requires-Dist: jsonschema>=4.20.0
32
+ Requires-Dist: jsonschema-path>=0.3.4
33
+ Requires-Dist: openapi-pydantic>=0.5.1
34
+ Requires-Dist: opentelemetry-api>=1.28.0
35
+ Requires-Dist: platformdirs>=4.0.0
36
+ Requires-Dist: py-key-value-aio[filetree,keyring,memory]<0.5.0,>=0.4.4
37
+ Requires-Dist: pydantic-settings>=2.0.0
38
+ Requires-Dist: pyjwt[crypto]>=2.10.1
39
+ Requires-Dist: pyperclip>=1.9.0
40
+ Requires-Dist: python-multipart>=0.0.26
41
+ Requires-Dist: pywin32>=311; sys_platform == "win32"
42
+ Requires-Dist: pyyaml<7.0,>=6.0
43
+ Requires-Dist: rich>=13.9.4
44
+ Requires-Dist: sse-starlette>=3.0.0
45
+ Requires-Dist: starlette>=1.0.1
46
+ Requires-Dist: typing-extensions>=4.13.0
47
+ Requires-Dist: typing-inspection>=0.4.1
48
+ Requires-Dist: uncalled-for>=0.4.0
49
+ Requires-Dist: uvicorn>=0.35; sys_platform != "emscripten"
50
+ Requires-Dist: watchfiles>=1.0.0
23
51
  Requires-Dist: httpx[socks]<0.29,>=0.28.1
24
- Requires-Dist: pydantic<3,>=2.13.4
52
+ Requires-Dist: pydantic[email]<3,>=2.13.4
25
53
  Requires-Dist: python-dotenv==1.2.3
26
54
  Requires-Dist: truststore==0.10.4
27
55
  Requires-Dist: cryptography<51,>=48.0.0
@@ -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.dev2652"
7
+ version = "8.4.3.dev2656"
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
@@ -28,14 +28,44 @@ classifiers = [
28
28
  ]
29
29
 
30
30
  dependencies = [
31
- "fastmcp==3.4.7",
31
+ # fastmcp/mcp/mcp-types are vendored (scripts/vendor_fastmcp.py) so HA
32
+ # Core's own mcp 1.x pin can't conflict. Below: their runtime requirements.
33
+ "anyio>=4.10; python_version >= '3.14'",
34
+ "anyio>=4.9; python_version < '3.14'",
35
+ "authlib>=1.6.11",
36
+ "cyclopts>=4.0.0",
37
+ "exceptiongroup>=1.2.2",
38
+ "griffelib>=2.0.0",
39
+ "httpx2>=2.5.0",
40
+ "joserfc>=1.5.0",
41
+ "jsonref>=1.1.0",
42
+ "jsonschema>=4.20.0",
43
+ "jsonschema-path>=0.3.4",
44
+ "openapi-pydantic>=0.5.1",
45
+ "opentelemetry-api>=1.28.0",
46
+ "platformdirs>=4.0.0",
47
+ "py-key-value-aio[filetree,keyring,memory]>=0.4.4,<0.5.0",
48
+ "pydantic-settings>=2.0.0",
49
+ "pyjwt[crypto]>=2.10.1",
50
+ "pyperclip>=1.9.0",
51
+ "python-multipart>=0.0.26",
52
+ "pywin32>=311; sys_platform == 'win32'",
53
+ "pyyaml>=6.0,<7.0",
54
+ "rich>=13.9.4",
55
+ "sse-starlette>=3.0.0",
56
+ "starlette>=1.0.1",
57
+ "typing-extensions>=4.13.0",
58
+ "typing-inspection>=0.4.1",
59
+ "uncalled-for>=0.4.0",
60
+ "uvicorn>=0.35; sys_platform != 'emscripten'",
61
+ "watchfiles>=1.0.0",
32
62
  # Shared with the embedded HA process: admit Core's versions, including
33
63
  # compatible updates, instead of requiring it to keep our exact pin.
34
64
  # uv.lock selects standalone versions; HA's own constraints select
35
65
  # the embedded versions. Check both the HACS minimum and current Core
36
66
  # before raising these floors; standalone lock updates can move independently.
37
67
  "httpx[socks]>=0.28.1,<0.29",
38
- "pydantic>=2.13.4,<3",
68
+ "pydantic[email]>=2.13.4,<3",
39
69
  "python-dotenv==1.2.3",
40
70
  "truststore==0.10.4",
41
71
  # websockets is deliberately ABSENT from this list: ha-mcp ships its own
@@ -46,9 +76,9 @@ dependencies = [
46
76
  # conflicting version demands and any of their installs can replace or
47
77
  # tear it in place (#2135/#2146); a declared dependency here would make
48
78
  # ha-mcp PIN that contested copy, which is what forced the in-place
49
- # replacements. A shared copy can still arrive transitively (fastmcp
50
- # declares one), so what keeps us off it is the vendored import path,
51
- # not the absence of this line — and the embedded no-stomp e2e guard is
79
+ # replacements. Home Assistant's environment carries a shared copy anyway
80
+ # (Core and other integrations install it), so what keeps us off it is the
81
+ # vendored import path, not the absence of this line — and the embedded no-stomp e2e guard is
52
82
  # what proves no install of ours ever replaces the shared copy.
53
83
  # Range (not a hard pin) so the resolver can satisfy Home Assistant's own
54
84
  # cryptography constraint when ha-mcp is installed into the HA venv for
@@ -119,7 +149,6 @@ explicit_package_bases = true
119
149
 
120
150
  [[tool.mypy.overrides]]
121
151
  module = [
122
- "fastmcp.*",
123
152
  "jq",
124
153
  "pydantic_monty",
125
154
  "pydantic_monty.*",
@@ -388,7 +417,8 @@ dev = [
388
417
  # it is NOT a runtime dependency (see the note in [project.dependencies]).
389
418
  "websockets>=15.0.1",
390
419
  "docker>=7.1.0",
391
- "httpx2>=2.4.0",
420
+ # Shared SDK for the component's llm_api.py tests; mirrors HA Core's 1.x line.
421
+ "mcp>=1.26.0,<2",
392
422
  "mypy>=1.17.0",
393
423
  "openai>=1.0.0",
394
424
  "jsonschema>=4.25.1",
@@ -42,8 +42,7 @@ from ha_mcp.browser_landing import ( # noqa: E402
42
42
  from ha_mcp.log_filters import install_sdk_log_filters # noqa: E402
43
43
 
44
44
  if TYPE_CHECKING:
45
- from fastmcp import FastMCP
46
-
45
+ from ha_mcp._vendor.fastmcp import FastMCP
47
46
  from ha_mcp.client.rest_client import HomeAssistantClient
48
47
  from ha_mcp.config import Settings
49
48
  from ha_mcp.server import HomeAssistantSmartMCPServer
@@ -68,8 +67,7 @@ class OAuthProxyClient:
68
67
 
69
68
  def _get_oauth_client(self) -> "HomeAssistantClient":
70
69
  """Get the OAuth client for the current request context."""
71
- from fastmcp.server.dependencies import get_access_token
72
-
70
+ from ha_mcp._vendor.fastmcp.server.dependencies import get_access_token
73
71
  from ha_mcp.client.rest_client import (
74
72
  HomeAssistantAuthError,
75
73
  HomeAssistantClient,
@@ -293,7 +291,7 @@ def _validate_standard_credentials(settings: "Settings") -> None:
293
291
 
294
292
  def _get_show_banner() -> bool:
295
293
  """Check if server banner should be shown (respects FASTMCP_SHOW_SERVER_BANNER env var)."""
296
- import fastmcp
294
+ from ha_mcp._vendor import fastmcp
297
295
 
298
296
  return fastmcp.settings.show_server_banner
299
297
 
@@ -321,7 +319,11 @@ def _http_run_kwargs(host: str, port: int, path: str) -> dict[str, Any]:
321
319
  "path": path,
322
320
  "stateless_http": True,
323
321
  "show_banner": _get_show_banner(),
324
- "uvicorn_config": {"log_config": _get_timestamped_uvicorn_log_config()},
322
+ # ws="none": uvicorn's default imports the shared websockets package.
323
+ "uvicorn_config": {
324
+ "log_config": _get_timestamped_uvicorn_log_config(),
325
+ "ws": "none",
326
+ },
325
327
  }
326
328
 
327
329
 
@@ -441,8 +443,7 @@ def _setup_logging(log_level_str: str, force: bool = True) -> None:
441
443
  """
442
444
  log_level = getattr(logging, log_level_str)
443
445
 
444
- import fastmcp
445
-
446
+ from ha_mcp._vendor import fastmcp
446
447
  from ha_mcp.utils.usage_logger import preserve_startup_collector
447
448
 
448
449
  with preserve_startup_collector():
@@ -0,0 +1,11 @@
1
+ # Vendored-library pins, bumped by the renovate custom manager that matches
2
+ # this exact path (see renovate.json — no stock manager sees this file).
3
+ #
4
+ # Renovate runs scripts/vendor_websockets.py (websockets) or
5
+ # scripts/vendor_fastmcp.py (fastmcp-slim, mcp, mcp-types) before committing
6
+ # a bump; tests/src/unit/test_vendored_*.py reject stale or altered trees.
7
+ # For a manual pin change, run the same generator and commit its outputs.
8
+ websockets==17.1
9
+ fastmcp-slim==4.0.3
10
+ mcp==2.2.0
11
+ mcp-types==2.2.0
@@ -5,10 +5,10 @@ from __future__ import annotations
5
5
  import logging
6
6
  from typing import override
7
7
 
8
- from fastmcp.server.auth.oauth_proxy.models import ProxyDCRClient
9
- from fastmcp.server.auth.oidc_proxy import OIDCProxy
10
- from mcp.server.auth.provider import AuthorizationParams, RefreshToken
11
- from mcp.shared.auth import OAuthClientInformationFull
8
+ from ha_mcp._vendor.fastmcp.server.auth.oauth_proxy.models import ProxyDCRClient
9
+ from ha_mcp._vendor.fastmcp.server.auth.oidc_proxy import OIDCProxy
10
+ from ha_mcp._vendor.mcp.server.auth.provider import AuthorizationParams, RefreshToken
11
+ from ha_mcp._vendor.mcp.shared.auth import OAuthClientInformationFull
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -16,18 +16,25 @@ import os
16
16
  import secrets
17
17
  import time
18
18
  from base64 import urlsafe_b64decode, urlsafe_b64encode
19
- from collections.abc import Awaitable, Callable
19
+ from collections.abc import Callable
20
20
  from pathlib import Path
21
21
  from typing import Any
22
22
  from urllib.parse import parse_qs, urlencode, urlparse, urlunparse
23
23
 
24
- from fastmcp.server.auth.auth import (
24
+ from pydantic import AnyHttpUrl, ValidationError
25
+ from starlette.datastructures import MutableHeaders
26
+ from starlette.requests import Request
27
+ from starlette.responses import HTMLResponse, RedirectResponse, Response
28
+ from starlette.routing import Route
29
+ from starlette.types import ASGIApp, Message, Receive, Scope, Send
30
+
31
+ from ha_mcp._vendor.fastmcp.server.auth.auth import (
25
32
  AccessToken, # FastMCP version has claims field
26
33
  ClientRegistrationOptions,
27
34
  OAuthProvider,
28
35
  RevocationOptions,
29
36
  )
30
- from mcp.server.auth.provider import (
37
+ from ha_mcp._vendor.mcp.server.auth.provider import (
31
38
  AuthorizationCode,
32
39
  AuthorizationParams,
33
40
  AuthorizeError,
@@ -35,11 +42,7 @@ from mcp.server.auth.provider import (
35
42
  TokenError,
36
43
  construct_redirect_uri,
37
44
  )
38
- from mcp.shared.auth import OAuthClientInformationFull, OAuthToken
39
- from pydantic import AnyHttpUrl, ValidationError
40
- from starlette.requests import Request
41
- from starlette.responses import HTMLResponse, RedirectResponse, Response
42
- from starlette.routing import Route
45
+ from ha_mcp._vendor.mcp.shared.auth import OAuthClientInformationFull, OAuthToken
43
46
 
44
47
  from ..utils.data_paths import get_data_dir
45
48
  from .consent_form import create_consent_html, create_error_html
@@ -52,6 +55,34 @@ ACCESS_TOKEN_EXPIRY_SECONDS = 60 * 60 # 1 hour
52
55
  REFRESH_TOKEN_EXPIRY_SECONDS = 7 * 24 * 60 * 60 # 7 days
53
56
 
54
57
 
58
+ class _StampIssOnErrorRedirects:
59
+ """ASGI wrapper that stamps ``iss`` on the error redirects of the app it wraps.
60
+
61
+ The SDK serves ``/authorize`` as an ASGI app, so the stamp is applied to the
62
+ headers as they are sent. A class, not a function, so Starlette's ``Route``
63
+ mounts it as raw ASGI instead of wrapping it in ``request_response``.
64
+ """
65
+
66
+ def __init__(self, app: ASGIApp, stamp: Callable[[str], str]) -> None:
67
+ self.app = app
68
+ self.stamp = stamp
69
+
70
+ async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
71
+ async def send_stamped(message: Message) -> None:
72
+ if message["type"] == "http.response.start" and message["status"] in (
73
+ 302,
74
+ 303,
75
+ 307,
76
+ ):
77
+ headers = MutableHeaders(scope=message)
78
+ location = headers.get("location", "")
79
+ if location and "error" in parse_qs(urlparse(location).query):
80
+ headers["location"] = self.stamp(location)
81
+ await send(message)
82
+
83
+ await self.app(scope, receive, send_stamped)
84
+
85
+
55
86
  class HomeAssistantCredentials:
56
87
  """Temporary HA credentials held between consent form and token exchange."""
57
88
 
@@ -396,11 +427,8 @@ class HomeAssistantOAuthProvider(OAuthProvider):
396
427
  params.append(("iss", self._issuer()))
397
428
  return urlunparse(parsed._replace(query=urlencode(params)))
398
429
 
399
- def _wrap_authorize_with_iss(
400
- self, endpoint: "Callable[[Request], Awaitable[Response]]"
401
- ) -> "Callable[[Request], Awaitable[Response]]":
402
- """Wrap the SDK's ``/authorize`` endpoint to stamp ``iss`` on its
403
- error redirects.
430
+ def _wrap_authorize_with_iss(self, endpoint: ASGIApp) -> ASGIApp:
431
+ """Wrap the SDK's ``/authorize`` app to stamp ``iss`` on its error redirects.
404
432
 
405
433
  The SDK's ``AuthorizationHandler`` builds OAuth error authorization
406
434
  responses (invalid scope, ``authorize()`` raising after redirect-URI
@@ -409,27 +437,16 @@ class HomeAssistantOAuthProvider(OAuthProvider):
409
437
  is a same-origin redirect to the consent form (no ``error``), which is
410
438
  not an authorization response and stays untouched.
411
439
  """
412
-
413
- async def authorize_with_iss(request: Request) -> Response:
414
- response: Response = await endpoint(request)
415
- location = response.headers.get("location", "")
416
- if (
417
- response.status_code in (302, 303, 307)
418
- and location
419
- and "error" in parse_qs(urlparse(location).query)
420
- ):
421
- response.headers["location"] = self._ensure_single_iss(location)
422
- return response
423
-
424
- return authorize_with_iss
440
+ return _StampIssOnErrorRedirects(endpoint, self._ensure_single_iss)
425
441
 
426
442
  def get_routes(self, mcp_path: str | None = None) -> list[Route]:
427
443
  """
428
444
  Get OAuth routes including custom consent form routes.
429
445
 
430
446
  This extends the base OAuth routes with:
431
- - GET /authorize - Shows the consent form
432
- - POST /authorize - Handles consent form submission
447
+ - /authorize - the SDK handler, its error redirects stamped with ``iss``;
448
+ success redirects to /consent
449
+ - GET/POST /consent - the consent form and its submission
433
450
  - Custom /.well-known/oauth-authorization-server with enhanced metadata
434
451
  """
435
452
  # Get base OAuth routes
@@ -442,7 +459,7 @@ class HomeAssistantOAuthProvider(OAuthProvider):
442
459
 
443
460
  async def enhanced_metadata_handler(request: Request) -> Response:
444
461
  """Enhanced OAuth metadata handler with Claude.ai compatibility."""
445
- from mcp.server.auth.routes import build_metadata
462
+ from ha_mcp._vendor.mcp.server.auth.routes import build_metadata
446
463
 
447
464
  # Get base metadata from MCP SDK
448
465
  metadata = build_metadata(
@@ -492,7 +509,7 @@ class HomeAssistantOAuthProvider(OAuthProvider):
492
509
  isinstance(route, Route)
493
510
  and route.path == "/.well-known/oauth-authorization-server"
494
511
  ):
495
- from mcp.server.auth.routes import cors_middleware
512
+ from ha_mcp._vendor.mcp.server.auth.routes import cors_middleware
496
513
 
497
514
  enhanced_routes.append(
498
515
  Route(
@@ -520,7 +537,7 @@ class HomeAssistantOAuthProvider(OAuthProvider):
520
537
  # ChatGPT expects /.well-known/openid-configuration (OpenID Connect Discovery)
521
538
  # in addition to /.well-known/oauth-authorization-server (OAuth 2.1)
522
539
  # Per RFC 8414, many servers support both endpoints with identical metadata
523
- from mcp.server.auth.routes import cors_middleware
540
+ from ha_mcp._vendor.mcp.server.auth.routes import cors_middleware
524
541
 
525
542
  enhanced_routes.append(
526
543
  Route(
@@ -62,7 +62,8 @@ from pathlib import Path
62
62
  from typing import Any, Literal, NotRequired, TypedDict
63
63
 
64
64
  import yaml # type: ignore[import-untyped]
65
- from fastmcp.exceptions import ToolError
65
+
66
+ from ha_mcp._vendor.fastmcp.exceptions import ToolError
66
67
 
67
68
  from .client.rest_client import HomeAssistantConnectionError, HomeAssistantError
68
69
  from .utils.data_paths import get_data_dir
@@ -2215,7 +2216,7 @@ async def _fetch_dashboard(client: Any, entity_id: str) -> Any:
2215
2216
  The component refuses YAML bodies, so those capture through legacy unchanged.
2216
2217
  Imported lazily to avoid an import cycle.
2217
2218
  """
2218
- from fastmcp.exceptions import ToolError
2219
+ from ha_mcp._vendor.fastmcp.exceptions import ToolError
2219
2220
 
2220
2221
  from .tools.tools_config_dashboards import (
2221
2222
  _component_dashboard_config,
@@ -19,7 +19,8 @@ from typing import Any, Literal, NoReturn, cast
19
19
  from urllib.parse import quote
20
20
 
21
21
  import httpx
22
- from fastmcp.exceptions import ToolError
22
+
23
+ from ha_mcp._vendor.fastmcp.exceptions import ToolError
23
24
 
24
25
  from ..errors import ErrorCode, create_error_response
25
26
  from ..tools.helpers import raise_tool_error
@@ -5,8 +5,8 @@ from __future__ import annotations
5
5
  import hashlib
6
6
  from typing import Any
7
7
 
8
- from fastmcp.utilities.types import Image
9
- from mcp.types import ImageContent
8
+ from ha_mcp._vendor.fastmcp.utilities.types import Image
9
+ from ha_mcp._vendor.mcp.types import ImageContent
10
10
 
11
11
  from ..errors import ErrorCode, create_error_response
12
12
  from ..tools.helpers import raise_tool_error
@@ -9,7 +9,7 @@ from collections import Counter
9
9
  from dataclasses import dataclass
10
10
  from typing import Any, cast
11
11
 
12
- from fastmcp.exceptions import ToolError
12
+ from ha_mcp._vendor.fastmcp.exceptions import ToolError
13
13
 
14
14
  from ..errors import ErrorCode, create_error_response
15
15
  from ..tools.helpers import raise_tool_error
@@ -27,7 +27,8 @@ from dataclasses import dataclass
27
27
  from typing import Any
28
28
 
29
29
  import httpx
30
- from fastmcp.exceptions import ToolError
30
+
31
+ from ha_mcp._vendor.fastmcp.exceptions import ToolError
31
32
 
32
33
  from ..errors import ErrorCode, create_error_response
33
34
  from ..tools.helpers import raise_tool_error
@@ -10,9 +10,14 @@ The structured error format enables AI agents to:
10
10
  - Understand the context and details of failures
11
11
  """
12
12
 
13
+ import logging
13
14
  from enum import StrEnum
14
15
  from typing import Any
15
16
 
17
+ # Level FastMCP logs ha-mcp's ToolErrors at: user-facing failures, not server
18
+ # bugs. A ToolError built without it logs at FastMCP's default, ERROR.
19
+ TOOL_ERROR_LOG_LEVEL = logging.WARNING
20
+
16
21
 
17
22
  class ErrorCode(StrEnum):
18
23
  """
@@ -7,7 +7,11 @@ import logging
7
7
  from contextvars import ContextVar
8
8
  from typing import Any
9
9
 
10
- from fastmcp.server.middleware.middleware import CallNext, Middleware, MiddlewareContext
10
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
11
+ CallNext,
12
+ Middleware,
13
+ MiddlewareContext,
14
+ )
11
15
 
12
16
  from .errors import create_timeout_error
13
17
  from .tool_dispatch import (
@@ -11,12 +11,13 @@ from time import monotonic
11
11
  from typing import Any
12
12
  from uuid import uuid4
13
13
 
14
- import fastmcp
15
- from fastmcp import FastMCP
16
- from fastmcp.server.http import StarletteWithLifespan
17
14
  from starlette.middleware import Middleware
18
15
  from starlette.types import ASGIApp, Message, Receive, Scope, Send
19
16
 
17
+ from ha_mcp._vendor import fastmcp
18
+ from ha_mcp._vendor.fastmcp import FastMCP
19
+ from ha_mcp._vendor.fastmcp.server.http import StarletteWithLifespan
20
+
20
21
  from .config import get_global_settings
21
22
 
22
23
  logger = logging.getLogger(__name__)
@@ -35,12 +35,12 @@ import time
35
35
  from collections.abc import Callable, Mapping, Sequence
36
36
  from typing import TYPE_CHECKING, Any
37
37
 
38
- from fastmcp.server.middleware import Middleware
38
+ from ha_mcp._vendor.fastmcp.server.middleware import Middleware
39
39
 
40
40
  if TYPE_CHECKING:
41
- from fastmcp.server.middleware import CallNext, MiddlewareContext
42
- from fastmcp.tools import Tool
43
- from mcp import types as mt
41
+ from ha_mcp._vendor.fastmcp.server.middleware import CallNext, MiddlewareContext
42
+ from ha_mcp._vendor.fastmcp.tools import Tool
43
+ from ha_mcp._vendor.mcp import types as mt
44
44
 
45
45
  logger = logging.getLogger(__name__)
46
46
 
@@ -1,4 +1,4 @@
1
- """MCP SDK / fastmcp log-noise filters shared across every HTTP launcher.
1
+ """MCP SDK log-noise filters shared across every HTTP launcher.
2
2
 
3
3
  Extracted from :mod:`ha_mcp.__main__` for the same reason as
4
4
  :mod:`ha_mcp.browser_landing`: the in-process server (the ``ha_mcp_tools``
@@ -17,8 +17,6 @@ from __future__ import annotations
17
17
  import logging
18
18
 
19
19
  import anyio
20
- from fastmcp.exceptions import ToolError
21
- from pydantic import ValidationError as PydanticValidationError
22
20
 
23
21
 
24
22
  class StatelessSessionLogFilter(logging.Filter):
@@ -54,37 +52,6 @@ class StatelessSessionLogFilter(logging.Filter):
54
52
  return "Terminating session: None" not in message
55
53
 
56
54
 
57
- class ToolValidationLogFilter(logging.Filter):
58
- """Demote fastmcp tool-failure tracebacks to single-line warnings.
59
-
60
- Pydantic ValidationError and tool-raised ToolError aren't server bugs,
61
- so the traceback through fastmcp/pydantic internals is just noise. The
62
- structured error detail is preserved in the WARNING message; stack is
63
- intentionally dropped because these are user-input errors, not bugs.
64
- """
65
-
66
- def filter(self, record: logging.LogRecord) -> bool:
67
- """Demote a known-benign validation/tool-error record to WARNING."""
68
- if record.name != "fastmcp.server.server" or not record.exc_info:
69
- return True
70
-
71
- msg = record.getMessage()
72
- err = record.exc_info[1]
73
- if "Error validating tool" in msg and isinstance(err, PydanticValidationError):
74
- record.msg = f"{msg}: {err.errors(include_url=False)}"
75
- elif "Error calling tool" in msg and isinstance(err, ToolError):
76
- record.msg = f"{msg}: {err}"
77
- else:
78
- return True
79
-
80
- record.args = ()
81
- record.levelno = logging.WARNING
82
- record.levelname = "WARNING"
83
- record.exc_info = None
84
- record.exc_text = None
85
- return True
86
-
87
-
88
55
  _DISCONNECT_TEARDOWN_ERRORS = (anyio.ClosedResourceError, anyio.BrokenResourceError)
89
56
 
90
57
 
@@ -140,8 +107,7 @@ class SessionDisconnectLogFilter(logging.Filter):
140
107
  stateful session runners of mcp/server/streamable_http_manager.py) -- it
141
108
  just logs it as an alarming ERROR-level traceback. That's an expected
142
109
  race in a stateless HTTP protocol (the client already gave up), not a
143
- server bug, so demote it the same way ToolValidationLogFilter demotes
144
- other known-benign failures. Any other exception on this logger -- an
110
+ server bug, so demote it. Any other exception on this logger -- an
145
111
  actual crash -- is left untouched.
146
112
  """
147
113
 
@@ -194,7 +160,7 @@ def _add_filter_once(logger_name: str, filter_cls: type[logging.Filter]) -> None
194
160
 
195
161
 
196
162
  def install_sdk_log_filters() -> None:
197
- """Attach the demotion filters above to their target SDK/fastmcp loggers.
163
+ """Attach the suppression/demotion filters above to their MCP SDK loggers.
198
164
 
199
165
  Every HTTP launcher must call this: the CLI (``ha_mcp.__main__``), the
200
166
  Home Assistant app's ``start.py``, and the in-process embedded server
@@ -204,4 +170,3 @@ def install_sdk_log_filters() -> None:
204
170
  """
205
171
  _add_filter_once("mcp.server.streamable_http", StatelessSessionLogFilter)
206
172
  _add_filter_once("mcp.server.streamable_http_manager", SessionDisconnectLogFilter)
207
- _add_filter_once("fastmcp.server.server", ToolValidationLogFilter)
@@ -31,7 +31,7 @@ def _is_write_or_destructive(tool: Any) -> bool:
31
31
  ann = getattr(tool, "annotations", None)
32
32
  # No annotations = treat as potentially write (safe default for the
33
33
  # UI, matches the runtime gate which doesn't skip read-only).
34
- return ann is None or getattr(ann, "readOnlyHint", None) is not True
34
+ return ann is None or ann.read_only_hint is not True
35
35
 
36
36
 
37
37
  def _extract_arg_paths(parameters: dict[str, Any]) -> list[dict[str, Any]]:
@@ -9,7 +9,12 @@ from typing import Any, NoReturn
9
9
 
10
10
  import anyio
11
11
  from anyio.to_thread import run_sync as run_in_thread
12
- from fastmcp.server.middleware.middleware import CallNext, Middleware, MiddlewareContext
12
+
13
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
14
+ CallNext,
15
+ Middleware,
16
+ MiddlewareContext,
17
+ )
13
18
 
14
19
  from ..errors import ErrorCode, create_error_response
15
20
  from ..renamed_tools import current_tool_name
@@ -38,9 +38,13 @@ from contextlib import contextmanager
38
38
  from contextvars import ContextVar
39
39
  from typing import TYPE_CHECKING, Any, NamedTuple, NoReturn
40
40
 
41
- from fastmcp.server.middleware.middleware import CallNext, Middleware, MiddlewareContext
42
- from fastmcp.server.transforms import Transform
43
- from fastmcp.tools import Tool
41
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
42
+ CallNext,
43
+ Middleware,
44
+ MiddlewareContext,
45
+ )
46
+ from ha_mcp._vendor.fastmcp.server.transforms import Transform
47
+ from ha_mcp._vendor.fastmcp.tools import Tool
44
48
 
45
49
  from .config import get_global_settings
46
50
  from .errors import ErrorCode, create_error_response
@@ -49,8 +53,8 @@ from .tool_dispatch import CALL_PROXY_META_TOOLS
49
53
  from .tools.helpers import raise_tool_error
50
54
 
51
55
  if TYPE_CHECKING:
52
- from fastmcp.server.transforms import GetToolNext
53
- from fastmcp.utilities.versions import VersionSpec
56
+ from ha_mcp._vendor.fastmcp.server.transforms import GetToolNext
57
+ from ha_mcp._vendor.fastmcp.utilities.versions import VersionSpec
54
58
 
55
59
  logger = logging.getLogger(__name__)
56
60
 
@@ -328,7 +332,7 @@ READ_ONLY_EXEMPT_TOOLS: dict[str, ReadOnlyExemption] = {
328
332
  def is_read_safe(tool: Tool) -> bool:
329
333
  """Return True when the tool's annotations declare it read-only."""
330
334
  annotations = getattr(tool, "annotations", None)
331
- return bool(annotations and getattr(annotations, "readOnlyHint", None) is True)
335
+ return bool(annotations and annotations.read_only_hint is True)
332
336
 
333
337
 
334
338
  def read_only_visible(tool: Tool) -> bool:
@@ -41,7 +41,11 @@ import threading
41
41
  from collections.abc import Iterable, Sequence
42
42
  from typing import Any
43
43
 
44
- from fastmcp.server.middleware.middleware import CallNext, Middleware, MiddlewareContext
44
+ from ha_mcp._vendor.fastmcp.server.middleware.middleware import (
45
+ CallNext,
46
+ Middleware,
47
+ MiddlewareContext,
48
+ )
45
49
 
46
50
  from .config import get_global_settings
47
51