@elvatis_com/elvatis-mcp 0.2.0 → 0.3.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.
package/dist/index.js CHANGED
@@ -67,6 +67,11 @@ const openclaw_js_1 = require("./tools/openclaw.js");
67
67
  const gemini_js_1 = require("./tools/gemini.js");
68
68
  const codex_js_1 = require("./tools/codex.js");
69
69
  const help_js_1 = require("./tools/help.js");
70
+ const system_status_js_1 = require("./tools/system-status.js");
71
+ const local_llm_models_js_1 = require("./tools/local-llm-models.js");
72
+ const openclaw_logs_js_1 = require("./tools/openclaw-logs.js");
73
+ const home_automation_js_1 = require("./tools/home-automation.js");
74
+ const file_transfer_js_1 = require("./tools/file-transfer.js");
70
75
  const local_llm_js_1 = require("./tools/local-llm.js");
71
76
  const splitter_js_1 = require("./tools/splitter.js");
72
77
  function toText(result) {
@@ -114,6 +119,12 @@ async function main() {
114
119
  + 'Each subtask includes a suggested model that the user can override before execution. '
115
120
  + 'IMPORTANT: Always present the plan to the user for review before executing. '
116
121
  + 'Strategy: "auto" (default), "gemini", "local", or "heuristic".', splitter_js_1.promptSplitSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, splitter_js_1.handlePromptSplit)(args, config)) }] }));
122
+ // --- System management ---
123
+ registerTool(server, 'system_status', 'Check health of all connected services at once: Home Assistant, OpenClaw (SSH), local LLM, Gemini CLI, Codex CLI. Returns a unified status overview with latency for each service.', system_status_js_1.systemStatusSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, system_status_js_1.handleSystemStatus)(args, config)) }] }));
124
+ registerTool(server, 'local_llm_models', 'List, load, or unload models on the local LLM server. "list" shows available models. "load"/"unload" switches models in LM Studio without opening the GUI (LM Studio only).', local_llm_models_js_1.localLlmModelsSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, local_llm_models_js_1.handleLocalLlmModels)(args, config)) }] }));
125
+ registerTool(server, 'openclaw_logs', 'View recent logs from the OpenClaw server: gateway logs, agent execution logs, or system journal. Supports line count and keyword filtering.', openclaw_logs_js_1.openclawLogsSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, openclaw_logs_js_1.handleOpenclawLogs)(args, config)) }] }));
126
+ registerTool(server, 'home_automation', 'List, trigger, enable, or disable Home Assistant automations. "list" shows all automations with their state and last trigger time.', home_automation_js_1.homeAutomationSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, home_automation_js_1.handleHomeAutomation)(args, config)) }] }));
127
+ registerTool(server, 'file_transfer', 'Upload, download, or list files on the OpenClaw server via SSH. Supports text and binary files up to 10MB. "download" without local_path returns file content directly.', file_transfer_js_1.fileTransferSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, file_transfer_js_1.handleFileTransfer)(args, config)) }] }));
117
128
  // --- Transport ---
