Skip to content

Commit 0e6b54f

Browse files
chore(internal): sync tool docs after merge [skip ci]
1 parent 15b48bb commit 0e6b54f

3 files changed

Lines changed: 46 additions & 6 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<!-- mcp-name: io.github.homeassistant-ai/ha-mcp -->
99

1010
<p align="center">
11-
<img src="https://img.shields.io/badge/tools-86-blue" alt="95+ Tools">
11+
<img src="https://img.shields.io/badge/tools-87-blue" alt="95+ Tools">
1212
<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>
1313
<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>
1414
<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.
151151
<details>
152152
<!-- TOOLS_TABLE_START -->
153153

154-
<summary><b>Complete Tool List (86 tools)</b></summary>
154+
<summary><b>Complete Tool List (87 tools)</b></summary>
155155

156156
| Category | Tools |
157157
|----------|-------|
@@ -175,7 +175,7 @@ Spend less time configuring, more time enjoying your smart home.
175175
| **Scripts** | `ha_config_get_script`, `ha_config_remove_script`, `ha_config_set_script` |
176176
| **Search & Discovery** | `ha_deep_search`, `ha_get_overview`, `ha_get_state`, `ha_search_entities` |
177177
| **Service & Device Control** | `ha_bulk_control`, `ha_call_service`, `ha_get_operation_status`, `ha_list_services` |
178-
| **System** | `ha_backup_create`, `ha_backup_restore`, `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_system_health`, `ha_get_updates`, `ha_reload_core`, `ha_restart` |
178+
| **System** | `ha_backup_create`, `ha_backup_restore`, `ha_check_config`, `ha_config_set_yaml` *(beta)*, `ha_get_system_health`, `ha_get_updates`, `ha_manage_custom_tool` *(beta)*, `ha_reload_core`, `ha_restart` |
179179
| **Todo Lists** | `ha_get_todo`, `ha_remove_todo_item`, `ha_set_todo_item` |
180180
| **Utilities** | `ha_eval_template`, `ha_install_mcp_tools` *(beta)*, `ha_report_issue` |
181181
| **Zones** | `ha_get_zone`, `ha_remove_zone`, `ha_set_zone` |

homeassistant-addon/DOCS.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ AI assistant integration for Home Assistant via Model Context Protocol (MCP).
44

55
## About
66

7-
This add-on enables AI assistants (Claude, ChatGPT, etc.) to control your Home Assistant installation through the Model Context Protocol (MCP). It provides 86+ tools for device control, automation management, entity search, calendars, todo lists, dashboards, backup/restore, history/statistics, camera snapshots, and system queries.
7+
This add-on enables AI assistants (Claude, ChatGPT, etc.) to control your Home Assistant installation through the Model Context Protocol (MCP). It provides 87+ tools for device control, automation management, entity search, calendars, todo lists, dashboards, backup/restore, history/statistics, camera snapshots, and system queries.
88

99
**Key Features:**
1010
- **Zero Configuration** - Automatically discovers Home Assistant connection
@@ -246,7 +246,7 @@ Requires add-on restart to take effect.
246246

247247
**Default:** `false`
248248

249-
Replaces the full tool catalog (~86 tools, ~46K tokens) with search-based discovery (~4 proxy tools, ~5K tokens). When enabled, tools are found via `ha_search_tools` and executed through categorized proxies (read/write/delete).
249+
Replaces the full tool catalog (~87 tools, ~46K tokens) with search-based discovery (~4 proxy tools, ~5K tokens). When enabled, tools are found via `ha_search_tools` and executed through categorized proxies (read/write/delete).
250250

251251
> ⚠️ **Do NOT enable this if you use Claude in Sonnet or Opus modes.** Those models run their own built-in tool search / deferred tools, which conflicts with ha-mcp's — running both at once does not work. To use ha-mcp's tool search with Claude, disable Claude's built-in tool search first; otherwise leave this off.
252252
@@ -356,7 +356,7 @@ If the add-on is slow or unresponsive:
356356

357357
<!-- ADDON_TOOLS_START -->
358358

359-
The add-on provides 86+ MCP tools for controlling Home Assistant:
359+
The add-on provides 87+ MCP tools for controlling Home Assistant:
360360

