@thantos66/claude-context-mcp 0.1.1 → 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 +12 -1
- package/dist/index.js.map +1 -1
- package/dist/proxy.d.ts +5 -0
- package/dist/proxy.js +208 -0
- package/dist/proxy.js.map +1 -0
- 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 +416 -2
- 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/meta.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
|
+
import { spawn } from "node:child_process";
|
|
3
4
|
import { allPlatformPaths } from "../services/paths.js";
|
|
4
|
-
import { loadMcpConfig } from "../services/mcp-config.js";
|
|
5
|
+
import { loadMcpConfig, listServers } from "../services/mcp-config.js";
|
|
5
6
|
import { loadSettings } from "../services/permissions.js";
|
|
6
7
|
import { backupFile } from "../services/backup.js";
|
|
8
|
+
import { getServer } from "../services/mcp-config.js";
|
|
9
|
+
import { isStdioServer } from "../schemas/mcp-config.js";
|
|
10
|
+
import { schemaHasUnion } from "../proxy.js";
|
|
7
11
|
import { handle, okResponse } from "./helpers.js";
|
|
8
12
|
export function registerMetaTools(server) {
|
|
9
13
|
// ------------------------------------------------------------------
|
|
@@ -15,6 +19,7 @@ export function registerMetaTools(server) {
|
|
|
15
19
|
"current OS, for each scope (and an optional project path).",
|
|
16
20
|
inputSchema: {
|
|
17
21
|
projectPath: z.string().optional(),
|
|
22
|
+
allowOutsideHome: z.boolean().optional().describe("Allow projectPath outside $HOME (for cloud environments)."),
|
|
18
23
|
},
|
|
19
24
|
annotations: {
|
|
20
25
|
readOnlyHint: true,
|
|
@@ -22,7 +27,7 @@ export function registerMetaTools(server) {
|
|
|
22
27
|
idempotentHint: true,
|
|
23
28
|
openWorldHint: false,
|
|
24
29
|
},
|
|
25
|
-
}, async ({ projectPath }) => {
|
|
30
|
+
}, async ({ projectPath, allowOutsideHome: _allowOutsideHome }) => {
|
|
26
31
|
const paths = allPlatformPaths(projectPath);
|
|
27
32
|
return okResponse(JSON.stringify(paths, null, 2), paths);
|
|
28
33
|
});
|
|
@@ -75,5 +80,414 @@ export function registerMetaTools(server) {
|
|
|
75
80
|
}, (result) => result.backup
|
|
76
81
|
? okResponse(`backed up ${result.filePath} -> ${result.backup}`, result)
|
|
77
82
|
: okResponse(`no-op: ${result.filePath} did not exist`, result)));
|
|
83
|
+
// ------------------------------------------------------------------
|
|
84
|
+
// meta_check_server_health
|
|
85
|
+
// ------------------------------------------------------------------
|
|
86
|
+
server.registerTool("meta_check_server_health", {
|
|
87
|
+
title: "Check if an MCP server can start",
|
|
88
|
+
description: "Spawn a stdio MCP server, send an initialize request, and check " +
|
|
89
|
+
"if it responds within a timeout. Reports: ok, failed, or timeout. " +
|
|
90
|
+
"Provide either (scope + name) to look up the config, or (command + args) directly.",
|
|
91
|
+
inputSchema: {
|
|
92
|
+
scope: z.enum(["desktop", "user", "project"]).optional(),
|
|
93
|
+
name: z.string().optional().describe("Server name to look up in config."),
|
|
94
|
+
command: z.string().optional().describe("Command to spawn directly (alternative to scope+name)."),
|
|
95
|
+
args: z.array(z.string()).optional(),
|
|
96
|
+
projectPath: z.string().optional(),
|
|
97
|
+
allowOutsideHome: z.boolean().optional().describe("Allow projectPath outside $HOME (for cloud environments)."),
|
|
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."),
|
|
101
|
+
},
|
|
102
|
+
annotations: {
|
|
103
|
+
readOnlyHint: true,
|
|
104
|
+
destructiveHint: false,
|
|
105
|
+
idempotentHint: true,
|
|
106
|
+
openWorldHint: true,
|
|
107
|
+
},
|
|
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
|
+
}
|
|
131
|
+
let cmd;
|
|
132
|
+
let cmdArgs = [];
|
|
133
|
+
let env;
|
|
134
|
+
if (input.command) {
|
|
135
|
+
cmd = input.command;
|
|
136
|
+
cmdArgs = input.args ?? [];
|
|
137
|
+
}
|
|
138
|
+
else if (input.scope && input.name) {
|
|
139
|
+
const entry = await getServer({
|
|
140
|
+
scope: input.scope,
|
|
141
|
+
name: input.name,
|
|
142
|
+
projectPath: input.projectPath,
|
|
143
|
+
revealSecrets: true,
|
|
144
|
+
allowOutsideHome: input.allowOutsideHome,
|
|
145
|
+
});
|
|
146
|
+
if (!entry) {
|
|
147
|
+
return { status: "not_found", message: `Server "${input.name}" not found in ${input.scope} scope.` };
|
|
148
|
+
}
|
|
149
|
+
if (!isStdioServer(entry.entry)) {
|
|
150
|
+
return { status: "skip", message: `Server "${input.name}" is HTTP-based, not stdio.` };
|
|
151
|
+
}
|
|
152
|
+
cmd = entry.entry.command;
|
|
153
|
+
cmdArgs = entry.entry.args ?? [];
|
|
154
|
+
env = entry.entry.env;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
throw new Error("Provide either (scope + name) or (command + args).");
|
|
158
|
+
}
|
|
159
|
+
const timeout = input.timeoutMs ?? 10000;
|
|
160
|
+
return await checkServerHealth(cmd, cmdArgs, env, timeout, input.validateSchemas);
|
|
161
|
+
}, (result) => okResponse(`status: ${result.status}\n${result.message ?? ""}`, result)));
|
|
162
|
+
// ------------------------------------------------------------------
|
|
163
|
+
// meta_env_template
|
|
164
|
+
// ------------------------------------------------------------------
|
|
165
|
+
server.registerTool("meta_env_template", {
|
|
166
|
+
title: "Manage a secrets env template",
|
|
167
|
+
description: "Create, read, or validate a secrets .env file. When action=create, " +
|
|
168
|
+
"writes a template with placeholder comments (chmod 600). When " +
|
|
169
|
+
"action=validate, checks that all keys have non-empty, non-placeholder values.",
|
|
170
|
+
inputSchema: {
|
|
171
|
+
action: z.enum(["create", "read", "validate"]),
|
|
172
|
+
filePath: z.string().describe("Absolute path to the .env file."),
|
|
173
|
+
entries: z
|
|
174
|
+
.array(z.object({
|
|
175
|
+
key: z.string(),
|
|
176
|
+
comment: z.string().optional(),
|
|
177
|
+
}))
|
|
178
|
+
.optional()
|
|
179
|
+
.describe("Key definitions for create action. Each entry becomes KEY= with optional # comment."),
|
|
180
|
+
header: z.string().optional().describe("Header comment block for create action."),
|
|
181
|
+
},
|
|
182
|
+
annotations: {
|
|
183
|
+
readOnlyHint: false,
|
|
184
|
+
destructiveHint: false,
|
|
185
|
+
idempotentHint: true,
|
|
186
|
+
openWorldHint: false,
|
|
187
|
+
},
|
|
188
|
+
}, async (input) => handle(async () => {
|
|
189
|
+
if (input.action === "create") {
|
|
190
|
+
const lines = [];
|
|
191
|
+
if (input.header) {
|
|
192
|
+
for (const line of input.header.split("\n")) {
|
|
193
|
+
lines.push(`# ${line}`);
|
|
194
|
+
}
|
|
195
|
+
lines.push("");
|
|
196
|
+
}
|
|
197
|
+
for (const entry of input.entries ?? []) {
|
|
198
|
+
if (entry.comment) {
|
|
199
|
+
lines.push(`# ${entry.comment}`);
|
|
200
|
+
}
|
|
201
|
+
lines.push(`${entry.key}=`);
|
|
202
|
+
}
|
|
203
|
+
lines.push(""); // trailing newline
|
|
204
|
+
const content = lines.join("\n");
|
|
205
|
+
await fs.writeFile(input.filePath, content, { mode: 0o600 });
|
|
206
|
+
return {
|
|
207
|
+
action: "create",
|
|
208
|
+
filePath: input.filePath,
|
|
209
|
+
keys: (input.entries ?? []).map((e) => e.key),
|
|
210
|
+
message: `Created template at ${input.filePath} (chmod 600) with ${(input.entries ?? []).length} key(s).`,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
if (input.action === "read") {
|
|
214
|
+
let content;
|
|
215
|
+
try {
|
|
216
|
+
content = await fs.readFile(input.filePath, "utf8");
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
if (err.code === "ENOENT") {
|
|
220
|
+
return { action: "read", filePath: input.filePath, exists: false, message: "File does not exist." };
|
|
221
|
+
}
|
|
222
|
+
throw err;
|
|
223
|
+
}
|
|
224
|
+
const parsed = parseEnvFile(content);
|
|
225
|
+
return { action: "read", filePath: input.filePath, exists: true, keys: parsed };
|
|
226
|
+
}
|
|
227
|
+
// validate
|
|
228
|
+
let content;
|
|
229
|
+
try {
|
|
230
|
+
content = await fs.readFile(input.filePath, "utf8");
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
if (err.code === "ENOENT") {
|
|
234
|
+
return { action: "validate", filePath: input.filePath, valid: false, message: "File does not exist." };
|
|
235
|
+
}
|
|
236
|
+
throw err;
|
|
237
|
+
}
|
|
238
|
+
const parsed = parseEnvFile(content);
|
|
239
|
+
const issues = [];
|
|
240
|
+
for (const { key, value } of parsed) {
|
|
241
|
+
if (!value || value.trim() === "") {
|
|
242
|
+
issues.push(`${key}: empty`);
|
|
243
|
+
}
|
|
244
|
+
else if (/^<YOUR_.*>$/i.test(value.trim())) {
|
|
245
|
+
issues.push(`${key}: placeholder value`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
action: "validate",
|
|
250
|
+
filePath: input.filePath,
|
|
251
|
+
valid: issues.length === 0,
|
|
252
|
+
total: parsed.length,
|
|
253
|
+
filled: parsed.length - issues.length,
|
|
254
|
+
issues,
|
|
255
|
+
message: issues.length === 0
|
|
256
|
+
? `All ${parsed.length} key(s) are filled.`
|
|
257
|
+
: `${issues.length} of ${parsed.length} key(s) need attention: ${issues.join(", ")}`,
|
|
258
|
+
};
|
|
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)));
|
|
353
|
+
}
|
|
354
|
+
// ── Helpers ──────────────────────────────────────────────────────────
|
|
355
|
+
function parseEnvFile(content) {
|
|
356
|
+
const results = [];
|
|
357
|
+
for (const line of content.split("\n")) {
|
|
358
|
+
const trimmed = line.trim();
|
|
359
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
360
|
+
continue;
|
|
361
|
+
const eqIdx = trimmed.indexOf("=");
|
|
362
|
+
if (eqIdx === -1)
|
|
363
|
+
continue;
|
|
364
|
+
results.push({
|
|
365
|
+
key: trimmed.slice(0, eqIdx),
|
|
366
|
+
value: trimmed.slice(eqIdx + 1),
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
return results;
|
|
370
|
+
}
|
|
371
|
+
function checkServerHealth(command, args, env, timeoutMs, validateSchemas) {
|
|
372
|
+
return new Promise((resolve) => {
|
|
373
|
+
const childEnv = env ? { ...process.env, ...env } : process.env;
|
|
374
|
+
let child;
|
|
375
|
+
try {
|
|
376
|
+
child = spawn(command, args, {
|
|
377
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
378
|
+
env: childEnv,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
catch (err) {
|
|
382
|
+
resolve({
|
|
383
|
+
status: "failed",
|
|
384
|
+
message: `Failed to spawn "${command}": ${err.message}`,
|
|
385
|
+
});
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
let stdout = "";
|
|
389
|
+
let stderr = "";
|
|
390
|
+
let settled = false;
|
|
391
|
+
let phase = "init";
|
|
392
|
+
const timer = setTimeout(() => {
|
|
393
|
+
if (!settled) {
|
|
394
|
+
settled = true;
|
|
395
|
+
child.kill("SIGTERM");
|
|
396
|
+
resolve({
|
|
397
|
+
status: "timeout",
|
|
398
|
+
message: `Server did not respond within ${timeoutMs}ms (phase: ${phase}).`,
|
|
399
|
+
stderr: stderr.slice(0, 500),
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
}, timeoutMs);
|
|
403
|
+
function finish(result) {
|
|
404
|
+
if (!settled) {
|
|
405
|
+
settled = true;
|
|
406
|
+
clearTimeout(timer);
|
|
407
|
+
child.kill("SIGTERM");
|
|
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
|
+
}
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
child.stderr.on("data", (chunk) => {
|
|
471
|
+
stderr += chunk.toString();
|
|
472
|
+
});
|
|
473
|
+
child.on("error", (err) => {
|
|
474
|
+
finish({ status: "failed", message: `Spawn error: ${err.message}` });
|
|
475
|
+
});
|
|
476
|
+
child.on("exit", (code) => {
|
|
477
|
+
finish({ status: "failed", message: `Server exited with code ${code} before responding.`, stderr: stderr.slice(0, 500) });
|
|
478
|
+
});
|
|
479
|
+
// Send an initialize request
|
|
480
|
+
const initRequest = JSON.stringify({
|
|
481
|
+
jsonrpc: "2.0",
|
|
482
|
+
id: 1,
|
|
483
|
+
method: "initialize",
|
|
484
|
+
params: {
|
|
485
|
+
protocolVersion: "2025-03-26",
|
|
486
|
+
capabilities: {},
|
|
487
|
+
clientInfo: { name: "health-check", version: "1.0" },
|
|
488
|
+
},
|
|
489
|
+
});
|
|
490
|
+
child.stdin.write(initRequest + "\n");
|
|
491
|
+
});
|
|
78
492
|
}
|
|
79
493
|
//# sourceMappingURL=meta.js.map
|
package/dist/tools/meta.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,qEAAqE;IACrE,sBAAsB;IACtB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,+DAA+D;YAC/D,4DAA4D;QAC9D,WAAW,EAAE;YACX,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACnC;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,WAAW,EAAE,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,UAAU,CACf,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9B,KAA2C,CAC5C,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,qEAAqE;IACrE,gBAAgB;IAChB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,qEAAqE;YACrE,uEAAuE;YACvE,yCAAyC;QAC3C,WAAW,EAAE;YACX,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACxC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB;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,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC3B,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC9C,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9C,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CACT,UAAU,CACR,aAAa,MAAM,CAAC,IAAI,OAAO,MAAM,CAAC,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAC7F,MAA4C,CAC7C,CACJ,CACJ,CAAC;IAEF,qEAAqE;IACrE,mBAAmB;IACnB,qEAAqE;IACrE,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,gCAAgC;QACvC,WAAW,EACT,sEAAsE;YACtE,8CAA8C;QAChD,WAAW,EAAE;YACX,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CACrB,MAAM,CACJ,KAAK,IAAI,EAAE;QACT,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,CAAC,MAAM;QACX,CAAC,CAAC,UAAU,CAAC,aAAa,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC;QACxE,CAAC,CAAC,UAAU,CAAC,UAAU,MAAM,CAAC,QAAQ,gBAAgB,EAAE,MAAM,CAAC,CACpE,CACJ,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../src/tools/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,10 @@ const ProjectPathField = {
|
|
|
9
9
|
.string()
|
|
10
10
|
.optional()
|
|
11
11
|
.describe("Absolute path to the project. Required when scope=project."),
|
|
12
|
+
allowOutsideHome: z
|
|
13
|
+
.boolean()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe("Allow projectPath outside $HOME (for cloud environments)."),
|
|
12
16
|
};
|
|
13
17
|
const DryRunField = {
|
|
14
18
|
dryRun: z
|
|
@@ -33,7 +37,7 @@ export function registerPermissionsTools(server) {
|
|
|
33
37
|
idempotentHint: true,
|
|
34
38
|
openWorldHint: false,
|
|
35
39
|
},
|
|
36
|
-
}, async ({ scope, projectPath }) => handle(() => listPermissions(scope, projectPath), (result) => {
|
|
40
|
+
}, async ({ scope, projectPath, allowOutsideHome }) => handle(() => listPermissions(scope, projectPath, { allowOutsideHome }), (result) => {
|
|
37
41
|
const p = result.permissions;
|
|
38
42
|
const text = [
|
|
39
43
|
`path: ${result.path}`,
|
|
@@ -71,6 +75,7 @@ export function registerPermissionsTools(server) {
|
|
|
71
75
|
rules: args.rules,
|
|
72
76
|
projectPath: args.projectPath,
|
|
73
77
|
dryRun: args.dryRun,
|
|
78
|
+
allowOutsideHome: args.allowOutsideHome,
|
|
74
79
|
}), (result) => {
|
|
75
80
|
const head = formatWriteResult(result, `add ${args.list} rules to`, false);
|
|
76
81
|
const detail = [
|
|
@@ -104,6 +109,7 @@ export function registerPermissionsTools(server) {
|
|
|
104
109
|
rule: args.rule,
|
|
105
110
|
projectPath: args.projectPath,
|
|
106
111
|
dryRun: args.dryRun,
|
|
112
|
+
allowOutsideHome: args.allowOutsideHome,
|
|
107
113
|
}), (result) => {
|
|
108
114
|
const verb = result.removed
|
|
109
115
|
? `remove ${args.list} rule ${JSON.stringify(args.rule)} from`
|
|
@@ -134,6 +140,7 @@ export function registerPermissionsTools(server) {
|
|
|
134
140
|
mode: args.mode,
|
|
135
141
|
projectPath: args.projectPath,
|
|
136
142
|
dryRun: args.dryRun,
|
|
143
|
+
allowOutsideHome: args.allowOutsideHome,
|
|
137
144
|
}), (result) => okResponse(formatWriteResult(result, `set defaultMode=${args.mode} in`, false), { result })));
|
|
138
145
|
}
|
|
139
146
|
function formatList(items) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/tools/permissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,eAAe,EACf,QAAQ,EACR,UAAU,EACV,cAAc,GACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErE,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAElD,MAAM,gBAAgB,GAAG;IACvB,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,4DAA4D,CAAC;
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/tools/permissions.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/skills.js
CHANGED
|
@@ -7,6 +7,10 @@ const ProjectPathField = {
|
|
|
7
7
|
.string()
|
|
8
8
|
.optional()
|
|
9
9
|
.describe("Absolute path to the project. Required when scope=project."),
|
|
10
|
+
allowOutsideHome: z
|
|
11
|
+
.boolean()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Allow projectPath outside $HOME (for cloud environments)."),
|
|
10
14
|
};
|
|
11
15
|
const DryRunField = { dryRun: z.boolean().optional() };
|
|
12
16
|
export function registerSkillTools(server) {
|
|
@@ -26,7 +30,7 @@ export function registerSkillTools(server) {
|
|
|
26
30
|
idempotentHint: true,
|
|
27
31
|
openWorldHint: false,
|
|
28
32
|
},
|
|
29
|
-
}, async ({ scope, projectPath }) => handle(() => listSkills(scope, projectPath), (skills) => okResponse(skills.length === 0
|
|
33
|
+
}, async ({ scope, projectPath, allowOutsideHome }) => handle(() => listSkills(scope, projectPath, { allowOutsideHome }), (skills) => okResponse(skills.length === 0
|
|
30
34
|
? `No skills found in ${scope} scope.`
|
|
31
35
|
: skills
|
|
32
36
|
.map((s) => `[${s.scope}] ${s.name}${s.frontmatter["disable-model-invocation"] ? " (disabled)" : ""}\n dir: ${s.dir}\n description: ${truncate(s.frontmatter.description, 120)}`)
|
|
@@ -151,6 +155,52 @@ export function registerSkillTools(server) {
|
|
|
151
155
|
openWorldHint: false,
|
|
152
156
|
},
|
|
153
157
|
}, async (args) => handle(() => deleteSkill(args), (result) => okResponse(formatWriteResult(result, `delete skill "${args.name}" at`, false), { result })));
|
|
158
|
+
// ------------------------------------------------------------------
|
|
159
|
+
// skill_clone
|
|
160
|
+
// ------------------------------------------------------------------
|
|
161
|
+
server.registerTool("skill_clone", {
|
|
162
|
+
title: "Clone a skill",
|
|
163
|
+
description: "Copy an existing skill to a new name (and optionally a different scope). " +
|
|
164
|
+
"The source SKILL.md is read and a new skill folder is created.",
|
|
165
|
+
inputSchema: {
|
|
166
|
+
sourceScope: CodeScope,
|
|
167
|
+
sourceName: z.string().min(1),
|
|
168
|
+
targetScope: CodeScope.optional(),
|
|
169
|
+
targetName: z
|
|
170
|
+
.string()
|
|
171
|
+
.regex(/^[a-z0-9][a-z0-9-]*$/, "target name must be lowercase alphanumeric + hyphens"),
|
|
172
|
+
...ProjectPathField,
|
|
173
|
+
allowOutsideHome: z.boolean().optional(),
|
|
174
|
+
...DryRunField,
|
|
175
|
+
},
|
|
176
|
+
annotations: {
|
|
177
|
+
readOnlyHint: false,
|
|
178
|
+
destructiveHint: false,
|
|
179
|
+
idempotentHint: false,
|
|
180
|
+
openWorldHint: false,
|
|
181
|
+
},
|
|
182
|
+
}, async (args) => handle(async () => {
|
|
183
|
+
const source = await getSkill({
|
|
184
|
+
scope: args.sourceScope,
|
|
185
|
+
name: args.sourceName,
|
|
186
|
+
projectPath: args.projectPath,
|
|
187
|
+
});
|
|
188
|
+
if (!source) {
|
|
189
|
+
throw new Error(`Skill "${args.sourceName}" not found in scope ${args.sourceScope}.`);
|
|
190
|
+
}
|
|
191
|
+
const fm = source.frontmatter;
|
|
192
|
+
return createSkill({
|
|
193
|
+
scope: args.targetScope ?? args.sourceScope,
|
|
194
|
+
name: args.targetName,
|
|
195
|
+
description: fm.description,
|
|
196
|
+
allowedTools: fm["allowed-tools"],
|
|
197
|
+
model: fm.model,
|
|
198
|
+
body: source.body,
|
|
199
|
+
projectPath: args.projectPath,
|
|
200
|
+
overwrite: false,
|
|
201
|
+
dryRun: args.dryRun,
|
|
202
|
+
});
|
|
203
|
+
}, (result) => okResponse(formatWriteResult(result, `clone skill "${args.sourceName}" -> "${args.targetName}" at`, false), { result })));
|
|
154
204
|
}
|
|
155
205
|
function truncate(s, n) {
|
|
156
206
|
if (s.length <= n)
|