@thantos66/claude-context-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/README.md +12 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +4 -0
- package/dist/proxy.js +1 -1
- package/dist/proxy.js.map +1 -1
- package/dist/services/agents.d.ts +7 -1
- package/dist/services/agents.js +6 -4
- package/dist/services/agents.js.map +1 -1
- package/dist/services/hooks.d.ts +29 -0
- package/dist/services/hooks.js +68 -0
- package/dist/services/hooks.js.map +1 -0
- package/dist/services/mcp-config.d.ts +6 -0
- package/dist/services/mcp-config.js +10 -9
- package/dist/services/mcp-config.js.map +1 -1
- package/dist/services/paths.d.ts +12 -4
- package/dist/services/paths.js +8 -8
- package/dist/services/paths.js.map +1 -1
- package/dist/services/permissions.d.ts +9 -1
- package/dist/services/permissions.js +9 -9
- package/dist/services/permissions.js.map +1 -1
- package/dist/services/skills.d.ts +8 -1
- package/dist/services/skills.js +7 -4
- package/dist/services/skills.js.map +1 -1
- package/dist/tools/agents.js +53 -1
- package/dist/tools/agents.js.map +1 -1
- package/dist/tools/export.d.ts +2 -0
- package/dist/tools/export.js +64 -0
- package/dist/tools/export.js.map +1 -0
- package/dist/tools/hooks.d.ts +2 -0
- package/dist/tools/hooks.js +51 -0
- package/dist/tools/hooks.js.map +1 -0
- package/dist/tools/mcp.js +168 -2
- package/dist/tools/mcp.js.map +1 -1
- package/dist/tools/meta.js +191 -27
- package/dist/tools/meta.js.map +1 -1
- package/dist/tools/permissions.js +8 -1
- package/dist/tools/permissions.js.map +1 -1
- package/dist/tools/skills.js +51 -1
- package/dist/tools/skills.js.map +1 -1
- package/package.json +1 -1
package/dist/tools/mcp.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import { execSync, spawn } from "node:child_process";
|
|
2
4
|
import { listServers, getServer, addServer, updateServer, removeServer, setServerDisabled, } from "../services/mcp-config.js";
|
|
3
5
|
import { StdioServerSchema, HttpServerSchema, } from "../schemas/mcp-config.js";
|
|
4
6
|
import { handle, okResponse, formatWriteResult } from "./helpers.js";
|
|
@@ -9,6 +11,10 @@ const ProjectPathField = {
|
|
|
9
11
|
.string()
|
|
10
12
|
.optional()
|
|
11
13
|
.describe("Absolute path to the project. Required when scope=project."),
|
|
14
|
+
allowOutsideHome: z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Allow projectPath outside $HOME (for cloud environments)."),
|
|
12
18
|
};
|
|
13
19
|
const DryRunField = {
|
|
14
20
|
dryRun: z
|
|
@@ -37,7 +43,7 @@ export function registerMcpTools(server) {
|
|
|
37
43
|
idempotentHint: true,
|
|
38
44
|
openWorldHint: false,
|
|
39
45
|
},
|
|
40
|
-
}, async ({ scope, projectPath, revealSecrets }) => {
|
|
46
|
+
}, async ({ scope, projectPath, revealSecrets, allowOutsideHome }) => {
|
|
41
47
|
return handle(async () => {
|
|
42
48
|
const scopes = scope
|
|
43
49
|
? [scope]
|
|
@@ -50,6 +56,7 @@ export function registerMcpTools(server) {
|
|
|
50
56
|
const list = await listServers(s, {
|
|
51
57
|
projectPath,
|
|
52
58
|
revealSecrets,
|
|
59
|
+
allowOutsideHome,
|
|
53
60
|
});
|
|
54
61
|
all.push(...list);
|
|
55
62
|
}
|
|
@@ -88,7 +95,7 @@ export function registerMcpTools(server) {
|
|
|
88
95
|
idempotentHint: true,
|
|
89
96
|
openWorldHint: false,
|
|
90
97
|
},
|
|
91
|
-
}, async ({ scope, name, projectPath, revealSecrets }) => handle(() => getServer({ scope, name, projectPath, revealSecrets }), (entry) => entry
|
|
98
|
+
}, async ({ scope, name, projectPath, revealSecrets, allowOutsideHome }) => handle(() => getServer({ scope, name, projectPath, revealSecrets, allowOutsideHome }), (entry) => entry
|
|
92
99
|
? okResponse(`[${entry.scope}] ${entry.name}\n path: ${entry.path}\n entry: ${JSON.stringify(entry.entry, null, 2)}`, { server: entry })
|
|
93
100
|
: okResponse(`Server "${name}" not found in scope ${scope}.`, {
|
|
94
101
|
found: false,
|
|
@@ -141,6 +148,7 @@ export function registerMcpTools(server) {
|
|
|
141
148
|
projectPath: args.projectPath,
|
|
142
149
|
overwrite: args.overwrite,
|
|
143
150
|
dryRun: args.dryRun,
|
|
151
|
+
allowOutsideHome: args.allowOutsideHome,
|
|
144
152
|
});
|
|
145
153
|
}, (result) => {
|
|
146
154
|
const restart = args.scope === "desktop" && !result.dryRun;
|
|
@@ -191,6 +199,7 @@ export function registerMcpTools(server) {
|
|
|
191
199
|
patch: patch,
|
|
192
200
|
projectPath: args.projectPath,
|
|
193
201
|
dryRun: args.dryRun,
|
|
202
|
+
allowOutsideHome: args.allowOutsideHome,
|
|
194
203
|
});
|
|
195
204
|
}, (result) => {
|
|
196
205
|
const restart = args.scope === "desktop" && !result.dryRun;
|
|
@@ -219,6 +228,7 @@ export function registerMcpTools(server) {
|
|
|
219
228
|
name: args.name,
|
|
220
229
|
projectPath: args.projectPath,
|
|
221
230
|
dryRun: args.dryRun,
|
|
231
|
+
allowOutsideHome: args.allowOutsideHome,
|
|
222
232
|
}), (result) => {
|
|
223
233
|
const restart = args.scope === "desktop" && !result.dryRun;
|
|
224
234
|
return okResponse(formatWriteResult(result, `remove server "${args.name}" from`, restart), { result, restartRequired: restart });
|
|
@@ -248,10 +258,166 @@ export function registerMcpTools(server) {
|
|
|
248
258
|
disabled: args.disabled,
|
|
249
259
|
projectPath: args.projectPath,
|
|
250
260
|
dryRun: args.dryRun,
|
|
261
|
+
allowOutsideHome: args.allowOutsideHome,
|
|
251
262
|
}), (result) => {
|
|
252
263
|
const restart = args.scope === "desktop" && !result.dryRun;
|
|
253
264
|
const verb = args.disabled ? "disable" : "enable";
|
|
254
265
|
return okResponse(formatWriteResult(result, `${verb} server "${args.name}" in`, restart), { result, restartRequired: restart });
|
|
255
266
|
}));
|
|
267
|
+
// ------------------------------------------------------------------
|
|
268
|
+
// mcp_evaluate_conditions
|
|
269
|
+
// ------------------------------------------------------------------
|
|
270
|
+
server.registerTool("mcp_evaluate_conditions", {
|
|
271
|
+
title: "Evaluate server conditions",
|
|
272
|
+
description: "Check _condition passthrough fields on MCP servers and optionally " +
|
|
273
|
+
"toggle their disabled flags. Conditions: fileExists, envSet, commandExists.",
|
|
274
|
+
inputSchema: {
|
|
275
|
+
scope: ScopeSchema,
|
|
276
|
+
...ProjectPathField,
|
|
277
|
+
allowOutsideHome: z.boolean().optional(),
|
|
278
|
+
apply: z
|
|
279
|
+
.boolean()
|
|
280
|
+
.optional()
|
|
281
|
+
.describe("If true, actually toggle disabled flags. Default: false (dry-run report)."),
|
|
282
|
+
...DryRunField,
|
|
283
|
+
},
|
|
284
|
+
annotations: {
|
|
285
|
+
readOnlyHint: false,
|
|
286
|
+
destructiveHint: false,
|
|
287
|
+
idempotentHint: true,
|
|
288
|
+
openWorldHint: true,
|
|
289
|
+
},
|
|
290
|
+
}, async (args) => handle(async () => {
|
|
291
|
+
const servers = await listServers(args.scope, {
|
|
292
|
+
projectPath: args.projectPath,
|
|
293
|
+
revealSecrets: false,
|
|
294
|
+
});
|
|
295
|
+
const results = [];
|
|
296
|
+
for (const srv of servers) {
|
|
297
|
+
const entry = srv.entry;
|
|
298
|
+
const condition = entry._condition;
|
|
299
|
+
if (!condition) {
|
|
300
|
+
results.push({ name: srv.name, condition: null, met: true, action: "no-change" });
|
|
301
|
+
continue;
|
|
302
|
+
}
|
|
303
|
+
let met = true;
|
|
304
|
+
if (typeof condition.fileExists === "string") {
|
|
305
|
+
try {
|
|
306
|
+
await fs.access(condition.fileExists);
|
|
307
|
+
}
|
|
308
|
+
catch {
|
|
309
|
+
met = false;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
if (typeof condition.envSet === "string") {
|
|
313
|
+
const val = process.env[condition.envSet];
|
|
314
|
+
if (!val || val.trim() === "")
|
|
315
|
+
met = false;
|
|
316
|
+
}
|
|
317
|
+
if (typeof condition.commandExists === "string") {
|
|
318
|
+
try {
|
|
319
|
+
execSync(`which ${condition.commandExists}`, { stdio: "ignore" });
|
|
320
|
+
}
|
|
321
|
+
catch {
|
|
322
|
+
met = false;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
const currentlyDisabled = !!(entry.disabled);
|
|
326
|
+
const shouldDisable = !met;
|
|
327
|
+
let action = "no-change";
|
|
328
|
+
if (shouldDisable && !currentlyDisabled)
|
|
329
|
+
action = "disable";
|
|
330
|
+
else if (!shouldDisable && currentlyDisabled)
|
|
331
|
+
action = "enable";
|
|
332
|
+
if (args.apply && action !== "no-change") {
|
|
333
|
+
await setServerDisabled({
|
|
334
|
+
scope: args.scope,
|
|
335
|
+
name: srv.name,
|
|
336
|
+
disabled: shouldDisable,
|
|
337
|
+
projectPath: args.projectPath,
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
results.push({ name: srv.name, condition, met, action });
|
|
341
|
+
}
|
|
342
|
+
return results;
|
|
343
|
+
}, (results) => okResponse(results.length === 0
|
|
344
|
+
? "No servers found."
|
|
345
|
+
: results
|
|
346
|
+
.map((r) => `${r.name}: condition=${r.condition ? JSON.stringify(r.condition) : "none"} met=${r.met} action=${r.action}`)
|
|
347
|
+
.join("\n"), { results })));
|
|
348
|
+
// ------------------------------------------------------------------
|
|
349
|
+
// mcp_run_setup
|
|
350
|
+
// ------------------------------------------------------------------
|
|
351
|
+
server.registerTool("mcp_run_setup", {
|
|
352
|
+
title: "Run server setup command",
|
|
353
|
+
description: "Execute the _setup shell command defined on an MCP server entry. " +
|
|
354
|
+
"Returns stdout, stderr, and exit code.",
|
|
355
|
+
inputSchema: {
|
|
356
|
+
scope: ScopeSchema,
|
|
357
|
+
name: z.string().min(1),
|
|
358
|
+
...ProjectPathField,
|
|
359
|
+
allowOutsideHome: z.boolean().optional(),
|
|
360
|
+
timeoutMs: z.number().optional().describe("Timeout in ms (default 60000)."),
|
|
361
|
+
},
|
|
362
|
+
annotations: {
|
|
363
|
+
readOnlyHint: false,
|
|
364
|
+
destructiveHint: true,
|
|
365
|
+
idempotentHint: false,
|
|
366
|
+
openWorldHint: true,
|
|
367
|
+
},
|
|
368
|
+
}, async (args) => handle(async () => {
|
|
369
|
+
const entry = await getServer({
|
|
370
|
+
scope: args.scope,
|
|
371
|
+
name: args.name,
|
|
372
|
+
projectPath: args.projectPath,
|
|
373
|
+
revealSecrets: true,
|
|
374
|
+
});
|
|
375
|
+
if (!entry) {
|
|
376
|
+
throw new Error(`Server "${args.name}" not found in scope ${args.scope}.`);
|
|
377
|
+
}
|
|
378
|
+
const raw = entry.entry;
|
|
379
|
+
const setupCmd = raw._setup;
|
|
380
|
+
if (typeof setupCmd !== "string" || !setupCmd.trim()) {
|
|
381
|
+
throw new Error(`Server "${args.name}" has no _setup field. Add a _setup string to the server entry.`);
|
|
382
|
+
}
|
|
383
|
+
const timeout = args.timeoutMs ?? 60000;
|
|
384
|
+
return await runSetupCommand(setupCmd, timeout);
|
|
385
|
+
}, (result) => okResponse(`command: ${result.command}\nexit code: ${result.exitCode}\n\n--- stdout ---\n${result.stdout}\n\n--- stderr ---\n${result.stderr}`, result)));
|
|
386
|
+
}
|
|
387
|
+
/** Spawn a shell command, collect output, enforce timeout. */
|
|
388
|
+
function runSetupCommand(command, timeoutMs) {
|
|
389
|
+
return new Promise((resolve, reject) => {
|
|
390
|
+
const child = spawn(command, { shell: true, stdio: ["ignore", "pipe", "pipe"] });
|
|
391
|
+
let stdout = "";
|
|
392
|
+
let stderr = "";
|
|
393
|
+
let settled = false;
|
|
394
|
+
const timer = setTimeout(() => {
|
|
395
|
+
if (!settled) {
|
|
396
|
+
settled = true;
|
|
397
|
+
child.kill("SIGTERM");
|
|
398
|
+
resolve({ command, exitCode: -1, stdout, stderr: stderr + "\n[timeout after " + timeoutMs + "ms]" });
|
|
399
|
+
}
|
|
400
|
+
}, timeoutMs);
|
|
401
|
+
child.stdout.on("data", (chunk) => {
|
|
402
|
+
stdout += chunk.toString();
|
|
403
|
+
});
|
|
404
|
+
child.stderr.on("data", (chunk) => {
|
|
405
|
+
stderr += chunk.toString();
|
|
406
|
+
});
|
|
407
|
+
child.on("error", (err) => {
|
|
408
|
+
if (!settled) {
|
|
409
|
+
settled = true;
|
|
410
|
+
clearTimeout(timer);
|
|
411
|
+
reject(new Error(`Failed to run setup command: ${err.message}`));
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
child.on("exit", (code) => {
|
|
415
|
+
if (!settled) {
|
|
416
|
+
settled = true;
|
|
417
|
+
clearTimeout(timer);
|
|
418
|
+
resolve({ command, exitCode: code ?? -1, stdout, stderr });
|
|
419
|
+
}
|
|
420
|
+
});
|
|
421
|
+
});
|
|
256
422
|
}
|
|
257
423
|
//# sourceMappingURL=mcp.js.map
|
package/dist/tools/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/tools/mcp.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,WAAW,EACX,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAEjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC3D,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAExC,MAAM,gBAAgB,GAAG;IACvB,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;CAC1E,CAAC;AAEF,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,0EAA0E,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,qEAAqE;IACrE,mBAAmB;IACnB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,sEAAsE;YACtE,mEAAmE;QACrE,WAAW,EAAE;YACX,KAAK,EAAE,WAAW;iBACf,QAAQ,EAAE;iBACV,QAAQ,CAAC,gDAAgD,CAAC;YAC7D,GAAG,gBAAgB;YACnB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACtC;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,EAAE;QAC9C,OAAO,MAAM,CACX,KAAK,IAAI,EAAE;YACT,MAAM,MAAM,GAA0C,KAAK;gBACzD,CAAC,CAAC,CAAC,KAAK,CAAC;gBACT,CAAC,CAAC,WAAW;oBACX,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC;oBAChC,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC1B,MAAM,GAAG,GAAG,EAAE,CAAC;YACf,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,CAAC,EAAE;wBAChC,WAAW;wBACX,aAAa;qBACd,CAAC,CAAC;oBACH,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBACpB,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,8CAA8C;oBAC9C,GAAG,CAAC,IAAI,CAAC;wBACP,KAAK,EAAE,CAAC;wBACR,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,EAAE;wBACR,KAAK,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAA+B;qBACtE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,CAAC,OAAO,EAAE,EAAE,CACV,UAAU,CACR,OAAO,CAAC,MAAM,KAAK,CAAC;YAClB,CAAC,CAAC,uBAAuB;YACzB,CAAC,CAAC,OAAO;iBACJ,GAAG,CACF,CAAC,CAAC,EAAE,EAAE,CACJ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CACnF;iBACA,IAAI,CAAC,MAAM,CAAC,EACnB,EAAE,OAAO,EAAE,OAAO,EAAE,CACrB,CACJ,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,iBAAiB;IACjB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE;YACX,KAAK,EAAE,WAAW;YAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,GAAG,gBAAgB;YACnB,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;SACtC;QACD,WAAW,EAAE;YACX,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,EAAE,CACpD,MAAM,CACJ,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,EAC5D,CAAC,KAAK,EAAE,EAAE,CACR,KAAK;QACH,CAAC,CAAC,UAAU,CACR,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,IAAI,cAAc,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EACzG,EAAE,MAAM,EAAE,KAAK,EAAE,CAClB;QACH,CAAC,CAAC,UAAU,CAAC,WAAW,IAAI,wBAAwB,KAAK,GAAG,EAAE;YAC1D,KAAK,EAAE,KAAK;SACb,CAAC,CACT,CACJ,CAAC;IAEF,qEAAqE;IACrE,iBAAiB;IACjB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,4EAA4E;YAC5E,wFAAwF;QAC1F,WAAW,EAAE;YACX,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,KAAK,CAAC,kBAAkB,EAAE,oDAAoD,CAAC;YAClF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YAChC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACxC,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;YACjC,GAAG,gBAAgB;YACnB,GAAG,WAAW;SACf;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,OAAO,MAAM,CACX,KAAK,IAAI,EAAE;YACT,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG;gBACpB,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBACrB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;iBAC/C,CAAC;gBACJ,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC;oBACtB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;oBACrC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;oBAClC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;iBACnC,CAAC,CAAC;YACP,OAAO,SAAS,CAAC;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK;gBACL,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;QACL,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;YACT,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAC3D,OAAO,UAAU,CACf,iBAAiB,CAAC,MAAM,EAAE,eAAe,IAAI,CAAC,IAAI,MAAM,EAAE,OAAO,CAAC,EAClE,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CACrC,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,oBAAoB;IACpB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,8FAA8F;QAChG,WAAW,EAAE;YACX,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC9B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YAChC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACxC,GAAG,gBAAgB;YACnB,GAAG,WAAW;SACf;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,MAAM,CACJ,GAAG,EAAE;QACH,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACpD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7D,OAAO,YAAY,CAAC;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,KAAgC;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC,EACD,CAAC,MAAM,EAAE,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3D,OAAO,UAAU,CACf,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,IAAI,CAAC,IAAI,MAAM,EAAE,OAAO,CAAC,EACrE,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CACrC,CAAC;IACJ,CAAC,CACF,CACJ,CAAC;IAEF,qEAAqE;IACrE,oBAAoB;IACpB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE,wDAAwD;QACrE,WAAW,EAAE;YACX,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,GAAG,gBAAgB;YACnB,GAAG,WAAW;SACf;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,MAAM,CACJ,GAAG,EAAE,CAAC,YAAY,CAAC;QACjB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,EACF,CAAC,MAAM,EAAE,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3D,OAAO,UAAU,CACf,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,IAAI,CAAC,IAAI,QAAQ,EAAE,OAAO,CAAC,EACvE,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CACrC,CAAC;IACJ,CAAC,CACF,CACJ,CAAC;IAEF,qEAAqE;IACrE,mBAAmB;IACnB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,gFAAgF;QAClF,WAAW,EAAE;YACX,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;YACrB,GAAG,gBAAgB;YACnB,GAAG,WAAW;SACf;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CACb,MAAM,CACJ,GAAG,EAAE,CAAC,iBAAiB,CAAC;QACtB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,EACF,CAAC,MAAM,EAAE,EAAE;QACT,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClD,OAAO,UAAU,CACf,iBAAiB,CAAC,MAAM,EAAE,GAAG,IAAI,YAAY,IAAI,CAAC,IAAI,MAAM,EAAE,OAAO,CAAC,EACtE,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,CACrC,CAAC;IACJ,CAAC,CACF,CACJ,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/tools/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/meta.js
CHANGED
|
@@ -2,11 +2,12 @@ import { z } from "zod";
|
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
4
|
import { allPlatformPaths } from "../services/paths.js";
|
|
5
|
-
import { loadMcpConfig } from "../services/mcp-config.js";
|
|
5
|
+
import { loadMcpConfig, listServers } from "../services/mcp-config.js";
|
|
6
6
|
import { loadSettings } from "../services/permissions.js";
|
|
7
7
|
import { backupFile } from "../services/backup.js";
|
|
8
8
|
import { getServer } from "../services/mcp-config.js";
|
|
9
9
|
import { isStdioServer } from "../schemas/mcp-config.js";
|
|
10
|
+
import { schemaHasUnion } from "../proxy.js";
|
|
10
11
|
import { handle, okResponse } from "./helpers.js";
|
|
11
12
|
export function registerMetaTools(server) {
|
|
12
13
|
// ------------------------------------------------------------------
|
|
@@ -18,6 +19,7 @@ export function registerMetaTools(server) {
|
|
|
18
19
|
"current OS, for each scope (and an optional project path).",
|
|
19
20
|
inputSchema: {
|
|
20
21
|
projectPath: z.string().optional(),
|
|
22
|
+
allowOutsideHome: z.boolean().optional().describe("Allow projectPath outside $HOME (for cloud environments)."),
|
|
21
23
|
},
|
|
22
24
|
annotations: {
|
|
23
25
|
readOnlyHint: true,
|
|
@@ -25,7 +27,7 @@ export function registerMetaTools(server) {
|
|
|
25
27
|
idempotentHint: true,
|
|
26
28
|
openWorldHint: false,
|
|
27
29
|
},
|
|
28
|
-
}, async ({ projectPath }) => {
|
|
30
|
+
}, async ({ projectPath, allowOutsideHome: _allowOutsideHome }) => {
|
|
29
31
|
const paths = allPlatformPaths(projectPath);
|
|
30
32
|
return okResponse(JSON.stringify(paths, null, 2), paths);
|
|
31
33
|
});
|
|
@@ -92,7 +94,10 @@ export function registerMetaTools(server) {
|
|
|
92
94
|
command: z.string().optional().describe("Command to spawn directly (alternative to scope+name)."),
|
|
93
95
|
args: z.array(z.string()).optional(),
|
|
94
96
|
projectPath: z.string().optional(),
|
|
97
|
+
allowOutsideHome: z.boolean().optional().describe("Allow projectPath outside $HOME (for cloud environments)."),
|
|
95
98
|
timeoutMs: z.number().optional().describe("Timeout in ms (default 10000)."),
|
|
99
|
+
validateSchemas: z.boolean().optional().describe("Also send tools/list and check for oneOf/anyOf/allOf."),
|
|
100
|
+
checkAll: z.boolean().optional().describe("Check all servers in the given scope. Ignores name/command."),
|
|
96
101
|
},
|
|
97
102
|
annotations: {
|
|
98
103
|
readOnlyHint: true,
|
|
@@ -101,6 +106,28 @@ export function registerMetaTools(server) {
|
|
|
101
106
|
openWorldHint: true,
|
|
102
107
|
},
|
|
103
108
|
}, async (input) => handle(async () => {
|
|
109
|
+
// Batch mode: check all servers in scope
|
|
110
|
+
if (input.checkAll) {
|
|
111
|
+
const scopes = input.scope ? [input.scope] : ["desktop", "user", "project"];
|
|
112
|
+
const results = [];
|
|
113
|
+
for (const s of scopes) {
|
|
114
|
+
try {
|
|
115
|
+
const servers = await listServers(s, { projectPath: input.projectPath });
|
|
116
|
+
for (const srv of servers) {
|
|
117
|
+
if (!isStdioServer(srv.entry)) {
|
|
118
|
+
results.push({ name: srv.name, scope: s, status: "skip", message: "HTTP server" });
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const r = await checkServerHealth(srv.entry.command, srv.entry.args ?? [], srv.entry.env, input.timeoutMs ?? 10000, input.validateSchemas);
|
|
122
|
+
results.push({ name: srv.name, scope: s, ...r });
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return { status: "batch", servers: results, total: results.length };
|
|
130
|
+
}
|
|
104
131
|
let cmd;
|
|
105
132
|
let cmdArgs = [];
|
|
106
133
|
let env;
|
|
@@ -114,6 +141,7 @@ export function registerMetaTools(server) {
|
|
|
114
141
|
name: input.name,
|
|
115
142
|
projectPath: input.projectPath,
|
|
116
143
|
revealSecrets: true,
|
|
144
|
+
allowOutsideHome: input.allowOutsideHome,
|
|
117
145
|
});
|
|
118
146
|
if (!entry) {
|
|
119
147
|
return { status: "not_found", message: `Server "${input.name}" not found in ${input.scope} scope.` };
|
|
@@ -129,7 +157,7 @@ export function registerMetaTools(server) {
|
|
|
129
157
|
throw new Error("Provide either (scope + name) or (command + args).");
|
|
130
158
|
}
|
|
131
159
|
const timeout = input.timeoutMs ?? 10000;
|
|
132
|
-
return await checkServerHealth(cmd, cmdArgs, env, timeout);
|
|
160
|
+
return await checkServerHealth(cmd, cmdArgs, env, timeout, input.validateSchemas);
|
|
133
161
|
}, (result) => okResponse(`status: ${result.status}\n${result.message ?? ""}`, result)));
|
|
134
162
|
// ------------------------------------------------------------------
|
|
135
163
|
// meta_env_template
|
|
@@ -229,6 +257,99 @@ export function registerMetaTools(server) {
|
|
|
229
257
|
: `${issues.length} of ${parsed.length} key(s) need attention: ${issues.join(", ")}`,
|
|
230
258
|
};
|
|
231
259
|
}, (result) => okResponse(result.message ?? JSON.stringify(result), result)));
|
|
260
|
+
// ------------------------------------------------------------------
|
|
261
|
+
// meta_apply_template
|
|
262
|
+
// ------------------------------------------------------------------
|
|
263
|
+
server.registerTool("meta_apply_template", {
|
|
264
|
+
title: "Apply template with secrets",
|
|
265
|
+
description: "Read a template file, substitute ${VAR_NAME} placeholders from a .env file, " +
|
|
266
|
+
"and write the output. Useful for generating .mcp.json from a committed template + secrets.",
|
|
267
|
+
inputSchema: {
|
|
268
|
+
templatePath: z.string().describe("Path to template file (e.g., .mcp.json.template)."),
|
|
269
|
+
envPath: z.string().describe("Path to .env file with secret values."),
|
|
270
|
+
outputPath: z.string().optional().describe("Output path. Defaults to templatePath without .template suffix."),
|
|
271
|
+
dryRun: z.boolean().optional(),
|
|
272
|
+
},
|
|
273
|
+
annotations: {
|
|
274
|
+
readOnlyHint: false,
|
|
275
|
+
destructiveHint: false,
|
|
276
|
+
idempotentHint: true,
|
|
277
|
+
openWorldHint: false,
|
|
278
|
+
},
|
|
279
|
+
}, async (args) => handle(async () => {
|
|
280
|
+
const template = await fs.readFile(args.templatePath, "utf8");
|
|
281
|
+
const envContent = await fs.readFile(args.envPath, "utf8");
|
|
282
|
+
const envVars = parseEnvFile(envContent);
|
|
283
|
+
const envMap = new Map(envVars.map((e) => [e.key, e.value]));
|
|
284
|
+
const resolved = [];
|
|
285
|
+
const unresolved = [];
|
|
286
|
+
const output = template.replace(/\$\{([A-Z_][A-Z0-9_]*)\}/g, (_match, name) => {
|
|
287
|
+
const val = envMap.get(name);
|
|
288
|
+
if (val && val.trim()) {
|
|
289
|
+
resolved.push(name);
|
|
290
|
+
return val;
|
|
291
|
+
}
|
|
292
|
+
unresolved.push(name);
|
|
293
|
+
return _match;
|
|
294
|
+
});
|
|
295
|
+
JSON.parse(output); // validate JSON
|
|
296
|
+
const outPath = args.outputPath ?? args.templatePath.replace(/\.template$/, "");
|
|
297
|
+
if (!args.dryRun) {
|
|
298
|
+
await fs.writeFile(outPath, output);
|
|
299
|
+
}
|
|
300
|
+
return { outputPath: outPath, resolved, unresolved, dryRun: args.dryRun ?? false };
|
|
301
|
+
}, (r) => okResponse(`Template applied: ${r.resolved.length} vars resolved, ${r.unresolved.length} unresolved. Output: ${r.outputPath}`, r)));
|
|
302
|
+
// ------------------------------------------------------------------
|
|
303
|
+
// meta_list_server_tools
|
|
304
|
+
// ------------------------------------------------------------------
|
|
305
|
+
server.registerTool("meta_list_server_tools", {
|
|
306
|
+
title: "List tools from an MCP server",
|
|
307
|
+
description: "Spawn a stdio MCP server, send initialize + tools/list, and return " +
|
|
308
|
+
"the tool names and schema health. For debugging which server has bad schemas.",
|
|
309
|
+
inputSchema: {
|
|
310
|
+
scope: z.enum(["desktop", "user", "project"]).optional(),
|
|
311
|
+
name: z.string().optional().describe("Server name to look up in config."),
|
|
312
|
+
command: z.string().optional().describe("Command to spawn directly."),
|
|
313
|
+
args: z.array(z.string()).optional(),
|
|
314
|
+
projectPath: z.string().optional(),
|
|
315
|
+
timeoutMs: z.number().optional().describe("Timeout in ms (default 10000)."),
|
|
316
|
+
},
|
|
317
|
+
annotations: {
|
|
318
|
+
readOnlyHint: true,
|
|
319
|
+
destructiveHint: false,
|
|
320
|
+
idempotentHint: true,
|
|
321
|
+
openWorldHint: true,
|
|
322
|
+
},
|
|
323
|
+
}, async (input) => handle(async () => {
|
|
324
|
+
let cmd;
|
|
325
|
+
let cmdArgs = [];
|
|
326
|
+
let env;
|
|
327
|
+
if (input.command) {
|
|
328
|
+
cmd = input.command;
|
|
329
|
+
cmdArgs = input.args ?? [];
|
|
330
|
+
}
|
|
331
|
+
else if (input.scope && input.name) {
|
|
332
|
+
const entry = await getServer({
|
|
333
|
+
scope: input.scope,
|
|
334
|
+
name: input.name,
|
|
335
|
+
projectPath: input.projectPath,
|
|
336
|
+
revealSecrets: true,
|
|
337
|
+
});
|
|
338
|
+
if (!entry) {
|
|
339
|
+
return { status: "not_found", tools: [], totalTools: 0, problematicTools: 0 };
|
|
340
|
+
}
|
|
341
|
+
if (!isStdioServer(entry.entry)) {
|
|
342
|
+
return { status: "skip", message: "HTTP server", tools: [], totalTools: 0, problematicTools: 0 };
|
|
343
|
+
}
|
|
344
|
+
cmd = entry.entry.command;
|
|
345
|
+
cmdArgs = entry.entry.args ?? [];
|
|
346
|
+
env = entry.entry.env;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
throw new Error("Provide either (scope + name) or (command + args).");
|
|
350
|
+
}
|
|
351
|
+
return await checkServerHealth(cmd, cmdArgs, env, input.timeoutMs ?? 10000, true);
|
|
352
|
+
}, (r) => okResponse(`status: ${r.status}\n${r.message ?? ""}\n${r.schemaIssues ? `Schema issues: ${JSON.stringify(r.schemaIssues)}` : ""}`, r)));
|
|
232
353
|
}
|
|
233
354
|
// ── Helpers ──────────────────────────────────────────────────────────
|
|
234
355
|
function parseEnvFile(content) {
|
|
@@ -247,7 +368,7 @@ function parseEnvFile(content) {
|
|
|
247
368
|
}
|
|
248
369
|
return results;
|
|
249
370
|
}
|
|
250
|
-
function checkServerHealth(command, args, env, timeoutMs) {
|
|
371
|
+
function checkServerHealth(command, args, env, timeoutMs, validateSchemas) {
|
|
251
372
|
return new Promise((resolve) => {
|
|
252
373
|
const childEnv = env ? { ...process.env, ...env } : process.env;
|
|
253
374
|
let child;
|
|
@@ -267,50 +388,93 @@ function checkServerHealth(command, args, env, timeoutMs) {
|
|
|
267
388
|
let stdout = "";
|
|
268
389
|
let stderr = "";
|
|
269
390
|
let settled = false;
|
|
391
|
+
let phase = "init";
|
|
270
392
|
const timer = setTimeout(() => {
|
|
271
393
|
if (!settled) {
|
|
272
394
|
settled = true;
|
|
273
395
|
child.kill("SIGTERM");
|
|
274
396
|
resolve({
|
|
275
397
|
status: "timeout",
|
|
276
|
-
message: `Server did not respond within ${timeoutMs}ms.`,
|
|
398
|
+
message: `Server did not respond within ${timeoutMs}ms (phase: ${phase}).`,
|
|
277
399
|
stderr: stderr.slice(0, 500),
|
|
278
400
|
});
|
|
279
401
|
}
|
|
280
402
|
}, timeoutMs);
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
// Check if we got a valid JSON-RPC response
|
|
284
|
-
if (!settled && stdout.includes('"result"')) {
|
|
403
|
+
function finish(result) {
|
|
404
|
+
if (!settled) {
|
|
285
405
|
settled = true;
|
|
286
406
|
clearTimeout(timer);
|
|
287
407
|
child.kill("SIGTERM");
|
|
288
|
-
resolve(
|
|
408
|
+
resolve(result);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
child.stdout.on("data", (chunk) => {
|
|
412
|
+
stdout += chunk.toString();
|
|
413
|
+
// Try to parse complete JSON-RPC responses (newline-delimited)
|
|
414
|
+
const lines = stdout.split("\n");
|
|
415
|
+
for (const line of lines) {
|
|
416
|
+
if (!line.trim())
|
|
417
|
+
continue;
|
|
418
|
+
let msg;
|
|
419
|
+
try {
|
|
420
|
+
msg = JSON.parse(line);
|
|
421
|
+
}
|
|
422
|
+
catch {
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
if (phase === "init" && msg.result) {
|
|
426
|
+
if (validateSchemas) {
|
|
427
|
+
// Move to tools/list phase
|
|
428
|
+
phase = "tools";
|
|
429
|
+
stdout = "";
|
|
430
|
+
const toolsRequest = JSON.stringify({ jsonrpc: "2.0", id: 2, method: "tools/list" });
|
|
431
|
+
child.stdin.write(toolsRequest + "\n");
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
finish({ status: "ok", message: "Server responded to initialize." });
|
|
435
|
+
}
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
if (phase === "tools" && msg.result) {
|
|
439
|
+
const result = msg.result;
|
|
440
|
+
if (Array.isArray(result.tools)) {
|
|
441
|
+
const tools = result.tools;
|
|
442
|
+
const schemaIssues = [];
|
|
443
|
+
for (const tool of tools) {
|
|
444
|
+
if (tool.inputSchema && schemaHasUnion(tool.inputSchema)) {
|
|
445
|
+
const keywords = [];
|
|
446
|
+
const schema = tool.inputSchema;
|
|
447
|
+
if (schema.oneOf)
|
|
448
|
+
keywords.push("oneOf");
|
|
449
|
+
if (schema.anyOf)
|
|
450
|
+
keywords.push("anyOf");
|
|
451
|
+
if (schema.allOf)
|
|
452
|
+
keywords.push("allOf");
|
|
453
|
+
schemaIssues.push({ tool: tool.name ?? "unknown", keywords });
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
finish({
|
|
457
|
+
status: "ok",
|
|
458
|
+
message: `Server responded. ${tools.length} tools, ${schemaIssues.length} with schema issues.`,
|
|
459
|
+
totalTools: tools.length,
|
|
460
|
+
schemaIssues: schemaIssues.length > 0 ? schemaIssues : undefined,
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
else {
|
|
464
|
+
finish({ status: "ok", message: "Server responded but tools/list had no tools array." });
|
|
465
|
+
}
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
289
468
|
}
|
|
290
469
|
});
|
|
291
470
|
child.stderr.on("data", (chunk) => {
|
|
292
471
|
stderr += chunk.toString();
|
|
293
472
|
});
|
|
294
473
|
child.on("error", (err) => {
|
|
295
|
-
|
|
296
|
-
settled = true;
|
|
297
|
-
clearTimeout(timer);
|
|
298
|
-
resolve({
|
|
299
|
-
status: "failed",
|
|
300
|
-
message: `Spawn error: ${err.message}`,
|
|
301
|
-
});
|
|
302
|
-
}
|
|
474
|
+
finish({ status: "failed", message: `Spawn error: ${err.message}` });
|
|
303
475
|
});
|
|
304
476
|
child.on("exit", (code) => {
|
|
305
|
-
|
|
306
|
-
settled = true;
|
|
307
|
-
clearTimeout(timer);
|
|
308
|
-
resolve({
|
|
309
|
-
status: "failed",
|
|
310
|
-
message: `Server exited with code ${code} before responding.`,
|
|
311
|
-
stderr: stderr.slice(0, 500),
|
|
312
|
-
});
|
|
313
|
-
}
|
|
477
|
+
finish({ status: "failed", message: `Server exited with code ${code} before responding.`, stderr: stderr.slice(0, 500) });
|
|
314
478
|
});
|
|
315
479
|
// Send an initialize request
|
|
316
480
|
const initRequest = JSON.stringify({
|