ha-mcp-dev 7.6.0.dev641__tar.gz → 7.6.0.dev642__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 (136) hide show
  1. {ha_mcp_dev-7.6.0.dev641/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.6.0.dev642}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_bug_report.py +29 -9
  4. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/LICENSE +0 -0
  6. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/MANIFEST.in +0 -0
  7. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/README.md +0 -0
  8. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/backup_manager.py +0 -0
  17. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/client/__init__.py +0 -0
  18. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/client/rest_client.py +0 -0
  19. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/client/supervisor_client.py +0 -0
  20. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/client/websocket_client.py +0 -0
  21. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/client/websocket_listener.py +0 -0
  22. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/config.py +0 -0
  23. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/errors.py +0 -0
  24. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/__init__.py +0 -0
  25. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/approval_queue.py +0 -0
  26. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/evaluator.py +0 -0
  27. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/handlers.py +0 -0
  28. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/middleware.py +0 -0
  29. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/model.py +0 -0
  30. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/persistence.py +0 -0
  31. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/policy/value_sources.py +0 -0
  32. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/py.typed +0 -0
  33. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  34. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  35. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  36. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  37. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  38. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  39. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  40. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  41. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  42. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  43. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  44. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  45. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  46. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  47. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  48. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  49. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  50. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  51. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  52. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  53. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  54. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  55. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/server.py +0 -0
  56. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/settings.css +0 -0
  57. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/settings.js +0 -0
  58. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/settings_ui.py +0 -0
  59. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/smoke_test.py +0 -0
  60. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  61. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/__init__.py +0 -0
  62. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/auto_backup.py +0 -0
  63. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/backup.py +0 -0
  64. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  65. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/device_control.py +0 -0
  66. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/enhanced.py +0 -0
  67. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/helpers.py +0 -0
  68. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/reference_validator.py +0 -0
  69. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/registry.py +0 -0
  70. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/__init__.py +0 -0
  71. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_base.py +0 -0
  72. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_config.py +0 -0
  73. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_deep.py +0 -0
  74. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_entities.py +0 -0
  75. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_fetch.py +0 -0
  76. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_overview.py +0 -0
  77. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_scenes.py +0 -0
  78. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/smart_search/_scoring.py +0 -0
  79. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_addons.py +0 -0
  80. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_areas.py +0 -0
  81. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  82. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_calendar.py +0 -0
  83. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_camera.py +0 -0
  84. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_categories.py +0 -0
  85. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_code.py +0 -0
  86. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  87. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  88. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  89. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  90. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  91. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  92. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_energy.py +0 -0
  93. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_entities.py +0 -0
  94. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  95. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_groups.py +0 -0
  96. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_hacs.py +0 -0
  97. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_history.py +0 -0
  98. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_integrations.py +0 -0
  99. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_labels.py +0 -0
  100. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  101. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_registry.py +0 -0
  102. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_resources.py +0 -0
  103. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_search.py +0 -0
  104. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_service.py +0 -0
  105. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_services.py +0 -0
  106. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_system.py +0 -0
  107. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_todo.py +0 -0
  108. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_traces.py +0 -0
  109. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_updates.py +0 -0
  110. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_utility.py +0 -0
  111. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  112. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  113. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/tools_zones.py +0 -0
  114. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/util_helpers.py +0 -0
  115. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/tools/validation_middleware.py +0 -0
  116. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/transforms/__init__.py +0 -0
  117. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/transforms/categorized_search.py +0 -0
  118. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  119. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/__init__.py +0 -0
  120. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/config_hash.py +0 -0
  121. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/data_paths.py +0 -0
  122. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/domain_handlers.py +0 -0
  123. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  124. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  125. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/operation_manager.py +0 -0
  126. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/python_sandbox.py +0 -0
  127. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/skill_loader.py +0 -0
  128. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp/utils/usage_logger.py +0 -0
  129. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  130. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  131. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  132. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  133. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  134. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/tests/__init__.py +0 -0
  135. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/tests/test_constants.py +0 -0
  136. {ha_mcp_dev-7.6.0.dev641 → ha_mcp_dev-7.6.0.dev642}/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: 7.6.0.dev641
3
+ Version: 7.6.0.dev642
4
4
  Summary: Home Assistant MCP Server - Complete control of Home Assistant through MCP
5
5
  Author-email: Julien <github@qc-h.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "7.6.0.dev641"
