ha-mcp-dev 7.4.1.dev436__tar.gz → 7.4.1.dev438__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 (106) hide show
  1. {ha_mcp_dev-7.4.1.dev436/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.4.1.dev438}/PKG-INFO +1 -1
  2. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/pyproject.toml +1 -1
  3. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_config_helpers.py +21 -10
  4. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
  5. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/LICENSE +0 -0
  6. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/MANIFEST.in +0 -0
  7. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/README.md +0 -0
  8. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/setup.cfg +0 -0
  9. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/__init__.py +0 -0
  10. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/__main__.py +0 -0
  11. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/_pypi_marker +0 -0
  12. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/_version.py +0 -0
  13. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/auth/__init__.py +0 -0
  14. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/auth/consent_form.py +0 -0
  15. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/auth/provider.py +0 -0
  16. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/client/__init__.py +0 -0
  17. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/client/rest_client.py +0 -0
  18. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/client/websocket_client.py +0 -0
  19. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/client/websocket_listener.py +0 -0
  20. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/config.py +0 -0
  21. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/errors.py +0 -0
  22. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/py.typed +0 -0
  23. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
  24. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
  25. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
  26. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
  27. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
  28. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
  29. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
  30. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
  31. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
  32. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
  33. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
  34. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
  35. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
  36. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
  37. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
  38. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
  39. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
  40. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
  41. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
  42. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
  43. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/server.py +0 -0
  44. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/settings_ui.py +0 -0
  45. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/smoke_test.py +0 -0
  46. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/__init__.py +0 -0
  47. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/backup.py +0 -0
  48. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/best_practice_checker.py +0 -0
  49. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/device_control.py +0 -0
  50. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/enhanced.py +0 -0
  51. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/helpers.py +0 -0
  52. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/reference_validator.py +0 -0
  53. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/registry.py +0 -0
  54. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/smart_search.py +0 -0
  55. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_addons.py +0 -0
  56. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_areas.py +0 -0
  57. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_blueprints.py +0 -0
  58. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_bug_report.py +0 -0
  59. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_calendar.py +0 -0
  60. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_camera.py +0 -0
  61. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_categories.py +0 -0
  62. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_config_automations.py +0 -0
  63. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
  64. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
  65. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
  66. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_energy.py +0 -0
  67. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_entities.py +0 -0
  68. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_filesystem.py +0 -0
  69. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_groups.py +0 -0
  70. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_hacs.py +0 -0
  71. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_history.py +0 -0
  72. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_integrations.py +0 -0
  73. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_labels.py +0 -0
  74. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
  75. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_registry.py +0 -0
  76. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_resources.py +0 -0
  77. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_search.py +0 -0
  78. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_service.py +0 -0
  79. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_services.py +0 -0
  80. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_system.py +0 -0
  81. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_todo.py +0 -0
  82. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_traces.py +0 -0
  83. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_updates.py +0 -0
  84. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_utility.py +0 -0
  85. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
  86. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
  87. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/tools_zones.py +0 -0
  88. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/tools/util_helpers.py +0 -0
  89. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/transforms/__init__.py +0 -0
  90. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/transforms/categorized_search.py +0 -0
  91. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/__init__.py +0 -0
  92. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/config_hash.py +0 -0
  93. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/domain_handlers.py +0 -0
  94. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/fuzzy_search.py +0 -0
  95. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/kill_signal_diagnostics.py +0 -0
  96. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/operation_manager.py +0 -0
  97. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/python_sandbox.py +0 -0
  98. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp/utils/usage_logger.py +0 -0
  99. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
  100. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
  101. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
  102. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
  103. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
  104. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/tests/__init__.py +0 -0
  105. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/tests/test_constants.py +0 -0
  106. {ha_mcp_dev-7.4.1.dev436 → ha_mcp_dev-7.4.1.dev438}/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.4.1.dev436
