@codemcp/agentskills-core 0.0.9 → 1.0.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.
Files changed (43) hide show
  1. package/dist/__tests__/mcp-config-manager.test.d.ts +2 -0
  2. package/dist/__tests__/mcp-config-manager.test.d.ts.map +1 -0
  3. package/dist/__tests__/mcp-config-manager.test.js +417 -0
  4. package/dist/__tests__/mcp-config-manager.test.js.map +1 -0
  5. package/dist/__tests__/mcp-dependency-checker.test.d.ts +2 -0
  6. package/dist/__tests__/mcp-dependency-checker.test.d.ts.map +1 -0
  7. package/dist/__tests__/mcp-dependency-checker.test.js +555 -0
  8. package/dist/__tests__/mcp-dependency-checker.test.js.map +1 -0
  9. package/dist/__tests__/parameter-substitution.test.d.ts +2 -0
  10. package/dist/__tests__/parameter-substitution.test.d.ts.map +1 -0
  11. package/dist/__tests__/parameter-substitution.test.js +383 -0
  12. package/dist/__tests__/parameter-substitution.test.js.map +1 -0
  13. package/dist/__tests__/validator.test.js +383 -7
  14. package/dist/__tests__/validator.test.js.map +1 -1
  15. package/dist/index.d.ts +4 -1
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +3 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/installer.d.ts +8 -1
  20. package/dist/installer.d.ts.map +1 -1
  21. package/dist/installer.js +42 -1
  22. package/dist/installer.js.map +1 -1
  23. package/dist/mcp-config-manager.d.ts +62 -0
  24. package/dist/mcp-config-manager.d.ts.map +1 -0
  25. package/dist/mcp-config-manager.js +140 -0
  26. package/dist/mcp-config-manager.js.map +1 -0
  27. package/dist/mcp-dependency-checker.d.ts +26 -0
  28. package/dist/mcp-dependency-checker.d.ts.map +1 -0
  29. package/dist/mcp-dependency-checker.js +68 -0
  30. package/dist/mcp-dependency-checker.js.map +1 -0
  31. package/dist/parameter-substitution.d.ts +20 -0
  32. package/dist/parameter-substitution.d.ts.map +1 -0
  33. package/dist/parameter-substitution.js +82 -0
  34. package/dist/parameter-substitution.js.map +1 -0
  35. package/dist/parser.d.ts.map +1 -1
  36. package/dist/parser.js +2 -1
  37. package/dist/parser.js.map +1 -1
  38. package/dist/types.d.ts +64 -0
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/validator.d.ts.map +1 -1
  41. package/dist/validator.js +194 -0
  42. package/dist/validator.js.map +1 -1
  43. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-config-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mcp-config-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,417 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { promises as fs } from "fs";
