ha-mcp-dev 7.4.1.dev415__tar.gz → 7.4.1.dev417__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.
- {ha_mcp_dev-7.4.1.dev415/src/ha_mcp_dev.egg-info → ha_mcp_dev-7.4.1.dev417}/PKG-INFO +1 -1
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/pyproject.toml +1 -1
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_addons.py +43 -2
- ha_mcp_dev-7.4.1.dev417/src/ha_mcp/tools/tools_energy.py +1162 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_integrations.py +42 -2
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_utility.py +109 -5
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/util_helpers.py +81 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417/src/ha_mcp_dev.egg-info}/PKG-INFO +1 -1
- ha_mcp_dev-7.4.1.dev415/src/ha_mcp/tools/tools_energy.py +0 -626
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/LICENSE +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/MANIFEST.in +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/README.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/setup.cfg +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/__main__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/_pypi_marker +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/_version.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/auth/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/auth/consent_form.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/auth/provider.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/client/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/client/rest_client.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/client/websocket_client.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/client/websocket_listener.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/config.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/errors.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/py.typed +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/.claude/settings.json +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/.claude-plugin/marketplace.json +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/.claude-plugin/plugin.json +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/.github/ISSUE_TEMPLATE/skill-rca.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/AGENTS.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/CLAUDE.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/CONTRIBUTING.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/LICENSE +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/README.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/SKILL.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/evals/evals.json +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/automation-patterns.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-cards.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/dashboard-guide.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/device-control.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/domain-docs.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/examples.yaml +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/helper-selection.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/safe-refactoring.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/resources/skills-vendor/skills/home-assistant-best-practices/references/template-guidelines.md +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/server.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/settings_ui.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/smoke_test.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/backup.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/best_practice_checker.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/device_control.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/enhanced.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/helpers.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/reference_validator.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/registry.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/smart_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_areas.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_blueprints.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_bug_report.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_calendar.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_camera.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_categories.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_config_automations.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_config_dashboards.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_config_entry_flow.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_config_helpers.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_config_scripts.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_entities.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_filesystem.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_groups.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_hacs.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_history.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_labels.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_mcp_component.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_registry.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_resources.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_service.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_services.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_system.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_todo.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_traces.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_updates.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_voice_assistant.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_yaml_config.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/tools/tools_zones.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/transforms/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/transforms/categorized_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/utils/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/utils/config_hash.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/utils/domain_handlers.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/utils/fuzzy_search.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/utils/operation_manager.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/utils/python_sandbox.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp/utils/usage_logger.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp_dev.egg-info/SOURCES.txt +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp_dev.egg-info/dependency_links.txt +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp_dev.egg-info/entry_points.txt +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp_dev.egg-info/requires.txt +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/src/ha_mcp_dev.egg-info/top_level.txt +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/tests/__init__.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/tests/test_constants.py +0 -0
- {ha_mcp_dev-7.4.1.dev415 → ha_mcp_dev-7.4.1.dev417}/tests/test_env_manager.py +0 -0
|
@@ -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.
|
|
7
|
+
version = "7.4.1.dev417"
|
|
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"
|
|
@@ -295,11 +295,50 @@ async def get_addon_info(client: HomeAssistantClient, slug: str) -> dict[str, An
|
|
|
295
295
|
|
|
296
296
|
Returns:
|
|
297
297
|
Dictionary with add-on details including ingress info, state, options, etc.
|
|
298
|
+
Top-level ``log_level`` is surfaced when the add-on exposes one via its
|
|
299
|
+
Supervisor options or schema (e.g., ``"debug"``, ``"info"``, etc.).
|
|
298
300
|
"""
|
|
299
301
|
response = await _supervisor_api_call(client, f"/addons/{slug}/info")
|
|
300
302
|
if not response.get("success"):
|
|
301
303
|
return response # TODO(tech-debt): should raise ToolError per AGENTS.md Pattern B
|
|
302
|
-
|
|
304
|
+
|
|
305
|
+
addon = response["result"] if isinstance(response["result"], dict) else {}
|
|
306
|
+
result: dict[str, Any] = {"success": True, "addon": addon}
|
|
307
|
+
|
|
308
|
+
log_level = _extract_addon_log_level(addon)
|
|
309
|
+
if log_level is not None:
|
|
310
|
+
result["log_level"] = log_level
|
|
311
|
+
|
|
312
|
+
return result
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
def _extract_addon_log_level(addon: dict[str, Any]) -> str | None:
|
|
316
|
+
"""Return the add-on's configured log level, if any.
|
|
317
|
+
|
|
318
|
+
Checks the add-on's current options first (``options.log_level`` — what the
|
|
319
|
+
user set), then falls back to the schema (Supervisor serializes ``schema``
|
|
320
|
+
as a list of ``{name, type, ...}`` field descriptors) so add-ons that ship a
|
|
321
|
+
log_level option without a value still surface ``"default"``. Returns
|
|
322
|
+
``None`` when the add-on exposes no log_level option at all.
|
|
323
|
+
|
|
324
|
+
The lower-case ``"default"`` is the literal Supervisor sentinel; the
|
|
325
|
+
integration path uses ``"DEFAULT"`` (uppercase) — these are distinct values
|
|
326
|
+
by design and should not be cross-compared.
|
|
327
|
+
"""
|
|
328
|
+
options = addon.get("options")
|
|
329
|
+
if isinstance(options, dict):
|
|
330
|
+
level = options.get("log_level")
|
|
331
|
+
if isinstance(level, str) and level.strip():
|
|
332
|
+
return level
|
|
333
|
+
|
|
334
|
+
schema = addon.get("schema")
|
|
335
|
+
if isinstance(schema, list) and any(
|
|
336
|
+
isinstance(item, dict) and item.get("name") == "log_level"
|
|
337
|
+
for item in schema
|
|
338
|
+
):
|
|
339
|
+
return "default"
|
|
340
|
+
|
|
341
|
+
return None
|
|
303
342
|
|
|
304
343
|
|
|
305
344
|
async def list_addons(
|
|
@@ -1153,7 +1192,9 @@ def register_addon_tools(mcp: Any, client: HomeAssistantClient, **kwargs: Any) -
|
|
|
1153
1192
|
**Note:** This tool only works with Home Assistant OS or Supervised installations.
|
|
1154
1193
|
|
|
1155
1194
|
**SINGLE ADD-ON (slug provided):**
|
|
1156
|
-
Returns comprehensive details including ingress entry, ports, options,
|
|
1195
|
+
Returns comprehensive details including ingress entry, ports, options, state,
|
|
1196
|
+
and (when the add-on exposes one) a top-level ``log_level`` reflecting the
|
|
1197
|
+
current Supervisor option — useful for confirming ha_manage_addon log_level changes.
|
|
1157
1198
|
Useful for discovering what APIs an add-on exposes before calling ha_manage_addon.
|
|
1158
1199
|
|
|
1159
1200
|
**INSTALLED ADD-ONS (source='installed'):**
|