You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: homeassistant-addon/DOCS.md
+4-3Lines changed: 4 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ AI assistant integration for Home Assistant via Model Context Protocol (MCP).
4
4
5
5
## About
6
6
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.
8
8
9
9
**Key Features:**
10
10
-**Zero Configuration** - Automatically discovers Home Assistant connection
@@ -246,7 +246,7 @@ Requires add-on restart to take effect.
246
246
247
247
**Default:**`false`
248
248
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).
250
250
251
251
> ⚠️ **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.
252
252
@@ -356,7 +356,7 @@ If the add-on is slow or unresponsive:
356
356
357
357
<!-- ADDON_TOOLS_START -->
358
358
359
-
The add-on provides 86+ MCP tools for controlling Home Assistant:
359
+
The add-on provides 87+ MCP tools for controlling Home Assistant:
360
360
361
361
> 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.
362
362
@@ -476,6 +476,7 @@ The add-on provides 86+ MCP tools for controlling Home Assistant:
476
476
- `ha_config_set_yaml`**(beta — dev channel only)** — Update raw YAML configuration in configuration.yaml or packages/*.yaml (LAST RESORT).
477
477
- `ha_get_system_health`— Get Home Assistant system health, including Zigbee (ZHA) and Z-Wave JS network diagnostics.
478
478
- `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.
479
480
- `ha_reload_core`— Reload Home Assistant configuration without full restart.
Copy file name to clipboardExpand all lines: site/src/data/tools.json
+39Lines changed: 39 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -2594,6 +2594,45 @@
2594
2594
],
2595
2595
"source_file": "tools_updates.py"
2596
2596
},
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.",
0 commit comments