7
+ version = "7.6.0.dev642"
8
8
  description = "Home Assistant MCP Server - Complete control of Home Assistant through MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.13,<3.14"
@@ -293,7 +293,8 @@ def _sanitize_log_text(text: str) -> str:
293
293
  review (see ``_generate_anonymization_guide``). Rules cover the most common
294
294
  leak shapes seen in HA add-on logs:
295
295
  JWTs, bearer tokens, long hex tokens, ``key=value`` style credentials,
296
- URL userinfo, and IPv4 addresses with network context.
296
+ URL userinfo, IPv4 addresses with network context, and the MCP connect-URL
297
+ secret path (the add-on's LAN auth).
297
298
  """
298
299
  # JWT tokens (header.payload.signature)
299
300
  text = re.sub(
@@ -338,6 +339,20 @@ def _sanitize_log_text(text: str) -> str:
338
339
  text = _IPV4_WITH_PORT_OR_CIDR_RE.sub("[IP]", text)
339
340
  text = _IPV4_IN_URL_RE.sub(r"\1[IP]", text)
340
341
  text = _IPV4_AFTER_KEYWORD_RE.sub(r"\1[IP]", text)
342
+ # MCP connect-URL secret path — the add-on's LAN auth. Redact by the
343
+ # configured value (catches custom paths) and the generated
344
+ # ``/private_<token>`` convention. Only bug-report output is scrubbed here;
345
+ # the raw logs this text is copied from are left intact.
346
+ configured = os.getenv("MCP_SECRET_PATH", "").rstrip("/")
347
+ if configured and configured != "/mcp":
348
+ # Anchor on a path-segment boundary so a short/substring-prone configured
349
+ # value (e.g. "/ha") cannot corrupt unrelated text (e.g. "/happy").
350
+ text = re.sub(
351
+ re.escape(configured) + r"(?![A-Za-z0-9_-])",
352
+ "[REDACTED_SECRET_PATH]",
353
+ text,
354
+ )
355
+ text = re.sub(r"/private_[A-Za-z0-9_-]+", "[REDACTED_SECRET_PATH]", text)
341
356
  return text
342
357
 
343
358
 
@@ -508,8 +523,7 @@ class BugReportTools:
508
523
  **OUTPUT:**
509
524
  Returns both templates plus diagnostic data. Key fields:
510
525
  - `runtime_bug_template`, `agent_behavior_template` — pick based on context
511
- - `recent_logs` — recent ha-mcp tool calls (secret parameters redacted);
512
- startup log entries are summarised in `formatted_report`, not returned raw
526
+ - `recent_logs`, `startup_logs`captured ha-mcp tool/server log entries
513
527
  - `addon_logs` — addon container stdout/stderr (HA add-on installs only;
514
528
  empty string otherwise)
515
529
  - `suggested_title`, `duplicate_check_urls`, `anonymization_guide`
@@ -623,13 +637,19 @@ class BugReportTools:
623
637
  return {
624
638
  "success": True,
625
639
  "diagnostic_info": diagnostic_info,
626
- # ``recent_logs`` entries are redacted at the logging chokepoint
627
- # (UsageLogger.log_tool_usage), so the tool parameters here carry no
628
- # secrets. ``startup_logs`` come from a separate StartupLogCollector
629
- # that is NOT redacted at source, so the raw entries are
630
- # intentionally omitted — the sanitized view lives in
631
- # ``formatted_report`` (via ``_format_startup_logs``).
632
640
  "recent_logs": recent_logs,
641
+ # Scrub the startup-log *messages* — they aren't sanitized at source,
642
+ # so the connect-URL secret path can otherwise surface here.
643
+ # recent_logs is also returned, but its sensitive *parameters* are
644
+ # key-masked at the logging chokepoint and its error_message is
645
+ # returned as-is to the trusted client by design (see SECURITY.md);
646
+ # formatted_report and addon_logs already route through
647
+ # _sanitize_log_text. This copies entries — the underlying log
648
+ # records stay raw.
649
+ "startup_logs": [
650
+ {**entry, "message": _sanitize_log_text(entry.get("message", ""))}
651
+ for entry in startup_logs
652
+ ],
633
653
  "addon_logs": addon_logs,
634
654
  "log_count": len(recent_logs),
635
655
  "startup_log_count": len(startup_logs),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.6.0.dev641
3
+ Version: 7.6.0.dev642
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