ha-mcp-dev 7.5.0.dev578__tar.gz → 7.5.0.dev580__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 (116) hide show
  1. {ha_mcp_dev-7.5.0.dev578/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.5.0.dev580}/PKG-INFO +4 -4
  2. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/README.md +3 -3
  3. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/pyproject.toml +1 -1
  4. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_calendar.py +43 -14
  5. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580/src/ha_mcp_dev.egg-info}/PKG-INFO +4 -4
  6. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/LICENSE +0 -0
  7. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/MANIFEST.in +0 -0
  8. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/backup_manager.py +0 -0
  17. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/client/__init__.py +0 -0
  18. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/client/rest_client.py +0 -0
  19. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/client/supervisor_client.py +0 -0
  20. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/client/websocket_client.py +0 -0
  21. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/client/websocket_listener.py +0 -0
  22. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/config.py +0 -0
  23. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/errors.py +0 -0
  24. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/py.typed +0 -0
  25. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  26. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  27. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  28. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  29. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/.github/pull_request_template.md +0 -0
  30. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  31. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  32. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  33. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  34. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  35. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  36. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  37. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  38. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  39. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  40. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  41. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  42. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  43. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  44. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  45. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  46. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/yaml-only-integrations.md +0 -0
  47. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/server.py +0 -0
  48. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/settings_ui.py +0 -0
  49. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/smoke_test.py +0 -0
  50. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/stdio_settings_sidecar.py +0 -0
  51. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/__init__.py +0 -0
  52. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/auto_backup.py +0 -0
  53. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/backup.py +0 -0
  54. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  55. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/device_control.py +0 -0
  56. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/enhanced.py +0 -0
  57. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/helpers.py +0 -0
  58. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/reference_validator.py +0 -0
  59. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/registry.py +0 -0
  60. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/smart_search.py +0 -0
  61. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_addons.py +0 -0
  62. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_areas.py +0 -0
  63. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  64. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  65. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_camera.py +0 -0
  66. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_categories.py +0 -0
  67. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_code.py +0 -0
  68. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  69. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  70. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  71. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  72. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  73. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  74. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_energy.py +0 -0
  75. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_entities.py +0 -0
  76. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  77. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_groups.py +0 -0
  78. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_hacs.py +0 -0
  79. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_history.py +0 -0
  80. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_integrations.py +0 -0
  81. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_labels.py +0 -0
  82. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  83. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_registry.py +0 -0
  84. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_resources.py +0 -0
  85. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_search.py +0 -0
  86. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_service.py +0 -0
  87. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_services.py +0 -0
  88. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_system.py +0 -0
  89. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_todo.py +0 -0
  90. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_traces.py +0 -0
  91. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_updates.py +0 -0
  92. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_utility.py +0 -0
  93. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  94. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  95. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/tools_zones.py +0 -0
  96. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/tools/util_helpers.py +0 -0
  97. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/transforms/__init__.py +0 -0
  98. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/transforms/categorized_search.py +0 -0
  99. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  100. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/__init__.py +0 -0
  101. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/config_hash.py +0 -0
  102. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/data_paths.py +0 -0
  103. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/domain_handlers.py +0 -0
  104. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  105. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  106. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/operation_manager.py +0 -0
  107. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/python_sandbox.py +0 -0
  108. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp/utils/usage_logger.py +0 -0
  109. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  110. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  111. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  112. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  113. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  114. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/tests/__init__.py +0 -0
  115. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/tests/test_constants.py +0 -0
  116. {ha_mcp_dev-7.5.0.dev578 → ha_mcp_dev-7.5.0.dev580}/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.5.0.dev578
3
+ Version: 7.5.0.dev580
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
@@ -38,7 +38,7 @@ Dynamic: license-file
38
38
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
39
39
 
40
40
  <p align="center">
41
- <img src="https://img.shields.io/badge/tools-89-blue" alt="95+ Tools">
41
+ <img src="https://img.shields.io/badge/tools-88-blue" alt="95+ Tools">
42
42
  <a href="https://github.com/homeassistant-ai/ha-mcp/releases"><img src="https://img.shields.io/github/v/release/homeassistant-ai/ha-mcp" alt="Release"></a>
43
43
  <a href="https://github.com/homeassistant-ai/ha-mcp/actions/workflows/e2e-tests.yml"><img src="https://img.shields.io/github/actions/workflow/status/homeassistant-ai/ha-mcp/e2e-tests.yml?branch=master&label=E2E%20Tests" alt="E2E Tests"></a>
