ha-mcp-dev 7.1.0.dev292__tar.gz → 7.1.0.dev294__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 (97) hide show
  1. {ha_mcp_dev-7.1.0.dev292/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.1.0.dev294}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/smart_search.py +20 -6
  4. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/LICENSE +0 -0
  6. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/MANIFEST.in +0 -0
  7. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/README.md +0 -0
  8. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/auth/__init__.py +0 -0
  13. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/auth/consent_form.py +0 -0
  14. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/auth/provider.py +0 -0
  15. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/client/__init__.py +0 -0
  16. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/client/rest_client.py +0 -0
  17. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/client/websocket_client.py +0 -0
  18. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/client/websocket_listener.py +0 -0
  19. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/config.py +0 -0
  20. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/errors.py +0 -0
  21. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/py.typed +0 -0
  22. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/card_types.json +0 -0
  23. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/dashboard_guide.md +0 -0
  24. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  25. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  26. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  27. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  28. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  29. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  30. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  31. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  32. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  33. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  34. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  35. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  36. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  37. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  38. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  39. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  40. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/server.py +0 -0
  41. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/smoke_test.py +0 -0
  42. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/__init__.py +0 -0
  43. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/backup.py +0 -0
  44. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  45. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/device_control.py +0 -0
  46. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/enhanced.py +0 -0
  47. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/helpers.py +0 -0
  48. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/registry.py +0 -0
  49. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_addons.py +0 -0
  50. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_areas.py +0 -0
  51. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  52. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  53. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_calendar.py +0 -0
  54. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_camera.py +0 -0
  55. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  56. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  57. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  58. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
  59. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_config_info.py +0 -0
  60. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  61. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_entities.py +0 -0
  62. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  63. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_groups.py +0 -0
  64. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_hacs.py +0 -0
  65. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_history.py +0 -0
  66. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_integrations.py +0 -0
  67. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_labels.py +0 -0
  68. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  69. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_registry.py +0 -0
  70. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_resources.py +0 -0
  71. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_search.py +0 -0
  72. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_service.py +0 -0
  73. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_services.py +0 -0
  74. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_system.py +0 -0
  75. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_todo.py +0 -0
  76. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_traces.py +0 -0
  77. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_updates.py +0 -0
  78. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_utility.py +0 -0
  79. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  80. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/tools_zones.py +0 -0
  81. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/tools/util_helpers.py +0 -0
  82. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/transforms/__init__.py +0 -0
  83. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/transforms/categorized_search.py +0 -0
  84. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/utils/__init__.py +0 -0
  85. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/utils/domain_handlers.py +0 -0
  86. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  87. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/utils/operation_manager.py +0 -0
  88. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/utils/python_sandbox.py +0 -0
  89. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp/utils/usage_logger.py +0 -0
  90. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  91. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  92. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  93. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  94. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  95. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/tests/__init__.py +0 -0
  96. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/tests/test_constants.py +0 -0
  97. {ha_mcp_dev-7.1.0.dev292 → ha_mcp_dev-7.1.0.dev294}/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.1.0.dev292
3
+ Version: 7.1.0.dev294
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.1.0.dev292"
7
+ version = "7.1.0.dev294"
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"
@@ -4,6 +4,7 @@ Smart search tools for Home Assistant MCP server.
4
4
 
5
5
  import asyncio
6
6
  import logging
7
+ import random
7
8
  import time
8
9
  from typing import Any
9
10
 
@@ -387,9 +388,20 @@ class SmartSearchTools:
387
388
  return_exceptions=True,
388
389
  )
389
390
 
390
- # Process results, handling any exceptions gracefully
391
- entities = results[0] if not isinstance(results[0], Exception) else []
392
- services = results[1] if not isinstance(results[1], Exception) else []
391
+ # Entities are mandatory surface connection/auth errors immediately.
392
+ # Services failure is logged at warning (affects total count and service catalog).
393
+ # Registry failures are logged at debug (area enrichment only).
394
+ if isinstance(results[0], Exception):
395
+ raise results[0]
396
+
397
+ entities = results[0]
398
+ partial_warnings: list[str] = []
399
+ if isinstance(results[1], Exception):
400
+ logger.warning(f"Could not fetch services: {results[1]}")
401
+ partial_warnings.append(f"Services unavailable: {results[1]}")
402
+ services = []
403
+ else:
404
+ services = results[1]
393
405
 
394
406
  # Handle area registry result
395
407
  area_registry: list[dict[str, Any]] = []
@@ -537,8 +549,6 @@ class SmartSearchTools:
537
549
  }
538
550
 
539
551
  # Prepare domain stats with entity filtering and truncation info
540
- import random
541
-
542
552
  formatted_domain_stats = {}
543
553
  for domain, stats in sorted_domains:
544
554
  all_entities = stats["all_entities"]
@@ -569,7 +579,7 @@ class SmartSearchTools:
569
579
  }
570
580
 
571
581
  # Build base response
572
- base_response = {
582
+ base_response: dict[str, Any] = {
573
583
  "success": True,
574
584
  "system_summary": {
575
585
  "total_entities": len(entities),
@@ -582,6 +592,10 @@ class SmartSearchTools:
582
592
  "ai_insights": ai_insights,
583
593
  }
584
594
 
595
+ if partial_warnings:
596
+ base_response["partial"] = True
597
+ base_response["warnings"] = partial_warnings
598
+
585
599
  # Add level-specific fields
586
600
  if detail_level == "full":
587
601
  # Full: Add device types and service catalog
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.1.0.dev292
3
+ Version: 7.1.0.dev294
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