Home Assistant's MCP Server integration serves stateless Streamable HTTP at /api/mcp; mcp-proxy defaults to SSE, so the previous registration (SSE at /mcp_server/sse) could never attach. Pass --transport=streamablehttp --stateless and default ha_mcp_url to /api/mcp. Match managed MCP entries by binary basename outside $HOME so a base-image path change still updates them, while user-installed binaries under $HOME remain untouched. Resolve tokensave via command -v like the others. Write Claude config files 0600 (they hold the HA long-lived token in clear text) and scope the build-time chmod +x pass to the shipped script dirs. Docs: dashboard reachability wording, stale /config/data HOME, and the custom-script filename (claude_desktop.sh, per the $slug.sh template). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Home assistant add-on: Claude Desktop
Run Claude Desktop in a LinuxServer.io Selkies add-on, with Headroom MCP context compression, RTK Bash-output acceleration, and code-intelligence tooling wired in by default.
Installation
- Add this repository to the Home Assistant add-on store.
- Install Claude Desktop.
- Start the add-on and open the web UI from the sidebar.
- Sign in with your Claude account from the Desktop app.
Claude Desktop sign-in requires a claude.ai plan that supports the Desktop app. API keys are not accepted by the Desktop application. Anthropic's Linux beta currently does not include Computer Use or dictation.
Architecture
Everything is built around the Claude Desktop app. Claude Code is installed in
the same image but is not exposed as a standalone service: Claude Desktop's
cowork and dispatch sessions run it internally, and they pick up the shared
Claude Code configuration (~/.claude), hooks, and MCP servers automatically.
- Claude Desktop uses Headroom through its MCP tools.
- Claude Code sessions inside Desktop get the same MCP servers via
~/.claude.jsonand RTK'sPreToolUseBash hook via~/.claude/settings.json. - gnome-keyring provides the Secret Service backend Electron needs to persist sign-in and dispatch permission grants across restarts.
Features
- Claude Desktop in single-app Selkies mode with Home Assistant ingress.
- Official Claude Code stable package powering Desktop cowork/dispatch sessions.
- Persistent
$HOMEat the configureddata_location(default/data/data), preserving Desktop and Claude Code state across restarts. - Persistent sign-in through a bundled, auto-unlocked gnome-keyring.
- Optional runtime Claude Desktop updates from Anthropic's apt repository.
- Optional extra apt and pip package installation (pip installs use
uvfor speed). - Baked-in
git, GitHub CLI (gh), andripgrep. - Custom script support through the repository standard
claude_desktop.sh. - Bundled optimization tools: Headroom (MCP + local proxy), RTK, tokensave, and Caveman — each individually switchable.
- Optional Home Assistant MCP bridge so Claude can query and control Home Assistant.
- Headroom dashboard exposed on mapped port
8787. - Low-power defaults for GPU mapping, Selkies frame rate, and volatile caches.
Options
| Option | Default | Description |
|---|---|---|
PUID / PGID |
0 / 0 |
Numeric user and group applied by the LinuxServer initialization. |
TZ |
Optional timezone, for example Europe/Brussels. |
|
KEYBOARD |
Optional Selkies keyboard layout. | |
PASSWORD |
Optional password for direct Selkies ports. | |
DRINODE |
Optional GPU device override for Selkies. | |
DNS_server |
8.8.8.8 |
DNS server used by the standard DNS module. |
auto_update |
true |
Upgrade claude-desktop from Anthropic's apt repository at startup. |
install_headroom |
true |
Register the Headroom MCP server and run the supervised local proxy/dashboard. |
install_rtk |
true |
Configure RTK's Claude Code PreToolUse hook. |
install_tokensave |
true |
Register the tokensave code-intelligence MCP server for Desktop and Claude Code. |
install_caveman |
true |
Install the Caveman Claude Code plugin in the persistent Claude home. |
install_github_cli |
true |
Enable setup checks for the baked-in git and gh commands. |
github_token |
Optional GitHub token used to authenticate gh and Git operations. |
|
github_username |
Optional global Git author name. | |
github_email |
Optional global Git author email. | |
enable_ha_mcp |
false |
Register Home Assistant's MCP server in Claude (requires ha_mcp_token). |
ha_mcp_url |
http://homeassistant:8123/mcp_server/sse |
SSE endpoint of Home Assistant's MCP Server integration. |
ha_mcp_token |
Home Assistant long-lived access token used by the MCP bridge. | |
additional_apps |
Comma-separated Debian apt packages to install at startup. | |
additional_pip |
Comma-separated pip packages installed at startup (via uv). |
|
data_location |
/data/data |
Persistent home directory for Claude and tooling. |
env_vars |
[] |
Additional environment variables exported inside the container. |
Headroom behavior
When install_headroom is enabled, the add-on registers headroom mcp serve
in Claude Desktop and Claude Code, and starts a supervised local Headroom
backend. Claude can use headroom_compress, headroom_retrieve, and
headroom_stats through MCP.
Claude Desktop overrides ANTHROPIC_BASE_URL, so it is deliberately launched
without proxy injection; the MCP integration is the supported path.
The Headroom dashboard is available at:
http://<home-assistant-host>:8787/dashboard
through the default 8787/tcp port mapping. The dashboard is unauthenticated
and is reachable wherever Home Assistant publishes that port, so treat it as
sensitive: do not expose it directly to the public internet, and unmap the port
in the add-on Network section if you do not want it reachable at all.
Home Assistant MCP bridge
To let Claude query and control Home Assistant:
- In Home Assistant, add the Model Context Protocol Server integration (Settings → Devices & services → Add integration).
- Create a long-lived access token (your profile → Security).
- Set
enable_ha_mcp: trueand paste the token intoha_mcp_tokenin the add-on configuration, then restart the add-on.
The add-on bridges Claude to the integration's stateless Streamable HTTP
endpoint (/api/mcp) with mcp-proxy. Override ha_mcp_url only if your Home
Assistant instance is not reachable as homeassistant:8123 from add-ons.
Custom scripts
The add-on includes the repository standard custom-script executor. On first
start, it seeds claude_desktop.sh in the add-on config directory. Commands in
that script run during startup, allowing local customization without rebuilding
the image.
Data and cache locations
Persistent state is stored in the configured data_location (default
/data/data):
- Claude Desktop sign-in:
~/.config/Claude(token encrypted via gnome-keyring; keyring DB in~/.local/share/keyrings) - Claude Code settings, hooks, sessions, and plugins:
~/.claude - Headroom, RTK, and tokensave user state: their standard paths below the shared home
Volatile cache data is redirected to /tmp/cache through $XDG_CACHE_HOME and
$HOME/.cache.