@coffeerunhobby/mcp-ha-connect 1.7.2 → 1.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +396 -0
- package/dist/permissions/index.js +7 -1
- package/dist/permissions/index.js.map +1 -1
- package/dist/server/http.d.ts +11 -0
- package/dist/server/http.js +23 -0
- package/dist/server/http.js.map +1 -1
- package/dist/tools/common.d.ts +0 -19
- package/dist/tools/common.js +0 -8
- package/dist/tools/common.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/CHANGELOG.md +67 -231
- package/openapi.json +3 -22
- package/package.json +3 -3
- package/src/permissions/index.ts +8 -1
- package/src/server/http.ts +25 -0
- package/src/tools/common.ts +0 -9
- package/src/version.ts +1 -1
- package/tests/server/http.test.ts +27 -0
- package/dist/wrapper.d.ts +0 -7
- package/dist/wrapper.js +0 -301
- package/dist/wrapper.js.map +0 -1
- package/src/wrapper.ts +0 -340
package/AGENTS.md
ADDED
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
# mcp-ha-connect -- Codex Agent
|
|
2
|
+
|
|
3
|
+
## Identity & Scope
|
|
4
|
+
|
|
5
|
+
This agent owns the **mcp-ha-connect MCP server** — a Model Context Protocol server for
|
|
6
|
+
Home Assistant, TP-Link Omada, and Local AI integration.
|
|
7
|
+
|
|
8
|
+
**Repo:** `github.com/coffeerunhobby/mcp-ha-connect`
|
|
9
|
+
**npm:** `@coffeerunhobby/mcp-ha-connect`
|
|
10
|
+
**Docker:** `ghcr.io/coffeerunhobby/mcp-ha-connect`
|
|
11
|
+
**Live endpoint:** Cloudflare domain → NAS Docker port 3000 (domain in NAS `.env`)
|
|
12
|
+
|
|
13
|
+
**Working directory:** `C:\workspace\mcp` — this is the canonical copy.
|
|
14
|
+
`W:\mcp-homeassistant` is a stale export at v0.8.0 — ignore it.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Stack
|
|
19
|
+
|
|
20
|
+
- **Runtime:** Node.js 20+ (dev machine uses nvm)
|
|
21
|
+
- **Language:** TypeScript, compiled to `dist/` via `tsc`
|
|
22
|
+
- **MCP SDK:** `@modelcontextprotocol/sdk`
|
|
23
|
+
- **Transport:** Streamable HTTP (port 3000, path `/mcp`)
|
|
24
|
+
- **Auth:** JWT bearer tokens with RBAC permission system
|
|
25
|
+
- **Plugins:** Home Assistant · TP-Link Omada SDN · Local AI (Ollama/OpenAI-compat)
|
|
26
|
+
- **Tests:** Vitest (1064 unit tests) + integration tests in `tests/integration/`
|
|
27
|
+
- **Container:** Alpine Node image, deployed on Synology NAS via Docker Compose
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Infrastructure
|
|
32
|
+
|
|
33
|
+
| Resource | Address | Notes |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| **MCP server** | `mcpserver.10.0.0.18.nip.io:3000` | NAS Docker container |
|
|
36
|
+
| **Home Assistant** | `homeassistant.10.0.0.19.nip.io:8123` | |
|
|
37
|
+
| **Omada controller** | `omada.10.0.0.18.nip.io:8043` | HTTPS, self-signed cert |
|
|
38
|
+
| **Ollama** | `ollama.10.0.0.17.nip.io:11434` | model `phi4:14b` |
|
|
39
|
+
| **n8n** | `n8n.10.0.0.18.nip.io:5678` | also exposed via Cloudflare |
|
|
40
|
+
| **NAS Docker path** | `/volume1/docker/mcp-ha-connect/` | compose.yaml + .env |
|
|
41
|
+
| **Cloudflare** | proxies public domain → NAS port 3000 | domain stored in `.env` |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Secrets & Credentials
|
|
46
|
+
|
|
47
|
+
All secrets live in the NAS `.env` file and as **Windows User environment variables**.
|
|
48
|
+
Never store token values in source files, commit messages, or this file.
|
|
49
|
+
|
|
50
|
+
| Variable | Purpose |
|
|
51
|
+
|---|---|
|
|
52
|
+
| `GHCR_TOKEN` | GitHub PAT with `write:packages` scope — for the Docker push (step 5) |
|
|
53
|
+
|
|
54
|
+
### Retrieve for use
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
$ghcrToken = [Environment]::GetEnvironmentVariable('GHCR_TOKEN', 'User')
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### npm publishing needs no token
|
|
61
|
+
|
|
62
|
+
npm publish is done by CI via **OIDC trusted publishing** (see Release Process step 4) —
|
|
63
|
+
there is no npm token to store, rotate, or revoke. Publishing is configured at
|
|
64
|
+
npmjs.com → package Settings → **Trusted Publisher** → GitHub Actions (this repo +
|
|
65
|
+
`ci.yml`), not via a token.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Release Process
|
|
70
|
+
|
|
71
|
+
### 1. Pre-flight
|
|
72
|
+
|
|
73
|
+
```powershell
|
|
74
|
+
cd C:\workspace\mcp
|
|
75
|
+
npm test # all tests must pass
|
|
76
|
+
npm run build # must compile clean
|
|
77
|
+
npm run lint # ZERO errors AND zero warnings (see Code Quality policy)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### 2. Version bump
|
|
81
|
+
|
|
82
|
+
Update **both** files to the new version:
|
|
83
|
+
- `package.json` → `"version": "X.Y.Z"`
|
|
84
|
+
- `src/version.ts` → `export const VERSION = 'X.Y.Z';`
|
|
85
|
+
|
|
86
|
+
Update `docs/CHANGELOG.md` with the new version section.
|
|
87
|
+
|
|
88
|
+
### 3. Commit & tag
|
|
89
|
+
|
|
90
|
+
```powershell
|
|
91
|
+
git add .
|
|
92
|
+
git commit -m "vX.Y.Z - <short description>"
|
|
93
|
+
git tag vX.Y.Z
|
|
94
|
+
git push origin main
|
|
95
|
+
git push origin vX.Y.Z
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Create the GitHub Release at:
|
|
99
|
+
`https://github.com/coffeerunhobby/mcp-ha-connect/releases/new?tag=vX.Y.Z`
|
|
100
|
+
|
|
101
|
+
### 4. npm publish — AUTOMATED by CI (do NOT publish by hand)
|
|
102
|
+
|
|
103
|
+
**The `v*` tag you pushed in step 3 already publishes npm.** `.github/workflows/ci.yml`
|
|
104
|
+
has a `publish-npm` job that fires on `refs/tags/v*` and publishes via **OIDC trusted
|
|
105
|
+
publishing** — tokenless, `--provenance`, no `npm login`. It is **idempotent** (skips if
|
|
106
|
+
`pkg@version` is already on the registry) and it re-runs `npm ci && npm run build`
|
|
107
|
+
because `dist/` is gitignored. The same tag also runs a `release` job that auto-creates
|
|
108
|
+
the GitHub Release (idempotent — a manual `gh release create` just no-ops).
|
|
109
|
+
|
|
110
|
+
> Agent rule: **do NOT run `npm publish`/`npm login`.** Just push the tag, then verify:
|
|
111
|
+
> ```powershell
|
|
112
|
+
> gh run list --limit 3 # publish-npm + release jobs green on the v tag
|
|
113
|
+
> npm view @coffeerunhobby/mcp-ha-connect version # shows the new version
|
|
114
|
+
> ```
|
|
115
|
+
> `npm whoami` from the agent returns 401 (no session) — expected, not a failure.
|
|
116
|
+
|
|
117
|
+
### 5. Docker build & push — via WSL (NO Docker Desktop)
|
|
118
|
+
|
|
119
|
+
**Docker Desktop is not used on this box.** The working engine is **Docker CE inside
|
|
120
|
+
WSL2 Ubuntu-24.04**. CI's `docker-smoke` job only *boot-tests* the image — it does
|
|
121
|
+
**not** push to GHCR, so this push is the one genuinely manual release leg.
|
|
122
|
+
|
|
123
|
+
```powershell
|
|
124
|
+
# GHCR login — token from Windows User env, piped over stdin so it is never echoed
|
|
125
|
+
$t = [Environment]::GetEnvironmentVariable('GHCR_TOKEN', 'User')
|
|
126
|
+
$t | wsl -d Ubuntu-24.04 -- bash -lc "docker login ghcr.io -u coffeerunhobby --password-stdin"
|
|
127
|
+
|
|
128
|
+
# Build (repo is /mnt/c/workspace/mcp inside WSL) + push both tags
|
|
129
|
+
wsl -d Ubuntu-24.04 -- bash -lc "cd /mnt/c/workspace/mcp && docker build --no-cache -t ghcr.io/coffeerunhobby/mcp-ha-connect:X.Y.Z -t ghcr.io/coffeerunhobby/mcp-ha-connect:latest ."
|
|
130
|
+
wsl -d Ubuntu-24.04 -- bash -lc "docker push ghcr.io/coffeerunhobby/mcp-ha-connect:X.Y.Z && docker push ghcr.io/coffeerunhobby/mcp-ha-connect:latest"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
WSL2 is amd64 = the NAS arch, so a plain `docker build` (not `buildx --platform`)
|
|
134
|
+
produces the correct image.
|
|
135
|
+
|
|
136
|
+
### 6. Deploy to NAS
|
|
137
|
+
|
|
138
|
+
The compose file pulls `ghcr.io/coffeerunhobby/mcp-ha-connect:latest`. On the NAS:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
cd /volume1/docker/mcp-ha-connect
|
|
142
|
+
docker compose pull mcp-ha-connect && docker compose up -d mcp-ha-connect
|
|
143
|
+
docker compose logs --tail=30
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Verify: `curl https://<cloudflare-domain>/openapi.json` → `info.version` is the new
|
|
147
|
+
version, and `curl https://<cloudflare-domain>/health` → `{"status":"healthy"}`.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## NAS `.env` — critical settings
|
|
152
|
+
|
|
153
|
+
```env
|
|
154
|
+
MCP_HTTP_BIND_ADDR=0.0.0.0
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Must be `0.0.0.0`, not `127.0.0.1`. Docker port mapping requires the server to listen on
|
|
158
|
+
all interfaces inside the container — loopback only means Cloudflare gets a 502.
|
|
159
|
+
|
|
160
|
+
```env
|
|
161
|
+
MCP_HTTP_ALLOWED_ORIGINS=...,<cloudflare-domain>,https://<cloudflare-domain>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Must include both the bare hostname AND the `https://` form of the Cloudflare domain.
|
|
165
|
+
The MCP SDK checks the `host` header (no protocol) for DNS rebinding protection AND
|
|
166
|
+
the `origin` header (with protocol) for CORS.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Omada SDN — known issues
|
|
171
|
+
|
|
172
|
+
**After upgrading the Omada controller version**, the `OMADA_OMADAC_ID` changes.
|
|
173
|
+
Error code `-44106` is returned for BOTH wrong credentials AND wrong `OMADA_OMADAC_ID` —
|
|
174
|
+
the API does not distinguish between them.
|
|
175
|
+
|
|
176
|
+
**To get the new Omada ID:**
|
|
177
|
+
Omada web UI → Settings → Open API → click the eye icon → copy **Omada ID**.
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
sed -i 's/OMADA_OMADAC_ID=.*/OMADA_OMADAC_ID=<new-id>/' /volume1/docker/mcp-ha-connect/.env
|
|
181
|
+
docker compose up -d
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
If Omada is unreachable or credentials are wrong, the server **gracefully degrades** —
|
|
185
|
+
Omada tools are disabled but HA and AI keep working. Set `OMADA_PLUGIN_ENABLED=false`
|
|
186
|
+
to disable Omada entirely while troubleshooting.
|
|
187
|
+
|
|
188
|
+
**`OMADA_SITE_ID` is validated at startup against the live site list** (the controller is
|
|
189
|
+
the source of truth; the env var is only a selector). If `OMADA_SITE_ID` is set but **not**
|
|
190
|
+
present on the controller — a site id can drift after a controller migration, exactly like
|
|
191
|
+
`OMADA_OMADAC_ID` — the **Omada plugin is disabled** at boot with a `logger.error` that
|
|
192
|
+
names the bad value and lists the valid sites (HA + AI stay up). This turns the old failure
|
|
193
|
+
mode (a silent default scoping every read to a dead site → later "user does not have
|
|
194
|
+
permissions to access this site") into a loud, self-diagnosing startup error. Fix by setting
|
|
195
|
+
`OMADA_SITE_ID` to one of the listed ids. Validation lives in `checkConfiguredSite()`
|
|
196
|
+
(`src/omadaClient/site.ts`); a *valid* default still auto-resolves, so site-scoped reads need
|
|
197
|
+
no explicit `siteId`.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Code Quality — fix every error and warning
|
|
202
|
+
|
|
203
|
+
**Always fix errors AND warnings. Never label something "pre-existing debt" and move on.**
|
|
204
|
+
|
|
205
|
+
- `npm run lint`, `npm run build`, and `npm test` must all be **completely clean** —
|
|
206
|
+
zero errors, zero warnings — before a change is considered done.
|
|
207
|
+
- If you touch a file (or a release surfaces lint output) and find existing errors or
|
|
208
|
+
warnings, they are now yours to fix. "It was already broken" is not an acceptable
|
|
209
|
+
reason to leave it.
|
|
210
|
+
- **Exception — release timing:** do not cut a patch release *solely* to clean up lint.
|
|
211
|
+
If quality issues are found right after a release has shipped, fold the fixes into the
|
|
212
|
+
**next feature's** commit rather than churning a `vX.Y.(Z+1)`. Outstanding cleanup of
|
|
213
|
+
this kind is tracked in `.Codex/NEXT-SESSION.md` so it isn't forgotten.
|
|
214
|
+
|
|
215
|
+
> No lint cleanup currently outstanding. (The former `Function`-type warnings in the
|
|
216
|
+
> test mock helpers were resolved — `npm run lint --max-warnings=0` is clean as of v1.5.0.)
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## Development
|
|
221
|
+
|
|
222
|
+
```powershell
|
|
223
|
+
cd C:\workspace\mcp
|
|
224
|
+
npm run dev # tsx watch with .env
|
|
225
|
+
npm test # vitest (excludes integration)
|
|
226
|
+
npm run test:watch # watch mode
|
|
227
|
+
npm run lint # eslint
|
|
228
|
+
npm run build # tsc compile to dist/
|
|
229
|
+
npm run generate:jwt # generate a test JWT token
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Integration tests (requires live .env)
|
|
233
|
+
|
|
234
|
+
```powershell
|
|
235
|
+
npm run test:integration
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Live testing against the running server
|
|
241
|
+
|
|
242
|
+
The dev machine can exercise the deployed MCP server two ways:
|
|
243
|
+
|
|
244
|
+
1. **Connected `homeassistant` MCP in Codex Desktop** — this agent has the live server
|
|
245
|
+
wired in as an MCP connection, so HA/Omada tools can be invoked directly (no curl, no
|
|
246
|
+
manual token; the configured bearer is used). **Caveat:** the MCP client caches the tool
|
|
247
|
+
list at *connection time*. After flipping `MCP_TOOL_REGISTRATION_MODE` (eager ⇄ graph)
|
|
248
|
+
and redeploying, that cached list is **stale** — Codex Desktop must reconnect (restart)
|
|
249
|
+
before the new tool surface (`omada_browse`/`omada_read`, or the typed getters) shows up.
|
|
250
|
+
Until it reconnects, calling a tool the live server no longer registers will fail.
|
|
251
|
+
|
|
252
|
+
2. **Direct `/mcp` curl** — generate a token with
|
|
253
|
+
`npm run generate:jwt -- --sub <user> --exp 1h` (signs with the local `.env`
|
|
254
|
+
`MCP_AUTH_SECRET`, which currently matches the NAS), then POST JSON-RPC to the server's
|
|
255
|
+
`/mcp` with headers `Authorization: Bearer <tok>`, `Content-Type: application/json`,
|
|
256
|
+
`Accept: application/json, text/event-stream`. Responses come back as SSE
|
|
257
|
+
(`data: {...}` lines). `tools/list` and `tools/call` work **without** an initialize
|
|
258
|
+
handshake in stateless mode. The reachable server address lives in
|
|
259
|
+
`.Codex/NEXT-SESSION.md` (gitignored — never put the real IP/domain here).
|
|
260
|
+
|
|
261
|
+
Permissions are resolved **server-side** from the token's `sub` via `MCP_PERMISSIONS_CONFIG`
|
|
262
|
+
(they are NOT carried in the token). Pick a `sub` whose mapped role has the bit you need —
|
|
263
|
+
e.g. the ADMIN-gated `/security/threats` node needs a `sub` mapped to an ADMIN role. The NAS
|
|
264
|
+
role map differs from the local `.env`, so don't assume `sub=admin` is actually ADMIN there.
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Never assume. Always verify.
|
|
269
|
+
|
|
270
|
+
- **Cloudflare 502**: check the container is running (`docker compose ps`) and
|
|
271
|
+
`MCP_HTTP_BIND_ADDR=0.0.0.0` is set.
|
|
272
|
+
- **MCP client connects but tools fail**: check `MCP_HTTP_ALLOWED_ORIGINS` includes
|
|
273
|
+
the Cloudflare domain in both bare and `https://` form.
|
|
274
|
+
- **Codex Desktop shows "Server disconnected" but `/health` is 200**: the client's
|
|
275
|
+
mcp-remote auth header is malformed. A `"Authorization: Bearer ${MCP_AUTH_TOKEN}"`
|
|
276
|
+
placeholder does NOT expand on Windows (`cmd /c` uses `%VAR%`, mcp-remote doesn't
|
|
277
|
+
substitute `${VAR}`) → literal text is sent → server 401 → mcp-remote drops into a
|
|
278
|
+
failing OAuth flow. Fix: inline the literal JWT in `claude_desktop_config.json`'s
|
|
279
|
+
`--header` arg, and add `-y` to `npx` so first run doesn't hang. Verify the server
|
|
280
|
+
side first with a direct `curl` POST to `/mcp` carrying the token.
|
|
281
|
+
- **npm version not updating after a tag push**: check the `publish-npm` CI job on the
|
|
282
|
+
tag (`gh run list`) — publishing is OIDC via CI, never manual (see Release step 4).
|
|
283
|
+
- **Omada auth error -44106**: check `OMADA_OMADAC_ID` first, not just credentials —
|
|
284
|
+
this error code covers both cases.
|
|
285
|
+
- **Before a release**: always run `npm test` and `npm run build` clean.
|
|
286
|
+
- **On release, bump the version everywhere**: `package.json`, `src/version.ts`,
|
|
287
|
+
`docs/CHANGELOG.md`, AND `openapi.json` (`info.version`) — the last one drifts easily.
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## Tool registration modes (`MCP_TOOL_REGISTRATION_MODE`)
|
|
292
|
+
|
|
293
|
+
Implemented as a **resource-graph** mode for the Omada plugin (config parses the var;
|
|
294
|
+
`config.toolRegistrationMode` threads through `createServer` → `registerAllTools` →
|
|
295
|
+
`registerOmadaTools`). Values:
|
|
296
|
+
|
|
297
|
+
- **`eager`** (default) — register every typed tool (~26 Omada tools). Today's behavior;
|
|
298
|
+
fully backwards-compatible.
|
|
299
|
+
- **`graph`** — register only `omada_browse` + `omada_read` + the 5 typed write/action
|
|
300
|
+
tools. Reads collapse into a discoverable resource graph (`src/tools/omada/namespace.ts`
|
|
301
|
+
manifest + `src/tools/omada/graph.ts`), shrinking the tool-schema budget for low-context
|
|
302
|
+
models while still exposing every read endpoint.
|
|
303
|
+
|
|
304
|
+
Design invariants (don't regress these):
|
|
305
|
+
- **browse returns TYPES, not instances** — `omada_browse(path)` lists permission-filtered
|
|
306
|
+
child resource types + metadata (kind, permission, pagination, params). It never
|
|
307
|
+
enumerates MACs or calls the controller.
|
|
308
|
+
- **read is per-path RBAC, fail-closed** — `omada_read` declares NO static tool permission;
|
|
309
|
+
each manifest node declares its own bit (most reads = QUERY; the `/security/*` subtree =
|
|
310
|
+
ADMIN). Unknown / container / under-privileged / missing-required-param paths all return a
|
|
311
|
+
clean error and never fetch.
|
|
312
|
+
- **single-page pagination** — paginated nodes forward one page/pageSize to a single GET via
|
|
313
|
+
`OmadaClient.readResource()`; they never walk every page.
|
|
314
|
+
- **graph is a complete superset of eager reads** — every eager read getter has a graph node,
|
|
315
|
+
including the ADMIN-gated IDS/IPS threat-management log at `/security/threats`. Its mandatory
|
|
316
|
+
epoch time-window is enforced via required `params.startTime`/`params.endTime` (epoch seconds),
|
|
317
|
+
validated by `omada_read` before any controller call.
|
|
318
|
+
|
|
319
|
+
HA and AI plugins are unaffected (still eager). Writes stay typed + individually gated in
|
|
320
|
+
both modes — generic write verbs were deliberately rejected (prompt-injection / hallucination
|
|
321
|
+
surface).
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## Security
|
|
326
|
+
|
|
327
|
+
This server controls real devices (HA, Omada) and is exposed publicly via Cloudflare, so
|
|
328
|
+
treat it as security-sensitive. A full audit (2026-06-07) with file/line findings is in
|
|
329
|
+
`.Codex/NEXT-SESSION.md`; this section is the **durable policy** distilled from it.
|
|
330
|
+
|
|
331
|
+
### Dependencies — update, don't rewrite
|
|
332
|
+
|
|
333
|
+
- Runtime deps are intentionally tiny: `@modelcontextprotocol/sdk`, `ws`, `zod`.
|
|
334
|
+
**Do not hand-roll replacements** for these (or for transitive libs like `hono`,
|
|
335
|
+
`ajv`, `path-to-regexp`). A homegrown version loses community review and adds more
|
|
336
|
+
bugs than it removes. Zod and the MCP SDK earn their keep.
|
|
337
|
+
- The alarming `npm audit` list (`hono`, `@hono/node-server`, `fast-uri`, `ajv`,
|
|
338
|
+
`path-to-regexp`, `qs`) is **entirely transitive under the SDK**:
|
|
339
|
+
`@modelcontextprotocol/sdk → @hono/node-server → hono`. **Bumping the SDK fixes most
|
|
340
|
+
of them.** `ws` is the one direct dep to bump on its own.
|
|
341
|
+
- Triage with `npm audit --omit=dev` — dev-only vulns (vitest/esbuild/tsx) don't ship.
|
|
342
|
+
The question is *reachability in production*, not the raw count.
|
|
343
|
+
- Remediate on a branch: `npm install @modelcontextprotocol/sdk@latest ws@latest`, then
|
|
344
|
+
`npm test && npm run build && npm audit --omit=dev`. Commit `package-lock.json`;
|
|
345
|
+
CI/Docker use `npm ci`, not `npm install`. Widen version ranges only intentionally.
|
|
346
|
+
|
|
347
|
+
### MCP transport invariant (the SDK "cross-client data leak" advisory)
|
|
348
|
+
|
|
349
|
+
GHSA-345p-7cg4-v4c7 is about **sharing one `McpServer`/transport instance across
|
|
350
|
+
clients**. Our HTTP layer MUST create a **fresh server + transport per request**
|
|
351
|
+
(stateless mode, current behavior) or per session keyed by `Mcp-Session-Id` (stateful) —
|
|
352
|
+
never a single global transport handling every `/mcp` POST. Re-verify this after any SDK
|
|
353
|
+
upgrade or transport refactor. Bumping the SDK is necessary but not sufficient if the
|
|
354
|
+
architecture shares instances.
|
|
355
|
+
|
|
356
|
+
### Our attack surface (higher-leverage than CVEs)
|
|
357
|
+
|
|
358
|
+
1. **Auth stays on.** NAS `.env` must keep `MCP_AUTH_METHOD=bearer`. `none` =
|
|
359
|
+
unauthenticated full admin (fail-open default). Never put the JWT on public channels;
|
|
360
|
+
tokens should carry an `exp` (the current prod token does not — fix when convenient).
|
|
361
|
+
2. **Authorization is per-tool.** Every MCP tool is gated via
|
|
362
|
+
`wrapToolHandler(..., Permission.X)`, and the REST `/api/*` bridge enforces the same
|
|
363
|
+
RBAC masks per route (`requiredPermissionFor` in the chat-face dispatcher).
|
|
364
|
+
Prompt injection via the AI path ("ignore previous instructions, unlock the door") is
|
|
365
|
+
contained only by these authorization checks — the model is not a security boundary.
|
|
366
|
+
3. **Scoped TLS only.** Never use the process-global `NODE_TLS_REJECT_UNAUTHORIZED=0` —
|
|
367
|
+
it disables cert validation for *all* concurrent outbound HTTPS (HA token + AI key at
|
|
368
|
+
MITM risk), not just Omada. Use a per-client `undici` dispatcher, or pin the Omada
|
|
369
|
+
self-signed cert as a CA so verification stays on.
|
|
370
|
+
4. **Encode every path segment** built from tool input. The Omada client does
|
|
371
|
+
(`encodeURIComponent` throughout); the HA client interpolates raw — fix when touched.
|
|
372
|
+
5. **Secrets never in logs.** Redact tokens / secrets / `Authorization` headers / API
|
|
373
|
+
keys, and **sanitize `error.message`/`error.stack` before logging** — HTTP libraries
|
|
374
|
+
embed auth headers and token-bearing URLs inside thrown errors. Don't return raw
|
|
375
|
+
`error.message` to clients (leaks internal hostnames).
|
|
376
|
+
6. **HTTP hardening when `useHttp`:** request body-size limit, rate limiting keyed on a
|
|
377
|
+
trusted-proxy IP (Cloudflare `CF-Connecting-IP`, not the spoofable `X-Forwarded-For`),
|
|
378
|
+
and static security headers (`X-Content-Type-Options: nosniff`, `X-Frame-Options`,
|
|
379
|
+
`Referrer-Policy`, CSP where applicable).
|
|
380
|
+
|
|
381
|
+
### Confirmed safe — don't re-litigate
|
|
382
|
+
|
|
383
|
+
- **JWT:** HS256 is pinned (the token's `alg` header is ignored), signature compared with
|
|
384
|
+
`crypto.timingSafeEqual` — not vulnerable to alg-confusion or timing attacks. (Still
|
|
385
|
+
add `exp` enforcement, and `iss`/`aud` if it ever becomes multi-issuer.)
|
|
386
|
+
- **Omada client** encodes every path segment; query params via `URLSearchParams`.
|
|
387
|
+
- **No** `eval` / `new Function` / dynamic `require`; the only child process is
|
|
388
|
+
`spawn('node', [fixedPath])` — no shell, no user-controlled argv.
|
|
389
|
+
- **No arbitrary-URL SSRF via tool args** — HA/Omada/AI base URLs come only from config.
|
|
390
|
+
- **Git hygiene clean** — `.env` is never tracked; no hardcoded real secrets in src/tests.
|
|
391
|
+
|
|
392
|
+
### Insecure defaults to flip when next touched
|
|
393
|
+
|
|
394
|
+
`config.ts` defaults `MCP_AUTH_METHOD=none`; `.env.example` ships `none` +
|
|
395
|
+
`HA_STRICT_SSL=false`; `docker-compose.yml` hardcodes `MCP_HTTP_ALLOWED_ORIGINS=*`.
|
|
396
|
+
None of these reflect the (secure) live deployment — make the secure values the defaults.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Permission System - Role-based access control with binary masks
|
|
3
3
|
*/
|
|
4
|
+
import { logger } from '../utils/logger.js';
|
|
4
5
|
/** Permission flags (powers of 2 for bitwise operations, sorted by criticality) */
|
|
5
6
|
export const Permission = {
|
|
6
7
|
ADMIN: 1, // System operations (restart, updates) - highest criticality
|
|
@@ -85,7 +86,12 @@ export function parsePermissionsConfig(json) {
|
|
|
85
86
|
defaultRole: parsed.defaultRole ?? 'NONE',
|
|
86
87
|
};
|
|
87
88
|
}
|
|
88
|
-
catch {
|
|
89
|
+
catch (error) {
|
|
90
|
+
// Fail closed (empty config → every caller resolves to NONE), but make the
|
|
91
|
+
// misconfiguration loud: a silent all-NONE is otherwise very hard to diagnose.
|
|
92
|
+
logger.warn('MCP_PERMISSIONS_CONFIG is not valid JSON — ignoring it; all callers resolve to NONE (fail-closed)', {
|
|
93
|
+
error: error instanceof Error ? error.message : String(error),
|
|
94
|
+
});
|
|
89
95
|
return { users: [], defaultRole: 'NONE' };
|
|
90
96
|
}
|
|
91
97
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/permissions/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server/http.d.ts
CHANGED
|
@@ -70,6 +70,17 @@ export declare function requiredRestPermission(method: string, pathname: string)
|
|
|
70
70
|
* uses. New code should call `dispatchChatRequest` with resolved bindings.
|
|
71
71
|
*/
|
|
72
72
|
export declare function handleRestApi(req: IncomingMessage, res: ServerResponse, url: string, client: HaClient): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Stateless mode has no server→client push stream: every request gets a fresh
|
|
75
|
+
* transport, so the SDK's standalone SSE GET would open a stream that never
|
|
76
|
+
* emits a byte and never ends. That eternal silent response pins the
|
|
77
|
+
* (Cloudflare→origin) keep-alive socket, and HTTP/1.1 serial semantics then
|
|
78
|
+
* stall every later request queued on that socket — mcp-remote's own probe
|
|
79
|
+
* GET poisoned the connection its initialize POST was later queued on,
|
|
80
|
+
* surfacing as "Request timed out". Per the MCP spec, a server that does not
|
|
81
|
+
* offer a GET event stream MUST return 405 Method Not Allowed.
|
|
82
|
+
*/
|
|
83
|
+
export declare function isStatelessMcpGet(stateful: boolean, method: string | undefined): boolean;
|
|
73
84
|
/**
|
|
74
85
|
* Resolve the public URL scheme, honoring `X-Forwarded-Proto` (set by Cloudflare /
|
|
75
86
|
* reverse proxies that TLS-terminate upstream). The header is validated against an
|
package/dist/server/http.js
CHANGED
|
@@ -186,6 +186,19 @@ export async function handleRestApi(req, res, url, client) {
|
|
|
186
186
|
sendJson,
|
|
187
187
|
});
|
|
188
188
|
}
|
|
189
|
+
/**
|
|
190
|
+
* Stateless mode has no server→client push stream: every request gets a fresh
|
|
191
|
+
* transport, so the SDK's standalone SSE GET would open a stream that never
|
|
192
|
+
* emits a byte and never ends. That eternal silent response pins the
|
|
193
|
+
* (Cloudflare→origin) keep-alive socket, and HTTP/1.1 serial semantics then
|
|
194
|
+
* stall every later request queued on that socket — mcp-remote's own probe
|
|
195
|
+
* GET poisoned the connection its initialize POST was later queued on,
|
|
196
|
+
* surfacing as "Request timed out". Per the MCP spec, a server that does not
|
|
197
|
+
* offer a GET event stream MUST return 405 Method Not Allowed.
|
|
198
|
+
*/
|
|
199
|
+
export function isStatelessMcpGet(stateful, method) {
|
|
200
|
+
return !stateful && method === 'GET';
|
|
201
|
+
}
|
|
189
202
|
/**
|
|
190
203
|
* Resolve the public URL scheme, honoring `X-Forwarded-Proto` (set by Cloudflare /
|
|
191
204
|
* reverse proxies that TLS-terminate upstream). The header is validated against an
|
|
@@ -376,6 +389,16 @@ export async function startHttpServer(options) {
|
|
|
376
389
|
}
|
|
377
390
|
// Streamable HTTP Transport (MCP endpoint)
|
|
378
391
|
if (urlPath === mcpPath) {
|
|
392
|
+
// See isStatelessMcpGet: an SSE GET in stateless mode would hang forever
|
|
393
|
+
// and poison the keep-alive socket for every request queued behind it.
|
|
394
|
+
if (isStatelessMcpGet(config.stateful, req.method)) {
|
|
395
|
+
res.setHeader('Allow', 'POST, DELETE');
|
|
396
|
+
sendJson(res, 405, {
|
|
397
|
+
error: 'Method Not Allowed',
|
|
398
|
+
message: 'This server runs in stateless mode: no standalone SSE stream. Send JSON-RPC via POST.',
|
|
399
|
+
});
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
379
402
|
const sessionId = req.headers['mcp-session-id'];
|
|
380
403
|
const existingState = sessionId ? sessions.get(sessionId) : undefined;
|
|
381
404
|
const body = req.method !== 'GET' ? await parseBody(req) : undefined;
|
package/dist/server/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAA6C,MAAM,WAAW,CAAC;AAGxG,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAA0D,MAAM,aAAa,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,eAAe,CAAC;AAEvB,oCAAoC;AACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;AAEzD;;;GAGG;AACH,SAAS,sBAAsB,CAAC,GAAmB;IACjD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtC,uDAAuD;IACvD,GAAG,CAAC,GAAG,GAAG,UACR,KAAe,EACf,kBAAkD,EAClD,QAAqB;QAErB,wDAAwD;QACxD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAC7D,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,aAAa,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,kDAAkD;QAClD,IAAI,OAAO,kBAAkB,KAAK,UAAU,EAAE,CAAC;YAC7C,OAAO,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAmB,CAAC;IAEpB,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AAO1C;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAAoB,EAAE,WAAmB,cAAc;IAC/E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YACxC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACnE,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC;YACnB,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,GAAG,GAAc,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;gBAC3D,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACjB,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,CAAC,SAAS,CAAC,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,0EAA0E;gBAC1E,2EAA2E;gBAC3E,MAAM,GAAG,GAAc,IAAI,KAAK,CAAC,iBAAkB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9E,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qEAAqE;AACrE,SAAS,eAAe,CAAC,KAAc;IACrC,MAAM,IAAI,GAAI,KAA+B,EAAE,UAAU,CAAC;IAC1D,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAmB;IACtD,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC;IACnD,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACzC,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAmB,EAAE,UAAkB,EAAE,IAAa;IACtE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAClD,GAAG,CAAC,SAAS,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACvE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAmB;IACnD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAoB,EAAE,GAAmB;IACtE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;IAC5D,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;IACpE,gFAAgF;IAChF,+EAA+E;IAC/E,oFAAoF;IACpF,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,2CAA2C,CAAC,CAAC;IAC3F,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAW,EAAE,OAAe,EAAE,aAAqB;IACnF,OAAO,GAAG,KAAK,eAAe,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,aAAa,CAAC;AACzF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,QAAgB;IACrE,OAAO,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAoB,EACpB,GAAmB,EACnB,GAAW,EACX,MAAgB;IAEhB,+BAA+B;IAC/B,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;QACvC,QAAQ,EAAE,eAAe;QACzB,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;QAC1B,SAAS;QACT,QAAQ;KACT,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAiB,EAAE,MAA0B;IAC7E,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK,CAAC;AACvC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAA0C;IAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACd,EAAE,IAAI,EAAE;SACP,WAAW,EAAE,CAAC;IACjB,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAoB,EAAE,GAAmB,EAAE,MAAyB;IACtF,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,cAAc,GAAG,MAAM,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAEvD,0DAA0D;IAC1D,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;QAC5D,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,4BAA4B,CAAC,CAAC;QAC5E,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,6CAA6C,CAAC,CAAC;QAC7F,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA0B;IAC9D,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAEpE,+EAA+E;IAC/E,8EAA8E;IAC9E,MAAM,YAAY,GAAkB,mBAAmB,CAAC,MAAM,CAAC,SAAS,EAAE;QACxE,QAAQ,EAAE,MAAM;QAChB,WAAW;KACZ,CAAC,CAAC;IACH,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;QAChC,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;QAC7C,eAAe,EAAE,MAAM,CAAC,SAAS,KAAK,SAAS;KAChD,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,IAAI,WAAW,CAAC;IACpD,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,mBAAmB,IAAI,SAAS,CAAC;IAC3D,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,mBAAmB,CAAC;IAElE,qCAAqC;IACrC,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB;QACzC,CAAC,CAAC,IAAI,WAAW,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC,iBAAiB;YAClC,WAAW,EAAE,MAAM,CAAC,oBAAoB;YACxC,SAAS,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;YACxC,6DAA6D;YAC7D,cAAc,EAAE,MAAM,CAAC,uBAAuB;SAC/C,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAET,6BAA6B;IAC7B,MAAM,cAAc,GAAG,oBAAoB,CAAC;QAC1C,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,SAAS,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;QACxC,UAAU,EAAE,MAAM,CAAC,cAAc;QACjC,MAAM,EAAE,MAAM,CAAC,UAAU;QACzB,QAAQ,EAAE,MAAM,CAAC,YAAY;KAC9B,CAAC,CAAC;IAEH,6EAA6E;IAC7E,IAAI,eAAe,GAA2B,IAAI,CAAC;IACnD,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC9D,eAAe,GAAG,IAAI,eAAe,CAAC;YACpC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,sCAAsC;QACtC,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,oEAAoE,EAAE;gBAChF,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;QAClC,IAAI;QACJ,QAAQ;QACR,SAAS,EAAE,QAAQ;QACnB,OAAO;QACP,UAAU;QACV,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QAC/D,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,CAAC,CAAC,QAAQ;QACrB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,aAAa,EAAE,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC,eAAe;KAC5D,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAoB,EAAE,WAA2B,EAAE,EAAE;QAC1F,4CAA4C;QAC5C,MAAM,EAAE,GAAG,EAAE,GAAG,sBAAsB,CAAC,WAAW,CAAC,CAAC;QAEpD,mDAAmD;QACnD,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAE1B,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAElC,4EAA4E;QAC5E,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;gBACnD,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;YAC/B,CAAC;YACD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,8EAA8E;QAC9E,mFAAmF;QACnF,8EAA8E;QAC9E,6EAA6E;QAC7E,IAAI,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;YACnD,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;QAED,6DAA6D;QAC7D,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,wCAAwC;YAClD,CAAC;QACH,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,2CAA2C;QACrD,CAAC;QAED,qCAAqC;QACrC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;QAE7B,IAAI,CAAC;YACH,wBAAwB;YACxB,IAAI,MAAM,CAAC,qBAAqB,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBACvD,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACvB,OAAO;YACT,CAAC;YAED,kCAAkC;YAClC,IAAI,MAAM,CAAC,gBAAgB,IAAI,eAAe,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;gBAC5E,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACzB,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBACzB,MAAM,uBAAuB,CAAC,GAAG,EAAE,GAAG,EAAE,eAAe,CAAC,CAAC;oBACzD,OAAO;gBACT,CAAC;gBACD,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mDAAmD,EAAE,CAAC,CAAC;gBACnF,OAAO;YACT,CAAC;YAED,qDAAqD;YACrD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,eAAe,EAAE,CAAC;gBACpD,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzB,kFAAkF;gBAClF,mFAAmF;gBACnF,iFAAiF;gBACjF,yFAAyF;gBACzF,MAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvE,MAAM,OAAO,GAAG,GAAG,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,EAAE,EAAE,CAAC;gBAC3E,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YAED,2EAA2E;YAC3E,wEAAwE;YACxE,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC5B,MAAM,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;oBACvC,QAAQ,EAAE,YAAY;oBACtB,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;oBACvC,SAAS;oBACT,QAAQ;iBACT,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,2CAA2C;YAC3C,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;gBACxB,yEAAyE;gBACzE,uEAAuE;gBACvE,IAAI,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnD,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;oBACvC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;wBACjB,KAAK,EAAE,oBAAoB;wBAC3B,OAAO,EAAE,uFAAuF;qBACjG,CAAC,CAAC;oBACH,OAAO;gBACT,CAAC;gBAED,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAuB,CAAC;gBACtE,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEtE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrE,MAAM,aAAa,GAA2B,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;gBAClG,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;gBAEtF,IAAI,KAAK,IAAI,MAAM,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;oBAC1C,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBACjC,CAAC;gBACD,OAAO;YACT,CAAC;YAED,YAAY;YACZ,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qDAAqD;YACrD,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;oBACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAC;gBACrG,CAAC;gBACD,OAAO;YACT,CAAC;YAED,gFAAgF;YAChF,4EAA4E;YAC5E,oEAAoE;YACpE,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;oBACrB,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClF,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;gBACjC,KAAK;gBACL,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,GAAG;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,sEAAsE;gBACtE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;oBACjB,KAAK,EAAE,uBAAuB;oBAC9B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC;iBAC9B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,+EAA+E;IAC/E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,CAAG,kCAAkC;IACpE,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,CAAG,sCAAsC;IACxE,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAE,qCAAqC;IACvE,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAE,4CAA4C;IAE9E,4BAA4B;IAC5B,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,MAAM,gBAAgB,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;QAChD,IAAI,cAAc;YAAE,OAAO;QAC3B,cAAc,GAAG,IAAI,CAAC;QAEtB,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAExE,yBAAyB;QACzB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;oBACtB,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC7B,CAAC;gBACD,IAAI,WAAW,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBACxE,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBAChC,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEjB,yBAAyB;QACzB,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,UAAU,EAAE,CAAC;QAC/B,CAAC;QAED,oBAAoB;QACpB,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;QAED,oBAAoB;QACpB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;gBAChB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAClC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE5D,kBAAkB;IAClB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBACnC,IAAI;gBACJ,QAAQ;gBACR,GAAG,EAAE,UAAU,QAAQ,IAAI,IAAI,GAAG,OAAO,EAAE;gBAC3C,SAAS,EAAE,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,UAAU,QAAQ,IAAI,IAAI,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC/F,YAAY,EAAE,MAAM,CAAC,gBAAgB,IAAI,eAAe,CAAC,CAAC,CAAC,UAAU,QAAQ,IAAI,IAAI,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS;aACpH,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/tools/common.d.ts
CHANGED
|
@@ -468,25 +468,6 @@ export declare const stackIdSchema: z.ZodObject<{
|
|
|
468
468
|
stackId: string;
|
|
469
469
|
siteId?: string | undefined;
|
|
470
470
|
}>;
|
|
471
|
-
export declare const customRequestSchema: z.ZodObject<{
|
|
472
|
-
method: z.ZodDefault<z.ZodString>;
|
|
473
|
-
url: z.ZodString;
|
|
474
|
-
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
475
|
-
data: z.ZodOptional<z.ZodUnknown>;
|
|
476
|
-
siteId: z.ZodOptional<z.ZodString>;
|
|
477
|
-
}, "strip", z.ZodTypeAny, {
|
|
478
|
-
method: string;
|
|
479
|
-
url: string;
|
|
480
|
-
params?: Record<string, unknown> | undefined;
|
|
481
|
-
data?: unknown;
|
|
482
|
-
siteId?: string | undefined;
|
|
483
|
-
}, {
|
|
484
|
-
url: string;
|
|
485
|
-
method?: string | undefined;
|
|
486
|
-
params?: Record<string, unknown> | undefined;
|
|
487
|
-
data?: unknown;
|
|
488
|
-
siteId?: string | undefined;
|
|
489
|
-
}>;
|
|
490
471
|
/**
|
|
491
472
|
* Pagination schema for Home Assistant entity queries.
|
|
492
473
|
* Reduces response size by returning paginated, lightweight entities by default.
|
package/dist/tools/common.js
CHANGED
|
@@ -293,14 +293,6 @@ export const deviceIdSchema = siteInputSchema.extend({
|
|
|
293
293
|
export const stackIdSchema = siteInputSchema.extend({
|
|
294
294
|
stackId: z.string().min(1, 'stackId is required').describe('Switch stack identifier'),
|
|
295
295
|
});
|
|
296
|
-
// Custom request schema for advanced API calls
|
|
297
|
-
export const customRequestSchema = z.object({
|
|
298
|
-
method: z.string().default('GET').describe('HTTP method'),
|
|
299
|
-
url: z.string().min(1, 'A controller API path is required').describe('API endpoint path'),
|
|
300
|
-
params: z.record(z.string(), z.unknown()).optional().describe('Query parameters'),
|
|
301
|
-
data: z.unknown().optional().describe('Request body data'),
|
|
302
|
-
siteId: z.string().min(1).optional().describe('Site ID'),
|
|
303
|
-
});
|
|
304
296
|
// =============================================================================
|
|
305
297
|
// Home Assistant pagination schemas
|
|
306
298
|
// =============================================================================
|