@coffeerunhobby/mcp-ha-connect 2.4.7 → 2.5.0

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.
Files changed (62) hide show
  1. package/.env.example +25 -0
  2. package/README.md +42 -10
  3. package/dist/config.d.ts +7 -0
  4. package/dist/config.js +22 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/index.js +3 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/net/adapters/omada.d.ts +46 -7
  9. package/dist/net/adapters/omada.js +432 -44
  10. package/dist/net/adapters/omada.js.map +1 -1
  11. package/dist/net/adapters/omadaPorts.d.ts +62 -0
  12. package/dist/net/adapters/omadaPorts.js +212 -0
  13. package/dist/net/adapters/omadaPorts.js.map +1 -0
  14. package/dist/net/adapters/omadaRules.d.ts +1 -1
  15. package/dist/net/adapters/omadaRules.js +2 -2
  16. package/dist/net/adapters/omadaRules.js.map +1 -1
  17. package/dist/net/adapters/ruijie.d.ts +59 -0
  18. package/dist/net/adapters/ruijie.js +363 -0
  19. package/dist/net/adapters/ruijie.js.map +1 -0
  20. package/dist/net/model.d.ts +37 -12
  21. package/dist/net/model.js.map +1 -1
  22. package/dist/omadaClient/accessControl.js +1 -1
  23. package/dist/omadaClient/accessControl.js.map +1 -1
  24. package/dist/omadaClient/index.d.ts +4 -0
  25. package/dist/omadaClient/index.js +3 -0
  26. package/dist/omadaClient/index.js.map +1 -1
  27. package/dist/omadaClient/networkConfig.d.ts +21 -0
  28. package/dist/omadaClient/networkConfig.js +41 -0
  29. package/dist/omadaClient/networkConfig.js.map +1 -1
  30. package/dist/ruijieClient/crypto.d.ts +20 -0
  31. package/dist/ruijieClient/crypto.js +57 -0
  32. package/dist/ruijieClient/crypto.js.map +1 -0
  33. package/dist/ruijieClient/index.d.ts +62 -0
  34. package/dist/ruijieClient/index.js +197 -0
  35. package/dist/ruijieClient/index.js.map +1 -0
  36. package/dist/server/common.d.ts +2 -0
  37. package/dist/server/common.js +2 -1
  38. package/dist/server/common.js.map +1 -1
  39. package/dist/server/http.d.ts +2 -0
  40. package/dist/server/http.js +2 -2
  41. package/dist/server/http.js.map +1 -1
  42. package/dist/server/stdio.d.ts +2 -0
  43. package/dist/server/stdio.js.map +1 -1
  44. package/dist/server/stream.d.ts +2 -0
  45. package/dist/server/stream.js +2 -1
  46. package/dist/server/stream.js.map +1 -1
  47. package/dist/tools/index.d.ts +3 -0
  48. package/dist/tools/index.js +9 -3
  49. package/dist/tools/index.js.map +1 -1
  50. package/dist/tools/net/index.d.ts +43 -2
  51. package/dist/tools/net/index.js +197 -12
  52. package/dist/tools/net/index.js.map +1 -1
  53. package/dist/tools/omada/listClients.js +1 -1
  54. package/dist/tools/omada/listClients.js.map +1 -1
  55. package/dist/upstreams.d.ts +8 -2
  56. package/dist/upstreams.js +56 -3
  57. package/dist/upstreams.js.map +1 -1
  58. package/dist/utils/redact.js +1 -1
  59. package/dist/utils/redact.js.map +1 -1
  60. package/dist/version.d.ts +1 -1
  61. package/dist/version.js +1 -1
  62. package/package.json +7 -7
@@ -5,7 +5,9 @@
5
5
  * applied, refused if the controller changed meanwhile or if online devices would be
6
6
  * cut off without allowLockout.
7
7
  *
8
- * 2.4.5: networks and Wi-Fi. 2.4.7: rules (and listing groups). Switch ports and mDNS in 2.4.8.
8
+ * 2.4.5: networks and Wi-Fi. 2.4.7: rules (and listing groups). 2.4.8: clients with their
9
+ * network, switch ports and port profiles, the mDNS repeater. 2.5.0: several controllers
10
+ * (Omada and Ruijie): every tool takes an optional `controller` (the vendor), default Omada.
9
11
  */
10
12
  import type { McpServer } from '@modelcontextprotocol/server';
11
13
  import { z } from 'zod';
@@ -29,6 +31,7 @@ export declare const createNetworkSchema: z.ZodObject<{
29
31
  ipv6: z.ZodOptional<z.ZodBoolean>;
30
32
  isolated: z.ZodOptional<z.ZodBoolean>;
31
33
  dryRun: z.ZodOptional<z.ZodBoolean>;
34
+ basis: z.ZodOptional<z.ZodString>;
32
35
  }, z.core.$strip>;
