Skip to content

Commit ac3407d

Browse files
chore(addon): promote webhook-proxy dev -> stable 3.0.2
1 parent 688f4d4 commit ac3407d

9 files changed

Lines changed: 731 additions & 90 deletions

File tree

homeassistant-addon-webhook-proxy-dev/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: "Nabu Casa - Webhook Proxy for HA MCP (Dev)"
22
description: "DEV CHANNEL (unstable) — remote access proxy via Nabu Casa or any reverse proxy. Cannot run alongside the stable Webhook Proxy add-on."
3-
version: "3.0.2.dev2"
3+
version: "3.0.3.dev1"
44
slug: "ha_mcp_webhook_proxy_dev"
55
url: "https://github.com/homeassistant-ai/ha-mcp"
66
stage: experimental

homeassistant-addon-webhook-proxy-dev/mcp_proxy_dev/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
"dependencies": ["webhook"],
88
"documentation": "https://github.com/homeassistant-ai/ha-mcp",
99
"iot_class": "local_push",
10-
"version": "3.0.2.dev2"
10+
"version": "3.0.3.dev1"
1111
}

homeassistant-addon-webhook-proxy/DOCS.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,11 +188,12 @@ All three behaviors advertise proxy-owned endpoints under `/api/mcp_proxy/oauth`
188188
- `/api/mcp_proxy/oauth/authorize` — mode-dispatched authorization endpoint
189189
- `/api/mcp_proxy/oauth/token` — mode-dispatched token endpoint
190190
- `/api/mcp_proxy/oauth/register` — stateless DCR endpoint, advertised in `ha_auth` and none mode
191+
- `/api/mcp_proxy/oauth/revoke` — RFC 7009 revocation endpoint, advertised and served in `ha_auth` mode only (404 elsewhere)
191192

192193
The same authorize/token URLs behave according to the active mode:
193194

194195
- **None mode:** accepts any valid HTTPS or RFC 8252 loopback redirect, auto-approves without a page, and issues a cosmetic token. DCR registrations advertise only the authorization-code grant.
195-
- **`ha_auth`:** validates CIMD or signed DCR identities before sending the browser/token exchange into Home Assistant core. DCR advertises refresh only when the registered redirects have one reproducible web origin.
196+
- **`ha_auth`:** validates CIMD or signed DCR identities before sending the browser/token exchange into Home Assistant core. DCR advertises refresh for every registration: a forwarded token response comes back with its refresh token wrapped in a signed envelope naming the identity core bound it to, so loopback-callback and multi-origin clients refresh without re-authorizing. The proxy also fronts token revocation on its own scoped revocation endpoint, so a wrapped refresh token is unwrapped before Home Assistant sees it and is really revoked. Revocation accepts a wrapped token even when its signature no longer verifies — after the signing key rotates, which is what removing and re-adding the integration does — because possession of a token is the only authorization revoking it needs, and Home Assistant's own revocation endpoint is anonymous and idempotent. Sessions authorized before this version carry no envelope: they re-authorize once, then refresh normally.
196197
- **`legacy`:** serves the existing consent and credentialed token flow on the scoped URLs. The host-root `/authorize` and `/token` routes remain compatibility aliases but are not advertised; legacy does not advertise DCR.
197198

198199
**Hosted Claude environment requirements:** Hosted Claude surfaces reach your server from Anthropic's backend, not from your browser. Three environment rules apply that no server-side setting can work around:

homeassistant-addon-webhook-proxy/config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: "Nabu Casa - Webhook Proxy for HA MCP"
22
description: "Remote access proxy via Nabu Casa or any reverse proxy (Cloudflare, DuckDNS, nginx)"
3-
version: "3.0.1"
3+
version: "3.0.2"
44
slug: "ha_mcp_webhook_proxy"
55
url: "https://github.com/homeassistant-ai/ha-mcp"
66
arch:

homeassistant-addon-webhook-proxy/mcp_proxy/auth_native.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,21 @@ def authorization_server_document(base: str) -> dict:
6363
or signed DCR identities for core, and remain valid across mode switches.
6464
Public clients use PKCE without a client secret; the registration endpoint
6565
provides the DCR fallback when a client does not use CIMD.
66+
67+
``revocation_endpoint`` is proxy-owned for a second reason (#2248): the
68+
refresh token the client holds is a signed envelope, and core's own
69+
``/auth/revoke`` answers 200 without revoking anything for a value it
70+
cannot recognise. Only ha_auth mints those, so only this document
71+
advertises it. The endpoint takes no client authentication, matching
72+
``token_endpoint_auth_methods_supported``.
6673
"""
6774
return {
6875
"issuer": f"{base}{OAUTH_BASE}",
6976
"authorization_endpoint": f"{base}{OAUTH_BASE}/authorize",
7077
"token_endpoint": f"{base}{OAUTH_BASE}/token",
7178
"registration_endpoint": f"{base}{OAUTH_BASE}/register",
79+
"revocation_endpoint": f"{base}{OAUTH_BASE}/revoke",
80+
"revocation_endpoint_auth_methods_supported": ["none"],
7281
"response_types_supported": ["code"],
7382
"grant_types_supported": ["authorization_code", "refresh_token"],
7483
"code_challenge_methods_supported": ["S256"],

homeassistant-addon-webhook-proxy/mcp_proxy/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
"dependencies": ["webhook"],
88
"documentation": "https://github.com/homeassistant-ai/ha-mcp",
99
"iot_class": "local_push",
10-
"version": "3.0.1"
10+
"version": "3.0.2"
1111
}

0 commit comments

Comments
 (0)