@coffeerunhobby/mcp-ha-connect 2.4.4 → 2.4.6

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 (40) hide show
  1. package/README.md +22 -1
  2. package/dist/index.js +4 -96
  3. package/dist/index.js.map +1 -1
  4. package/dist/net/adapters/omada.d.ts +71 -0
  5. package/dist/net/adapters/omada.js +865 -0
  6. package/dist/net/adapters/omada.js.map +1 -0
  7. package/dist/net/model.d.ts +415 -0
  8. package/dist/net/model.js +26 -0
  9. package/dist/net/model.js.map +1 -0
  10. package/dist/net/validate.d.ts +22 -0
  11. package/dist/net/validate.js +87 -0
  12. package/dist/net/validate.js.map +1 -0
  13. package/dist/omadaClient/accessControl.d.ts +7 -0
  14. package/dist/omadaClient/accessControl.js +43 -17
  15. package/dist/omadaClient/accessControl.js.map +1 -1
  16. package/dist/omadaClient/index.d.ts +9 -0
  17. package/dist/omadaClient/index.js +15 -0
  18. package/dist/omadaClient/index.js.map +1 -1
  19. package/dist/omadaClient/networkConfig.d.ts +54 -0
  20. package/dist/omadaClient/networkConfig.js +79 -0
  21. package/dist/omadaClient/networkConfig.js.map +1 -0
  22. package/dist/omadaClient/request.d.ts +6 -1
  23. package/dist/omadaClient/request.js +16 -6
  24. package/dist/omadaClient/request.js.map +1 -1
  25. package/dist/tools/index.js +4 -0
  26. package/dist/tools/index.js.map +1 -1
  27. package/dist/tools/net/index.d.ts +125 -0
  28. package/dist/tools/net/index.js +193 -0
  29. package/dist/tools/net/index.js.map +1 -0
  30. package/dist/tools/omada/accessControl.js +1 -0
  31. package/dist/tools/omada/accessControl.js.map +1 -1
  32. package/dist/upstreams.d.ts +47 -0
  33. package/dist/upstreams.js +194 -0
  34. package/dist/upstreams.js.map +1 -0
  35. package/dist/utils/ipv4.d.ts +14 -0
  36. package/dist/utils/ipv4.js +37 -0
  37. package/dist/utils/ipv4.js.map +1 -0
  38. package/dist/version.d.ts +1 -1
  39. package/dist/version.js +1 -1
  40. package/package.json +1 -1
package/README.md CHANGED
@@ -77,7 +77,7 @@ high-value questions an LLM can actually answer about your network:
77
77
  > above through two tools — `omada_browse` + `omada_read` — keeping the tool-schema budget
78
78
  > small for low-context models. See the Omada tool tables below for the full eager surface.
79
79
 
80
- ## Available Tools (60 Total)
80
+ ## Available Tools (69 Total)
81
81
 
82
82
  ### Home Assistant Tools (38)
83
83
 
@@ -251,6 +251,27 @@ Lets the controller enforce a schedule itself (e.g. a curfew) instead of a daily
251
251
  | `omada_getSiteNtpStatus` | Get the site's NTP server configuration and status |
252
252
  | `omada_setSiteNtpServers` | Replace the site's NTP server list (needs `CONFIGURE`; `dryRun` previews the change) |
253
253
 
254
+ ### Vendor-neutral Network Tools (9)
255
+
256
+ The `net_` tools describe networks the same way for every controller vendor: one shared model, with an adapter per
257
+ vendor (TP-Link Omada today; UniFi and MikroTik are planned). Each adapter says per feature whether it is native,
258
+ built from several objects, or unsupported (`net_capabilities`), and refuses what it can't do instead of dropping it.
259
+ Every change is planned first: `dryRun` shows the steps, what they mean and which online devices would be cut off;
260
+ applying refuses if the controller changed in between, or if devices would be cut off without `allowLockout`.
261
+ Wi-Fi passwords are never taken or shown: a new or reset Wi-Fi network gets a random temporary password, and the real
262
+ one is set in the controller's web UI. Reads need `QUERY`, changes `CONFIGURE`.
263
+
264
+ | Tool | Description |
265
+ |------|-------------|
266
+ | `net_capabilities` | What the controller can do, per feature |
267
+ | `net_listNetworks` | Networks (VLANs): VLAN, gateway, DHCP, IPv6, protected |
268
+ | `net_createNetwork` / `net_updateNetwork` / `net_deleteNetwork` | Create or change a VLAN with its gateway and DHCP range. The network the controller is on is protected; delete is refused while a Wi-Fi network, port profile, reservation or rule uses it |
269
+ | `net_listWifi` | Wi-Fi networks: network, bands, security, isolation, MAC filter |
270
+ | `net_createWifi` / `net_updateWifi` / `net_deleteWifi` | Create or change an SSID on a given network (bands, WPA2/WPA3, PMF, isolation, hidden, 802.11r, MAC filter), or reset its password to a random one |
271
+
272
+ On Omada, network isolation, a "guest" network type, switching IPv6 on, and WPA2/WPA3 mixed mode are not available
273
+ through the API and are refused. Rules arrive in 2.4.7, switch ports and mDNS in 2.4.8.
274
+
254
275
  ### AI Tools (1)
