@coffeerunhobby/mcp-ha-connect 2.5.2 → 2.5.3

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/README.md CHANGED
@@ -319,6 +319,8 @@ the router's login: the Ruijie tools then refuse until the setting is fixed and
319
319
 
320
320
  ### AI Tools (1)
321
321
 
322
+ Registered only with `AI_PLUGIN_ENABLED=true` and an `AI_PROVIDER` other than `none`.
323
+
322
324
  | Tool | Description |
323
325
  |------|-------------|
324
326
  | `analyzeSensors` | Analyze sensor data using AI (Ollama) to detect issues and provide recommendations |
@@ -370,7 +372,7 @@ the router's login: the Ruijie tools then refuse until the setting is fixed and
370
372
 
371
373
  | Variable | Default | Description |
372
374
  |----------|---------|-------------|
373
- | `HA_PLUGIN_ENABLED` | `true` | Enable Home Assistant plugin |
375
+ | `HA_PLUGIN_ENABLED` | `false` | Enable Home Assistant plugin |
374
376
  | `HA_STRICT_SSL` | `true` | Validate SSL certificates |
375
377
  | `HA_TIMEOUT` | `30000` | API request timeout (ms) |
376
378
 
@@ -501,7 +503,7 @@ Clients only see the tools they may use: `tools/list` is filtered by the caller'
501
503
 
502
504
  | Variable | Default | Description |
503
505
  |----------|---------|-------------|
