Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -849,6 +849,21 @@ Before adding docs to tool descriptions, test what models already know using a n
- `repository.yaml` (root) - For HA add-on store recognition
- `homeassistant-addon/config.yaml` - Must match `pyproject.toml` version

**Two add-on flavors:** `homeassistant-addon/` (stable, slug `ha_mcp`) and
`homeassistant-addon-dev/` (dev channel, slug `ha_mcp_dev`) are *separate*
add-ons with *separate* `config.yaml` files.

**Functional config is NOT auto-synced between them.** The release pipeline
(`semver-release.yml` → `update-addon-config`) only syncs the *version* and
*changelog* into `homeassistant-addon/`. Functional keys — `ingress`, `ports`,
`host_network`, `options`/`schema`, etc. — must be edited **by hand** in each
flavor. When you add a non-beta capability to the dev add-on that should also
ship on stable (e.g. `ingress` for the web Settings UI / "Open Web UI" button),
mirror it into `homeassistant-addon/config.yaml` **in the same PR**. Assuming
"the release pipeline handles it" is what kept `ingress` off the stable add-on.
Beta-only keys are the deliberate exception — see the NOTE in
`homeassistant-addon/config.yaml` and `docs/beta.md`.

**Docs**: https://developers.home-assistant.io/docs/add-ons

## API Research
Expand Down
9 changes: 9 additions & 0 deletions homeassistant-addon/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ arch:
init: false
startup: application
boot: manual
# Expose the web Settings UI via Supervisor ingress (the "Open Web UI" button).
# start.py mounts the settings routes for the ingress proxy and binds 0.0.0.0;
# this declaration is what makes Supervisor render the button and proxy to it.
# Must be set here too — the release pipeline syncs only version/changelog, not
# functional config, so ingress is NOT auto-mirrored from
# homeassistant-addon-dev/config.yaml.
ingress: true
ingress_port: 9583
ingress_stream: true
# Enable access to Supervisor API for auto-discovery
hassio_api: true
# `manager` (not `default`) is required so the Supervisor token grants access
Expand Down
13 changes: 13 additions & 0 deletions tests/addon/test_addon_structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,19 @@ def test_config_yaml_valid(self):
assert "ports" in config, "ports section required for HTTP transport"
assert "9583/tcp" in config["ports"], "port 9583/tcp must be exposed"

# Verify ingress is enabled so the stable add-on exposes the web
# Settings UI ("Open Web UI" button). This must stay declared here —
# the release pipeline syncs version/changelog only, not functional
# config, so ingress is not auto-mirrored from the dev add-on. Locks
# the regression where stable shipped without the button.
assert config.get("ingress") is True, (
"ingress must be enabled so the 'Open Web UI' button / web Settings "
"UI is reachable on the stable add-on"
)
assert config.get("ingress_port") == 9583, (
"ingress_port must be 9583 (the fixed internal MCP/web port)"
)
Comment thread
kingpanther13 marked this conversation as resolved.

# Verify secret_path configuration (optional advanced override)
assert "secret_path" not in config["options"], (
"secret_path should be optional and omitted so Supervisor treats it as advanced"
Expand Down
Loading