3
+ import { join } from "path";
4
+ import { tmpdir } from "os";
5
+ import { MCPConfigManager } from "../mcp-config-manager.js";
6
+ describe("MCPConfigManager", () => {
7
+ let tempDir;
8
+ beforeEach(async () => {
9
+ tempDir = join(tmpdir(), `mcp-config-test-${Date.now()}`);
10
+ await fs.mkdir(tempDir, { recursive: true });
11
+ });
12
+ afterEach(async () => {
13
+ try {
14
+ await fs.rm(tempDir, { recursive: true, force: true });
15
+ }
16
+ catch {
17
+ // Ignore cleanup errors
18
+ }
19
+ vi.restoreAllMocks();
20
+ });
21
+ describe("getConfigPath", () => {
22
+ describe("project-relative paths", () => {
23
+ it("should return project-relative path for claude-desktop", () => {
24
+ const manager = new MCPConfigManager();
25
+ const path = manager.getConfigPath("claude-desktop", tempDir);
26
+ expect(path).toBe(join(tempDir, ".claude/mcp_settings.json"));
27
+ });
28
+ it("should return project-relative path for cline", () => {
29
+ const manager = new MCPConfigManager();
30
+ const path = manager.getConfigPath("cline", tempDir);
31
+ expect(path).toBe(join(tempDir, ".cline/mcp_settings.json"));
32
+ });
33
+ it("should return project-relative path for continue", () => {
34
+ const manager = new MCPConfigManager();
35
+ const path = manager.getConfigPath("continue", tempDir);
36
+ expect(path).toBe(join(tempDir, ".continue/config.json"));
37
+ });
38
+ it("should return project-relative path for cursor", () => {
39
+ const manager = new MCPConfigManager();
40
+ const path = manager.getConfigPath("cursor", tempDir);
41
+ expect(path).toBe(join(tempDir, ".cursor/mcp_settings.json"));
42
+ });
43
+ it("should return project-relative path for junie", () => {
44
+ const manager = new MCPConfigManager();
45
+ const path = manager.getConfigPath("junie", tempDir);
46
+ expect(path).toBe(join(tempDir, ".junie/mcp_settings.json"));
47
+ });
48
+ it("should return project-relative path for kiro", () => {
49
+ const manager = new MCPConfigManager();
50
+ const path = manager.getConfigPath("kiro", tempDir);
51
+ expect(path).toBe(join(tempDir, ".kiro/settings/mcp.json"));
52
+ });
53
+ it("should return project-relative path for zed", () => {
54
+ const manager = new MCPConfigManager();
55
+ const path = manager.getConfigPath("zed", tempDir);
56
+ expect(path).toBe(join(tempDir, ".zed/mcp_settings.json"));
57
+ });
58
+ it("should use process.cwd() when projectRoot is not provided", () => {
59
+ const manager = new MCPConfigManager();
60
+ const path = manager.getConfigPath("cline");
61
+ expect(path).toBe(join(process.cwd(), ".cline/mcp_settings.json"));
62
+ });
63
+ });
64
+ it("should throw error for unknown client type", () => {
65
+ const manager = new MCPConfigManager();
66
+ expect(() => manager.getConfigPath("unknown", tempDir)).toThrow("Unknown client type");
67
+ });
68
+ });
69
+ describe("readConfig", () => {
70
+ it("should read and parse valid JSON config", async () => {
71
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
72
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
73
+ const config = {
74
+ mcpServers: {
75
+ "test-server": {
76
+ command: "npx",
77
+ args: ["-y", "@test/package"],
78
+ env: { TEST: "value" }
79
+ }
80
+ }
81
+ };
82
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2));
83
+ const manager = new MCPConfigManager();
84
+ const result = await manager.readConfig("cline", tempDir);
85
+ expect(result).toEqual(config);
86
+ });
87
+ it("should return empty config when file does not exist", async () => {
88
+ const manager = new MCPConfigManager();
89
+ const result = await manager.readConfig("cline", tempDir);
90
+ expect(result).toEqual({ mcpServers: {} });
91
+ });
92
+ it("should throw error for invalid JSON", async () => {
93
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
94
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
95
+ await fs.writeFile(configPath, "{ invalid json }");
96
+ const manager = new MCPConfigManager();
97
+ await expect(manager.readConfig("cline", tempDir)).rejects.toThrow();
98
+ });
99
+ it("should create mcpServers object if missing from config", async () => {
100
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
101
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
102
+ await fs.writeFile(configPath, JSON.stringify({ otherField: "value" }));
103
+ const manager = new MCPConfigManager();
104
+ const result = await manager.readConfig("cline", tempDir);
105
+ expect(result).toEqual({
106
+ otherField: "value",
107
+ mcpServers: {}
108
+ });
109
+ });
110
+ it("should handle empty file gracefully", async () => {
111
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
112
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
113
+ await fs.writeFile(configPath, "");
114
+ const manager = new MCPConfigManager();
115
+ await expect(manager.readConfig("cline", tempDir)).rejects.toThrow();
116
+ });
117
+ });
118
+ describe("isServerConfigured", () => {
119
+ it("should return true when server exists in config", async () => {
120
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
121
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
122
+ const config = {
123
+ mcpServers: {
124
+ "existing-server": {
125
+ command: "npx",
126
+ args: ["-y", "@test/package"]
127
+ }
128
+ }
129
+ };
130
+ await fs.writeFile(configPath, JSON.stringify(config));
131
+ const manager = new MCPConfigManager();
132
+ const result = await manager.isServerConfigured("cline", "existing-server", tempDir);
133
+ expect(result).toBe(true);
134
+ });
135
+ it("should return false when server does not exist in config", async () => {
136
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
137
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
138
+ const config = {
139
+ mcpServers: {
140
+ "other-server": {
141
+ command: "npx",
142
+ args: ["-y", "@test/package"]
143
+ }
144
+ }
145
+ };
146
+ await fs.writeFile(configPath, JSON.stringify(config));
147
+ const manager = new MCPConfigManager();
148
+ const result = await manager.isServerConfigured("cline", "missing-server", tempDir);
149
+ expect(result).toBe(false);
150
+ });
151
+ it("should return false when config file does not exist", async () => {
152
+ const manager = new MCPConfigManager();
153
+ const result = await manager.isServerConfigured("cline", "any-server", tempDir);
154
+ expect(result).toBe(false);
155
+ });
156
+ it("should return false when mcpServers is empty", async () => {
157
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
158
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
159
+ await fs.writeFile(configPath, JSON.stringify({ mcpServers: {} }));
160
+ const manager = new MCPConfigManager();
161
+ const result = await manager.isServerConfigured("cline", "any-server", tempDir);
162
+ expect(result).toBe(false);
163
+ });
164
+ });
165
+ describe("addServer", () => {
166
+ it("should add new server to empty config", async () => {
167
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
168
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
169
+ const serverConfig = {
170
+ command: "npx",
171
+ args: ["-y", "@codemcp/agentskills"],
172
+ env: { NODE_ENV: "production" }
173
+ };
174
+ const manager = new MCPConfigManager();
175
+ await manager.addServer("cline", "agent-skills", serverConfig, tempDir);
176
+ const fileContent = await fs.readFile(configPath, "utf-8");
177
+ const config = JSON.parse(fileContent);
178
+ expect(config.mcpServers["agent-skills"]).toEqual(serverConfig);
179
+ });
180
+ it("should add new server to existing config with other servers", async () => {
181
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
182
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
183
+ const existingConfig = {
184
+ mcpServers: {
185
+ "existing-server": {
186
+ command: "node",
187
+ args: ["server.js"]
188
+ }
189
+ }
190
+ };
191
+ await fs.writeFile(configPath, JSON.stringify(existingConfig));
192
+ const newServerConfig = {
193
+ command: "npx",
194
+ args: ["-y", "@codemcp/agentskills"]
195
+ };
196
+ const manager = new MCPConfigManager();
197
+ await manager.addServer("cline", "agent-skills", newServerConfig, tempDir);
198
+ const fileContent = await fs.readFile(configPath, "utf-8");
199
+ const config = JSON.parse(fileContent);
200
+ expect(config.mcpServers["existing-server"]).toEqual(existingConfig.mcpServers["existing-server"]);
201
+ expect(config.mcpServers["agent-skills"]).toEqual(newServerConfig);
202
+ });
203
+ it("should throw error when adding duplicate server", async () => {
204
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
205
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
206
+ const existingConfig = {
207
+ mcpServers: {
208
+ "agent-skills": {
209
+ command: "npx",
210
+ args: ["-y", "@codemcp/agentskills"]
211
+ }
212
+ }
213
+ };
214
+ await fs.writeFile(configPath, JSON.stringify(existingConfig));
215
+ const manager = new MCPConfigManager();
216
+ await expect(manager.addServer("cline", "agent-skills", {
217
+ command: "node",
218
+ args: ["server.js"]
219
+ }, tempDir)).rejects.toThrow("Server agent-skills already exists");
220
+ });
221
+ it("should create config directory if it does not exist", async () => {
222
+ const serverConfig = {
223
+ command: "npx",
224
+ args: ["-y", "@codemcp/agentskills"]
225
+ };
226
+ const manager = new MCPConfigManager();
227
+ await manager.addServer("cline", "agent-skills", serverConfig, tempDir);
228
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
229
+ const fileContent = await fs.readFile(configPath, "utf-8");
230
+ const config = JSON.parse(fileContent);
231
+ expect(config.mcpServers["agent-skills"]).toEqual(serverConfig);
232
+ });
233
+ it("should preserve other config fields when adding server", async () => {
234
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
235
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
236
+ const existingConfig = {
237
+ version: "1.0.0",
238
+ otherField: "value",
239
+ mcpServers: {}
240
+ };
241
+ await fs.writeFile(configPath, JSON.stringify(existingConfig));
242
+ const serverConfig = {
243
+ command: "npx",
244
+ args: ["-y", "@codemcp/agentskills"]
245
+ };
246
+ const manager = new MCPConfigManager();
247
+ await manager.addServer("cline", "agent-skills", serverConfig, tempDir);
248
+ const fileContent = await fs.readFile(configPath, "utf-8");
249
+ const config = JSON.parse(fileContent);
250
+ expect(config.version).toBe("1.0.0");
251
+ expect(config.otherField).toBe("value");
252
+ expect(config.mcpServers["agent-skills"]).toEqual(serverConfig);
253
+ });
254
+ it("should format JSON output with proper indentation", async () => {
255
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
256
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
257
+ const serverConfig = {
258
+ command: "npx",
259
+ args: ["-y", "@codemcp/agentskills"]
260
+ };
261
+ const manager = new MCPConfigManager();
262
+ await manager.addServer("cline", "agent-skills", serverConfig, tempDir);
263
+ const fileContent = await fs.readFile(configPath, "utf-8");
264
+ // Check that the file is properly formatted (has newlines and indentation)
265
+ expect(fileContent).toContain("\n");
266
+ expect(fileContent).toContain(" ");
267
+ });
268
+ });
269
+ describe("removeServer", () => {
270
+ it("should remove existing server from config", async () => {
271
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
272
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
273
+ const config = {
274
+ mcpServers: {
275
+ "server-1": {
276
+ command: "npx",
277
+ args: ["-y", "@test/package1"]
278
+ },
279
+ "server-2": {
280
+ command: "npx",
281
+ args: ["-y", "@test/package2"]
282
+ }
283
+ }
284
+ };
285
+ await fs.writeFile(configPath, JSON.stringify(config));
286
+ const manager = new MCPConfigManager();
287
+ await manager.removeServer("cline", "server-1", tempDir);
288
+ const fileContent = await fs.readFile(configPath, "utf-8");
289
+ const updatedConfig = JSON.parse(fileContent);
290
+ expect(updatedConfig.mcpServers["server-1"]).toBeUndefined();
291
+ expect(updatedConfig.mcpServers["server-2"]).toEqual(config.mcpServers["server-2"]);
292
+ });
293
+ it("should throw error when removing non-existent server", async () => {
294
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
295
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
296
+ const config = {
297
+ mcpServers: {
298
+ "server-1": {
299
+ command: "npx",
300
+ args: ["-y", "@test/package1"]
301
+ }
302
+ }
303
+ };
304
+ await fs.writeFile(configPath, JSON.stringify(config));
305
+ const manager = new MCPConfigManager();
306
+ await expect(manager.removeServer("cline", "non-existent-server", tempDir)).rejects.toThrow("Server non-existent-server not found");
307
+ });
308
+ it("should throw error when config file does not exist", async () => {
309
+ const manager = new MCPConfigManager();
310
+ await expect(manager.removeServer("cline", "any-server", tempDir)).rejects.toThrow();
311
+ });
312
+ it("should preserve other config fields when removing server", async () => {
313
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
314
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
315
+ const config = {
316
+ version: "1.0.0",
317
+ otherField: "value",
318
+ mcpServers: {
319
+ "server-1": {
320
+ command: "npx",
321
+ args: ["-y", "@test/package1"]
322
+ }
323
+ }
324
+ };
325
+ await fs.writeFile(configPath, JSON.stringify(config));
326
+ const manager = new MCPConfigManager();
327
+ await manager.removeServer("cline", "server-1", tempDir);
328
+ const fileContent = await fs.readFile(configPath, "utf-8");
329
+ const updatedConfig = JSON.parse(fileContent);
330
+ expect(updatedConfig.version).toBe("1.0.0");
331
+ expect(updatedConfig.otherField).toBe("value");
332
+ expect(updatedConfig.mcpServers).toEqual({});
333
+ });
334
+ it("should handle removing the last server correctly", async () => {
335
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
336
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
337
+ const config = {
338
+ mcpServers: {
339
+ "only-server": {
340
+ command: "npx",
341
+ args: ["-y", "@test/package"]
342
+ }
343
+ }
344
+ };
345
+ await fs.writeFile(configPath, JSON.stringify(config));
346
+ const manager = new MCPConfigManager();
347
+ await manager.removeServer("cline", "only-server", tempDir);
348
+ const fileContent = await fs.readFile(configPath, "utf-8");
349
+ const updatedConfig = JSON.parse(fileContent);
350
+ expect(updatedConfig.mcpServers).toEqual({});
351
+ });
352
+ it("should format JSON output with proper indentation after removal", async () => {
353
+ const configPath = join(tempDir, ".cline/mcp_settings.json");
354
+ await fs.mkdir(join(tempDir, ".cline"), { recursive: true });
355
+ const config = {
356
+ mcpServers: {
357
+ "server-1": {
358
+ command: "npx",
359
+ args: ["-y", "@test/package1"]
360
+ },
361
+ "server-2": {
362
+ command: "npx",
363
+ args: ["-y", "@test/package2"]
364
+ }
365
+ }
366
+ };
367
+ await fs.writeFile(configPath, JSON.stringify(config));
368
+ const manager = new MCPConfigManager();
369
+ await manager.removeServer("cline", "server-1", tempDir);
370
+ const fileContent = await fs.readFile(configPath, "utf-8");
371
+ // Check that the file is properly formatted (has newlines and indentation)
372
+ expect(fileContent).toContain("\n");
373
+ expect(fileContent).toContain(" ");
374
+ });
375
+ });
376
+ describe("Cross-platform integration tests", () => {
377
+ it("should work with claude-desktop using project directory", async () => {
378
+ const configDir = join(tempDir, ".claude");
379
+ await fs.mkdir(configDir, { recursive: true });
380
+ const serverConfig = {
381
+ command: "npx",
382
+ args: ["-y", "@codemcp/agentskills"]
383
+ };
384
+ const manager = new MCPConfigManager();
385
+ await manager.addServer("claude-desktop", "agent-skills", serverConfig, tempDir);
386
+ const isConfigured = await manager.isServerConfigured("claude-desktop", "agent-skills", tempDir);
387
+ expect(isConfigured).toBe(true);
388
+ const config = await manager.readConfig("claude-desktop", tempDir);
389
+ expect(config.mcpServers["agent-skills"]).toEqual(serverConfig);
390
+ await manager.removeServer("claude-desktop", "agent-skills", tempDir);
391
+ const isConfiguredAfterRemoval = await manager.isServerConfigured("claude-desktop", "agent-skills", tempDir);
392
+ expect(isConfiguredAfterRemoval).toBe(false);
393
+ });
394
+ it("should work with multiple clients simultaneously", async () => {
395
+ const clineConfig = {
396
+ command: "npx",
397
+ args: ["-y", "@codemcp/agentskills-cline"]
398
+ };
399
+ const cursorConfig = {
400
+ command: "npx",
401
+ args: ["-y", "@codemcp/agentskills-cursor"]
402
+ };
403
+ const manager = new MCPConfigManager();
404
+ await manager.addServer("cline", "agent-skills", clineConfig, tempDir);
405
+ await manager.addServer("cursor", "agent-skills", cursorConfig, tempDir);
406
+ const clineConfigured = await manager.isServerConfigured("cline", "agent-skills", tempDir);
407
+ const cursorConfigured = await manager.isServerConfigured("cursor", "agent-skills", tempDir);
408
+ expect(clineConfigured).toBe(true);
409
+ expect(cursorConfigured).toBe(true);
410
+ const clineReadConfig = await manager.readConfig("cline", tempDir);
411
+ const cursorReadConfig = await manager.readConfig("cursor", tempDir);
412
+ expect(clineReadConfig.mcpServers["agent-skills"]).toEqual(clineConfig);
413
+ expect(cursorReadConfig.mcpServers["agent-skills"]).toEqual(cursorConfig);
414
+ });
415
+ });
416
+ });
417
+ //# sourceMappingURL=mcp-config-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-config-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/mcp-config-manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mcp-dependency-checker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-dependency-checker.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mcp-dependency-checker.test.ts"],"names":[],"mappings":""}