33
36
  export declare const updateNetworkSchema: z.ZodObject<{
34
37
  network: z.ZodString;
@@ -45,12 +48,14 @@ export declare const updateNetworkSchema: z.ZodObject<{
45
48
  ipv6: z.ZodOptional<z.ZodBoolean>;
46
49
  isolated: z.ZodOptional<z.ZodBoolean>;
47
50
  dryRun: z.ZodOptional<z.ZodBoolean>;
51
+ basis: z.ZodOptional<z.ZodString>;
48
52
  allowLockout: z.ZodOptional<z.ZodBoolean>;
49
53
  }, z.core.$strip>;
50
54
  export declare const deleteNetworkSchema: z.ZodObject<{
51
55
  network: z.ZodString;
52
56
  dryRun: z.ZodOptional<z.ZodBoolean>;
53
57
  allowLockout: z.ZodOptional<z.ZodBoolean>;
58
+ basis: z.ZodOptional<z.ZodString>;
54
59
  }, z.core.$strip>;
55
60
  export declare const createWifiSchema: z.ZodObject<{
56
61
  name: z.ZodString;
@@ -82,6 +87,7 @@ export declare const createWifiSchema: z.ZodObject<{
82
87
  group: z.ZodString;
83
88
  }, z.core.$strip>>;
84
89
  dryRun: z.ZodOptional<z.ZodBoolean>;
90
+ basis: z.ZodOptional<z.ZodString>;
85
91
  }, z.core.$strip>;
86
92
  export declare const updateWifiSchema: z.ZodObject<{
87
93
  wifi: z.ZodString;
@@ -115,12 +121,14 @@ export declare const updateWifiSchema: z.ZodObject<{
115
121
  }, z.core.$strip>>>;
116
122
  newTemporaryPassword: z.ZodOptional<z.ZodBoolean>;
117
123
  dryRun: z.ZodOptional<z.ZodBoolean>;
124
+ basis: z.ZodOptional<z.ZodString>;
118
125
  allowLockout: z.ZodOptional<z.ZodBoolean>;
119
126
  }, z.core.$strip>;
120
127
  export declare const deleteWifiSchema: z.ZodObject<{
121
128
  wifi: z.ZodString;
122
129
  dryRun: z.ZodOptional<z.ZodBoolean>;
123
130
  allowLockout: z.ZodOptional<z.ZodBoolean>;
131
+ basis: z.ZodOptional<z.ZodString>;
124
132
  }, z.core.$strip>;
125
133
  export declare const createRuleSchema: z.ZodObject<{
126
134
  name: z.ZodString;
@@ -169,6 +177,7 @@ export declare const createRuleSchema: z.ZodObject<{
169
177
  enabled: z.ZodOptional<z.ZodBoolean>;
170
178
  position: z.ZodOptional<z.ZodNumber>;
171
179
  dryRun: z.ZodOptional<z.ZodBoolean>;
180
+ basis: z.ZodOptional<z.ZodString>;
172
181
  }, z.core.$strip>;
173
182
  export declare const updateRuleSchema: z.ZodObject<{
174
183
  rule: z.ZodString;
@@ -218,15 +227,18 @@ export declare const updateRuleSchema: z.ZodObject<{
218
227
  enabled: z.ZodOptional<z.ZodBoolean>;
219
228
  position: z.ZodOptional<z.ZodNumber>;
220
229
  dryRun: z.ZodOptional<z.ZodBoolean>;
230
+ basis: z.ZodOptional<z.ZodString>;
221
231
  }, z.core.$strip>;
222
232
  export declare const deleteRuleSchema: z.ZodObject<{
223
233
  rule: z.ZodString;
224
234
  dryRun: z.ZodOptional<z.ZodBoolean>;
235
+ basis: z.ZodOptional<z.ZodString>;
225
236
  }, z.core.$strip>;
226
237
  export declare const moveRuleSchema: z.ZodObject<{
227
238
  rule: z.ZodString;
228
239
  position: z.ZodNumber;
229
240
  dryRun: z.ZodOptional<z.ZodBoolean>;
241
+ basis: z.ZodOptional<z.ZodString>;
230
242
  }, z.core.$strip>;
231
243
  export declare const listGroupsSchema: z.ZodObject<{
232
244
  kind: z.ZodOptional<z.ZodEnum<{
@@ -234,4 +246,33 @@ export declare const listGroupsSchema: z.ZodObject<{
234
246
  address: "address";
235
247
  }>>;
236
248
  }, z.core.$strip>;
237
- export declare function registerNetTools(server: McpServer, controller: NetworkController): number;
249
+ export declare const listClientsSchema: z.ZodObject<{
250
+ network: z.ZodOptional<z.ZodString>;
251
+ }, z.core.$strip>;
252
+ export declare const listPortsSchema: z.ZodObject<{
253
+ switch: z.ZodOptional<z.ZodString>;
254
+ }, z.core.$strip>;
255
+ export declare const assignPortSchema: z.ZodObject<{
256
+ switch: z.ZodString;
257
+ port: z.ZodNumber;
258
+ network: z.ZodString;
259
+ tagged: z.ZodDefault<z.ZodUnion<readonly [z.ZodEnum<{
260
+ none: "none";
261
+ all: "all";
262
+ }>, z.ZodArray<z.ZodString>]>>;
263
+ dryRun: z.ZodOptional<z.ZodBoolean>;
264
+ basis: z.ZodOptional<z.ZodString>;
265
+ allowLockout: z.ZodOptional<z.ZodBoolean>;
266
+ }, z.core.$strip>;
267
+ export declare const setMdnsSchema: z.ZodObject<{
268
+ enabled: z.ZodBoolean;
269
+ networks: z.ZodOptional<z.ZodArray<z.ZodString>>;
270
+ dryRun: z.ZodOptional<z.ZodBoolean>;
271
+ basis: z.ZodOptional<z.ZodString>;
272
+ }, z.core.$strip>;
273
+ /**
274
+ * Registers the net_* tools for one or more controllers (one per vendor). Each tool takes an
275
+ * optional `controller` (the vendor name, checked by its schema); without it, Omada answers
276
+ * when configured, else the first controller.
277
+ */
278
+ export declare function registerNetTools(target: McpServer, controllers: NetworkController | NetworkController[]): number;
@@ -5,13 +5,22 @@
5
5
  * applied, refused if the controller changed meanwhile or if online devices would be
6
6
  * cut off without allowLockout.
7
7
  *
8
- * 2.4.5: networks and Wi-Fi. 2.4.7: rules (and listing groups). Switch ports and mDNS in 2.4.8.
8
+ * 2.4.5: networks and Wi-Fi. 2.4.7: rules (and listing groups). 2.4.8: clients with their
9
+ * network, switch ports and port profiles, the mDNS repeater. 2.5.0: several controllers
10
+ * (Omada and Ruijie): every tool takes an optional `controller` (the vendor), default Omada.
9
11
  */
12
+ import { AsyncLocalStorage } from 'node:async_hooks';
10
13
  import { z } from 'zod';
14
+ import { NetError } from '../../net/model.js';
11
15
  import { Permission, toToolResult, wrapToolHandler } from '../common.js';
12
16
  const ref = (what) => z.string().min(1).describe(`${what} name or id`);
13
17
  const dryRun = z.boolean().optional().describe('Only show what would change (steps, effects, devices cut off); write nothing');
14
- const allowLockout = z.boolean().optional().describe('Apply even if online devices would be disconnected');
18
+ const allowLockout = z.boolean().optional().describe('Apply even if online devices would be disconnected (needs the basis from the dry run)');
19
+ const basis = z
20
+ .string()
21
+ .min(1)
22
+ .optional()
23
+ .describe('The basis a dry run returned: applying is refused if the controller, or the devices the change cuts off, changed since. Required with allowLockout');
15
24
  const band = z.enum(['2.4', '5', '6']);
16
25
  const dhcp = z.object({
17
26
  enabled: z.boolean(),
@@ -30,6 +39,7 @@ export const createNetworkSchema = z.object({
30
39
  ipv6: z.boolean().optional().describe('Default off'),
31
40
  isolated: z.boolean().optional().describe("Devices can't start connections to other networks"),
32
41
  dryRun,
42
+ basis,
33
43
  });
34
44
  export const updateNetworkSchema = z.object({
35
45
  network: ref('Network'),
@@ -40,9 +50,10 @@ export const updateNetworkSchema = z.object({
40
50
  ipv6: z.boolean().optional(),
41
51
  isolated: z.boolean().optional(),
42
52
  dryRun,
53
+ basis,
43
54
  allowLockout,
44
55
  });
45
- export const deleteNetworkSchema = z.object({ network: ref('Network'), dryRun, allowLockout });
56
+ export const deleteNetworkSchema = z.object({ network: ref('Network'), dryRun, allowLockout, basis });
46
57
  export const createWifiSchema = z.object({
47
58
  name: z.string().min(1).max(32),
48
59
  network: ref('Network the Wi-Fi puts its devices on'),
@@ -54,6 +65,7 @@ export const createWifiSchema = z.object({
54
65
  fastRoaming: z.boolean().optional().describe('802.11r, default off'),
55
66
  macFilter: macFilter.optional().describe('Only (allow) or never (deny) the devices in a MAC group'),
56
67
  dryRun,
68
+ basis,
57
69
  });
58
70
  export const updateWifiSchema = z.object({
59
71
  wifi: ref('Wi-Fi network'),
@@ -68,9 +80,10 @@ export const updateWifiSchema = z.object({
68
80
  macFilter: macFilter.nullable().optional().describe('null switches the MAC filter off'),
69
81
  newTemporaryPassword: z.boolean().optional().describe('Replace the password with a random one nobody knows (set the real one in the controller web UI)'),
70
82
  dryRun,
83
+ basis,
71
84
  allowLockout,
72
85
  });
73
- export const deleteWifiSchema = z.object({ wifi: ref('Wi-Fi network'), dryRun, allowLockout });
86
+ export const deleteWifiSchema = z.object({ wifi: ref('Wi-Fi network'), dryRun, allowLockout, basis });
74
87
  const selector = z.union([
75
88
  z.object({ network: ref('Network') }).strict(),
76
89
  z.object({ group: ref('IP group') }).strict(),
@@ -94,6 +107,7 @@ export const createRuleSchema = z.object({
94
107
  enabled: z.boolean().optional().describe('Default true'),
95
108
  position: position.optional().describe('Default: last'),
96
109
  dryRun,
110
+ basis,
97
111
  });
98
112
  export const updateRuleSchema = z.object({
99
113
  rule: ref('Rule'),
@@ -105,17 +119,49 @@ export const updateRuleSchema = z.object({
105
119
  enabled: z.boolean().optional(),
106
120
  position: position.optional(),
107
121
  dryRun,
122
+ basis,
108
123
  });
109
- export const deleteRuleSchema = z.object({ rule: ref('Rule'), dryRun });
110
- export const moveRuleSchema = z.object({ rule: ref('Rule'), position, dryRun });
124
+ export const deleteRuleSchema = z.object({ rule: ref('Rule'), dryRun, basis });
125
+ export const moveRuleSchema = z.object({ rule: ref('Rule'), position, dryRun, basis });
111
126
  export const listGroupsSchema = z.object({ kind: z.enum(['address', 'mac']).optional() });
127
+ export const listClientsSchema = z.object({ network: ref('Only devices on this network').optional() });
128
+ const switchRef = z.string().min(1).describe('Switch name or MAC');
129
+ export const listPortsSchema = z.object({ switch: switchRef.optional().describe('Only this switch (name or MAC); default all') });
130
+ export const assignPortSchema = z.object({
131
+ switch: switchRef,
132
+ port: z.number().int().min(1).describe('Port number'),
133
+ network: ref('Untagged network: what a plain device on the port is on'),
134
+ tagged: z
135
+ .union([z.enum(['all', 'none']), z.array(ref('Network')).min(1)])
136
+ .default('none')
137
+ .describe('Networks the port also carries tagged (for an access point, a switch or a VLAN-aware device): "all", "none" (default) or a list'),
138
+ dryRun,
139
+ basis,
140
+ allowLockout,
141
+ });
142
+ export const setMdnsSchema = z.object({
143
+ enabled: z.boolean(),
144
+ networks: z.array(ref('Network')).min(1).optional().describe('Networks to repeat between (at least two when enabled); default: the current ones'),
145
+ dryRun,
146
+ basis,
147
+ });
112
148
  const NO_PASSWORD = ' Passwords are never taken or shown: a new or reset Wi-Fi network gets a random temporary password, and the owner sets the real one in the controller web UI.';
113
149
  const CONFIRM = ' Confirm with the user before applying (use dryRun first).';
114
- /** Plan, then apply unless dryRun. */
150
+ /**
151
+ * Plan, then apply unless dryRun. Dry run and apply are separate calls (the server keeps no
152
+ * state between them), so the dry run hands out its basis and the apply checks it: devices are
153
+ * cut off (allowLockout) only when they are the ones the dry run showed.
154
+ */
115
155
  async function run(controller, change, options) {
156
+ if (options.allowLockout && !options.dryRun && !options.basis) {
157
+ throw new NetError('INVALID', 'allowLockout needs the basis from a dry run of this change, so that only the devices it showed are cut off. Run it with dryRun first.');
158
+ }
116
159
  const plan = await controller.plan(change);
117
160
  if (options.dryRun)
118
161
  return { dryRun: true, ...summary(plan) };
162
+ if (options.basis !== undefined && options.basis !== plan.basis) {
163
+ throw new NetError('CONFLICT', 'This is not the change the dry run was for, or the controller or the devices it cuts off changed since; nothing was written. Run the dry run of this change again.');
164
+ }
119
165
  const result = await controller.apply(plan, { allowLockout: options.allowLockout });
120
166
  return {
121
167
  applied: true,
@@ -132,10 +178,65 @@ function summary(plan) {
132
178
  steps: plan.steps,
133
179
  effects: plan.effects,
134
180
  wouldLockOut: plan.wouldLockOut.map((c) => ({ mac: c.mac, name: c.name })),
135
- ...(plan.wouldLockOut.length ? { note: 'Applying needs allowLockout: these online devices would be disconnected.' } : {}),
181
+ basis: plan.basis,
182
+ ...(plan.wouldLockOut.length ? { note: 'Applying needs allowLockout and this basis: these online devices would be disconnected.' } : {}),
136
183
  };
137
184
  }
138
- export function registerNetTools(server, controller) {
185
+ /**
186
+ * A controller that hands every call to the one chosen for the current tool call. The choice
187
+ * lives in an AsyncLocalStorage, so parallel calls in one request each keep their own.
188
+ */
189
+ function routedController(current) {
190
+ return {
191
+ get vendor() {
192
+ return current().vendor;
193
+ },
194
+ get id() {
195
+ return current().id;
196
+ },
197
+ capabilities: () => current().capabilities(),
198
+ protectedResources: () => current().protectedResources(),
199
+ listNetworks: () => current().listNetworks(),
200
+ listWifi: () => current().listWifi(),
201
+ listPortProfiles: () => current().listPortProfiles(),
202
+ listPorts: (device) => current().listPorts(device),
203
+ listRules: () => current().listRules(),
204
+ listGroups: (kind) => current().listGroups(kind),
205
+ listReservations: () => current().listReservations(),
206
+ listClients: () => current().listClients(),
207
+ getMdnsRepeater: () => current().getMdnsRepeater(),
208
+ plan: (change) => current().plan(change),
209
+ apply: (plan, options) => current().apply(plan, options),
210
+ };
211
+ }
212
+ /**
213
+ * Registers the net_* tools for one or more controllers (one per vendor). Each tool takes an
214
+ * optional `controller` (the vendor name, checked by its schema); without it, Omada answers
215
+ * when configured, else the first controller.
216
+ */
217
+ export function registerNetTools(target, controllers) {
218
+ // One controller per vendor: a second one of the same vendor is never chosen.
219
+ const configured = Array.isArray(controllers) ? controllers : [controllers];
220
+ if (!configured.length)
221
+ return 0;
222
+ const fallback = configured.find((c) => c.vendor === 'omada') ?? configured[0];
223
+ const vendors = [...new Set(configured.map((c) => c.vendor))];
224
+ const chosen = new AsyncLocalStorage();
225
+ const controller = routedController(() => chosen.getStore() ?? fallback);
226
+ // A value the schema let through without a controller behind it refuses every call (never Omada by accident).
227
+ const pick = (wanted) => wanted === undefined
228
+ ? fallback
229
+ : (configured.find((c) => c.vendor === wanted) ??
230
+ routedController(() => {
231
+ throw new NetError('NOT_FOUND', `No network controller '${String(wanted)}' is configured; configured: ${vendors.join(', ')}`);
232
+ }));
233
+ const choice = z
234
+ .enum(vendors)
235
+ .optional()
236
+ .describe(`Which network controller answers: ${vendors.join(' or ')} (default ${fallback.vendor})`);
237
+ const server = {
238
+ registerTool: (name, config, handler) => target.registerTool(name, { ...config, inputSchema: config.inputSchema.extend({ controller: choice }) }, ((args, extra) => chosen.run(pick(args?.controller), () => handler(args, extra)))),
239
+ };
139
240
  server.registerTool('net_capabilities', { description: 'What the network controller can do: per feature native, emulated (built from several objects) or unsupported.', inputSchema: z.object({}) }, wrapToolHandler('net_capabilities', async () => toToolResult({ controller: controller.id, ...(await controller.capabilities()) }), Permission.QUERY));
140
241
  server.registerTool('net_listNetworks', { description: 'List networks (VLANs): VLAN, gateway, DHCP, IPv6, and whether it is protected (carries the controller).', inputSchema: z.object({}) }, wrapToolHandler('net_listNetworks', async () => toToolResult(await controller.listNetworks()), Permission.QUERY));
141
242
  server.registerTool('net_listWifi', { description: 'List Wi-Fi networks: the network they put devices on, bands, security, isolation, MAC filter. Passwords are never shown.', inputSchema: z.object({}) }, wrapToolHandler('net_listWifi', async () => toToolResult(await controller.listWifi()), Permission.QUERY));
@@ -157,7 +258,7 @@ export function registerNetTools(server, controller) {
157
258
  },
158
259
  }, a)), Permission.CONFIGURE));
159
260
  server.registerTool('net_updateNetwork', {
160
- description: "Change a network: name, VLAN, gateway, DHCP, IPv6 off. Never changes the VLAN or gateway of the network the controller is on; changes that cut devices off need allowLockout." +
261
+ description: "Change a network: name, VLAN, gateway, DHCP, IPv6 off. Never changes the VLAN or gateway of the networks the controller and this server are on; changes that cut devices off need allowLockout." +
161
262
  CONFIRM,
162
263
  inputSchema: updateNetworkSchema,
163
264
  }, wrapToolHandler('net_updateNetwork', async (a) => toToolResult(await run(controller, {
@@ -176,7 +277,7 @@ export function registerNetTools(server, controller) {
176
277
  },
177
278
  }, a)), Permission.CONFIGURE));
178
279
  server.registerTool('net_deleteNetwork', {
179
- description: 'Delete a network. Refused while a Wi-Fi network, port profile, DHCP reservation or rule uses it, and for the network the controller is on.' + CONFIRM,
280
+ description: 'Delete a network. Refused while a Wi-Fi network, port profile, switch port (untagged), DHCP reservation or rule uses it, and for the networks the controller and this server are on.' + CONFIRM,
180
281
  inputSchema: deleteNetworkSchema,
181
282
  }, wrapToolHandler('net_deleteNetwork', async (a) => toToolResult(await run(controller, { op: 'delete', kind: 'network', ref: { name: a.network } }, a)), Permission.CONFIGURE));
182
283
  server.registerTool('net_createWifi', {
@@ -226,7 +327,8 @@ export function registerNetTools(server, controller) {
226
327
  }, a)), Permission.CONFIGURE));
227
328
  server.registerTool('net_deleteWifi', { description: 'Delete a Wi-Fi network; its connected devices are disconnected (needs allowLockout then).' + CONFIRM, inputSchema: deleteWifiSchema }, wrapToolHandler('net_deleteWifi', async (a) => toToolResult(await run(controller, { op: 'delete', kind: 'wifi', ref: { name: a.wifi } }, a)), Permission.CONFIGURE));
228
329
  registerRuleTools(server, controller);
229
- return 15;
330
+ registerPortTools(server, controller);
331
+ return 21;
230
332
  }
231
333
  const RULES = ' Rules are stateful: a block rule stops new connections, while replies to connections started from the other side still pass (so "block IoT → Home" lets Home still reach IoT).';
232
334
  function registerRuleTools(server, controller) {
@@ -272,6 +374,89 @@ function registerRuleTools(server, controller) {
272
374
  server.registerTool('net_deleteRule', { description: 'Delete a rule (and the address group it owns).' + CONFIRM, inputSchema: deleteRuleSchema }, wrapToolHandler('net_deleteRule', async (a) => toToolResult(await run(controller, { op: 'delete', kind: 'rule', ref: { name: a.rule } }, a)), Permission.CONFIGURE));
273
375
  server.registerTool('net_moveRule', { description: 'Move a rule to another position (1 = checked first; the first matching rule decides).' + CONFIRM, inputSchema: moveRuleSchema }, wrapToolHandler('net_moveRule', async (a) => toToolResult(await run(controller, { op: 'move', kind: 'rule', ref: { name: a.rule }, position: a.position }, a)), Permission.CONFIGURE));
274
376
  }
377
+ function registerPortTools(server, controller) {
378
+ server.registerTool('net_listClients', {
379
+ description: 'List the online devices with the network (and VLAN) each is on, its Wi-Fi network or switch port. Answers "what is on VLAN 2?".',
380
+ inputSchema: listClientsSchema,
381
+ }, wrapToolHandler('net_listClients', async (a) => {
382
+ const networks = await controller.listNetworks();
383
+ const only = a.network === undefined ? undefined : findNetwork(networks, a.network);
384
+ const clients = (await controller.listClients()).filter((c) => !only || (c.network && 'id' in c.network && c.network.id === only.id));
385
+ return toToolResult(clients.map((c) => {
386
+ const network = c.network && 'id' in c.network ? networks.find((n) => n.id === c.network.id) : undefined;
387
+ return {
388
+ mac: c.mac,
389
+ ...(c.name ? { name: c.name } : {}),
390
+ ...(c.ip ? { ip: c.ip } : {}),
391
+ network: network ? network.name : 'unknown',
392
+ ...(network ? { vlan: network.vlan } : {}),
393
+ ...(c.wifi ? { wifi: 'name' in c.wifi ? c.wifi.name : c.wifi.id } : {}),
394
+ ...(c.port ? { port: c.port } : {}),
395
+ online: c.online,
396
+ };
397
+ }));
398
+ }, Permission.QUERY));
399
+ server.registerTool('net_listPortProfiles', {
400
+ description: 'List switch port profiles and, when a profile sets them, the networks a port following it carries (without networks: ports keep their own, see net_listPorts). Profiles are created in the controller web UI.',
401
+ inputSchema: z.object({}),
402
+ }, wrapToolHandler('net_listPortProfiles', async () => {
403
+ const networks = await controller.listNetworks();
404
+ return toToolResult((await controller.listPortProfiles()).map((p) => ({ ...p, ...(p.networks ? { networks: namedNetworks(p.networks, networks) } : {}) })));
405
+ }, Permission.QUERY));
406
+ server.registerTool('net_listPorts', {
407
+ description: 'List switch ports: the networks each carries (untagged and tagged), its profile, the online devices on it, whether it is an uplink, and why it is protected when it is (uplinks and the ports the controller and this server are on are never changed).',
408
+ inputSchema: listPortsSchema,
409
+ }, wrapToolHandler('net_listPorts', async (a) => {
410
+ const profiles = await controller.listPortProfiles();
411
+ const networks = await controller.listNetworks();
412
+ const ports = await controller.listPorts(a.switch === undefined ? undefined : toSwitch(a.switch));
413
+ return toToolResult(ports.map((p) => ({
414
+ ...p,
415
+ ...(p.profile ? { profile: named(p.profile, profiles) } : {}),
416
+ ...(p.networks ? { networks: namedNetworks(p.networks, networks) } : {}),
417
+ seen: p.seen.map((c) => ({ mac: c.mac, ...(c.name ? { name: c.name } : {}), ...(c.ip ? { ip: c.ip } : {}) })),
418
+ })));
419
+ }, Permission.QUERY));
420
+ server.registerTool('net_assignPort', {
421
+ description: 'Set the networks a switch port carries: its untagged network (e.g. a wired IoT device\'s port on "IoT") and optionally tagged ones; its other settings keep following its profile. Never for uplinks, the ports the controller and this server are on, link aggregation ports and ports with their own settings (net_listPorts says why a port is protected); devices that would lose their network need allowLockout.' +
422
+ CONFIRM,
423
+ inputSchema: assignPortSchema,
424
+ }, wrapToolHandler('net_assignPort', async (a) => toToolResult(await run(controller, { op: 'assign', kind: 'port', port: { device: toSwitch(a.switch), port: a.port }, networks: { native: { name: a.network }, tagged: Array.isArray(a.tagged) ? a.tagged.map((name) => ({ name })) : (a.tagged ?? 'none') } }, a)), Permission.CONFIGURE));
425
+ server.registerTool('net_getMdnsRepeater', { description: 'Whether mDNS (Bonjour) discovery is repeated between networks, and between which.', inputSchema: z.object({}) }, wrapToolHandler('net_getMdnsRepeater', async () => {
426
+ const networks = await controller.listNetworks();
427
+ const repeater = await controller.getMdnsRepeater();
428
+ return toToolResult({ ...repeater, networks: repeater.networks.map((r) => named(r, networks)) });
429
+ }, Permission.QUERY));
430
+ server.registerTool('net_setMdnsRepeater', {
431
+ description: 'Switch the mDNS repeater on or off, or change the networks it repeats between (e.g. Home and IoT, so Home Assistant and phones discover IoT devices). Discovery only: traffic still follows the rules.' +
432
+ CONFIRM,
433
+ inputSchema: setMdnsSchema,
434
+ }, wrapToolHandler('net_setMdnsRepeater', async (a) => toToolResult(await run(controller, { op: 'set', kind: 'mdnsRepeater', enabled: a.enabled, ...(a.networks ? { networks: a.networks.map((name) => ({ name })) } : {}) }, a)), Permission.CONFIGURE));
435
+ }
436
+ /** A network by id or name (case-insensitive). */
437
+ function findNetwork(networks, wanted) {
438
+ const found = networks.find((n) => n.id === wanted) ?? networks.find((n) => n.name.toLowerCase() === wanted.trim().toLowerCase());
439
+ if (!found)
440
+ throw new NetError('NOT_FOUND', `Network '${wanted}' not found. Available: ${networks.map((n) => n.name).join(', ') || '(none)'}`);
441
+ return found;
442
+ }
443
+ /** A reference with the name added, for reading. */
444
+ function named(r, items) {
445
+ const item = 'id' in r ? items.find((i) => i.id === r.id) : undefined;
446
+ return item ? { id: item.id, name: item.name } : r;
447
+ }
448
+ /** A port's or profile's networks with their names. */
449
+ function namedNetworks(carried, networks) {
450
+ return {
451
+ ...(carried.native ? { native: named(carried.native, networks) } : {}),
452
+ ...(carried.untagged ? { untagged: carried.untagged.map((r) => named(r, networks)) } : {}),
453
+ tagged: Array.isArray(carried.tagged) ? carried.tagged.map((r) => named(r, networks)) : carried.tagged,
454
+ };
455
+ }
456
+ /** A MAC (12 hex digits, with or without separators) picks the switch by MAC, anything else by name. */
457
+ function toSwitch(value) {
458
+ return /^([0-9a-f]{2}[:-]){5}[0-9a-f]{2}$|^[0-9a-f]{12}$/i.test(value.trim()) ? { mac: value.trim() } : { name: value };
459
+ }
275
460
  function toSelectors(list) {
276
461
  return list.map((s) => {
277
462
  if ('network' in s)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/net/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/net/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { siteInputSchema, toToolResult, wrapToolHandler, Permission } from '../common.js';
2
2
  export function registerListClientsTool(server, client) {
3
3
  server.registerTool('omada_listClients', {
4
- description: 'List all connected clients (devices/users) in a site',
4
+ description: 'List all connected clients (devices/users) in a site. Wireless clients report vid 0; net_listClients gives each client\'s network and VLAN.',
5
5
  inputSchema: siteInputSchema,
6
6
  }, wrapToolHandler('omada_listClients', async ({ siteId }) => toToolResult(await client.listClients(siteId)), Permission.QUERY));
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"listClients.js","sourceRoot":"","sources":["../../../src/tools/omada/listClients.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,MAAmB;IAC1E,MAAM,CAAC,YAAY,CACf,mBAAmB,EACnB;QACI,WAAW,EAAE,sDAAsD;QACnE,WAAW,EAAE,eAAe;KAC/B,EACD,eAAe,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAC/H,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"listClients.js","sourceRoot":"","sources":["../../../src/tools/omada/listClients.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1F,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,MAAmB;IAC1E,MAAM,CAAC,YAAY,CACf,mBAAmB,EACnB;QACI,WAAW,EAAE,6IAA6I;QAC1J,WAAW,EAAE,eAAe;KAC/B,EACD,eAAe,CAAC,mBAAmB,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAC/H,CAAC;AACN,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Connects to the upstreams (Home Assistant, Omada, the local AI) at startup.
2
+ * Connects to the upstreams (Home Assistant, Omada, a Ruijie router, the local AI) at startup.
3
3
  *
4
4
  * An upstream that doesn't answer at startup is not fatal: its client is kept, its
5
5
  * tools stay registered (calls fail cleanly until it answers) and a background probe
@@ -8,12 +8,15 @@
8
8
  * during the 2026-10-17 NAS network outage) instead of serving /health and Omada.
9
9
  *
10
10
  * What stays fatal or disabling is configuration that can never work: a missing
11
- * HA_URL/HA_TOKEN or Omada setting, or an OMADA_SITE_ID the controller doesn't have.
11
+ * HA_URL/HA_TOKEN or Omada setting, or an OMADA_SITE_ID the controller doesn't have. A Ruijie
12
+ * router that refuses the login is never asked again (wrong passwords lock its login): its
13
+ * tools refuse until the setting is fixed and the server restarted.
12
14
  */
13
15
  import type { EnvironmentConfig } from './config.js';
14
16
  import { HaClient } from './haClient/index.js';
15
17
  import { LocalAIClient } from './localAI/index.js';
16
18
  import { OmadaClient } from './omadaClient/index.js';
19
+ import { RuijieClient } from './ruijieClient/index.js';
17
20
  export interface BackoffOptions {
18
21
  /** Pause before the first retry. */
19
22
  initialMs: number;
@@ -32,6 +35,7 @@ export declare function retryInBackground(name: string, attempt: () => Promise<v
32
35
  export interface Upstreams {
33
36
  haClient?: HaClient;
34
37
  omadaClient?: OmadaClient;
38
+ ruijieClient?: RuijieClient;
35
39
  aiClient?: LocalAIClient;
36
40
  /** Stops the background probes (tests; the process otherwise just exits). */
37
41
  stop(): void;
@@ -40,8 +44,10 @@ export interface Upstreams {
40
44
  export interface UpstreamFactories {
41
45
  ha(config: EnvironmentConfig): HaClient;
42
46
  omada(config: EnvironmentConfig): OmadaClient;
47
+ ruijie(config: EnvironmentConfig): RuijieClient;
43
48
  ai(config: EnvironmentConfig): LocalAIClient;
44
49
  }
50
+ export declare const defaultFactories: UpstreamFactories;
45
51
  /** What an Omada call says once a background check found OMADA_SITE_ID missing (details in the log). */
46
52
  export declare const OMADA_SITE_DISABLED_MESSAGE = "Omada tools are disabled: OMADA_SITE_ID is not a site on the controller. The server log lists the valid sites.";
47
53
  export declare function connectUpstreams(config: EnvironmentConfig, factories?: UpstreamFactories, backoff?: BackoffOptions): Promise<Upstreams>;