255
276
 
256
277
  | Tool | Description |
package/dist/index.js CHANGED
@@ -5,12 +5,9 @@
5
5
  * Supports transport modes: stdio, HTTP (Streamable HTTP)
6
6
  */
7
7
  import { loadConfig } from './config.js';
8
- import { HaClient } from './haClient/index.js';
9
- import { LocalAIClient } from './localAI/index.js';
10
- import { OmadaClient } from './omadaClient/index.js';
11
- import { checkConfiguredSite } from './omadaClient/site.js';
12
8
  import { startHttpServer } from './server/http.js';
13
9
  import { startStdioServer } from './server/stdio.js';
10
+ import { connectUpstreams } from './upstreams.js';
14
11
  import { initLogger, logger } from './utils/logger.js';
15
12
  import { VERSION } from './version.js';
16
13
  async function main() {
@@ -28,98 +25,9 @@ async function main() {
28
25
  omadaPluginEnabled: config.omadaPluginEnabled,
29
26
  useHttp: config.useHttp,
30
27
  });
31
- // Create Home Assistant client (if plugin enabled and configured)
32
- let haClient;
33
- if (config.haPluginEnabled) {
34
- if (config.baseUrl && config.token) {
35
- haClient = new HaClient({
36
- baseUrl: config.baseUrl,
37
- token: config.token,
38
- timeout: config.timeout,
39
- strictSsl: config.strictSsl,
40
- });
41
- // Test Home Assistant connection
42
- const apiCheck = await haClient.checkApi();
43
- logger.info('Connected to Home Assistant', { message: apiCheck.message });
44
- }
45
- else {
46
- logger.warn('HA plugin enabled but HA_URL or HA_TOKEN not set');
47
- }
48
- }
49
- else {
50
- logger.info('Home Assistant plugin disabled');
51
- }
52
- // Create Omada client (if plugin enabled and configured)
53
- let omadaClient;
54
- if (config.omadaPluginEnabled) {
55
- if (config.omadaBaseUrl && config.omadaClientId && config.omadaClientSecret && config.omadacId) {
56
- try {
57
- omadaClient = new OmadaClient({
58
- baseUrl: config.omadaBaseUrl,
59
- clientId: config.omadaClientId,
60
- clientSecret: config.omadaClientSecret,
61
- omadacId: config.omadacId,
62
- siteId: config.siteId,
63
- strictSsl: config.omadaStrictSsl,
64
- requestTimeout: config.requestTimeout,
65
- });
66
- // Test Omada connection by listing sites
67
- const sites = await omadaClient.listSites();
68
- // Omada is the source of truth: a configured OMADA_SITE_ID that isn't
69
- // on the controller is a deployment bug (drifted site id), not a
70
- // transient outage. Fail the Omada plugin loudly — HA and AI keep
71
- // working — instead of silently scoping every read to a dead site.
72
- const siteError = checkConfiguredSite(config.siteId, sites);
73
- if (siteError) {
74
- logger.error(`Omada plugin disabled - invalid OMADA_SITE_ID. ${siteError}`);
75
- omadaClient = undefined;
76
- }
77
- else {
78
- logger.info('Connected to Omada controller', { siteCount: sites.length });
79
- }
80
- }
81
- catch (error) {
82
- logger.warn('Omada controller not available - Omada tools will be disabled', {
83
- error: error instanceof Error ? error.message : String(error),
84
- });
85
- omadaClient = undefined;
86
- }
87
- }
88
- else {
89
- logger.warn('Omada plugin enabled but required config not set (OMADA_BASE_URL, OMADA_CLIENT_ID, OMADA_CLIENT_SECRET, OMADA_OMADAC_ID)');
90
- }
91
- }
92
- else {
93
- logger.info('Omada plugin disabled');
94
- }
95
- // Create Local AI client (if plugin enabled)
96
- let aiClient;
97
- if (config.aiPluginEnabled) {
98
- if (config.aiProvider === 'none') {
99
- logger.info('AI plugin enabled but AI_PROVIDER=none');
100
- }
101
- else {
102
- aiClient = new LocalAIClient(config);
103
- const aiHealthy = await aiClient.checkHealth();
104
- if (aiHealthy) {
105
- logger.info('Connected to AI provider', {
106
- provider: aiClient.getProviderName(),
107
- url: config.aiUrl,
108
- model: config.aiModel,
109
- });
110
- }
111
- else {
112
- logger.warn('AI provider not available - AI analysis tool will be disabled', {
113
- provider: config.aiProvider,
114
- url: config.aiUrl,
115
- });
116
- aiClient = undefined;
117
- }
118
- }
119
- }
120
- else {
121
- logger.info('AI plugin disabled');
122
- }
28
+ // Connect the upstreams. One that doesn't answer yet doesn't stop the server:
29
+ // it is retried in the background (see upstreams.ts).
30
+ const { haClient, omadaClient, aiClient } = await connectUpstreams(config);
123
31
  // Start server in appropriate mode
