ha-mcp-dev 7.5.0.dev534__tar.gz → 7.5.0.dev536__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 (111) hide show
  1. {ha_mcp_dev-7.5.0.dev534/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.5.0.dev536}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/helpers.py +13 -0
  4. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_config_automations.py +0 -4
  5. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_config_dashboards.py +0 -11
  6. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  7. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/LICENSE +0 -0
  8. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/MANIFEST.in +0 -0
  9. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/README.md +0 -0
  10. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/setup.cfg +0 -0
  11. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/__init__.py +0 -0
  12. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/__main__.py +0 -0
  13. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/_pypi_marker +0 -0
  14. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/_version.py +0 -0
  15. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/auth/__init__.py +0 -0
  16. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/auth/consent_form.py +0 -0
  17. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/auth/provider.py +0 -0
  18. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/client/__init__.py +0 -0
  19. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/client/rest_client.py +0 -0
  20. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/client/supervisor_client.py +0 -0
  21. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/client/websocket_client.py +0 -0
  22. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/client/websocket_listener.py +0 -0
  23. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/config.py +0 -0
  24. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/errors.py +0 -0
  25. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/py.typed +0 -0
  26. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  27. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  28. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  29. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  30. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  31. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  32. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  33. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  34. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  35. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  36. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  37. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  38. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  39. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  40. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  41. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  42. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  43. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  44. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  45. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  46. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/server.py +0 -0
  47. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/settings_ui.py +0 -0
  48. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/smoke_test.py +0 -0
  49. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/__init__.py +0 -0
  50. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/backup.py +0 -0
  51. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  52. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/device_control.py +0 -0
  53. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/enhanced.py +0 -0
  54. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/reference_validator.py +0 -0
  55. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/registry.py +0 -0
  56. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/smart_search.py +0 -0
  57. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_addons.py +0 -0
  58. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_areas.py +0 -0
  59. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  60. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  61. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_calendar.py +0 -0
  62. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_camera.py +0 -0
  63. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_categories.py +0 -0
  64. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_code.py +0 -0
  65. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  66. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  67. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_config_scenes.py +0 -0
  68. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  69. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_energy.py +0 -0
  70. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_entities.py +0 -0
  71. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  72. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_groups.py +0 -0
  73. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_hacs.py +0 -0
  74. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_history.py +0 -0
  75. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_integrations.py +0 -0
  76. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_labels.py +0 -0
  77. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  78. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_registry.py +0 -0
  79. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_resources.py +0 -0
  80. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_search.py +0 -0
  81. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_service.py +0 -0
  82. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_services.py +0 -0
  83. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_system.py +0 -0
  84. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_todo.py +0 -0
  85. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_traces.py +0 -0
  86. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_updates.py +0 -0
  87. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_utility.py +0 -0
  88. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  89. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  90. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/tools_zones.py +0 -0
  91. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/tools/util_helpers.py +0 -0
  92. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/transforms/__init__.py +0 -0
  93. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/transforms/categorized_search.py +0 -0
  94. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/transforms/lite_docstrings.py +0 -0
  95. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/__init__.py +0 -0
  96. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/config_hash.py +0 -0
  97. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/data_paths.py +0 -0
  98. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/domain_handlers.py +0 -0
  99. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  100. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  101. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/operation_manager.py +0 -0
  102. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/python_sandbox.py +0 -0
  103. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp/utils/usage_logger.py +0 -0
  104. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  105. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  106. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  107. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  108. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  109. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/tests/__init__.py +0 -0
  110. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/tests/test_constants.py +0 -0
  111. {ha_mcp_dev-7.5.0.dev534 → ha_mcp_dev-7.5.0.dev536}/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.dev534
