ha-mcp-dev 7.6.0.dev635__tar.gz → 7.6.0.dev636__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 (126) hide show
  1. {ha_mcp_dev-7.6.0.dev635/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.6.0.dev636}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/settings_ui.py +44 -148
  4. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/LICENSE +0 -0
  6. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/MANIFEST.in +0 -0
  7. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/README.md +0 -0
  8. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/backup_manager.py +0 -0
  17. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/client/__init__.py +0 -0
  18. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/client/rest_client.py +0 -0
  19. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/client/supervisor_client.py +0 -0
  20. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/client/websocket_client.py +0 -0
  21. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/client/websocket_listener.py +0 -0
  22. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/config.py +0 -0
  23. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/errors.py +0 -0
  24. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/__init__.py +0 -0
  25. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/approval_queue.py +0 -0
  26. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/evaluator.py +0 -0
  27. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/handlers.py +0 -0
  28. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/middleware.py +0 -0
  29. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/model.py +0 -0
  30. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/persistence.py +0 -0
  31. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/policy/value_sources.py +0 -0
  32. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/py.typed +0 -0
  33. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  34. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  35. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  36. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  37. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  38. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  39. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  40. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  41. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  42. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  43. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  44. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  45. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  46. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  47. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  48. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  49. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  50. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  51. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  52. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  53. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  54. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/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.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/server.py +0 -0
  56. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/smoke_test.py +0 -0
  57. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  58. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/__init__.py +0 -0
  59. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/auto_backup.py +0 -0
  60. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/backup.py +0 -0
  61. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  62. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/device_control.py +0 -0
  63. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/enhanced.py +0 -0
  64. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/helpers.py +0 -0
  65. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/reference_validator.py +0 -0
  66. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/registry.py +0 -0
  67. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/smart_search.py +0 -0
  68. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_addons.py +0 -0
  69. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_areas.py +0 -0
  70. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  71. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  72. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_calendar.py +0 -0
  73. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_camera.py +0 -0
  74. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_categories.py +0 -0
  75. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_code.py +0 -0
  76. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  77. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  78. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  79. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  80. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  81. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  82. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_energy.py +0 -0
  83. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_entities.py +0 -0
  84. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  85. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_groups.py +0 -0
  86. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_hacs.py +0 -0
  87. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_history.py +0 -0
  88. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_integrations.py +0 -0
  89. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_labels.py +0 -0
  90. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  91. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_registry.py +0 -0
  92. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_resources.py +0 -0
  93. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_search.py +0 -0
  94. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_service.py +0 -0
  95. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_services.py +0 -0
  96. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_system.py +0 -0
  97. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_todo.py +0 -0
  98. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_traces.py +0 -0
  99. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_updates.py +0 -0
  100. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_utility.py +0 -0
  101. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  102. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  103. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/tools_zones.py +0 -0
  104. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/util_helpers.py +0 -0
  105. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/tools/validation_middleware.py +0 -0
  106. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/transforms/__init__.py +0 -0
  107. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/transforms/categorized_search.py +0 -0
  108. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  109. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/__init__.py +0 -0
  110. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/config_hash.py +0 -0
  111. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/data_paths.py +0 -0
  112. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/domain_handlers.py +0 -0
  113. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  114. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  115. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/operation_manager.py +0 -0
  116. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/python_sandbox.py +0 -0
  117. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/skill_loader.py +0 -0
  118. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp/utils/usage_logger.py +0 -0
  119. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  120. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  121. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  122. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  123. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  124. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/tests/__init__.py +0 -0
  125. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/tests/test_constants.py +0 -0
  126. {ha_mcp_dev-7.6.0.dev635 → ha_mcp_dev-7.6.0.dev636}/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.dev635
3
+ Version: 7.6.0.dev636
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.dev635"
7
+ version = "7.6.0.dev636"
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"
@@ -5994,6 +5994,47 @@ def register_settings_routes(
5994
5994
  )