44
44
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -181,7 +181,7 @@ Spend less time configuring, more time enjoying your smart home.
181
181
  <details>
182
182
  <!-- TOOLS_TABLE_START -->
183
183
 
184
- <summary><b>Complete Tool List (89 tools)</b></summary>
184
+ <summary><b>Complete Tool List (88 tools)</b></summary>
185
185
 
186
186
  | Category | Tools |
187
187
  |----------|-------|
@@ -207,7 +207,7 @@ Spend less time configuring, more time enjoying your smart home.
207
207
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
208
208
  | **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
209
209
  | **Service & Device Control** | `ha_bulk_control`, `ha_call_event`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
210
- | **System** | `ha_backup_create`, `ha_backup_restore`, `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
210
+ | **System** | `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_backup`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
211
211
  | **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
212
212
  | **Utilities** | `ha_eval_template`, `ha_install_mcp_tools` *(beta)*, `ha_report_issue` |
213
213
  | **Zones** | `ha_get_zone`, `ha_remove_zone`, `ha_set_zone` |
@@ -8,7 +8,7 @@
8
8
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
9
9
 
10
10
  <p align="center">
11
- <img src="https://img.shields.io/badge/tools-89-blue" alt="95+ Tools">
11
+ <img src="https://img.shields.io/badge/tools-88-blue" alt="95+ Tools">
12
12
  <a href="https://github.com/homeassistant-ai/ha-mcp/releases"><img src="https://img.shields.io/github/v/release/homeassistant-ai/ha-mcp" alt="Release"></a>
13
13
  <a href="https://github.com/homeassistant-ai/ha-mcp/actions/workflows/e2e-tests.yml"><img src="https://img.shields.io/github/actions/workflow/status/homeassistant-ai/ha-mcp/e2e-tests.yml?branch=master&label=E2E%20Tests" alt="E2E Tests"></a>
14
14
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -151,7 +151,7 @@ Spend less time configuring, more time enjoying your smart home.
151
151
  <details>
152
152
  <!-- TOOLS_TABLE_START -->
153
153
 
154
- <summary><b>Complete Tool List (89 tools)</b></summary>
154
+ <summary><b>Complete Tool List (88 tools)</b></summary>
155
155
 
156
156
  | Category | Tools |
157
157
  |----------|-------|
@@ -177,7 +177,7 @@ Spend less time configuring, more time enjoying your smart home.
177
177
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
178
178
  | **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
179
179
  | **Service & Device Control** | `ha_bulk_control`, `ha_call_event`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
180
- | **System** | `ha_backup_create`, `ha_backup_restore`, `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
180
+ | **System** | `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_backup`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
181
181
  | **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
182
182
  | **Utilities** | `ha_eval_template`, `ha_install_mcp_tools` *(beta)*, `ha_report_issue` |
183
183
  | **Zones** | `ha_get_zone`, `ha_remove_zone`, `ha_set_zone` |
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "ha-mcp-dev"
7
- version = "7.5.0.dev578"
7
+ version = "7.5.0.dev580"
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"
@@ -19,6 +19,7 @@ from ..errors import ErrorCode, create_error_response
19
19
  from .auto_backup import with_auto_backup