361361
> Tools marked **(beta — dev channel only)** are gated behind feature flags and ship with the dev channel add-on only. See [docs/beta.md](https://github.com/homeassistant-ai/ha-mcp/blob/master/docs/beta.md) for setup and caveats.
362362

@@ -476,6 +476,7 @@ The add-on provides 86+ MCP tools for controlling Home Assistant:
476476
- `ha_config_set_yaml` **(beta — dev channel only)** — Update raw YAML configuration in configuration.yaml or packages/*.yaml (LAST RESORT).
477477
- `ha_get_system_health` — Get Home Assistant system health, including Zigbee (ZHA) and Z-Wave JS network diagnostics.
478478
- `ha_get_updates` — Get update information -- list all updates or get details for a specific one.
479+
- `ha_manage_custom_tool` **(beta — dev channel only)** — Create and run a custom tool in a sandbox, or manage saved custom tools.
479480
- `ha_reload_core` — Reload Home Assistant configuration without full restart.
480481
- `ha_restart` — Restart Home Assistant.
481482

site/src/data/tools.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2594,6 +2594,45 @@
25942594
],
25952595
"source_file": "tools_updates.py"
25962596
},
2597+
{
2598+
"name": "ha_manage_custom_tool",
2599+
"title": "Custom Tool",
2600+
"description": "Create and run a custom tool in a sandbox, or manage saved custom tools.\n\n⚠️ **LAST RESORT** — search for existing tools first.\n\n**Modes** (mutually exclusive):\n- Provide ``code`` + ``justification`` to execute custom code\n- Set ``run_saved`` to re-run a previously saved tool by name\n- Set ``list_saved=True`` to list all saved tools\n\n**Available functions in sandbox:**\n- ``api_get(endpoint)`` — GET request to HA REST API\n- ``api_post(endpoint, data)`` — POST request to HA REST API\n- ``ws_send(message)`` — send a HA WebSocket command (e.g. registry\n lookups, ``render_template``, dashboard ops). ``message`` must include\n a ``\"type\"`` field; the MCP server adds ``id`` and handles auth.\n- ``call_tool(name, args)`` — call a registered MCP tool\n- ``delete_saved_tool(name)`` — remove a previously saved custom\n tool by name. Returns ``{\"deleted\": True, \"name\": name}`` or\n ``{\"error\": ...}``.\n\nUse ``api_get``/``api_post`` for REST operations not covered by existing\ntools. Use ``ws_send`` when the operation is only available over the\nHome Assistant WebSocket API (most registry CRUD, template rendering,\nand Lovelace operations). Use ``call_tool`` when an existing tool\nalready does what you need. Use ``delete_saved_tool`` to clean up\nsaved tools you no longer need.\n\nSaved tools persist across server restarts when\n``CODE_MODE_SAVED_TOOLS_PATH`` is set (the addon sets this by\ndefault to ``/data/saved_tools.json``).\n\nExample — check repairs (no built-in tool for this):\n```python\nrepairs = await api_get(\"/repairs/issues\")\nrepairs\n```\n\nExample — list areas via WebSocket:\n```python\nresult = await ws_send({\"type\": \"config/area_registry/list\"})\nresult.get(\"result\", [])\n```\n\nExample — chain existing tools:\n```python\nresult = await call_tool(\"ha_search_entities\", {\"query\": \"light\", \"limit\": 5})\ndata = result.get(\"data\", result)\nlights = data.get(\"results\", [])\nfor e in lights:\n await call_tool(\"ha_call_service\", {\n \"domain\": \"light\", \"service\": \"turn_off\",\n \"entity_id\": e[\"entity_id\"]})\n{\"turned_off\": len(lights)}\n```\n\nExample — delete an obsolete saved tool:\n```python\ndelete_saved_tool(\"old_movie_mode\")\n```\n\nArgs:\n code: Python code to execute. Last expression is the return value.\n justification: Why no existing tool works (required with code).\n save_as: Save the tool under this name for reuse (alphanumeric/underscores, max 64 chars).\n run_saved: Name of a previously saved tool to re-run.\n list_saved: Set True to list all saved tools.",
2601+
"inputSchema": {
2602+
"properties": {
2603+
"code": {
2604+
"type": "str | None",
2605+
"default": null
2606+
},
2607+
"justification": {
2608+
"type": "str | None",
2609+
"default": null
2610+
},
2611+
"save_as": {
2612+
"type": "str | None",
2613+
"default": null
2614+
},
2615+
"run_saved": {
2616+
"type": "str | None",
2617+
"default": null
2618+
},
2619+
"list_saved": {
2620+
"type": "bool",
2621+
"default": false
2622+
}
2623+
}
2624+
},
2625+
"annotations": {
2626+
"destructiveHint": true,
2627+
"idempotentHint": false,
2628+
"readOnlyHint": false
2629+
},
2630+
"tags": [
2631+
"System",
2632+
"beta"
2633+
],
2634+
"source_file": "tools_code.py"
2635+
},
25972636
{
25982637
"name": "ha_reload_core",
25992638
"title": "Reload Core Components",

0 commit comments

Comments
 (0)