5995
5995
  return
5996
5996
 
5997
+ # Every route this function mounts except the add-on-only root mount is defined
5998
+ # once in this table and mounted under each active prefix below: at root
5999
+ # in add-on mode (so HA ingress can proxy localhost:9583/), and under the
6000
+ # secret path when one is set (Docker / standalone direct access). A
6001
+ # deployment hits either, both, or — guarded above — neither. Deriving
6002
+ # the mounts from one table keeps them from drifting; the frontend uses
6003
+ # relative fetches (./api/settings/...) so the handlers work at any prefix.
6004
+ routes: list[tuple[str, list[str], str]] = [
6005
+ ("/settings", ["GET"], "settings_page"),
6006
+ ("/api/settings/tools", ["GET"], "get_tools"),
6007
+ ("/api/settings/tools", ["POST"], "save_tools"),
6008
+ ("/api/settings/restart", ["POST"], "restart_addon"),
6009
+ ("/api/settings/info", ["GET"], "settings_info"),
6010
+ ("/api/settings/features", ["GET"], "get_feature_flags"),
6011
+ ("/api/settings/features", ["POST"], "save_feature_flags"),
6012
+ # Advanced settings endpoints
6013
+ ("/api/settings/advanced", ["GET"], "get_advanced_settings"),
6014
+ ("/api/settings/advanced", ["POST"], "save_advanced_settings"),
6015
+ # Auto-backup endpoints (#1288)
6016
+ ("/api/settings/backups", ["GET"], "list_backups"),
6017
+ ("/api/settings/backups", ["DELETE"], "delete_backups_bulk"),
6018
+ ("/api/settings/backups/{name}", ["GET"], "view_backup"),
6019
+ ("/api/settings/backups/{name}/diff", ["GET"], "diff_backup"),
6020
+ ("/api/settings/backups/{name}/restore", ["POST"], "restore_backup"),
6021
+ ("/api/settings/backups/{name}", ["DELETE"], "delete_backup"),
6022
+ ("/api/settings/backup-config", ["GET"], "get_backup_config"),
6023
+ ("/api/settings/backup-config", ["POST"], "save_backup_config"),
6024
+ # Tool security policies endpoints
6025
+ ("/api/policy/config", ["GET"], "policy_get_config"),
6026
+ ("/api/policy/config", ["PUT"], "policy_put_config"),
6027
+ ("/api/policy/pending", ["GET"], "policy_get_pending"),
6028
+ ("/api/policy/approve", ["POST"], "policy_post_approve"),
6029
+ ("/api/policy/deny", ["POST"], "policy_post_deny"),
6030
+ ("/api/policy/tool-schema", ["GET"], "policy_get_tool_schema"),
6031
+ ("/api/policy/value-source", ["GET"], "policy_get_value_source"),
6032
+ ]
6033
+
6034
+ def _mount(prefix: str) -> None:
6035
+ for path, methods, handler_key in routes:
6036
+ mcp.custom_route(f"{prefix}{path}", methods=methods)(handlers[handler_key])
6037
+
5997
6038
  if is_addon:
5998
6039
  # Root mount lets HA ingress proxy localhost:9583/ → settings UI.
5999
6040
  # Direct port 9583 LAN access also reaches these routes; in this