20
20
  from .helpers import (
21
21
  exception_to_structured_error,
22
+ get_connected_ws_client,
22
23
  log_tool_usage,
23
24
  raise_tool_error,
24
25
  register_tool_methods,
@@ -354,7 +355,10 @@ class CalendarTools:
354
355
  """
355
356
  Delete an event from a calendar.
356
357
 
357
- Deletes a calendar event using the calendar.delete_event service.
358
+ Deletes a calendar event via the WebSocket ``calendar/event/delete``
359
+ command. HA's calendar component only registers ``create_event`` and
360
+ ``get_events`` as REST services — delete and update live on the
361
+ WebSocket API only.
358
362
 
359
363
  **Parameters:**
360
364
  - entity_id: Calendar entity ID (e.g., 'calendar.family')
@@ -402,8 +406,8 @@ class CalendarTools:
402
406
  )
403
407
 
404
408
  # entity_id format-check above does not cover the ``uid`` parameter.
405
- # Empty/whitespace uid would flow through to ``calendar.delete_event``
406
- # and HA returns a misleading "event not found".
409
+ # Empty/whitespace uid would flow through to the WS command and HA
410
+ # returns a misleading "event not found".
407
411
  validate_identifier_not_empty(
408
412
  uid,
409
413
  "uid",
@@ -413,21 +417,46 @@ class CalendarTools:
413
417
  context={"entity_id": entity_id},
414
418
  )
415
419
 
416
- # Build service data
417
- service_data: dict[str, Any] = {
418
- "entity_id": entity_id,
419
- "uid": uid,
420
- }
421
-
420
+ # ``calendar.delete_event`` is NOT a REST service — HA only
421
+ # registers ``calendar.create_event`` and ``calendar.get_events``.
422
+ # Delete is exposed exclusively via the WebSocket command
423
+ # ``calendar/event/delete`` (see HA Core
424
+ # ``homeassistant/components/calendar/__init__.py``).
425
+ ws_kwargs: dict[str, Any] = {"entity_id": entity_id, "uid": uid}
422
426
  if recurrence_id:
423
- service_data["recurrence_id"] = recurrence_id
427
+ ws_kwargs["recurrence_id"] = recurrence_id
424
428
  if recurrence_range:
425
- service_data["recurrence_range"] = recurrence_range
429
+ ws_kwargs["recurrence_range"] = recurrence_range
426
430
 
427
- # Call the calendar.delete_event service
428
- result = await self._client.call_service(
429
- "calendar", "delete_event", service_data
431
+ ws_client, conn_error = await get_connected_ws_client(
432
+ self._client.base_url,
433
+ self._client.token,
434
+ verify_ssl=self._client.verify_ssl,
430
435
  )
436
+ if conn_error or ws_client is None:
437
+ raise_tool_error(
438
+ conn_error
439
+ or create_error_response(
440
+ ErrorCode.CONNECTION_FAILED,
441
+ "Failed to connect to Home Assistant WebSocket",
442
+ context={"entity_id": entity_id, "uid": uid},
443
+ )
444
+ )
445
+
446
+ try:
447
+ result = await ws_client.send_command(
448
+ "calendar/event/delete", **ws_kwargs
449
+ )
450
+ finally:
451
+ # Guard disconnect: a transport-teardown error here would
452
+ # otherwise replace the original send_command exception.
453
+ try:
454
+ await ws_client.disconnect()
455
+ except Exception as disconnect_error:
456
+ logger.debug(
457
+ f"WebSocket disconnect after delete_event for "
458
+ f"{entity_id} uid={uid}: {disconnect_error}"
459
+ )
431
460
 
432
461
  return {
433
462
  "success": True,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.5.0.dev578
3
+ Version: 7.5.0.dev580
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
@@ -38,7 +38,7 @@ Dynamic: license-file
38
38
  <!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
39
39
 
40
40
  <p align="center">
41
- <img src="https://img.shields.io/badge/tools-89-blue" alt="95+ Tools">
41
+ <img src="https://img.shields.io/badge/tools-88-blue" alt="95+ Tools">
42
42
  <a href="https://github.com/homeassistant-ai/ha-mcp/releases"><img src="https://img.shields.io/github/v/release/homeassistant-ai/ha-mcp" alt="Release"></a>
43
43
  <a href="https://github.com/homeassistant-ai/ha-mcp/actions/workflows/e2e-tests.yml"><img src="https://img.shields.io/github/actions/workflow/status/homeassistant-ai/ha-mcp/e2e-tests.yml?branch=master&label=E2E%20Tests" alt="E2E Tests"></a>
44
44
  <a href="LICENSE.md"><img src="https://img.shields.io/github/license/homeassistant-ai/ha-mcp.svg" alt="License"></a>
@@ -181,7 +181,7 @@ Spend less time configuring, more time enjoying your smart home.
181
181
  <details>
182
182
  <!-- TOOLS_TABLE_START -->
183
183
 
184
- <summary><b>Complete Tool List (89 tools)</b></summary>
184
+ <summary><b>Complete Tool List (88 tools)</b></summary>
185
185
 
186
186
  | Category | Tools |
187
187
  |----------|-------|
@@ -207,7 +207,7 @@ Spend less time configuring, more time enjoying your smart home.
207
207
  | **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
208
208
  | **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
209
209
  | **Service & Device Control** | `ha_bulk_control`, `ha_call_event`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
210
- | **System** | `ha_backup_create`, `ha_backup_restore`, `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
210
+ | **System** | `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_updates`, `ha_manage_backup`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
211
211
  | **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
212
212
  | **Utilities** | `ha_eval_template`, `ha_install_mcp_tools` *(beta)*, `ha_report_issue` |
213
213
  | **Zones** | `ha_get_zone`, `ha_remove_zone`, `ha_set_zone` |