504
- | `AI_PLUGIN_ENABLED` | `true` | Enable AI plugin |
506
+ | `AI_PLUGIN_ENABLED` | `false` | Enable AI plugin (`analyzeSensors` is registered only when it is on and `AI_PROVIDER` isn't `none`) |
505
507
  | `AI_PROVIDER` | `ollama` | AI provider: `ollama`, `openai`, or `none` |
506
508
  | `AI_URL` | `http://localhost:11434` | AI server URL (Ollama) |
507
509
  | `AI_MODEL` | `qwen3:14b` | AI model name |
@@ -884,7 +886,7 @@ Add host gateway:
884
886
 
885
887
  1. **Verify Ollama is running** - `curl http://your-ollama-url:11434/api/tags`
886
888
  2. **Check model is available** - Ensure the model in `AI_MODEL` (default `qwen3:14b`) is pulled: `ollama pull qwen3:14b`
887
- 3. **Set AI_PROVIDER** - Must be set to `ollama` (not `none`)
889
+ 3. **Set AI_PLUGIN_ENABLED and AI_PROVIDER** - `AI_PLUGIN_ENABLED=true` and `AI_PROVIDER=ollama` (not `none`); otherwise `analyzeSensors` isn't registered at all
888
890
 
889
891
  ## Development
890
892
 
@@ -3,4 +3,4 @@
3
3
  */
4
4
  import type { McpServer } from '@modelcontextprotocol/server';
5
5
  import type { LocalAIClient } from '../../localAI/index.js';
6
- export declare function registerAnalyzeSensorsTool(server: McpServer, aiClient?: LocalAIClient): void;
6
+ export declare function registerAnalyzeSensorsTool(server: McpServer, aiClient: LocalAIClient): void;
@@ -7,12 +7,6 @@ export function registerAnalyzeSensorsTool(server, aiClient) {
7
7
  description: 'Analyze sensor data using AI (Ollama) to detect issues and provide recommendations.',
8
8
  inputSchema: analyzeSensorsSchema,
9
9
  }, wrapToolHandler('analyzeSensors', async ({ sensors }) => {
10
- if (!aiClient) {
11
- return toToolResult({
12
- error: 'AI client not configured',
13
- message: 'AI analysis requires AI_URL to be set (or legacy OLLAMA_URL)',
14
- }, true);
15
- }
16
10
  if (!sensors || typeof sensors !== 'object') {
17
11
  return toToolResult({ error: 'sensors object is required' }, true);
18
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyzeSensors.js","sourceRoot":"","sources":["../../../src/tools/ai/analyzeSensors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/F,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,QAAwB;IACpF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,qFAAqF;QAClG,WAAW,EAAE,oBAAoB;KAClC,EACD,eAAe,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAsB,EAAE,EAAE;QAC1E,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,YAAY,CAAC;gBAClB,KAAK,EAAE,0BAA0B;gBACjC,OAAO,EAAE,8DAA8D;aACxE,EAAE,IAAI,CAAC,CAAC;QACX,CAAC;QACD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAqB,CAAC,CAAC;QACtE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,CAClB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"analyzeSensors.js","sourceRoot":"","sources":["../../../src/tools/ai/analyzeSensors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAK/F,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,QAAuB;IACnF,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,WAAW,EAAE,qFAAqF;QAClG,WAAW,EAAE,oBAAoB;KAClC,EACD,eAAe,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAsB,EAAE,EAAE;QAC1E,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,OAAO,YAAY,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,EAAE,IAAI,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,OAAqB,CAAC,CAAC;QACtE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,CAClB,CAAC;AACJ,CAAC"}
@@ -3,4 +3,5 @@
3
3
  */
4
4
  import type { McpServer } from '@modelcontextprotocol/server';
5
5
  import type { LocalAIClient } from '../../localAI/index.js';
6
+ /** Registers nothing without an AI client (AI_PLUGIN_ENABLED=false or AI_PROVIDER=none). */
6
7
  export declare function registerAITools(server: McpServer, aiClient?: LocalAIClient): number;
@@ -3,12 +3,17 @@
3
3
  */
4
4
  import { logger } from '../../utils/logger.js';
5
5
  import { registerAnalyzeSensorsTool } from './analyzeSensors.js';
6
+ /** Registers nothing without an AI client (AI_PLUGIN_ENABLED=false or AI_PROVIDER=none). */
6
7
  export function registerAITools(server, aiClient) {
8
+ if (!aiClient) {
9
+ logger.debug('AI plugin off - no AI tools registered');
10
+ return 0;
11
+ }
7
12
  logger.debug('Registering AI tools');
8
13
  let toolCount = 0;
9
14
  registerAnalyzeSensorsTool(server, aiClient);
10
15
  toolCount += 1;
11
- logger.info('AI tools registered', { toolCount, aiEnabled: !!aiClient });
16
+ logger.info('AI tools registered', { toolCount });
12
17
  return toolCount;
13
18
  }
14
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ai/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,QAAwB;IACzE,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,SAAS,IAAI,CAAC,CAAC;IAEf,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IACzE,OAAO,SAAS,CAAC;AACnB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/ai/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAEjE,4FAA4F;AAC5F,MAAM,UAAU,eAAe,CAAC,MAAiB,EAAE,QAAwB;IACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7C,SAAS,IAAI,CAAC,CAAC;IAEf,MAAM,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -37,7 +37,7 @@ export function registerAllTools(options) {
37
37
  netControllers.push(new RuijieNetworkController(ruijieClient));
38
38
  // Vendor-neutral net_* tools, through every configured adapter (same in eager and graph mode).
39
39
  totalTools += registerNetTools(server, netControllers);
40
- // AI tools (always register, but may be disabled if no aiClient)
40
+ // AI tools (only with an AI client)
41
41
  const aiToolCount = registerAITools(server, aiClient);
42
42
  totalTools += aiToolCount;
43
43
  // Infra tools (only when REST actions are configured)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,wCAAwC;AACxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAA8B,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAkBzE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC7H,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEtC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,4CAA4C;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjE,UAAU,IAAI,WAAW,CAAC;QAC1B,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,IAAI,0BAA0B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,cAAc,GAAwB,EAAE,CAAC;IAC/C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;QACrF,UAAU,IAAI,cAAc,CAAC;QAC7B,cAAc,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACzJ,CAAC;IACD,IAAI,YAAY;QAAE,cAAc,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC;IACjF,+FAA+F;IAC/F,UAAU,IAAI,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEvD,iEAAiE;IACjE,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,UAAU,IAAI,WAAW,CAAC;IAE1B,sDAAsD;IACtD,UAAU,IAAI,kBAAkB,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAE5D,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;QAC/C,UAAU;QACV,SAAS,EAAE,CAAC,CAAC,QAAQ;QACrB,YAAY,EAAE,CAAC,CAAC,WAAW;QAC3B,aAAa,EAAE,CAAC,CAAC,YAAY;QAC7B,SAAS,EAAE,CAAC,CAAC,QAAQ;QACrB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;KACxD,CAAC,CAAC;AACL,CAAC;AAED,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExE,qEAAqE;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,wCAAwC;AACxC,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAA8B,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAmB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAkBzE;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAA6B;IAC5D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;IAC7H,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAEtC,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,4CAA4C;IAC5C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,WAAW,GAAG,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACjE,UAAU,IAAI,WAAW,CAAC;QAC1B,IAAI,cAAc,EAAE,CAAC;YACnB,UAAU,IAAI,0BAA0B,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,cAAc,GAAwB,EAAE,CAAC;IAC/C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,EAAE,WAAW,EAAE,oBAAoB,CAAC,CAAC;QACrF,UAAU,IAAI,cAAc,CAAC;QAC7B,cAAc,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;IACzJ,CAAC;IACD,IAAI,YAAY;QAAE,cAAc,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,YAAY,CAAC,CAAC,CAAC;IACjF,+FAA+F;IAC/F,UAAU,IAAI,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAEvD,oCAAoC;IACpC,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,UAAU,IAAI,WAAW,CAAC;IAE1B,sDAAsD;IACtD,UAAU,IAAI,kBAAkB,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IAE5D,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;QAC/C,UAAU;QACV,SAAS,EAAE,CAAC,CAAC,QAAQ;QACrB,YAAY,EAAE,CAAC,CAAC,WAAW;QAC3B,aAAa,EAAE,CAAC,CAAC,YAAY;QAC7B,SAAS,EAAE,CAAC,CAAC,QAAQ;QACrB,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;KACxD,CAAC,CAAC;AACL,CAAC;AAED,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExE,qEAAqE;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
package/dist/version.d.ts CHANGED
@@ -2,4 +2,4 @@
2
2
  * Package version - hardcoded at build time for reliability
3
3
  * Keep in sync with package.json version
4
4
  */
5
- export declare const VERSION = "2.5.2";
5
+ export declare const VERSION = "2.5.3";
package/dist/version.js CHANGED
@@ -2,5 +2,5 @@
2
2
  * Package version - hardcoded at build time for reliability
3
3
  * Keep in sync with package.json version
4
4
  */
5
- export const VERSION = '2.5.2';
5
+ export const VERSION = '2.5.3';
6
6
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coffeerunhobby/mcp-ha-connect",
3
- "version": "2.5.2",
3
+ "version": "2.5.3",
4
4
  "description": "Smart home MCP server for Home Assistant plus Local AI integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",