3
+ Version: 7.5.0.dev536
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.5.0.dev534"
7
+ version = "7.5.0.dev536"
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"
@@ -396,6 +396,19 @@ def exception_to_structured_error(
396
396
 
397
397
  error_response = _classify_exception(error, error_str, error_msg, context)
398
398
 
399
+ # Tracebacks are operationally valuable only for genuinely unclassified
400
+ # exceptions (programmer errors, library bugs) — every other branch in
401
+ # _classify_exception produces a structured signal that's sufficient on
402
+ # its own. Logging at exception level here gives operators line numbers
403
+ # for the bug class where ``str(error)`` is least informative, without
404
+ # re-introducing the duplicate ERROR-log noise that classified failures
405
+ # produced.
406
+ if (
407
+ isinstance(error_response.get("error"), dict)
408
+ and error_response["error"].get("code") == ErrorCode.INTERNAL_ERROR
409
+ ):
410
+ logger.exception("Unclassified exception: %s", error_msg)
411
+
399
412
  if suggestions and "error" in error_response and isinstance(error_response["error"], dict):
400
413
  # Set both `suggestion` (singular, first item) and `suggestions`
401
414
  # (plural, full list). create_error_response (errors.py) sets the
@@ -317,7 +317,6 @@ class AutomationConfigTools:
317
317
  return {
318
318
  "success": True,
319
319
  "action": "get",
320
- "identifier": identifier,
321
320
  "automation_id": entity_id or identifier,
322
321
  "config": normalized_config,
323
322
  "config_hash": config_hash,
@@ -325,7 +324,6 @@ class AutomationConfigTools:
325
324
  except ToolError:
326
325
  raise
327
326
  except Exception as e:
328
- logger.error(f"Error getting automation: {e}")
329
327
  exception_to_structured_error(
330
328
  e,
331
329
  context={"identifier": identifier, "action": "get"},
@@ -761,7 +759,6 @@ class AutomationConfigTools:
761
759
  except ToolError:
762
760
  raise
763
761
  except Exception as e:
764
- logger.error(f"Error upserting automation: {e}")
765
762
  suggestions = [
766
763
  "Check automation configuration format",
767
764
  "Ensure required fields: alias, trigger, action",
@@ -1033,7 +1030,6 @@ class AutomationConfigTools:
1033
1030
  except ToolError:
1034
1031
  raise
1035
1032
  except Exception as e:
1036
- logger.error(f"Error deleting automation: {e}")
1037
1033
  exception_to_structured_error(
1038
1034
  e,
1039
1035
  context={"identifier": identifier, "action": "delete"},
@@ -803,12 +803,6 @@ def register_config_dashboard_tools(mcp: Any, client: Any, **kwargs: Any) -> Non
803
803
  raise
804
804
  except Exception as e:
805
805
  if search_mode:
806
- logger.error(
807
- f"Error finding card in dashboard: url_path={url_path}, "
808
- f"entity_id={entity_id}, card_type={card_type}, heading={heading}, "
809
- f"error={e}",
810
- exc_info=True,
811
- )
812
806
  suggestions = [
813
807
  "Check HA connection",
814
808
  "Verify dashboard with ha_config_get_dashboard(list_only=True)",
@@ -821,7 +815,6 @@ def register_config_dashboard_tools(mcp: Any, client: Any, **kwargs: Any) -> Non
821
815
  "heading": heading,
822
816
  }
823
817
  else:
824
- logger.error(f"Error getting dashboard: {e}", exc_info=True)
825
818
  suggestions = [
826
819
  "Use ha_config_get_dashboard(list_only=True) to see available dashboards",
827
820
  "Check if you have permission to access this dashboard",
@@ -1482,7 +1475,6 @@ def register_config_dashboard_tools(mcp: Any, client: Any, **kwargs: Any) -> Non
1482
1475
  except ToolError:
1483
1476
  raise
1484
1477
  except Exception as e:
1485
- logger.error(f"Error setting dashboard: {e}")
1486
1478
  exception_to_structured_error(
1487
1479
  e,
1488
1480
  context={"action": "set", "url_path": url_path},
@@ -1564,8 +1556,6 @@ def register_config_dashboard_tools(mcp: Any, client: Any, **kwargs: Any) -> Non
1564
1556
  else:
1565
1557
  error_str = str(error_msg)
1566
1558
 
1567
- logger.error(f"Error deleting dashboard: {error_str}")
1568
-
1569
1559
  # If the error is "not found" / "doesn't exist", treat as success (idempotent)
1570
1560
  if (
1571
1561
  "unable to find" in error_str.lower()
@@ -1606,7 +1596,6 @@ def register_config_dashboard_tools(mcp: Any, client: Any, **kwargs: Any) -> Non
1606
1596
  except ToolError:
1607
1597
  raise
1608
1598
  except Exception as e:
1609
- logger.error(f"Error deleting dashboard: {e}")
1610
1599
  exception_to_structured_error(
1611
1600
  e,
1612
1601
  context={"action": "delete", "url_path": url_path},
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.5.0.dev534
3
+ Version: 7.5.0.dev536
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