@@ -6001,155 +6042,10 @@ def register_settings_routes(
6001
6042
  # port 9583 is exposed via host_network and the secret path is
6002
6043
  # the auth for direct access. Document this in DOCS.md.
6003
6044
  mcp.custom_route("/", methods=["GET"])(handlers["root_page"])
6004
- mcp.custom_route("/settings", methods=["GET"])(handlers["settings_page"])
6005
- mcp.custom_route("/api/settings/tools", methods=["GET"])(handlers["get_tools"])
6006
- mcp.custom_route("/api/settings/tools", methods=["POST"])(
6007
- handlers["save_tools"]
6008
- )
6009
- mcp.custom_route("/api/settings/restart", methods=["POST"])(
6010
- handlers["restart_addon"]
6011
- )
6012
- mcp.custom_route("/api/settings/info", methods=["GET"])(
6013
- handlers["settings_info"]
6014
- )
6015
- mcp.custom_route("/api/settings/features", methods=["GET"])(
6016
- handlers["get_feature_flags"]
6017
- )
6018
- mcp.custom_route("/api/settings/features", methods=["POST"])(
6019
- handlers["save_feature_flags"]
6020
- )
6021
- # Advanced settings endpoints
6022
- mcp.custom_route("/api/settings/advanced", methods=["GET"])(
6023
- handlers["get_advanced_settings"]
6024
- )
6025
- mcp.custom_route("/api/settings/advanced", methods=["POST"])(
6026
- handlers["save_advanced_settings"]
6027
- )
6028
- # Auto-backup endpoints (#1288)
6029
- mcp.custom_route("/api/settings/backups", methods=["GET"])(
6030
- handlers["list_backups"]
6031
- )
6032
- mcp.custom_route("/api/settings/backups", methods=["DELETE"])(
6033
- handlers["delete_backups_bulk"]
6034
- )
6035
- mcp.custom_route("/api/settings/backups/{name}", methods=["GET"])(
6036
- handlers["view_backup"]
6037
- )
6038
- mcp.custom_route("/api/settings/backups/{name}/diff", methods=["GET"])(
6039
- handlers["diff_backup"]
6040
- )
6041
- mcp.custom_route("/api/settings/backups/{name}/restore", methods=["POST"])(
6042
- handlers["restore_backup"]
6043
- )
6044
- mcp.custom_route("/api/settings/backups/{name}", methods=["DELETE"])(
6045
- handlers["delete_backup"]
6046
- )
6047
- mcp.custom_route("/api/settings/backup-config", methods=["GET"])(
6048
- handlers["get_backup_config"]
6049
- )
6050
- mcp.custom_route("/api/settings/backup-config", methods=["POST"])(
6051
- handlers["save_backup_config"]
6052
- )
6053
- # Tool security policies endpoints
6054
- mcp.custom_route("/api/policy/config", methods=["GET"])(
6055
- handlers["policy_get_config"]
6056
- )
6057
- mcp.custom_route("/api/policy/config", methods=["PUT"])(
6058
- handlers["policy_put_config"]
6059
- )
6060
- mcp.custom_route("/api/policy/pending", methods=["GET"])(
6061
- handlers["policy_get_pending"]
6062
- )
6063
- mcp.custom_route("/api/policy/approve", methods=["POST"])(
6064
- handlers["policy_post_approve"]
6065
- )
6066
- mcp.custom_route("/api/policy/deny", methods=["POST"])(
6067
- handlers["policy_post_deny"]
6068
- )
6069
- mcp.custom_route("/api/policy/tool-schema", methods=["GET"])(
6070
- handlers["policy_get_tool_schema"]
6071
- )
6072
- mcp.custom_route("/api/policy/value-source", methods=["GET"])(
6073
- handlers["policy_get_value_source"]
6074
- )
6045
+ _mount("")
6075
6046
 
6076
6047
  if secret_prefix:
6077
6048
  # Mount under the MCP secret path so Docker / standalone clients
6078
6049
  # need the same secret to reach the UI as they do for the MCP
6079
- # endpoint. The frontend uses relative fetches (./api/settings/...)
6080
- # so the JS works at either prefix unchanged.
6081
- mcp.custom_route(f"{secret_prefix}/settings", methods=["GET"])(
6082
- handlers["settings_page"]
6083
- )
6084
- mcp.custom_route(f"{secret_prefix}/api/settings/tools", methods=["GET"])(
6085
- handlers["get_tools"]
6086
- )
6087
- mcp.custom_route(f"{secret_prefix}/api/settings/tools", methods=["POST"])(
6088
- handlers["save_tools"]
6089
- )
6090
- mcp.custom_route(f"{secret_prefix}/api/settings/restart", methods=["POST"])(
6091
- handlers["restart_addon"]
6092
- )
6093
- mcp.custom_route(f"{secret_prefix}/api/settings/info", methods=["GET"])(
6094
- handlers["settings_info"]
6095
- )
6096
- mcp.custom_route(f"{secret_prefix}/api/settings/features", methods=["GET"])(
6097
- handlers["get_feature_flags"]
6098
- )
6099
- mcp.custom_route(f"{secret_prefix}/api/settings/features", methods=["POST"])(
6100
- handlers["save_feature_flags"]
6101
- )
6102
- # Advanced settings endpoints
6103
- mcp.custom_route(f"{secret_prefix}/api/settings/advanced", methods=["GET"])(
6104
- handlers["get_advanced_settings"]
6105
- )
6106
- mcp.custom_route(f"{secret_prefix}/api/settings/advanced", methods=["POST"])(
6107
- handlers["save_advanced_settings"]
6108
- )
6109
- # Auto-backup endpoints (#1288)
6110
- mcp.custom_route(f"{secret_prefix}/api/settings/backups", methods=["GET"])(
6111
- handlers["list_backups"]
6112
- )
6113
- mcp.custom_route(f"{secret_prefix}/api/settings/backups", methods=["DELETE"])(
6114
- handlers["delete_backups_bulk"]
6115
- )
6116
- mcp.custom_route(
6117
- f"{secret_prefix}/api/settings/backups/{{name}}", methods=["GET"]
6118
- )(handlers["view_backup"])
6119
- mcp.custom_route(
6120
- f"{secret_prefix}/api/settings/backups/{{name}}/diff", methods=["GET"]
6121
- )(handlers["diff_backup"])
6122
- mcp.custom_route(
6123
- f"{secret_prefix}/api/settings/backups/{{name}}/restore", methods=["POST"]
6124
- )(handlers["restore_backup"])
6125
- mcp.custom_route(
6126
- f"{secret_prefix}/api/settings/backups/{{name}}", methods=["DELETE"]
6127
- )(handlers["delete_backup"])
6128
- mcp.custom_route(
6129
- f"{secret_prefix}/api/settings/backup-config", methods=["GET"]
6130
- )(handlers["get_backup_config"])
6131
- mcp.custom_route(
6132
- f"{secret_prefix}/api/settings/backup-config", methods=["POST"]
6133
- )(handlers["save_backup_config"])
6134
- # Tool security policies endpoints
6135
- mcp.custom_route(f"{secret_prefix}/api/policy/config", methods=["GET"])(
6136
- handlers["policy_get_config"]
6137
- )
6138
- mcp.custom_route(f"{secret_prefix}/api/policy/config", methods=["PUT"])(
6139
- handlers["policy_put_config"]
6140
- )
6141
- mcp.custom_route(f"{secret_prefix}/api/policy/pending", methods=["GET"])(
6142
- handlers["policy_get_pending"]
6143
- )
6144
- mcp.custom_route(f"{secret_prefix}/api/policy/approve", methods=["POST"])(
6145
- handlers["policy_post_approve"]
6146
- )
6147
- mcp.custom_route(f"{secret_prefix}/api/policy/deny", methods=["POST"])(
6148
- handlers["policy_post_deny"]
6149
- )
6150
- mcp.custom_route(f"{secret_prefix}/api/policy/tool-schema", methods=["GET"])(
6151
- handlers["policy_get_tool_schema"]
6152
- )
6153
- mcp.custom_route(f"{secret_prefix}/api/policy/value-source", methods=["GET"])(
6154
- handlers["policy_get_value_source"]
6155
- )
6050
+ # endpoint.
6051
+ _mount(secret_prefix)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.6.0.dev635
3
+ Version: 7.6.0.dev636
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