124
32
  if (config.useHttp) {
125
33
  await startHttpServer({ haClient, omadaClient, aiClient, config });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Omada adapter for the vendor-neutral network model (src/net/model.ts).
3
+ *
4
+ * 2.4.5 covers networks (LAN networks / VLANs) and Wi-Fi (SSIDs). Rules, groups, switch
5
+ * ports and mDNS arrive with 2.4.7 and 2.4.8; until then those calls fail with
6
+ * NetError UNSUPPORTED.
7
+ *
8
+ * Omada specifics handled here:
9
+ * - networks have no "guest" purpose and no isolation flag in the API (guest is per
10
+ * SSID), so both are reported unsupported; IPv6 can be switched off but not on;
11
+ * - WPA2/WPA3 mixed mode is not in the API (WPA, WPA2, WPA/WPA2 or WPA3 only);
12
+ * - updating an SSID requires resending its password: the current one is read and sent
13
+ * back internally and never appears in a plan, step, error or log;
14
+ * - Omada lists every SSID again under a pseudo WLAN group "gateway" without detail.
15
+ */
16
+ import type { OmadaClient } from '../../omadaClient/index.js';
17
+ import { type ApplyResult, type Capabilities, type Change, type Client, type Network, type NetworkController, type Plan, type ProtectedResources, type Reservation, type Wifi } from '../model.js';
18
+ export interface OmadaAdapterOptions {
19
+ siteId?: string;
20
+ /** The controller's host name or address (host of OMADA_BASE_URL): its network is protected. */
21
+ controllerHost?: string;
22
+ /** Resolves a host name to IPv4 addresses (default: the system resolver). */
23
+ resolveHost?: (host: string) => Promise<string[]>;
24
+ }
25
+ export declare class OmadaNetworkController implements NetworkController {
26
+ private readonly client;
27
+ private readonly options;
28
+ readonly vendor: "omada";
29
+ readonly id: string;
30
+ private readonly executors;
31
+ /** The controller's IPv4 addresses; 'unknown' when its host name can't be resolved (then every routed network is protected). */
32
+ private controllerAddresses;
33
+ constructor(client: OmadaClient, options?: OmadaAdapterOptions);
34
+ capabilities(): Promise<Capabilities>;
35
+ private resolveController;
36
+ private snapshot;
37
+ private toNetwork;
38
+ private isProtected;
39
+ private toClient;
40
+ private toWifi;
41
+ /** The network an SSID puts its clients on: its custom VLAN mapping, else the untagged primary network. */
42
+ private ssidNetwork;
43
+ /** Every network an SSID puts devices on (Omada can map one SSID to several). */
44
+ private ssidNetworkIds;
45
+ protectedResources(): Promise<ProtectedResources>;
46
+ listNetworks(): Promise<Network[]>;
47
+ listWifi(): Promise<Wifi[]>;
48
+ listClients(): Promise<Client[]>;
49
+ listReservations(): Promise<Reservation[]>;
50
+ listPortProfiles(): Promise<never>;
51
+ listPorts(): Promise<never>;
52
+ listRules(): Promise<never>;
53
+ listGroups(): Promise<never>;
54
+ getMdnsRepeater(): Promise<never>;
55
+ plan(change: Change): Promise<Plan>;
56
+ apply(plan: Plan, options?: {
57
+ allowLockout?: boolean;
58
+ }): Promise<ApplyResult>;
59
+ private planWith;
60
+ private build;
61
+ private buildNetworkCreate;
62
+ private buildNetworkUpdate;
63
+ private buildNetworkDelete;
64
+ /** Everything that still references a network: SSIDs, port profiles, DHCP reservations, ACL rules. */
65
+ private networkUsers;
66
+ private buildWifiCreate;
67
+ private buildWifiUpdate;
68
+ private buildWifiDelete;
69
+ private macFilterBody;
70
+ private macFilterChange;
71
+ }