118
129
  if (config.transport === 'stdio') {
119
130
  const transport = new stdio_js_1.StdioServerTransport();
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,69 @@
1
+ /**
2
+ * file_transfer — upload/download files between local machine and OpenClaw server.
3
+ *
4
+ * Uses SSH (cat + base64) for transfer. No scp/sftp dependency needed.
5
+ * Files are base64-encoded to survive shell escaping.
6
+ *
7
+ * Size limit: ~10MB per transfer (base64 overhead + SSH buffer limits).
8
+ */
9
+ import { z } from 'zod';
10
+ import { Config } from '../config.js';
11
+ export declare const fileTransferSchema: z.ZodObject<{
12
+ action: z.ZodEnum<["upload", "download", "list"]>;
13
+ remote_path: z.ZodString;
14
+ local_path: z.ZodOptional<z.ZodString>;
15
+ }, "strip", z.ZodTypeAny, {
16
+ action: "list" | "upload" | "download";
17
+ remote_path: string;
18
+ local_path?: string | undefined;
19
+ }, {
20
+ action: "list" | "upload" | "download";
21
+ remote_path: string;
22
+ local_path?: string | undefined;
23
+ }>;
24
+ export declare function handleFileTransfer(args: {
25
+ action: string;
26
+ remote_path: string;
27
+ local_path?: string;
28
+ }, config: Config): Promise<{
29
+ success: boolean;
30
+ path: string;
31
+ listing: string;
32
+ error?: undefined;
33
+ action?: undefined;
34
+ remote_path?: undefined;
35
+ local_path?: undefined;
36
+ size_bytes?: undefined;
37
+ content?: undefined;
38
+ } | {
39
+ success: boolean;
40
+ error: string;
41
+ path?: undefined;
42
+ listing?: undefined;
43
+ action?: undefined;
44
+ remote_path?: undefined;
45
+ local_path?: undefined;
46
+ size_bytes?: undefined;
47
+ content?: undefined;
48
+ } | {
49
+ success: boolean;
50
+ action: string;
51
+ remote_path: string;
52
+ local_path: string;
53
+ size_bytes: number;
54
+ path?: undefined;
55
+ listing?: undefined;
56
+ error?: undefined;
57
+ content?: undefined;
58
+ } | {
59
+ success: boolean;
60
+ action: string;
61
+ remote_path: string;
62
+ size_bytes: number;
63
+ content: string;
64
+ path?: undefined;
65
+ listing?: undefined;
66
+ error?: undefined;
67
+ local_path?: undefined;
68
+ }>;
69
+ //# sourceMappingURL=file-transfer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-transfer.d.ts","sourceRoot":"","sources":["../../src/tools/file-transfer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAW7B,CAAC;AAQH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,EAClE,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGf"}
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ /**
3
+ * file_transfer — upload/download files between local machine and OpenClaw server.
4
+ *
5
+ * Uses SSH (cat + base64) for transfer. No scp/sftp dependency needed.
6
+ * Files are base64-encoded to survive shell escaping.
7
+ *
8
+ * Size limit: ~10MB per transfer (base64 overhead + SSH buffer limits).
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.fileTransferSchema = void 0;
45
+ exports.handleFileTransfer = handleFileTransfer;
46
+ const zod_1 = require("zod");
47
+ const fs = __importStar(require("fs"));
48
+ const path = __importStar(require("path"));
49
+ const ssh_js_1 = require("../ssh.js");
50
+ exports.fileTransferSchema = zod_1.z.object({
51
+ action: zod_1.z.enum(['upload', 'download', 'list']).describe('"upload": local -> server, "download": server -> local, "list": list files in a server directory.'),
52
+ remote_path: zod_1.z.string().describe('Path on the OpenClaw server (e.g. "~/scripts/backup.sh" or "~/.openclaw/workspace/trading/").'),
53
+ local_path: zod_1.z.string().optional().describe('Path on the local machine. Required for upload (source) and download (destination). '
54
+ + 'For download, if omitted, file content is returned in the response instead of saved to disk.'),
55
+ });
56
+ function toSshCfg(config) {
57
+ return { host: config.sshHost, port: config.sshPort, username: config.sshUser, keyPath: config.sshKeyPath };
58
+ }
59
+ const MAX_SIZE = 10 * 1024 * 1024; // 10MB
60
+ async function handleFileTransfer(args, config) {
61
+ const cfg = toSshCfg(config);
62
+ switch (args.action) {
63
+ case 'list': {
64
+ const output = await (0, ssh_js_1.sshExec)(cfg, `ls -lah '${args.remote_path.replace(/'/g, "'\\''")}' 2>/dev/null || echo "(directory not found: ${args.remote_path})"`, 10000);
65
+ return { success: true, path: args.remote_path, listing: output.trim() };
66
+ }
67
+ case 'download': {
68
+ // Get file size first
69
+ const sizeOut = await (0, ssh_js_1.sshExec)(cfg, `stat -c%s '${args.remote_path.replace(/'/g, "'\\''")}' 2>/dev/null || echo -1`, 5000);
70
+ const size = parseInt(sizeOut.trim(), 10);
71
+ if (size < 0) {
72
+ return { success: false, error: `File not found: ${args.remote_path}` };
73
+ }
74
+ if (size > MAX_SIZE) {
75
+ return { success: false, error: `File too large (${(size / 1024 / 1024).toFixed(1)}MB). Max is 10MB.` };
76
+ }
77
+ // Read file as base64
78
+ const b64 = await (0, ssh_js_1.sshExec)(cfg, `base64 '${args.remote_path.replace(/'/g, "'\\''")}'`, 30000);
79
+ const content = Buffer.from(b64.trim(), 'base64');
80
+ if (args.local_path) {
81
+ // Save to local disk
82
+ const dir = path.dirname(args.local_path);
83
+ if (!fs.existsSync(dir))
84
+ fs.mkdirSync(dir, { recursive: true });
85
+ fs.writeFileSync(args.local_path, content);
86
+ return {
87
+ success: true,
88
+ action: 'download',
89
+ remote_path: args.remote_path,
90
+ local_path: args.local_path,
91
+ size_bytes: content.length,
92
+ };
93
+ }
94
+ // Return content as text (for small text files)
95
+ const text = content.toString('utf-8');
96
+ return {
97
+ success: true,
98
+ action: 'download',
99
+ remote_path: args.remote_path,
100
+ size_bytes: content.length,
101
+ content: text.length < 50000 ? text : text.substring(0, 50000) + '\n... (truncated)',
102
+ };
103
+ }
104
+ case 'upload': {
105
+ if (!args.local_path) {
106
+ return { success: false, error: '"local_path" is required for upload.' };
107
+ }
108
+ if (!fs.existsSync(args.local_path)) {
109
+ return { success: false, error: `Local file not found: ${args.local_path}` };
110
+ }
111
+ const stat = fs.statSync(args.local_path);
112
+ if (stat.size > MAX_SIZE) {
113
+ return { success: false, error: `File too large (${(stat.size / 1024 / 1024).toFixed(1)}MB). Max is 10MB.` };
114
+ }
115
+ const content = fs.readFileSync(args.local_path);
116
+ const b64 = content.toString('base64');
117
+ const remoteDir = args.remote_path.replace(/\/[^/]+$/, '');
118
+ await (0, ssh_js_1.sshExec)(cfg, `mkdir -p '${remoteDir.replace(/'/g, "'\\''")}' && echo '${b64}' | base64 -d > '${args.remote_path.replace(/'/g, "'\\''")}'`, 30000);
119
+ return {
120
+ success: true,
121
+ action: 'upload',
122
+ local_path: args.local_path,
123
+ remote_path: args.remote_path,
124
+ size_bytes: stat.size,
125
+ };
126
+ }
127
+ default:
128
+ return { success: false, error: `Unknown action: ${args.action}` };
129
+ }
130
+ }
131
+ //# sourceMappingURL=file-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-transfer.js","sourceRoot":"","sources":["../../src/tools/file-transfer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * home_automation — list, trigger, and toggle Home Assistant automations.
3
+ *
4
+ * Uses the HA REST API to manage automations without editing YAML.
5
+ * Creating new automations is complex (requires HA YAML knowledge),
6
+ * so this tool focuses on listing, triggering, and enabling/disabling.
7
+ */
8
+ import { z } from 'zod';
9
+ import { Config } from '../config.js';
10
+ export declare const homeAutomationSchema: z.ZodObject<{
11
+ action: z.ZodEnum<["list", "trigger", "enable", "disable"]>;
12
+ entity_id: z.ZodOptional<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ action: "trigger" | "list" | "enable" | "disable";
15
+ entity_id?: string | undefined;
16
+ }, {
17
+ action: "trigger" | "list" | "enable" | "disable";
18
+ entity_id?: string | undefined;
19
+ }>;
20
+ export declare function handleHomeAutomation(args: {
21
+ action: string;
22
+ entity_id?: string;
23
+ }, config: Config): Promise<{
24
+ success: boolean;
25
+ count: number;
26
+ automations: {
27
+ entity_id: string;
28
+ name: string;
29
+ state: string;
30
+ last_triggered: string;
31
+ }[];
32
+ error?: undefined;
33
+ action?: undefined;
34
+ entity_id?: undefined;
35
+ } | {
36
+ success: boolean;
37
+ error: string;
38
+ count?: undefined;
39
+ automations?: undefined;
40
+ action?: undefined;
41
+ entity_id?: undefined;
42
+ } | {
43
+ success: boolean;
44
+ action: string;
45
+ entity_id: string;
46
+ count?: undefined;
47
+ automations?: undefined;
48
+ error?: undefined;
49
+ }>;
50
+ //# sourceMappingURL=home-automation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-automation.d.ts","sourceRoot":"","sources":["../../src/tools/home-automation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,eAAO,MAAM,oBAAoB;;;;;;;;;EAQ/B,CAAC;AA+BH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5C,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;GA2Cf"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /**
3
+ * home_automation — list, trigger, and toggle Home Assistant automations.
4
+ *
5
+ * Uses the HA REST API to manage automations without editing YAML.
6
+ * Creating new automations is complex (requires HA YAML knowledge),
7
+ * so this tool focuses on listing, triggering, and enabling/disabling.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.homeAutomationSchema = void 0;
11
+ exports.handleHomeAutomation = handleHomeAutomation;
12
+ const zod_1 = require("zod");
13
+ exports.homeAutomationSchema = zod_1.z.object({
14
+ action: zod_1.z.enum(['list', 'trigger', 'enable', 'disable']).describe('Action: "list" shows all automations, "trigger" fires one immediately, '
15
+ + '"enable"/"disable" toggles an automation on or off.'),
16
+ entity_id: zod_1.z.string().optional().describe('Automation entity ID (e.g. "automation.lights_off_at_night"). Required for trigger/enable/disable.'),
17
+ });
18
+ async function haRequest(config, method, path, body) {
19
+ if (!config.haToken)
20
+ throw new Error('HA_TOKEN not configured');
21
+ const res = await fetch(`${config.haUrl}${path}`, {
22
+ method,
23
+ headers: {
24
+ Authorization: `Bearer ${config.haToken}`,
25
+ 'Content-Type': 'application/json',
26
+ },
27
+ body: body ? JSON.stringify(body) : undefined,
28
+ signal: AbortSignal.timeout(10000),
29
+ });
30
+ if (!res.ok) {
31
+ const text = await res.text().catch(() => '');
32
+ throw new Error(`HA API ${res.status}: ${text.substring(0, 300)}`);
33
+ }
34
+ return res.json();
35
+ }
36
+ async function handleHomeAutomation(args, config) {
37
+ if (args.action === 'list') {
38
+ const states = await haRequest(config, 'GET', '/api/states');
39
+ const automations = states
40
+ .filter(s => s.entity_id.startsWith('automation.'))
41
+ .map(s => ({
42
+ entity_id: s.entity_id,
43
+ name: s.attributes.friendly_name ?? s.entity_id,
44
+ state: s.state, // 'on' = enabled, 'off' = disabled
45
+ last_triggered: s.attributes.last_triggered ?? 'never',
46
+ }));
47
+ return {
48
+ success: true,
49
+ count: automations.length,
50
+ automations,
51
+ };
52
+ }
53
+ // All other actions require entity_id
54
+ if (!args.entity_id) {
55
+ return { success: false, error: '"entity_id" is required for trigger/enable/disable.' };
56
+ }
57
+ const id = args.entity_id;
58
+ switch (args.action) {
59
+ case 'trigger':
60
+ await haRequest(config, 'POST', '/api/services/automation/trigger', { entity_id: id });
61
+ return { success: true, action: 'trigger', entity_id: id };
62
+ case 'enable':
63
+ await haRequest(config, 'POST', '/api/services/automation/turn_on', { entity_id: id });
64
+ return { success: true, action: 'enable', entity_id: id };
65
+ case 'disable':
66
+ await haRequest(config, 'POST', '/api/services/automation/turn_off', { entity_id: id });
67
+ return { success: true, action: 'disable', entity_id: id };
68
+ default:
69
+ return { success: false, error: `Unknown action: ${args.action}` };
70
+ }
71
+ }
72
+ //# sourceMappingURL=home-automation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-automation.js","sourceRoot":"","sources":["../../src/tools/home-automation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * local_llm_models — list and manage models on the local LLM server.
3
+ *
4
+ * Works with any OpenAI-compatible server that exposes GET /v1/models.
5
+ * LM Studio also supports POST /v1/models/load and POST /v1/models/unload
6
+ * for switching models without opening the GUI.
7
+ */
8
+ import { z } from 'zod';
9
+ import { Config } from '../config.js';
10
+ export declare const localLlmModelsSchema: z.ZodObject<{
11
+ action: z.ZodDefault<z.ZodEnum<["list", "load", "unload"]>>;
12
+ model: z.ZodOptional<z.ZodString>;
13
+ endpoint: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ action: "list" | "load" | "unload";
16
+ model?: string | undefined;
17
+ endpoint?: string | undefined;
18
+ }, {
19
+ action?: "list" | "load" | "unload" | undefined;
20
+ model?: string | undefined;
21
+ endpoint?: string | undefined;
22
+ }>;
23
+ export declare function handleLocalLlmModels(args: {
24
+ action: string;
25
+ model?: string;
26
+ endpoint?: string;
27
+ }, config: Config): Promise<{
28
+ success: boolean;
29
+ error: string;
30
+ hint: string;
31
+ detail: string;
32
+ endpoint?: undefined;
33
+ count?: undefined;
34
+ models?: undefined;
35
+ action?: undefined;
36
+ model?: undefined;
37
+ } | {
38
+ success: boolean;
39
+ error: string;
40
+ hint?: undefined;
41
+ detail?: undefined;
42
+ endpoint?: undefined;
43
+ count?: undefined;
44
+ models?: undefined;
45
+ action?: undefined;
46
+ model?: undefined;
47
+ } | {
48
+ success: boolean;
49
+ endpoint: string;
50
+ count: number;
51
+ models: {
52
+ id: string;
53
+ owned_by: string | undefined;
54
+ }[];
55
+ error?: undefined;
56
+ hint?: undefined;
57
+ detail?: undefined;
58
+ action?: undefined;
59
+ model?: undefined;
60
+ } | {
61
+ success: boolean;
62
+ error: string;
63
+ hint: string;
64
+ detail?: undefined;
65
+ endpoint?: undefined;
66
+ count?: undefined;
67
+ models?: undefined;
68
+ action?: undefined;
69
+ model?: undefined;
70
+ } | {
71
+ success: boolean;
72
+ action: string;
73
+ model: string;
74
+ detail: Record<string, unknown>;
75
+ error?: undefined;
76
+ hint?: undefined;
77
+ endpoint?: undefined;
78
+ count?: undefined;
79
+ models?: undefined;
80
+ }>;
81
+ //# sourceMappingURL=local-llm-models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-llm-models.d.ts","sourceRoot":"","sources":["../../src/tools/local-llm-models.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,eAAO,MAAM,oBAAoB;;;;;;;;;;;;EAW/B,CAAC;AAQH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAC3D,MAAM,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFf"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * local_llm_models — list and manage models on the local LLM server.
4
+ *
5
+ * Works with any OpenAI-compatible server that exposes GET /v1/models.
6
+ * LM Studio also supports POST /v1/models/load and POST /v1/models/unload
7
+ * for switching models without opening the GUI.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.localLlmModelsSchema = void 0;
11
+ exports.handleLocalLlmModels = handleLocalLlmModels;
12
+ const zod_1 = require("zod");
13
+ exports.localLlmModelsSchema = zod_1.z.object({
14
+ action: zod_1.z.enum(['list', 'load', 'unload']).default('list').describe('Action: "list" shows available models, "load" loads a model, "unload" unloads a model. '
15
+ + 'Load/unload requires LM Studio (not supported by all servers).'),
16
+ model: zod_1.z.string().optional().describe('Model identifier for load/unload (e.g. "microsoft/phi-4-mini-reasoning"). Required for load/unload.'),
17
+ endpoint: zod_1.z.string().optional().describe('Override the local LLM endpoint URL. Omit to use LOCAL_LLM_ENDPOINT env var or default.'),
18
+ });
19
+ async function handleLocalLlmModels(args, config) {
20
+ const endpoint = args.endpoint
21
+ ?? config.localLlmEndpoint
22
+ ?? 'http://localhost:1234/v1';
23
+ const baseUrl = endpoint.replace(/\/+$/, '');
24
+ if (args.action === 'list') {
25
+ let res;
26
+ try {
27
+ res = await fetch(`${baseUrl}/models`, {
28
+ signal: AbortSignal.timeout(5000),
29
+ });
30
+ }
31
+ catch (err) {
32
+ const msg = err instanceof Error ? err.message : String(err);
33
+ return {
34
+ success: false,
35
+ error: `Could not connect to local LLM at ${baseUrl}/models`,
36
+ hint: 'Start your local LLM server (LM Studio, Ollama, llama.cpp).',
37
+ detail: msg,
38
+ };
39
+ }
40
+ if (!res.ok) {
41
+ return { success: false, error: `HTTP ${res.status}: ${await res.text().catch(() => '')}` };
42
+ }
43
+ const data = await res.json();
44
+ const models = data.data ?? [];
45
+ return {
46
+ success: true,
47
+ endpoint: baseUrl,
48
+ count: models.length,
49
+ models: models.map(m => ({ id: m.id, owned_by: m.owned_by })),
50
+ };
51
+ }
52
+ // Load / Unload (LM Studio specific)
53
+ if (!args.model) {
54
+ return { success: false, error: `"model" parameter is required for ${args.action}` };
55
+ }
56
+ const url = args.action === 'load'
57
+ ? `${baseUrl}/models/load`
58
+ : `${baseUrl}/models/unload`;
59
+ let res;
60
+ try {
61
+ res = await fetch(url, {
62
+ method: 'POST',
63
+ headers: { 'Content-Type': 'application/json' },
64
+ body: JSON.stringify({ model: args.model }),
65
+ signal: AbortSignal.timeout(60000), // loading a model can take a while
66
+ });
67
+ }
68
+ catch (err) {
69
+ const msg = err instanceof Error ? err.message : String(err);
70
+ if (msg.includes('ECONNREFUSED')) {
71
+ return { success: false, error: 'Local LLM server not running.', hint: 'Start LM Studio.' };
72
+ }
73
+ return { success: false, error: msg };
74
+ }
75
+ if (!res.ok) {
76
+ const text = await res.text().catch(() => '');
77
+ // 404 means the server doesn't support load/unload (not LM Studio)
78
+ if (res.status === 404) {
79
+ return {
80
+ success: false,
81
+ error: `${args.action} is not supported by this server.`,
82
+ hint: 'Model load/unload requires LM Studio. Ollama uses "ollama run <model>" instead.',
83
+ };
84
+ }
85
+ return { success: false, error: `HTTP ${res.status}: ${text.substring(0, 300)}` };
86
+ }
87
+ const data = await res.json().catch(() => ({}));
88
+ return {
89
+ success: true,
90
+ action: args.action,
91
+ model: args.model,
92
+ detail: data,
93
+ };
94
+ }
95
+ //# sourceMappingURL=local-llm-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-llm-models.js","sourceRoot":"","sources":["../../src/tools/local-llm-models.ts"],"names":[],"mappings":"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"}
@@ -30,16 +30,16 @@ export declare const localLlmRunSchema: z.ZodObject<{
30
30
  timeout_seconds: number;
31
31
  temperature?: number | undefined;
32
32
  model?: string | undefined;
33
- system?: string | undefined;
34
33
  endpoint?: string | undefined;
34
+ system?: string | undefined;
35
35
  max_tokens?: number | undefined;
36
36
  }, {
37
37
  prompt: string;
38
38
  temperature?: number | undefined;
39
39
  timeout_seconds?: number | undefined;
40
40
  model?: string | undefined;
41
- system?: string | undefined;
42
41
  endpoint?: string | undefined;
42
+ system?: string | undefined;
43
43
  max_tokens?: number | undefined;
44
44
  }>;
45
45
  interface ChatCompletionResponse {
@@ -0,0 +1,42 @@
1
+ /**
2
+ * openclaw_logs — view recent logs from the OpenClaw server via SSH.
3
+ *
4
+ * Reads systemd journal, OpenClaw workspace logs, or arbitrary log files.
5
+ */
6
+ import { z } from 'zod';
7
+ import { Config } from '../config.js';
8
+ export declare const openclawLogsSchema: z.ZodObject<{
9
+ source: z.ZodDefault<z.ZodEnum<["gateway", "agent", "system", "custom"]>>;
10
+ lines: z.ZodDefault<z.ZodNumber>;
11
+ filter: z.ZodOptional<z.ZodString>;
12
+ path: z.ZodOptional<z.ZodString>;
13
+ }, "strip", z.ZodTypeAny, {
14
+ source: "custom" | "agent" | "gateway" | "system";
15
+ lines: number;
16
+ path?: string | undefined;
17
+ filter?: string | undefined;
18
+ }, {
19
+ path?: string | undefined;
20
+ filter?: string | undefined;
21
+ source?: "custom" | "agent" | "gateway" | "system" | undefined;
22
+ lines?: number | undefined;
23
+ }>;
24
+ export declare function handleOpenclawLogs(args: {
25
+ source: string;
26
+ lines: number;
27
+ filter?: string;
28
+ path?: string;
29
+ }, config: Config): Promise<{
30
+ success: boolean;
31
+ error: string;
32
+ source?: undefined;
33
+ line_count?: undefined;
34
+ logs?: undefined;
35
+ } | {
36
+ success: boolean;
37
+ source: "custom" | "agent" | "gateway" | "system";
38
+ line_count: number;
39
+ logs: string;
40
+ error?: undefined;
41
+ }>;
42
+ //# sourceMappingURL=openclaw-logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-logs.d.ts","sourceRoot":"","sources":["../../src/tools/openclaw-logs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAc7B,CAAC;AAMH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACvE,MAAM,EAAE,MAAM;;;;;;;;;;;;GAsDf"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ /**
3
+ * openclaw_logs — view recent logs from the OpenClaw server via SSH.
4
+ *
5
+ * Reads systemd journal, OpenClaw workspace logs, or arbitrary log files.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.openclawLogsSchema = void 0;
9
+ exports.handleOpenclawLogs = handleOpenclawLogs;
10
+ const zod_1 = require("zod");
11
+ const ssh_js_1 = require("../ssh.js");
12
+ exports.openclawLogsSchema = zod_1.z.object({
13
+ source: zod_1.z.enum(['gateway', 'agent', 'system', 'custom']).default('gateway').describe('Log source: "gateway" (OpenClaw gateway), "agent" (last agent run), '
14
+ + '"system" (systemd journal), "custom" (specify path).'),
15
+ lines: zod_1.z.number().min(1).max(500).default(50).describe('Number of log lines to return (default: 50).'),
16
+ filter: zod_1.z.string().optional().describe('Filter log lines by keyword (grep -i). Only lines matching this pattern are returned.'),
17
+ path: zod_1.z.string().optional().describe('Custom log file path on the server (only used when source="custom").'),
18
+ });
19
+ function toSshCfg(config) {
20
+ return { host: config.sshHost, port: config.sshPort, username: config.sshUser, keyPath: config.sshKeyPath };
21
+ }
22
+ async function handleOpenclawLogs(args, config) {
23
+ const cfg = toSshCfg(config);
24
+ const grepPipe = args.filter
25
+ ? ` | grep -i '${args.filter.replace(/'/g, "'\\''")}'`
26
+ : '';
27
+ let cmd;
28
+ switch (args.source) {
29
+ case 'gateway':
30
+ // OpenClaw gateway logs (try journalctl first, fall back to log file)
31
+ cmd = `journalctl -u openclaw-gateway --no-pager -n ${args.lines} 2>/dev/null${grepPipe}`
32
+ + ` || tail -n ${args.lines} ~/.openclaw/logs/gateway.log 2>/dev/null${grepPipe}`
33
+ + ` || echo "No gateway logs found (checked journalctl and ~/.openclaw/logs/gateway.log)"`;
34
+ break;
35
+ case 'agent':
36
+ // Last agent execution log
37
+ cmd = `tail -n ${args.lines} ~/.openclaw/logs/agent.log 2>/dev/null${grepPipe}`
38
+ + ` || ls -t ~/.openclaw/logs/agent*.log 2>/dev/null | head -1 | xargs tail -n ${args.lines} 2>/dev/null${grepPipe}`
39
+ + ` || echo "No agent logs found"`;
40
+ break;
41
+ case 'system':
42
+ // General system journal (recent entries)
43
+ cmd = `journalctl --no-pager -n ${args.lines} --priority=err..warning 2>/dev/null${grepPipe}`
44
+ + ` || dmesg | tail -n ${args.lines} 2>/dev/null${grepPipe}`
45
+ + ` || echo "No system logs available (journalctl and dmesg both failed)"`;
46
+ break;
47
+ case 'custom':
48
+ if (!args.path) {
49
+ return { success: false, error: '"path" is required when source is "custom"' };
50
+ }
51
+ cmd = `tail -n ${args.lines} '${args.path.replace(/'/g, "'\\''")}'${grepPipe} 2>&1`;
52
+ break;
53
+ default:
54
+ return { success: false, error: `Unknown source: ${args.source}` };
55
+ }
56
+ try {
57
+ const output = await (0, ssh_js_1.sshExec)(cfg, cmd, 15000);
58
+ const lines = output.trim().split('\n').filter(Boolean);
59
+ return {
60
+ success: true,
61
+ source: args.source,
62
+ line_count: lines.length,
63
+ logs: output.trim(),
64
+ };
65
+ }
66
+ catch (err) {
67
+ const msg = err instanceof Error ? err.message : String(err);
68
+ return { success: false, error: msg };
69
+ }
70
+ }
71
+ //# sourceMappingURL=openclaw-logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-logs.js","sourceRoot":"","sources":["../../src/tools/openclaw-logs.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"routing-rules.d.ts","sourceRoot":"","sources":["../../src/tools/routing-rules.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,EAAE,WAAW,EA6DtC,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/F;AAED,qEAAqE;AACrE,eAAO,MAAM,YAAY,aAMvB,CAAC;AAEH,eAAO,MAAM,aAAa,QAuDlB,CAAC"}
1
+ {"version":3,"file":"routing-rules.d.ts","sourceRoot":"","sources":["../../src/tools/routing-rules.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,EAAE,WAAW,EA6DtC,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAa/F;AAED,qEAAqE;AACrE,eAAO,MAAM,YAAY,aAOvB,CAAC;AAEH,eAAO,MAAM,aAAa,QAuDlB,CAAC"}
@@ -86,9 +86,10 @@ function matchRules(text) {
86
86
  exports.KNOWN_AGENTS = new Set([
87
87
  'codex_run', 'gemini_run', 'openclaw_run', 'local_llm_run',
88
88
  'home_light', 'home_scene', 'home_sensors', 'home_climate',
89
- 'home_vacuum', 'home_get_state',
89
+ 'home_vacuum', 'home_get_state', 'home_automation',
90
90
  'openclaw_memory_write', 'openclaw_memory_read_today', 'openclaw_memory_search',
91
91
  'openclaw_cron_list', 'openclaw_cron_run', 'openclaw_cron_status',
92
+ 'openclaw_logs', 'system_status', 'local_llm_models', 'file_transfer',
92
93
  ]);
93
94
  exports.ROUTING_GUIDE = `
94
95
  # elvatis-mcp: Sub-Agent Routing Guide
@@ -1 +1 @@
1
- {"version":3,"file":"routing-rules.js","sourceRoot":"","sources":["../../src/tools/routing-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routing-rules.js","sourceRoot":"","sources":["../../src/tools/routing-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * system_status — single health check across all connected services.
3
+ *
4
+ * Pings Home Assistant, OpenClaw (SSH), local LLM, and reports connectivity
5
+ * for Gemini and Codex CLIs. Returns a unified status overview.
6
+ */
7
+ import { z } from 'zod';
8
+ import { Config } from '../config.js';
9
+ export declare const systemStatusSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
10
+ interface ServiceStatus {
11
+ service: string;
12
+ status: 'ok' | 'error' | 'unconfigured';
13
+ detail?: string;
14
+ latency_ms?: number;
15
+ }
16
+ export declare function handleSystemStatus(_args: Record<string, never>, config: Config): Promise<{
17
+ summary: string;
18
+ services: [ServiceStatus, ServiceStatus, ServiceStatus, ServiceStatus, ServiceStatus];
19
+ }>;
20
+ export {};
21
+ //# sourceMappingURL=system-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-status.d.ts","sourceRoot":"","sources":["../../src/tools/system-status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,eAAO,MAAM,kBAAkB,gDAAe,CAAC;AAE/C,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,IAAI,GAAG,OAAO,GAAG,cAAc,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiBD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM;;;GAyDpF"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ /**
3
+ * system_status — single health check across all connected services.
4
+ *
5
+ * Pings Home Assistant, OpenClaw (SSH), local LLM, and reports connectivity
6
+ * for Gemini and Codex CLIs. Returns a unified status overview.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.systemStatusSchema = void 0;
10
+ exports.handleSystemStatus = handleSystemStatus;
11
+ const zod_1 = require("zod");
12
+ const ssh_js_1 = require("../ssh.js");
13
+ const spawn_js_1 = require("../spawn.js");
14
+ exports.systemStatusSchema = zod_1.z.object({});
15
+ function toSshCfg(config) {
16
+ return { host: config.sshHost, port: config.sshPort, username: config.sshUser, keyPath: config.sshKeyPath };
17
+ }
18
+ async function checkService(name, fn) {
19
+ const start = Date.now();
20
+ try {
21
+ const detail = await fn();
22
+ return { service: name, status: 'ok', detail, latency_ms: Date.now() - start };
23
+ }
24
+ catch (err) {
25
+ const msg = err instanceof Error ? err.message : String(err);
26
+ return { service: name, status: 'error', detail: msg.substring(0, 200), latency_ms: Date.now() - start };
27
+ }
28
+ }
29
+ async function handleSystemStatus(_args, config) {
30
+ const checks = await Promise.all([
31
+ // Home Assistant
32
+ checkService('home_assistant', async () => {
33
+ if (!config.haToken)
34
+ return 'unconfigured (no HA_TOKEN)';
35
+ const res = await fetch(`${config.haUrl}/api/`, {
36
+ headers: { Authorization: `Bearer ${config.haToken}` },
37
+ signal: AbortSignal.timeout(5000),
38
+ });
39
+ if (!res.ok)
40
+ throw new Error(`HTTP ${res.status}`);
41
+ const data = await res.json();
42
+ return data.message ?? 'connected';
43
+ }),
44
+ // OpenClaw SSH
45
+ checkService('openclaw_ssh', async () => {
46
+ const out = await (0, ssh_js_1.sshExec)(toSshCfg(config), 'echo ok && openclaw --version 2>/dev/null || echo "openclaw CLI not found"', 10000);
47
+ return out.trim();
48
+ }),
49
+ // Local LLM
50
+ checkService('local_llm', async () => {
51
+ const endpoint = config.localLlmEndpoint ?? 'http://localhost:1234/v1';
52
+ const res = await fetch(`${endpoint.replace(/\/+$/, '')}/models`, {
53
+ signal: AbortSignal.timeout(5000),
54
+ });
55
+ if (!res.ok)
56
+ throw new Error(`HTTP ${res.status}`);
57
+ const data = await res.json();
58
+ const models = data.data?.map(m => m.id) ?? [];
59
+ return `${models.length} model(s) loaded: ${models.join(', ')}`;
60
+ }),
61
+ // Gemini CLI
62
+ checkService('gemini_cli', async () => {
63
+ const out = await (0, spawn_js_1.spawnLocal)('gemini', ['--version'], 5000);
64
+ return out.trim();
65
+ }),
66
+ // Codex CLI
67
+ checkService('codex_cli', async () => {
68
+ const out = await (0, spawn_js_1.spawnLocal)('codex', ['--version'], 5000);
69
+ return out.trim();
70
+ }),
71
+ ]);
72
+ // Mark unconfigured services
73
+ for (const c of checks) {
74
+ if (c.detail?.includes('unconfigured'))
75
+ c.status = 'unconfigured';
76
+ }
77
+ const ok = checks.filter(c => c.status === 'ok').length;
78
+ const total = checks.length;
79
+ return {
80
+ summary: `${ok}/${total} services healthy`,
81
+ services: checks,
82
+ };
83
+ }
84
+ //# sourceMappingURL=system-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-status.js","sourceRoot":"","sources":["../../src/tools/system-status.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elvatis_com/elvatis-mcp",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "MCP server for OpenClaw — expose smart home, memory, cron, and more to Claude Desktop, Cursor, Windsurf, and any MCP client",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",