3
+ Version: 7.4.1.dev438
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.4.1.dev436"
7
+ version = "7.4.1.dev438"
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"
@@ -248,9 +248,12 @@ async def _handle_flow_helper(
248
248
  if not config_dict.get("name"):
249
249
  raise_tool_error(create_error_response(
250
250
  ErrorCode.VALIDATION_INVALID_PARAMETER,
251
- "name is required for create action",
251
+ f'name is required for create action. Include "name" as a '
252
+ f'top-level argument, e.g. {{"helper_type": "{helper_type}", '
253
+ f'"name": "My Helper"}}.',
252
254
  suggestions=[
253
- "Pass the name argument directly or include 'name' in config",
255
+ 'Add "name": "My Helper" at the top level of the JSON arguments',
256
+ 'Or include "name": "My Helper" inside the "config" dict',
254
257
  ],
255
258
  context={"helper_type": helper_type},
256
259
  ))
@@ -533,11 +536,12 @@ def register_config_helper_tools(mcp: Any, client: Any, **kwargs: Any) -> None:
533
536
  str | None,
534
537
  Field(
535
538
  description=(
536
- "Display name for the helper. Required on create; optional on "
537
- "update (pass helper_id to skip). For flow-based helper types on "
538
- "update (template, group, utility_meter, ...), this is typically "
539
- "ignored options flows don't expose renaming. Rename a flow "
540
- "helper by deleting and recreating instead."
539
+ "REQUIRED when creating (no helper_id provided). Display name "
540
+ "for the helper. Optional on update pass helper_id instead. "
541
+ "For flow-based helper types on update (template, group, "
542
+ "utility_meter, ...), this is typically ignored options flows "
543
+ "don't expose renaming. Rename a flow helper by deleting and "
544
+ "recreating instead."
541
545
  ),
542
546
  default=None,
543
547
  ),
@@ -545,7 +549,7 @@ def register_config_helper_tools(mcp: Any, client: Any, **kwargs: Any) -> None:
545
549
  helper_id: Annotated[
546
550
  str | None,
547
551
  Field(
548
- description="Helper ID for updates (e.g., 'my_button' or 'input_button.my_button'). If not provided, creates a new helper.",
552
+ description="REQUIRED when updating an existing helper. Bare ID ('my_button') or full entity ID ('input_button.my_button'). Omit to create a new helper.",
549
553
  default=None,
550
554
  ),
551
555
  ] = None,
@@ -783,7 +787,7 @@ def register_config_helper_tools(mcp: Any, client: Any, **kwargs: Any) -> None:
783
787
  """
784
788
  Create or update Home Assistant helper entities (27 types, unified interface).
785
789
 
786
- Creates new helper if helper_id is omitted, updates existing if helper_id is provided.
790
+ Create requires `name`; update requires `helper_id`.
787
791
 
788
792
  SIMPLE types (structured params, WebSocket API): input_boolean, input_button,
789
793
  input_select, input_number, input_text, input_datetime, counter, timer, schedule,
@@ -869,7 +873,14 @@ def register_config_helper_tools(mcp: Any, client: Any, **kwargs: Any) -> None:
869
873
  raise_tool_error(
870
874
  create_error_response(
871
875
  ErrorCode.VALIDATION_INVALID_PARAMETER,
872
- "name is required for create action",
876
+ f'name is required for create action. Include '
877
+ f'"name" as a top-level argument, e.g. '
878
+ f'{{"helper_type": "{helper_type}", "name": '
879
+ f'"My Helper"}}.',
880
+ suggestions=[
881
+ 'Add "name": "My Helper" at the top level of the JSON arguments',
882
+ 'Or pass "helper_id": "my_helper" if you intended to update an existing helper',
883
+ ],
873
884
  context={"helper_type": helper_type},
874
885
  )
875
886
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ha-mcp-dev
3
- Version: 7.4.1.dev436
3
+ Version: 7.4.1.dev438
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